软件工程-软件工程实践第二讲.ppt
本讲本讲依据传统依据传统软件工程软件工程的生命周期划的生命周期划分分,详细介绍软件项目在开发过程中详细介绍软件项目在开发过程中的主要环节和各种主要描述方法。的主要环节和各种主要描述方法。涉涉及在软件计划与开发过程中必须考虑及在软件计划与开发过程中必须考虑的一些最广泛的概念、原理、方法和的一些最广泛的概念、原理、方法和工具。主要涉及一些软件过程深层次工具。主要涉及一些软件过程深层次的技术细节和过程。的技术细节和过程。第二讲第二讲 软件工程实践软件工程实践1软件工程的知识体系软件工程的知识体系软软件件工工程程知知识识体系体系软件需求软件设计软件测试软件维护软件需求基础需求过程需求获取需求分析需求规格说明需求分析工具软件设计基础软件设计关键问题软件结构与体系结构软件设计质量的分析与评价软件设计符号软件设计的策略与方法软件测试基础测试级别测试技术与 测 试相 关 的度量测试过程软件维护基础软件维护的关键问题维护过程维护技术可行性研究可行性研究的目的可行性研究的过程系统流程图数据流图数据字典成 本/效益分析2软件工程实践的各个环节的本质软件工程实践的各个环节的本质1.理解问题(通讯和分析);2.计划一个解决方案(建模和软件设计);3.执行计划(编写代码);4.检查结果的精度(测试和品质保证)3对需求内容进行初步的分析,确定解决问题对需求内容进行初步的分析,确定解决问题的可能性,分析不同解决方案的优劣,并提的可能性,分析不同解决方案的优劣,并提出建议。出建议。其本质实际上就是一个粗略的系统分析和设其本质实际上就是一个粗略的系统分析和设计过程,通常由客户完成。计过程,通常由客户完成。可行性研究的目的可行性研究的目的4可行性研究的类型可行性研究的类型1.1.研究型项目的可行性研究分析研究型项目的可行性研究分析2.2.委托型可行性研究分析;委托型可行性研究分析;3.3.自主开发性可行性研究分析;自主开发性可行性研究分析;5可行性研究解决问题过程的本质可行性研究解决问题过程的本质当前系统物理模型逻辑模型逻辑模型物理模型目标系统模型化抽象化怎么做做什么实例化具体化导出理解需求表达需求6问题定义问题定义n n了解系统应解决的问题,这些问题是如何提出的n n设想这些问题如何解决才能满足要求n n了解问题的结构7设计方案选择设计方案选择1.市场分析;市场分析;2.软件环境分析;软件环境分析;3.硬件环境分析;硬件环境分析;4.功能分析;功能分析;5.动态分析;动态分析;6.压力分析;压力分析;8方案评估方案评估1.项目效益评估;项目效益评估;2.社会效益评估;社会效益评估;3.项目成本核算;项目成本核算;4.工作计划评估;工作计划评估;5.项目风险评估;项目风险评估;可行性研究报告可行性研究报告可行性研究报告研究型示例可行性研究报告研究型示例招标文件招标文件9思考题思考题加油站基础信息管理系统,是一个定位于加油站基加油站基础信息管理系统,是一个定位于加油站基本信息、油机信息、油罐信息、加油站督查情况、本信息、油机信息、油罐信息、加油站督查情况、督查图片、加油站电子地图等信息查询、维护的管督查图片、加油站电子地图等信息查询、维护的管理系统。该管理系统放在安徽省石油公司内网上,理系统。该管理系统放在安徽省石油公司内网上,采用网站的形式使用该管理系统,有助于各分公司采用网站的形式使用该管理系统,有助于各分公司随时查看加油站基础信息,便于对加油站信息的统随时查看加油站基础信息,便于对加油站信息的统计、查询等。全系统共分为加油站信息管理、人的计、查询等。全系统共分为加油站信息管理、人的管理、费用管理三个大块。管理、费用管理三个大块。编写可行性研究报告编写可行性研究报告10系统流程图实例系统流程图实例加油站基础信息管理模块(提供加油站设备和经营产品的基本信息,如加油机、油枪和油品的对应关系信息和油罐相关数据信息-罐容表等)加油站人员管理模块(提供加油站人员和班组信息);并客户信息管理功能1销售数据管理2库存数据管理3进油数据管理4预收款加油管理5计帐加油管理6代储代付管理7加油站资金管理8发票管理9润滑油管理10IC卡加油管理数据采集客户端(自动采集加油机和液位仪数据)为ERP和二次物流提供经营数据日常业务管理非日常业务管理1月末盘点2价格调整3季节变号4损溢调整5油抢校检6更还主板7乱码管理8自用油管理报表生成(交接班表、销售日报表、付油日报表、商品盘点月报表、月商品盘点附表、油品分罐保管表、库存商品明细分类帐表,其他一些相关业务表)加油站管理人员ME管理人员地市管理人员省公司管理人员虚线为相关功能实线为管理功能11面向数据流的模型面向数据流的模型-数据流图数据流图 数据流图是一种图形化技术,它描述信息流和数据从输入移动到输出的过程中所经受的变换Computer basedComputer basedsystemsysteminputinputoutputoutput12数据流图的主要图形元素数据流图的主要图形元素 13数据流与数据加工之间的关系数据流与数据加工之间的关系14数据流的分层描述数据流的分层描述为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统15编写数据流图的步骤编写数据流图的步骤一最高抽象层一最高抽象层 抽取数据的源点和终点信息抽取数据的源点和终点信息分析问题描述,重点提取问题描述中源点和终点信分析问题描述,重点提取问题描述中源点和终点信息,同时分析与源点和终点有关的各类高抽象度的息,同时分析与源点和终点有关的各类高抽象度的加工和数据流以及数据存储信息。加工和数据流以及数据存储信息。处理顺序是:处理顺序是:1.首先抽取数据的源点和终点信息首先抽取数据的源点和终点信息2.抽取加工点的信息抽取加工点的信息3.最后考虑数据流和数据存储信息最后考虑数据流和数据存储信息(数据流图与程序流不同,程序流图表示的是控制,而数据流图与程序流不同,程序流图表示的是控制,而数据流图描述的是数据的流向。数据流图描述的是数据的流向。)16编写数据流图的步骤编写数据流图的步骤一细化处理一细化处理进一步分解数据流图的加工,数据流和储存信息进一步分解数据流图的加工,数据流和储存信息分析问题描述,重点细化加工点,处理顺序是:1.分析上层加工点的信息,细化加工点信息2.分析数据流和数据存储信息,细化数据流和数据存储信息3.对加工点、数据流和数据存储进行多层次的优化17数据流图绘制的准则数据流图绘制的准则 细化结束的准则:是当涉及到如何具体实现一细化结束的准则:是当涉及到如何具体实现一个功能时就不应该再细化了。个功能时就不应该再细化了。细化一致性准则:当把一个处理细化为一些子细化一致性准则:当把一个处理细化为一些子处理时,细化前和细化后的数据流必须相同。处理时,细化前和细化后的数据流必须相同。层次编号准则:对数据流图中的元素进行编号层次编号准则:对数据流图中的元素进行编号处理时应该能够反映出元素的层次和分解关系。处理时应该能够反映出元素的层次和分解关系。数据分解简化性准则:数据流图中的元素不能数据分解简化性准则:数据流图中的元素不能太多,如果太多就需要进行分层描述处理。太多,如果太多就需要进行分层描述处理。18创建数据流图方法创建数据流图方法-语法分析方法语法分析方法 所谓语法分析方法是通过对软件需求的文本描述的分析,选取出其中的动词和名词。其中动词通常表示为应用中的加工过程描述;而名词通常被描述为外部实体(方框)、数据或控制对象(箭头)、或数据存储(双线表示)。这些名词和动词之间是相互关联的。19语法分析方法实例语法分析方法实例加油站电子帐表系统加油站电子帐表系统是根据是根据加油站加油站日常工作日常工作流程开发,适用于加油站流程开发,适用于加油站进进、销销、付付、存存管管理的服务模块。系统可以根据理的服务模块。系统可以根据加油站加油站录入录入的的日常日常顾客顾客消费消费数据,结合数据,结合油库油库的的进货进货数据,数据,自动自动生成生成各种各种报表报表和和帐表帐表。20加油站电子帐表系统加油站电子帐表系统这个数据流图只是一个高层的系统逻辑模型,它反映了这个数据流图只是一个高层的系统逻辑模型,它反映了目标系统要实现的功能目标系统要实现的功能0层层:数据流图实例数据流图实例 顾客顾客事物处事物处理理油库油库211层层描述描述222层层描述描述233层层销售细化描述销售细化描述24数据词典数据词典 数据字典是关于数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合。25数据词典实例数据词典实例-银行存折银行存折 26数据词典实例数据词典实例-银行存折银行存折 27数据词典实例数据词典实例-银行存折银行存折 存折格式存折格式存折户名所号帐号开户日性质(印密)1存取行50户名2字母24所号“001”.“999”帐号“00000001”.“99999999”开户日年月日性质“1”.“6”注:“1”表示普通户,“5”表示工资户等印密“0”注:印密在存折上不显示存取行日期(摘要)支出存入余额操作复核28数据字典实例数据字典实例加油站员工信息表字段名称字段类型值域备注序号数值型加油站编号字符型外键员工编号字符型主键姓名字符型性别字符型男、女年龄数值型职位字符型是否正式工字符型是、否是否列入劳资报表字符型列入劳资报表用工、由劳务公司派遣、其他员工是否住站字符型是、否文化程度字符型小学、初中、高中、中专、大专、本科、研究生入职时间(年月日)日期型上报时间(年月日)日期型备注字符型29成本估算的三种技术成本估算的三种技术 1.代码行技术:代码行技术的优缺点,估算代码行比较困难.如果有类似的经历也许可以比较简单但成本有高估的可能;2.任务分解技术:这是目前应用比较多的一种方法;3.自动估计成本技术;30成本成本/效益分析的方法效益分析的方法 1.货币的时间价值;2.投资回收期;3.纯收入;4.投资回收率;31思考题思考题 1.可行性研究的意义在哪里?2.可行性研究的粒度如何?3.可行性研究的种类和可行分析的不同侧重点?4.数据流图是否仅仅应用于可行研究?5.甲古文公司的产品BC4J怎么念?32需求分析的任务需求分析的任务 确定软件设计的约束、软件同其它系统元素的接口细节和逆向需求定义软件的其它有效性需求,如出错处理等基本要求基本要求需求分析研究的对象是软件项目的用户要求准确地表达被接受的用户要求确定被开发软件系统的系统元素将功能和信息结构分配到这些系统元素中建立四类模型(数据模型、功能模型、行为模型和层次模型)33需求分析的数据流图需求分析的数据流图 34需求任务的过程模型需求任务的过程模型 需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。通常软件开发项目是要实现目标系统的物理模型。目标系统的具体物理模型是由它的逻辑模型经实例化,即具体到某个业务领域而得到的35获取需求的方法获取需求的方法 获取需求的方法访谈调查表情景分析功能分析数据流图数据字典IPO图使用说明书建立快速原形第四代开发语言可重用的软件构件形式化规格说明36其它获取需求的方法其它获取需求的方法 头脑风暴头脑风暴:其基本概念是指一组人沉迷于一种“自由发言”的境界中,在无约束的环境下进行某个方面的自由思考,目的是产生新的想法。人人种种论论:要求观察者只有靠完全溶入到工作中,才能彻底地了解各种实践、问题和所关注的事物等。需需求求剥剥离离:当存在一份客户的需求文档或规格说明时,或者存在一份可能相似的、原有产品的规格说明书时,使用需求剥离技术将单个需求可以从原始中抽取(剥离)出来,并加入到新的文档中。37分析模型的介绍分析模型的介绍 主要创建的模型是:数数据据模模型型:主要采用ERD图描述,描绘数据对象及数据对象之间的关系。功功能能模模型型:主要采用数据流图描述,描述当数据在软件系统中移动时被变换的逻辑过程,指明系统具有的变换数据的功能。行行为为模模型型:采用状态转换图描述,指明了作为外部事件结果的系统行为。为此,状态转换图描述了系统各种行为模式(状态)和在不同状态间转换的方式。38系统描述系统描述分析模型分析模型设计模型设计模型 分析模型的关系分析模型的关系 39数据模型的描述工具数据模型的描述工具-实体关系图实体关系图 ObjectObject1 1ObjectObject2 2relationshiprelationship(0,(0,m)m)(1,1)(1,1)40实体关系图中的主要元素实体关系图中的主要元素数据对象数据对象 实例:如操作的人员;报表;打印;报警信息;地理位置等实例:如操作的人员;报表;打印;报警信息;地理位置等数据对象是对软件必须理解的复合信息的抽象。所谓复合信息是指具有一系列不同性质或属性的事物。总之可以由一组属性来定义的实体都可以被认为是数据对象。41实体关系图中的主要元素实体关系图中的主要元素数据属性数据属性 实例:如汽车的属性(生产厂家、品牌、型号、发动机号等)实例:如汽车的属性(生产厂家、品牌、型号、发动机号等)数据属性定义了对象的性质。通过这些性质可以标识该系统具有的特点。42实体关系图中的主要元素实体关系图中的主要元素数据联系数据联系 联系的方式:联系的方式:1.一对一(一对一(1:1)2.一对多(一对多(1:N)3.多对多(多对多(M:N)数据联系定义了数据对象之间相互连接的方式。43数据模型的描述工具数据模型的描述工具-实体关系图实体关系图 建立建立ER图的过程:图的过程:第第1层层提取所有的实体(对象)和对象之间的关提取所有的实体(对象)和对象之间的关第第2层层建模他们之间关系的整体模型建模他们之间关系的整体模型第第3层层进一步描述所有实体、关系的属性信息进一步描述所有实体、关系的属性信息44数据模型的描述工具数据模型的描述工具-实体关系图实体关系图 (1,1)(1,1)(1,(1,m)m)placesCustomerCustomerrequestrequestfor servicefor servicegenerates(1,(1,n)n)(1,1)(1,1)workworkorderorderworkworktaskstasksmaterialsmaterialsconsistsoflists(1,1)(1,1)(1,(1,w)w)(1,1)(1,(1,i)i)selectedfromstandardstandardtask tabletask table(1,(1,w)w)(1,1)(1,1)45功能模型的描述工具功能模型的描述工具-数据流图数据流图 数据流图让软件工程师能够建模同时建模信息模型和功能模型。46数据流图描述数据流图描述ICIC开开发票需求发票需求 47行为模型的描述工具行为模型的描述工具-状状态转换态转换图图 状态转换图是描述系统的状态如何相应外部的信号进行推移的一种图形表示。注:状态迁移图的优点注:状态迁移图的优点:状态之间的关系能够直观地捕捉到由于状态迁移图的单纯性,能够机械地分析许多情况,可很容易地建立分析工具状态1状态变量1活动表初始事件结束事件48进程进程状状态转换态转换图图 49密码验证密码验证状状态转换态转换图图 50其他图形其他图形-层次方框图层次方框图 51其他图形其他图形-Warnier图;图;IPO图(主要作为算法描述图);图(主要作为算法描述图);52需求文档的介绍需求文档的介绍 主要的文档是:软件需求说明书软件需求说明书;数据要求说明书数据要求说明书;初步的用户手册初步的用户手册;修改、完善与确定软件开发实施计划修改、完善与确定软件开发实施计划;53需求验证需求验证 所谓需求验证是指对通过需求分析过程获得的各类需求描述由第三方进行严格的综合再分析。其目的是提高软件品质,降低开发成本。54需求验证的方面需求验证的方面 一般特别需要验证的方面有:(1)一致性验证:主要是分析需求描述中是否存在一些需求冲突问题;(2)完整性验证:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能;(3)现实性验证:验证需求内容的可实现性;(4)有效性验证:验证需求对于实际的问题解决确实是正确有效的;55其他需求文档介绍其他需求文档介绍 需求说明书模板美国公司的需求文档日本公司的需求文档56第三节第三节 总体设计总体设计 什么是设计MitchKapor(美国莲花公司的创始人,Lotus1-2-3)给出一个比喻。所谓设计就象一个人用一只脚站在两个世界中(一个是技术的世界,而另一个是人和人类目标的世界),并且这个人希望将这两个世界结合到一起。57软件设计的任务(技术观点)软件设计的任务(技术观点)根据用信息域表示的软件需求,以及功能和性能需求,进行根据用信息域表示的软件需求,以及功能和性能需求,进行:数据设计数据设计:侧重于数据结构的定义系统结构设计系统结构设计:定义软件系统各主要成份之间的关系过程设计过程设计:是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件58软件设计的任务(管理观点)软件设计的任务(管理观点)从工程管理的角度来看,软件设计分两步完成。从工程管理的角度来看,软件设计分两步完成。概概要要设设计计:将软件需求转化为数据结构和软件的系统结构。(概要设计对应了技术观点中的系统结构设计)详详细细设设计计:即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。(详细设计对应了技术观点中的数据设计和过程设计)59软件设计过程软件设计过程1.制定规范制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则等 60软件设计过程软件设计过程2.软件系统结构的总体设计软件系统结构的总体设计基于功能层次结构建立系统采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量61软件设计过程软件设计过程3.处理方式设计处理方式设计确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式周转时间响应时间吞吐量精度确定外部信号的接收发送形式62软件设计过程软件设计过程4.数据结构设计数据结构设计确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块(软件包)限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计:在软件设计中就插入自动检错,报错和纠错的功能一致性设计:保证软件运行过程中所使用的数据的类型和取值范围不变;在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏;冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。63软件设计过程软件设计过程5.可靠性设计可靠性设计可靠性设计也叫做质量设计可靠性设计也叫做质量设计。在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护64概要设计文档概要设计文档概要设计阶段完成时应编写以下文档:概要设计说明书数据库设计说明书用户手册制定初步的测试计划65概要设计的评审概要设计的评审可追溯性可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险风险:确认该设计在现有技术条件下和预算范围内是否能按时实现实用性实用性:确认该设计对于需求的解决方案是否实用技术清晰度技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性可维护性:确认该设计是否考虑了方便未来的维护质量质量:确认该设计是否表现出良好的质量特征各种选择方案各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题其它具体问题:对于文档、可测试性、设计过程.等进行评估66软件设计原理软件设计原理核心概念:软件结构;程序结构;模块化;信息隐蔽;模块的独立性;自顶向下,逐步细化;抽象化;67软件结构软件结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题就解决了注:软件结构包括两部分。程序的模块结构和数据的结构68程序程序结结构构 程序结构表明了程序各个部件(模块)的组织情况,是软件的过程表示。69模模块块化化 软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。注:软件的复杂性并不是随着分解模块的增多而变的越来越容易,相反随着模块的增加由于交互的复杂,变的更加复杂。70模模块块定义定义 “模块”,又称“组件”。它一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件在描述一个模块时,还必须按模块的外部特性外部特性与内部特性内部特性分别描述模模块块的的外外部部特特性性:模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响模块的内部特性模块的内部特性:完成其功能的程序代码和仅供该模块内部使用的数据71模模块块的独立性的独立性模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的。注:例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性一般采用两个准则度量模块独立性。即模块间耦合和模块内聚 72耦合耦合 是模块之间的互相连接的紧密程度的度量。73模块之间偶合的种类模块之间偶合的种类 74如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。非直接耦合(NondirectCoupling)75数据耦合数据耦合(Data Coupling)Data Coupling)如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。76标记标记耦合耦合(Stamp Coupling)Stamp Coupling)如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。77控制耦合控制耦合(Control Coupling)Control Coupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。78外部耦合(外部耦合(External External CouplingCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。79公共耦合(公共耦合(Common CouplingCommon Coupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合80内容耦合内容耦合(Content Coupling)Content Coupling)如果发生下列情形,两个模块之间就发生了内容耦合(1)一个模块直接访问另一个模块的内部数据;(2)一个模块不通过正常入口转到另一模块内部;(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);(4)一个模块有多个入口。81内聚内聚 标志一个模块内各个元素彼此结合的紧密程度。82模块内聚的种类模块内聚的种类83功能内聚功能内聚一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。84信息内聚信息内聚 这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。85通信内聚通信内聚 如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。86过过程内聚程内聚 使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。87时间时间内聚内聚 时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。88逻辑逻辑内聚内聚 这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。89巧合内聚巧合内聚 巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。90模块设计的启发式规则一模块设计的启发式规则一 模块功能的完善化模块功能的完善化一个完整的模块应当有以下几部分:执行规定的功能的部分;出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因。如果需要返回一系列数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个结束状态标志。消除重复功能,改善软件结构消除重复功能,改善软件结构 完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。91模块设计的启发式规则二模块设计的启发式规则二 模块的作用范围应在控制范围之内模块的作用范围应在控制范围之内模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。尽可能减少高扇出结构,随着深度增大扇入尽可能减少高扇出结构,随着深度增大扇入如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。92模块设计的启发式规则三模块设计的启发式规则三 避免或减少使用病态联接避免或减少使用病态联接模块的大小要适中模块的大小要适中模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50100左右,保持在一页纸之内,最多不超过500行。93模块设计的启发式规则四模块设计的启发式规则四 设计功能可预测的模块,但要避免过分受限制的模块设计功能可预测的模块,但要避免过分受限制的模块一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测。所谓过分限制是指由于对于局部数据结构进行了过分的要求,是模块的功能过分局限,降低了模块的灵活性。软件包应满足设计约束和可移植性软件包应满足设计约束和可移植性为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。94自顶向下,逐步细化自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。逐步求精的主要目的是集中精力处理好当前急需处理的主要问题,而推迟对其它细节的处理95抽象化抽象化 抽象概念与模块化和逐步求精是密切相关的,模块抽象概念与模块化和逐步求精是密切相关的,模块是一定抽象描述的体现,逐步求精一般只能够理解是一定抽象描述的体现,逐步求精一般只能够理解为一个过程,即是一个由顶向下的细化过程,为一个过程,即是一个由顶向下的细化过程,而抽而抽象即可以理解为一个过程也可以理解为一种状态象即可以理解为一个过程也可以理解为一种状态。理解为过程时他表示从下向上的对于事物共性的抽理解为过程时他表示从下向上的对于事物共性的抽取过程,而暂时忽略掉他们之间的差异,取过程,而暂时忽略掉他们之间的差异,抽象同时抽象同时也可以理解为一种状态,表示一种使用问题环境语也可以理解为一种状态,表示一种使用问题环境语言描述的,较容易被人接受的描述体系。言描述的,较容易被人接受的描述体系。96信息信息隐隐蔽蔽 由 parnas 方法提倡的信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。97面向数据流的设计方法面向数据流的设计方法 首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:变换型和事务型。针对两种不同的类型分别进行分析处理。由数据流图推导出系统的初始结构图。利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。修改和补充数据词典。制定测试计划。98变换流变换流 输入流外部表示变换流内部表示输出流外部表示99事物流事物流 事物中心触发事物活动事物1活动事物2活动事物3活动事物n100结构图结构图 结构图反映程序中模块之间的层次调用关系和联系,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。101软件的系统结构图软件的系统结构图 102结构图中的模块类型结构图中的模块类型 103变换型结构图变换型结构图变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成。104事物型事物型结结构构图图 它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。105变换分析变换分析 重画数据流图;区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;进行一级分解,设计上层模块;进行二级分解,设计输入、输出和中心变换部分的中、下层模块;106变换原则变换原则 在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。使用“黑箱”技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可设立中间层次。如果出现了以下情况,就停止模块的功能分解:当模块不能再细分为明显的子任务时;当分解成用户提供的模块或程序库的子程序时;当模块的界面是输入输出设备传送的信息时;当模块不宜再分解得过小时。107变换分析实例变换分析实例 108事物分析事物分析 在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。109事物分析事物分析过过程程 识别事务源利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工和输出中产生的事务。规定适当的事务型结构在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。识别各种事务和它们定义的操作从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细地定义它们的操作注意利用公用模块在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。对每一事务,或对联系密切的一组事务,建立一个事务处理模块;如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。对事务处理模块规定它们全部的下层操作模块对操作模块规定它们的全部细节模块110变换分析和变换分析和事物分析事物分析关系关系 变换分析是软件系统结构设计的主要方法。一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换分析为主,事务分析为辅的方式进行软件结构设计。111分析实例分析实例 112思考题思考题 1.软件设计与软件需求有什么不同概要设计说明书2概要设计说明书1113三个问题三个问题 1.软件工程的主要的研究内容,与其他计算机相关课程之间的关系?2.说说我们目前上过的主要软件工程分析方法?3.说说面向结构软件工程生命周期的各个阶段和其主要的目的。114第四节第四节 详细设计详细设计 1.确定软件各个组成部分内的算法以及各部分的内部数据组织;2.选定某种过程的表达形式来描述各种算法;3.进行详细设计的评审;115数据数据设计设计原则原则 为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的结构;设计对于这种逻辑数据结构的一组操作,以实现各种所期望的运算。确定对逻辑数据结构所必需的那些操作的程序模块(软件包),以便限制或确定各个数据设计决策的影响范围。116数据数据设计设计过程过程 1.用于软件的系统化方法也适用于数据。2.确定所有的数据结构和在每种数据结构上施加的操作。3.应当建立一个数据词典并用它来定义数据和软件的设计。4.低层数据设计的决策应推迟到设计过程的后期进行。5.数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才能知道。6.应当建立一个存放有效数据结构及相关操作的库。7.软件设计和程序设计语言应当支持抽象数据类型的定义和实现。117数据数据设计设计工具工具 图形工具(程序流程图程序流程图、N-SN-S图图、问题分析图,问题分析图,PADPAD);表格工具(判定表判定表);语言工具(ProgressDesignLanguage,PDL)118 程序流程图程序流程图119N-SN-S图图120问题分析图问题分析图(PAD)PAD)121判定表判定表 判定表用于表示程序的静态逻辑在判定表中的条件部分给出所有的两分支判断的列表,动作部分给出相应的处理要求将程序流程图中的多分支判断都改成两分支判断122对应流程图的判定表对应流程图的判定表 123PDLPDL语言语言 PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。伪码的