•软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②在①中所述方法的研究软件工程过程包括:开发过程、运作过程、维护过程、管理过程、支持过程、获取过程、供应过程、剪裁过程等CMM(Capability Maturity Model)即能力成熟度模型,是美国卡内基梅隆大学软件工程研究所(SEI)在美国国防部资助下于二十世纪八十年代末建立的,用于评价软件机构的软件过程能力成熟度的模型。
•典型的软件过程模型有:–瀑布模型(waterfall model)–演化模型(evolutionary model)–增量模型(incremental model)–原型模型(prototyping model)–螺旋模型(spiral model)–喷泉模型(water fountain model)–基于构件的开发模型(component-based development model)–形式方法模型(formal methods model)•是瀑布模型和演化模型的结合,并增加了风险分析•螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:–制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件–风险分析:评价所选的方案,识别风险,消除风险–工程实施:实施软件开发,验证工作产品–客户评估:评价开发工作,提出修正建议•喷泉模型是一种支持面向对象开发的模型•体现迭代和无间隙特征–迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统–无间隙:开发活动之间不存在明显的边界•所谓基于计算机的系统是指:通过处理信息来完成某些预定义目标而组织在一起的元素的集合•组成基于计算机系统的元素主要有:软件、硬件、人员、数据库、文档和规程•本书将软件需求工程细分为:需求获取、需求分析与协商、系统建模、需求规约、需求验证和需求管理六个阶段。
•常用的分析方法:–面向数据流的结构化分析方法(SA)–面向数据结构的分析方法–面向对象的分析方法(OOA)•需求管理是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动•需求跟踪有两种方式,正向跟踪与逆向跟踪–正向跟踪:以用户需求为切入点,检查《需求规约》中的每个需求是否都能在后继工作产品中找到对应点–逆向跟踪:检查设计文档、代码、测试用况等工作产品是否都能在《需求规约》中找到出处•软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计•使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件级设计软件设计的原则:抽象化与逐步求精;•软件设计中主要抽象手段有:过程抽象和数据抽象模块化;信息隐藏;功能独立;•功能独立性可以由两项指标来衡量:内聚度与耦合度软件体系结构关注系统的一个或多个结构,包含软件构件、这些构件的对外可见的性质以及它们之间的关系•常见的软件体系结构–单主机结构–C/S(Client/Server)结构–B/S(Browser/Server)结构常用体系结构风格:数据为中心的体系结构数据流风格的体系结构调用和返回风格的体系结构面向对象风格的体系结构层次式风格的体系结构在这里要了解几个概念:–程序结构的深度:程序结构的层次数称为结构的深度。
结构的深度在一定意义上反映了程序结构的规模和复杂程度。
–程序结构的宽度:层次结构中同一层模块的最大模块个数称为结构的宽度。
–模块的扇入和扇出:扇出表示一个模块直接调用(或控制)的其它模块数目。
扇入则定义为调用(或控制)一个给定模块的模块个数。
多扇出意味着需要控制和协调许多下属模块。
而多扇入的模块通常是公用模块。
部件级设计阶段,主要完成如下工作:(1)为每个部件确定采用的算法,选择某种适当的工具表达算法的过程,编写部件的详细过程性描述;(2)确定每一部件内部使用的数据结构;(3)在部件级设计结束时,应该把上述结果写入部件级设计说明书,并且通过复审形成正式文档,作为下一阶段(编码阶段)的工作依据。
图形表示法:•程序流程图•N-S图•PAD设计评审:•软件设计的最终目标是要取得最佳方案•“最佳”是指在所有候选方案中,就节省开发费用,降低资源消耗,缩短开发时间的条件,选择能够赢得较高的生产率、较高的可靠性和可维护性的方案设计评审的内容:1. 可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成分是否可追溯到某一项需求。
2.接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。
部件是否满足高内聚和低耦合的要求。
部件作用范围是否在其控制范围之内。
3.风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。
4.实用性:即确认该软件设计对于需求的解决方案是否实用。
5.技术清晰度:即确认该软件设计是否以一种易于翻译成代码的形式表达。
6.可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维护。
7.质量:即确认该软件设计是否表现出良好的质量特征。
8.各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。
9.限制:评估对该软件的限制是否现实,是否与需求一致。
10.其它具体问题:对于文档、可测试性、设计过程等等进行评估。
•评审分正式评审和非正式评审两种•正式评审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答辩形式•非正式评审多少有些同行切磋的性质,不拘泥于时间和形式结构化分析的模型•数据字典是模型的核心,它包含了软件使用和产生的所有数据的描述•数据流图:用于功能建模,描述系统的输入数据流如何经过一系列的加工变换逐步变换成系统的输出数据流,数据流图中的数据流、文件、数据项、加工在数据字典中描述,反映加工逻辑的加工规约用“小说明”描述•实体—关系图:用于数据建模,描述数据字典中数据之间的关系,数据对象的属性用“数据对象描述”描述•状态转换图:用于行为建模,描述系统接收哪些外部事件,以及在外部事件的作用下系统的状态迁移,控制规约用来描述软件控制方面的附加信息分层数据流图示例——资格和水平考试的考务处理系统•简化的资格和水平考试的考务处理系统•分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试•考试的合格标准将根据每年的考试成绩由考试中心确定•考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中资格和水平考试的考务处理系统—功能需求1.对考生送来的报名单进行检查2.对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者4.制作考生通知单送给考生5.进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表资格和水平考试的考务处理系统—部分数据流的组成•报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址•正式报名单=准考证号+报名单•准考证=地区+序号+姓名+准考证号+考试级别+考场•考生名单={准考证号+考试级别}•考生名册=正式报名单•统计分析表=分类统计表+难度分析表•考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志考务处理系统顶层图分层数据流图的审查:•检查图中是否存在错误或不合理(不理想)的部分–一致性:分层DFD中不存在矛盾和冲突–完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素分层数据流图的一致性•父图与子图平衡–任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致•数据守恒–一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生–多余的数据流:加工未使用其输入数据流中的某些数据项(不一定是错误,但可能隐含潜在的错误)•局部文件•一个加工的输出数据流不能与该加工的输入数据流同名分层数据流图的完整性•每个加工至少有一个输入数据流和一个输出数据流•在整套分层数据流图中,每个文件应至少有一个加工读该文件,有另一个加工写该文件•分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致•分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约结构化设计•结构化设计(Structured Design,简称SD)是一种将结构化分析得到的数据流图映射成软件体系结构的设计方法•强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则•分为概要设计和详细设计两大步骤–概要设计是对软件系统的总体设计,采用结构化设计方法,其任务是:将系统分解成模块,确定每个模块的功能、接口(模块间传递的数据)及其调用关系,并用模块及其对模块的调用来构建软件的体系结构–详细设计是对模块实现细节的设计,采用结构化程序设计(Structured Programming,简称SP)方法•SA、SD和SP构成完整的结构化方法体系启发式设计策略按照模块化设计原则,相应的启发式设计策略如下:•改造程序结构图,降低耦合度,提高内聚度•避免高扇出,并随着深度的增加,力求高扇入–避免如图a那样的“平铺”形态,较好的结构图形态是如图b那样的“椭圆”型•模块的影响范围应限制在该模块的控制范围内,•降低模块接口的复杂程度和冗余程度,提高一致性•模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块的功能相一致,即不传递与模块功能无关的数据•模块的功能应是可预测的,避免对模块施加过多的限制•模块功能可预测是指该模块对相同的输入能产生相同的输出•限制一个模块只处理单一的功能,那么,这个模块体现出高内聚•尽可能设计单入口和单出口的模块•单入口和单出口的模块能有效地避免内容耦合••结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)•根据信息流的特点,可将数据流图分为变换型数据流图和事务型数据流图,其对应的映射分别称为变换分析和事务分析•信息流可分为两类:•变换流(transform)•事务流(transaction)结构图改进技巧1.减少模块间的耦合度可以通过将功能简单的模块合并到与其关系密切的模块中,或调整模块的位置,来减少模块间的参数传递,或避免参数长距离传输,以降低耦合度。
2.消除重复功能如果二个模块中存在某一相同的功能,应将这个功能从二个模块中分离出来,作为一个独立的模块被二者调用。
3.消除“管道”模块“管道”模块通常是应该删除的,除非删除后上层模块的扇出太大。