资源预览内容
第1页 / 共705页
第2页 / 共705页
第3页 / 共705页
第4页 / 共705页
第5页 / 共705页
第6页 / 共705页
第7页 / 共705页
第8页 / 共705页
第9页 / 共705页
第10页 / 共705页
亲,该文档总共705页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软软件工程件工程(SoftwareEngineering)第第1章:章:软软件工程学概述件工程学概述1.1软件危机软件危机60年年代代中中期期以以前前:通通用用硬硬件件相相当当普普遍遍,软软件件却却是是为为某个具体的某个具体的应应用而用而编编写的。写的。60年代中到年代中到70年代中:年代中:软软件作坊。件作坊。软软件危机件危机:计计算机算机软软件的开件的开发发和和维护过维护过程程中所遇到的一系列中所遇到的一系列严严重重问题问题。(正常、不正常。(正常、不正常运行运行软软件都具有件都具有这这种种问题问题)1.1.1软件危机的介绍软件危机的介绍1)对对软软件件开开发发成成本本和和进进度度的的估估计计常常常常很很不准确;不准确;2)用用户户对对完完成成的的软软件件系系统统不不满满意意的的现现象象经经常常发发生;生;3)软软件件产产品的品的质质量往往靠不住;量往往靠不住;软件危机的典型表现:软件危机的典型表现:4)软软件常常是不可件常常是不可维护维护的;的;5)软软件通常没有适当的文档件通常没有适当的文档资资料;料;6)软软件件成成本本在在计计算算机机系系统统总总成成本本中中所所占占的比例逐年上升;的比例逐年上升;7)软软件开件开发发生生产产率提高的速度跟不上率提高的速度跟不上计计算机算机应应用的用的发发展展趋势趋势。1.1.2产产生生软软件危机的原因件危机的原因1)软件本身特点造成;)软件本身特点造成;2)软件开发与维护的方法不正确。)软件开发与维护的方法不正确。主要表现:主要表现:(a)忽视软件需求分析;)忽视软件需求分析;(b)认为软件开发就是写程序并使之运行;)认为软件开发就是写程序并使之运行;(c)轻视软件维护;)轻视软件维护;在在软软件开件开发发的不同的不同阶阶段段进进行修改需要付出的行修改需要付出的代价很不相同:代价很不相同:高高中中低低早期早期中期中期后期后期软件开发时期软件开发时期代价代价引入同一修改的代价随时间变化的趋势引入同一修改的代价随时间变化的趋势1)推推广广使使用用在在实实践践中中总总结结出出来来的的开开发发软软件件的的成成功功技技术术和和方方法法,并并研研究究探探索索更更有效的技有效的技术术和方法;和方法;2)开)开发发和使用更好的和使用更好的软软件工具;件工具;3)良好的)良好的组织组织管理措施。管理措施。1.1.3解决软件危机的途径解决软件危机的途径为为了了解解决决软软件件危危机机产产生生的的问问题题,软软件件工工程程与与方方法法学学逐逐渐渐形形成成,然然后后出出现现了了两两个个相相互互相相承承又又各有各有侧侧重的学科:重的学科:1)软软件件工工程程学学:主主要要应应用用工工程程的的方方法法和和技技术术研研究究软软件件开开发发与与维维护护的的方方法法、工工具具和和管管理理的的一一门门交叉学科。交叉学科。2)程序程序设计设计方法学方法学:主要:主要应应用数学的方法用数学的方法研究程序的性研究程序的性质质以及程序以及程序设计设计的理的理论论和方法的和方法的学科。学科。1.2软软件工程件工程1.2.1软软件工程的介件工程的介绍绍1968年年NATO会会议议:软软件件工工程程就就是是为为了了经经济济地地获获得得可可靠靠的的且且能能在在实实际际机机器器上上有有效效地地运运行行的的软软件件,而建立和使用完善的工程原理。而建立和使用完善的工程原理。1993年年IEEE:软软件件工工程程是是(1)把把系系统统的的、规规范范的的、可可度度量量的的途途径径应应用用于于软软件件开开发发、运运行行和和维维护护过程;(过程;(2)研究()研究(1)中提到的途径。)中提到的途径。1.软软件工程关注于大型程序的构造;件工程关注于大型程序的构造;2.软软件工程的中心件工程的中心课题课题是控制复是控制复杂杂性;性;3.软软件件经经常常变变化;化;4.开开发软发软件的效率非常重要;件的效率非常重要;5.和和谐谐地合作是地合作是软软件开件开发发的关的关键键;6.软软件必件必须须有效地支持它的用有效地支持它的用户户;7.在在软软件工程件工程领领域中是由具有一种文化背景域中是由具有一种文化背景的人替具有另一种文化背景的人的人替具有另一种文化背景的人创创造造产产品。品。软件工程的本质特性:软件工程的本质特性:1.2.2软软件工程的基本原理件工程的基本原理1.用分阶段的生命周期计划严格管理;用分阶段的生命周期计划严格管理;2.坚持进行阶段评审;坚持进行阶段评审;3.实行严格的产品控制;实行严格的产品控制;4.采用现代程序设计技术;采用现代程序设计技术;5.结果能清楚地审查;结果能清楚地审查;6.开发小组的人员应该少而精;开发小组的人员应该少而精;7.承认不断改进软件工程实践的必要性。承认不断改进软件工程实践的必要性。1.2.3软软件工程方法学件工程方法学通常把在通常把在软软件生命周期全件生命周期全过过程中使用的一整套程中使用的一整套技技术术方法的集合称方法的集合称为为方法学(方法学(Methodology),),也称也称为为范型(范型(Paradigm)。)。软软件工程方法学的件工程方法学的3要素:方法、工具和要素:方法、工具和过过程程1.传统传统方法学方法学也称也称为为生命周期方法学或生命周期方法学或结结构化范型。构化范型。结结构化方法(构化方法(StructureMethod)有:)有:1)结结构化构化设计设计方法(方法(SD););2)结结构化分析方法(构化分析方法(SA););3)结结构化分析与构化分析与设计设计技技术术(SADT)4)JACKSON方法方法5)WARNIER方法方法2.面向面向对对象方法学象方法学把数据和把数据和对对数据的操作数据的操作紧紧密密结结合起来的方法,合起来的方法,模模拟拟人人类认识类认识世界解决世界解决问题问题的方法和的方法和过过程。程。面向面向对对象的方法象的方法=对对象(属性与服象(属性与服务务的封装)的封装)+分分类类+继继承承+通通过过消息的通消息的通讯讯1)适适用用于于实实时时事事物物处处理理系系统统的的有有限限状状态态机机方法(方法(FSM););2)适用于并)适用于并发软发软件系件系统统的的PETRI网方法;网方法;3)以数学概念和理)以数学概念和理论为论为基基础础的形式化方法,的形式化方法,如如 SDC公司的形式化开公司的形式化开发发方法方法FDM:(FormalDevelopmentMethodology)IBM公司的公司的维维也也纳纳开开发发方法方法VDM: (ViennaDevelopmentMethod)3.其他开发方法其他开发方法 1.3软软件生命周期件生命周期软件生命周期软件生命周期:指软件从提出到最终被淘汰的这个存在期。指软件从提出到最终被淘汰的这个存在期。软软件生命周期件生命周期组组成:成:1)软软件定件定义义;A.问题问题定定义义B.可行性研究可行性研究C.需求需求分析分析2)软软件开件开发发;D.总总体体设计设计E.详细设计详细设计F.编码编码和和单单元元测试测试G.综综合合测试测试3)运行)运行维护维护。1.问题问题定定义义;2.可行性研究;可行性研究;3.需求分析;需求分析;4.总总体体设计设计(概要(概要设计设计););5.详细设计详细设计;6.编码编码与与单单元元测试测试;7.综综合合测试测试;8.维护维护。软件生命周期各个阶段:软件生命周期各个阶段:1.4软软件件过过程程软软件件过过程程:为为了了获获得得高高质质量量软软件件所所需需要要完完成成的的一一系系列列任任务务的的框框架架,它它规规定定了了完完成成各各项项任任务务的的工工作步作步骤骤。软软件件过过程程(ISO9000):使使用用资资源源将将输输入入转转化化为为输输出的活出的活动动所构成的系所构成的系统统。输输入:如入:如软软件需求件需求输输出:如出:如软软件件产产品品1.4.1瀑布模型瀑布模型1.阶阶段段间间具具有有顺顺序序性性和和依赖性依赖性2.推迟实现的观点推迟实现的观点3.质量保证的观点质量保证的观点优优点点:采采用用规规范范的的方方法法;严严格格规规定定每每个个阶阶段段提提交交的的文文档档;要要求求每每个个阶阶段段交交出出的的产产品品必必须须经经过过验验证。证。1.4.2快速原型模型快速原型模型优优点点:不:不带带反反馈环馈环,基本,基本上是上是线线性性顺顺序序进进行。行。1.4.3增量模型增量模型优优点点:能能较较短短时时间间内内提提交交可可完完成成部部分分工工作作的的产产品品;可可以以使使用用户有充裕的时间学习和适应新产品。户有充裕的时间学习和适应新产品。一种一种风险风险更大的增量模型:更大的增量模型:1.4.4螺旋模型螺旋模型可把它看作在每可把它看作在每个个阶阶段之前都增加段之前都增加风险风险分析的快速原分析的快速原型模型。型模型。1.4.5喷喷泉模型泉模型 典型的面向对象软件典型的面向对象软件开发过程模型之一。开发过程模型之一。1.4.6Rational统统一一过过程程1.RUP软软件开件开发经验发经验(1)迭代式开)迭代式开发发(2)管理需求)管理需求(3)使用基于构件的体系)使用基于构件的体系结结构构(4)可)可视视化建模化建模(5)贯贯穿于开穿于开发过发过程的程的软软件件质质量量验证验证(6)控制)控制软软件件变变更更1.4.7敏捷敏捷过过程与极限程与极限编编程程1.敏捷敏捷过过程程具有高效、快速响具有高效、快速响应变应变化的开化的开发过发过程。程。(1)个体和交互)个体和交互胜过过胜过过程和工具;程和工具;(2)可以工作的)可以工作的软软件件胜过胜过面面俱到的文档;面面俱到的文档;(3)客)客户户合作合作胜过胜过合同合同谈谈判;判;(4)响)响应变应变化化胜过胜过遵循遵循计计划。划。2.极限极限编编程程敏捷敏捷过过程中最著名的一种,指把好的开程中最著名的一种,指把好的开发发实实践运用到极致,多践运用到极致,多应应用于用于软软件需求模糊的件需求模糊的场场合。合。1.4.8微微软过软过程程1.微微软过软过程准程准则则2.微微软软软软件生命周期件生命周期(1)规规划划阶阶段段(2)设计阶设计阶段段(3)开)开发阶发阶段段(4)稳稳定定阶阶段段(5)发发布布阶阶段段3.微微软过软过程模型程模型问问题题定定义义就就是是要要确确定定为为用用户户建建立立什什么么样样的的软软件件系系统统,软软件件叫叫什什么么样样的的名名称称等等等等。“问问题题”是是指指软软件最基本的件最基本的问题问题,如:,如:软软件的件的总总体目体目标标什么?什么?有什么用途?有什么用途?为为那些用那些用户设计户设计?1.5问题问题定定义阶义阶段段问问题题定定义义是是软软件件生生命命周周期期中中时时间间最最短短的的阶阶段段,一一般般都都比比较较简简单单,因因此此在在实实际际开开发发中中它它是是最最容容易被忽易被忽视视的一个的一个阶阶段。段。 这这一一阶阶段段工工作作主主要要由由系系统统分分析析员员来来完完成成,系系统统分分析析员员要要尽尽可可能能从从较较高高的的角角度度概概括括软软件件所所要要做的工作,而不用写明做的工作,而不用写明问题问题的的实现细节实现细节。第第2章:可行性研究章:可行性研究可可行行性性研研究究就就是是要要回回答答“所所定定义义的的问问题题有有可可行的解决行的解决办办法法吗吗?”。可可行行性性研研究究的的目目的的是是:用用最最小小的的代代价价在在尽尽可可能能短短的的时时间间内内确确定定问问题题是是否否有有解解,以以及及是是否否值值得去解。得去解。2.1可行性研究的任务可行性研究的任务可可行行性性研研究究所所需需的的时时间间取取决决于于工工程程的的规规模模,所所需需要要的的成成本本要要占占工工程程总总成成本本的的5%10%。可行性研究的内容:可行性研究的内容:1)技技术术可行性可行性技技术术可行性要分析各种技可行性要分析各种技术术因素,例如:因素,例如:使用使用现现有的技有的技术术能否能否实现这实现这个系个系统统?是否有是否有胜胜任开任开发该项发该项目的熟目的熟练练技技术术人人员员?能能否否按按期期得得到到开开发发该该项项目目所所需需的的软软件件、硬硬件件资资源?源?2)经济经济可行性可行性对经济对经济合理性合理性进进行行评评价,所要考价,所要考虑虑的的问题问题是:是:这这个系个系统统的的经济经济效益能否超效益能否超过过它的开它的开发发成本?成本?这这就就需需要要对对项项目目进进行行价价格格/利利益益分分析析,即即“投投入入/产产出出”分析。分析。由由于于利利益益分分析析取取决决于于软软件件系系统统的的特特点点,因因此此在在软软件件开开发发之之前前,很很难难对对新新系系统统产产生生的的效效益益作作出出精精确的定量描述,所以往往采用一些估算方法。确的定量描述,所以往往采用一些估算方法。3)操作可行性操作可行性操操作作可可行行性性评评价价系系统统运运行行后后会会引引起起的的各各方方面面变变化化,如如:对对组组织织机机构构管管理理模模式式、用用户户工工作作环环境等境等产产生的影响。生的影响。4)社会可行性社会可行性社社会会可可行行性性主主要要讨讨论论法法律律方方面面和和使使用用方方面面的可行性。的可行性。例例如如,被被开开发发软软件件的的权权利利归归属属问问题题、软软件件所使用的技所使用的技术术是否会造成侵是否会造成侵权权等等问题问题。2.2可行性研究的步可行性研究的步骤骤1)复)复查查系系统规统规模和目模和目标标;2)研究目前正在使用的系)研究目前正在使用的系统统;3)导导出出新新系系统统的的高高层层逻逻辑辑模模型型(数数据流据流图图、数据字典);、数据字典);4)重新定)重新定义问题义问题;5)导导出和出和评评价供价供选择选择的解法(物理解决方案);的解法(物理解决方案);6)推荐行)推荐行动动方案;方案;7)草)草拟拟开开发计发计划;划;8)书书写文档提交写文档提交审查审查。2.2可行性研究的步可行性研究的步骤骤2.3系系统统流程流程图图(描(描绘绘物理系物理系统统的工具)的工具)2.3.1符号符号符号符号名称名称说明说明处理处理如:程序,处理机,人工加工如:程序,处理机,人工加工输入输入/输出输出连接连接换页连接换页连接数据流数据流表示输入或输出表示输入或输出同一页上图的连接同一页上图的连接不同页上图的连接不同页上图的连接指明数据流动方向指明数据流动方向图图2.1基本符号基本符号符号符号名称名称说明说明穿孔卡片穿孔卡片文档文档磁带磁带联机存储联机存储磁盘磁盘磁鼓磁鼓显示显示人工输入人工输入人工操作人工操作辅助操作辅助操作通信链路通信链路穿孔卡片输入穿孔卡片输入/输出,或穿孔卡片文件输出,或穿孔卡片文件打印输出,或打印终端输入数据打印输出,或打印终端输入数据磁带输入磁带输入/输出,或表示磁带文件输出,或表示磁带文件任何种类磁盘存储,如磁盘、磁鼓等任何种类磁盘存储,如磁盘、磁鼓等磁盘输入磁盘输入/输出,或磁盘上文件、数据库输出,或磁盘上文件、数据库磁鼓输入磁鼓输入/输出,或磁鼓上文件、数据库输出,或磁鼓上文件、数据库显示器部件显示器部件人工输入数据,如填写表格人工输入数据,如填写表格人工完成的处理人工完成的处理使用辅助设备进行的脱机操作使用辅助设备进行的脱机操作通过远程通信线路传送数据通过远程通信线路传送数据图图2.2系统符号系统符号2.3.2例子例子事务事务库存清单程序库存清单程序报告生成程序报告生成程序定货定货信息信息定货报告定货报告库存清单库存清单主文件主文件图图2.3库存清单系统的系统流程图库存清单系统的系统流程图2.4数据流数据流图图(描(描绘绘数据在系数据在系统统中流中流动动的的逻辑过逻辑过程)程)2.4.1符号符号或或或或或或数据源点或终点数据源点或终点变换数据的处理变换数据的处理数据存储数据存储数据流数据流图图2.4基本符号的含义基本符号的含义TABC*TABC*附加符号附加符号TABC+TABC+注意:注意:“处处理理”可表示:可表示:单单个程序、一系列程序、程序个程序、一系列程序、程序的一个模的一个模块块、人工、人工处处理理过过程等等;程等等;“数据存数据存储储”可表示:一个文件、文件的一部分、可表示:一个文件、文件的一部分、数据数据库记录库记录等等;等等;数据流数据流图图忽略出忽略出错处错处理、打开文件、关理、打开文件、关闭闭文件。文件。2.4.2绘绘制数据流制数据流图图的的例子例子事务事务库存清单程序库存清单程序报告生成程序报告生成程序定货定货信息信息定货报告定货报告库存清单库存清单主文件主文件图图2.3库存清单系统的系统流程图库存清单系统的系统流程图2.4.2绘绘制数据流制数据流图图的的例子例子仓库仓库管理员管理员采购员采购员定货系定货系统统事务事务定货报表定货报表图图2.5定货系统的基本系统模型定货系统的基本系统模型2.4.2绘制数据流图的例子绘制数据流图的例子库存清单库存清单仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.6定货系统的功能级数据流图定货系统的功能级数据流图处理处理事务事务1产生产生报表报表2D1库存清单库存清单D2定货信息定货信息定货信息定货信息定货信息定货信息组组成成该该例子的数据流例子的数据流图图的元素的元素上述数据流上述数据流图图所描述的功所描述的功能能够详细够详细了了吗吗?2.4.2绘制数据流图的例子绘制数据流图的例子仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.7定货系统进一步分解后的数据流图定货系统进一步分解后的数据流图更新更新库存库存清单清单1.2产生产生报表报表2D1库存清单库存清单D2定货信息定货信息接收接收事务事务1.1处理处理定货定货1.3库存清单库存清单定货信息定货信息定货信息定货信息1)为为数据流(或数据存数据流(或数据存储储)命名)命名A名名字字应应该该代代表表整整个个数数据据流流(或或数数据据存存储储)的内容;)的内容;B不不要要使使用用空空洞洞的的、缺缺乏乏具具体体含含义义的的名字(如名字(如“数据数据”、“输输入入”););2.4.3命名命名C如果如果为为某个数据流(或数据存某个数据流(或数据存储储)起名字起名字时时遇到困遇到困难难,则则很可能是因很可能是因为对为对数据流数据流图图的分解不恰当造成的,的分解不恰当造成的,应该试应该试试试重新分解数据流重新分解数据流图图;2)为处为处理命名理命名A通通常常先先为为数数据据流流命命名名,然然后后再再为为与之相关与之相关联联的的处处理命名;理命名;B名字名字应该应该反映整个反映整个处处理的功能;理的功能;C应应该该尽尽量量避避免免空空洞洞笼笼统统的的动动词词做做名字,如名字,如“处处理理”、“加工加工”;D通通常常用用一一个个动动词词命命名名,如如果果必必须须用用两两个个动动词词才才能能描描述述整整个个处处理理的的功功能能,则则可可能能要要把把这这个个处处理分解成两个理分解成两个处处理更恰当;理更恰当;E如如果果在在为为某某个个处处理理命命名名时时遇遇到到困困难难,则则很很可可能能是是发发现现了了分分解解不不当当的的情情况况,应应考考虑虑重新分解。重新分解。通常,通常,为为“数据源点数据源点/终终点点”命名命名时时,采用它,采用它们们在在问题问题域中域中习惯习惯使用的名字(如使用的名字(如“仓库仓库管理管理员员”、“采采购员购员”)。)。1)利用它作)利用它作为为交流信息的工具;交流信息的工具;2)作)作为软为软件分析和件分析和设计设计的工具。的工具。2.4.4数据流图的用途数据流图的用途2.4.4数据流图的用途数据流图的用途仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.8这种自动化边界建议以联机方式更新库存清单这种自动化边界建议以联机方式更新库存清单更新更新库存库存清单清单1.2产生产生报表报表2D1库存清单库存清单D2定货信息定货信息接收接收事务事务1.1处理处理定货定货1.3库存清单库存清单定货信息定货信息定货信息定货信息图图2.8对应对应的物理的物理实现实现硬件方案硬件方案2.4.4数据流数据流图图的用途的用途仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.9这种自动化边界暗示以批量方式更新库存清单这种自动化边界暗示以批量方式更新库存清单更新更新库存库存清单清单1.2产生产生报表报表2D1库存清单库存清单D2 定货信息定货信息接收接收事务事务1.1处理处理定货定货1.3库存清单库存清单定货信息定货信息定货信息定货信息D3 事务事务图图2.9对应对应的物理的物理实现实现硬件方案硬件方案数据字典数据字典:对对数据流数据流图图中包含的所有中包含的所有元素的定元素的定义义的集合;的集合;可行性研究可行性研究阶阶段,数据流段,数据流图图与数据字与数据字典共同构成系典共同构成系统统的的逻辑逻辑模型模型。2.5数据字典数据字典 2.5.1数据字典的内容数据字典的内容数据字典数据字典应该对应该对下列元素下列元素进进行定行定义义:1)数据流;)数据流;2)数据元素(数据流分量);)数据元素(数据流分量);3)数据存)数据存储储;4)处处理。理。1)数据元素数据元素字典字典定定义义其定其定义义的基本内容有:的基本内容有:A数据元素数据元素编编号、名称及其含号、名称及其含义义;B数据数据类类型和型和长长度;度;C合理取合理取值值;D其其他他内内容容,如如它它与与其其它它数数据据的的逻辑逻辑关系等。关系等。2.5.2定义数据的方法定义数据的方法数据元素字典数据元素字典定定义实义实例:例:数据元素编号数据元素编号:DC001数据元素名称数据元素名称:考试成绩:考试成绩别名别名:成绩、分数:成绩、分数简述简述:学生考试成绩,分五个等级:学生考试成绩,分五个等级类型类型/长度长度:两个字节,字符类型:两个字节,字符类型取值取值/含义含义:优:优90-100良良80-89中中70-79及格及格60-69不及格不及格0-59有关数据项或结构有关数据项或结构:学生成绩档案:学生成绩档案有关处理逻辑有关处理逻辑:计算成绩:计算成绩图图2.10数据元素字典定义数据元素字典定义2)数据流字典数据流字典定定义义其定其定义义的基本内容有:的基本内容有:A数据流数据流编编号及名称;号及名称;B数据流来源;数据流来源;C数据流去数据流去处处;D数据流的数据流的组组成;成;E流通量;流通量;F峰峰值值。数据流字典数据流字典定定义实义实例:例:数据流编号数据流编号:DF001数据流名称数据流名称:订票单:订票单简述简述:订票时填写的订票单:订票时填写的订票单数据流来源数据流来源:外部实体:外部实体“乘客乘客”数据流去处数据流去处:处理逻辑:处理逻辑“预订机票预订机票”数据流组成数据流组成:订单编号:订单编号日期日期乘客号乘客号航班号航班号状态状态订单失效日期订单失效日期流通量流通量:每天:每天300份份高峰值流通量高峰值流通量:每天早上:每天早上9:00,约,约160份份图图2.11数据流字典定义数据流字典定义3)数据存数据存储储字典定字典定义义其定其定义义的基本内容有:的基本内容有:A数据存数据存储编储编号及名称;号及名称;B数据存数据存储储的的组组成;成;C其它要求。其它要求。4)数据数据处处理理字典定字典定义义其定其定义义的基本内容有:的基本内容有:A数据数据处处理理编编号及名称;号及名称;B简单简单描述;描述;C输输入入/输输出;出;D功能描述;功能描述;E有关数据存有关数据存储储。数据数据处处理理字典定字典定义实义实例:例:数据处理编号数据处理编号:DP001数据处理名称数据处理名称:编辑订票:编辑订票简述简述:接收从终端录入的订票单,检验是否正确:接收从终端录入的订票单,检验是否正确输入输入:乘客订单,来源:外部实体:乘客订单,来源:外部实体“乘客乘客”输输出出:1.合合格格订订单单,去去处处:处处理理逻逻辑辑“确确定定订订票票”2.不及格订单,去处:外部实体不及格订单,去处:外部实体“乘客乘客”功能描述:功能描述:(略)(略)图图2.12数据处理字典定义数据处理字典定义5)组组成数据成数据项项的表示方法的表示方法=表示表示“等价于等价于”或或“定定义为义为”+表示表示“与与”与与|表示表示“或或”表示重复表示重复()表示可表示可选项选项通通讯录讯录=通通讯讯地址地址 通通讯讯地地址址=姓姓名名+邮邮编编+省省|直直辖辖市市|自自治治区区+市市|县县+街道街道+门门牌号牌号+(电话电话)1.作作为为分析分析阶阶段的重要工具;段的重要工具;2.数据元素的控制信息非常有用;数据元素的控制信息非常有用;3.有助于开有助于开发发数据数据库库。2.5.3数据字典的用途数据字典的用途实现数据字典:实现数据字典:1)程序处理;)程序处理;2)卡片式人工书写;)卡片式人工书写;2.5.4数据字典的实现数据字典的实现2.6成本成本/效益分析效益分析1)代代码码行技行技术术 软软件成本件成本=每行代每行代码码的平均成本的平均成本估估计计的源代的源代码总码总行数行数2.6.1成本估计成本估计2)任务分解技术任务分解技术软软件件开开发发项项目目分分解解为为若若干干个个相相对对独独立立的的任任务,分别估计每个单独任务的成本:务,分别估计每个单独任务的成本:单单独独任任务务成成本本=任任务务所所需需人人力力估估计计值值每每人每月平均工资;人每月平均工资;软件开发项目总成本估计软件开发项目总成本估计=各个单独任务各个单独任务成本估计值之和。成本估计值之和。常用的常用的办办法是按开法是按开发阶发阶段划分任段划分任务务,典型,典型环环境下各个境下各个开开发阶发阶段需要使用的人力百分比大致如下:段需要使用的人力百分比大致如下:3)自自动动估估计计成本技成本技术术 采用自采用自动动估估计计成本的成本的软软件工具估件工具估计计。1)Putnam模型模型1978年年Putnam提出的,一种提出的,一种动态动态多多变变量模型:量模型:软件开发成本估算的经验模型:软件开发成本估算的经验模型:Ck为为技技术术状状态态常数,它反映常数,它反映“妨碍开妨碍开发进发进展展的限制的限制”,取,取值值因开因开发环发环境而异,境而异,见见下表:下表:Ck的典型的典型值值开发环开发环境境开发环境举例开发环境举例2000差差没有系统的开发方法,缺乏文档和复没有系统的开发方法,缺乏文档和复审审8000好好有合适的系统的开发方法,有充分的有合适的系统的开发方法,有充分的文档和复审文档和复审11000优优有自动的开发工具和技术有自动的开发工具和技术2)COCOMO模型模型(constructivecostmodel)这这是由是由TRW公司开公司开发发,Boehm提出的提出的结结构化成本估算构化成本估算模型,是一种精确的、易于使用的成本估算方法。模型,是一种精确的、易于使用的成本估算方法。基本基本COCOMO模型估算工作量和模型估算工作量和进进度的公式如下:度的公式如下:工工作作量:量:MM=r(KDSI)c(人月)(人月)开开发时间发时间:TDKV=a(MM)b(月)(月)DSI:源指令条数,不包括注:源指令条数,不包括注释释,1KDSI=1000DSIMM:开:开发发工作量(以人月工作量(以人月计计),),1MM=19人日人日=152人人时时=1/12人年人年经验经验常数常数r,c,a,b取决于取决于项项目的目的总总体体类类型型COCOMO模型中,考模型中,考虑虑开开发环发环境,境,软软件开件开发发项项目的目的类类型可以分型可以分为为3种:种:1)组织组织型型(organic)相相对较对较小、小、较简单较简单的的软软件件项项目。开目。开发发人人员对员对开开发发目目标标理解比理解比较较充分,与充分,与软软件系件系统统相关的工作相关的工作经经验验丰富,丰富,对软对软件的使用件的使用环环境很熟悉,受硬件的境很熟悉,受硬件的约约束束较较小,程序的小,程序的规规模不是很大(模不是很大(下个状下个状态态加入谓词集加入谓词集P P,把系统扩展成一个,把系统扩展成一个6 6元组后元组后:当前状当前状态态【菜【菜单单】事件【所】事件【所选择选择的的项项】谓词谓词下个状下个状态态 计计算算机机系系统统中中每每个个菜菜单单驱驱动动的的用用户户界界面面都都是是一个有穷状态机的实现。一个有穷状态机的实现。定定义义状状态态:(1)M(d,e,f):电电梯梯e正沿正沿d方向移方向移动动,即将到达第,即将到达第f层层楼。楼。(2)S(d,e,f):电电梯梯e停在停在f层层楼,将朝楼,将朝d方向移方向移动动(未关(未关门门)。(3)W(e,f):电电梯梯e在在f层层等待(已关等待(已关门门)。)。(4)DC(e,f):电电梯梯e在楼在楼层层f关上关上门门。(5)ST(e,f):电电梯梯e靠近靠近f层时层时触触发传发传感器,感器,电电梯控制器梯控制器决定在当前楼决定在当前楼层层是否停下。是否停下。(6)RL:电电梯按梯按钮钮或楼或楼层层按按钮钮被按下被按下进进入打开状入打开状态态4.2.2例子例子:电梯的状态转电梯的状态转换换电梯状态转换规则:电梯状态转换规则:S(U,e,f)+DC(e,f)=M(U,e,f+1);S(D,e,f)+DC(e,f)=M(D,e,f-1);S(N,e,f)+DC(e,f)=W(e,f)4.2.3评评价价有有穷穷状状态态机描述机描述规规格格说说明:明:当前状态事件谓词当前状态事件谓词=下个状态下个状态易于易于书书写、写、验证验证、转变转变成成设计设计或程序代或程序代码码。有有穷穷状状态态机机方方法法比比数数据据流流图图技技术术更更精精确确,一样易于理解。但不能处理定时需求。一样易于理解。但不能处理定时需求。4.3Petri网网4.3.1概念概念Petri网包含网包含4种元素:种元素:1)一)一组组位置位置P,上例,上例PP1,P2,P3,P42)一)一组转换组转换T,上例,上例Tt1,t23)输输入函数入函数I,上例,上例I(t1)=P2,P4I(t2)=P24)输输出函数出函数O,上例,上例O(t1)=P1O(t2)=P3,P3更形式化的更形式化的Petri网网结结构,是一个构,是一个4元元组组(P,T,I,O)权标权标向量(向量(1,2,0,1)权标权标向量(向量(2,1,0,0)权标权标向量(向量(2,0,2,0)更形式化地:更形式化地:标记标记M:P0,1,2,Petri网成网成为为一个一个5元元组组(P,T,I,O,M)对对Petri网的一个重要网的一个重要扩扩充是加入禁止充是加入禁止线线:4.3.2例子例子1.电电梯按梯按钮钮EBf 电梯中楼层电梯中楼层f 的按钮;的按钮;Fg楼层楼层g;Ff 楼层楼层f。2.楼层按钮楼层按钮FBfu第第f 楼层向上按钮;楼层向上按钮;FBfd第第f 楼层向下按钮;楼层向下按钮;小结基于数学的形式化基于数学的形式化说说明技明技术术,目前,目前还还没有在没有在软软件件产业产业界广泛界广泛应应用;用;应该应该把形式化方法与把形式化方法与传统传统方法有机方法有机结结合。合。第5章:总体设计 5.1设计过程设计过程1.设想供选择的方案设想供选择的方案2.选择合理的方案选择合理的方案对每个合理的方案要提供:对每个合理的方案要提供:A系统流程图系统流程图B组成系统的物理元素清单组成系统的物理元素清单C成本成本/效益分析效益分析D实现这个系统的进度计划实现这个系统的进度计划3.推荐最佳方案推荐最佳方案4.功能分解功能分解5.设计软设计软件件结结构构6.数据数据库设计库设计A模式模式设计设计B子模式子模式设计设计C完整性和安全性完整性和安全性设计设计D优优化化7.制定制定测试计测试计划划8.书书写文档写文档A系系统说统说明明B用用户户手册手册C测试计测试计划划D详细详细的的实现计实现计划划E数据数据库设计结库设计结果果9.审查审查和复和复审审5.2设计原理设计原理如果一个大型程序如果一个大型程序仅仅由一个模由一个模块组块组成,很成,很难难被人理解。被人理解。设设函函数数C(x)定定义义问问题题x的的复复杂杂程程度度,函函数数E(x)定定义义解解决决问问题题x需需要要的的工工作作量量(时时间间)。对对于于两两个个问问题题P1和和P2,如如果:果:C(P1)C(P2)那么那么E(P1)E(P2)根据解决根据解决问题问题的的经验经验,有一个,有一个规规律是:律是:C(P1+P2)C(P1)+C(P2)于是有于是有E(P1+P2)E(P1)+E(P2)5.2.1模块化模块化模块数目模块数目接口成本接口成本成本成本/模块模块软件总成本软件总成本M最小成本区最小成本区成成本本图图5.1模块化与软件成本模块化与软件成本5.2.2抽象抽象5.2.3逐步求精逐步求精模块的独立性很重要,因为:模块的独立性很重要,因为:1)有有效效的的模模块块化化的的软软件件比比较较容容易易开开发发出出来来;2)独立的模块比较容易测试和维护。)独立的模块比较容易测试和维护。5.2.4信息隐蔽和局部化信息隐蔽和局部化5.2.5模块独立模块独立一、耦合一、耦合 耦合耦合:指软件结构内不同模块彼此之间相:指软件结构内不同模块彼此之间相互依赖(连接)的紧密程度。互依赖(连接)的紧密程度。 模块独立程度可以由两个定性标准度量:模块独立程度可以由两个定性标准度量:耦耦合合与与内聚内聚。模块的偶合分四类:模块的偶合分四类:1)数据耦合数据耦合两个模块之间只是通过参数交换信息,而且两个模块之间只是通过参数交换信息,而且交换的信息仅仅是数据。交换的信息仅仅是数据。数据耦合是最低程度的耦合。数据耦合是最低程度的耦合。AB数据数据(1)数据耦合)数据耦合2)控制耦合控制耦合两个模两个模块块之之间间所交所交换换的信息包含控制信息。的信息包含控制信息。控制耦合是中等程度的耦合。控制耦合是中等程度的耦合。图中模块图中模块A的内部处理程序判断是执行的内部处理程序判断是执行C还是执行还是执行D,要取决于模块要取决于模块B传来的信息状态(传来的信息状态(Status)。)。BACD(2)控制耦合)控制耦合astatus3)公用耦合公用耦合 两个或多个模两个或多个模块块通通过过一个公共区相互作用一个公共区相互作用时时的耦合。的耦合。 公共区可以是:全程数据区、共享通信区、公共区可以是:全程数据区、共享通信区、内存公共覆盖区、任何介内存公共覆盖区、任何介质质上的文件、物理上的文件、物理设设备备等。等。 软软件件结结构中存在大量的公用耦合构中存在大量的公用耦合时时会会给诊给诊断断错误带错误带来困来困难难。 图图中存在公用耦合,假中存在公用耦合,假设设模模块块A、C、E都存取全程数据都存取全程数据区(如公用一个磁区(如公用一个磁盘盘文件)中的一个数据文件)中的一个数据项项。 如果如果A模模块读块读取取该项该项数据,然后数据,然后调调用用C模模块对该项块对该项重新重新计计算,并算,并进进行数据更新。行数据更新。ABCDE全程数全程数据区据区(3)公用耦合)公用耦合 如果此如果此时时C模模块错误块错误地更新了地更新了该项该项数据,在往下的数据,在往下的处处理中模理中模块块E读该读该数据数据项时项时出出现错误现错误。 表面上看,表面上看,问题问题由模由模块块E产产生,生,实际实际上由模上由模块块C引起。引起。ABCDE全程数全程数据区据区(3)公用耦合)公用耦合4)内容耦合内容耦合 一个模一个模块块与另一个模与另一个模块块的内容直接的内容直接发发生生联联系。系。 内容耦合内容耦合对维护对维护会会带带来来严严重的困重的困难难。模块模块ALAB:MOVE1模块模块BGOTOLAB内容耦合内容耦合(4)内容耦合)内容耦合 程序中如果一个模块直接把程序转移到另一个模块中,或一个模块使程序中如果一个模块直接把程序转移到另一个模块中,或一个模块使用另一个模块内部的数据,都会产生内容耦合。内容耦合是最高程度的用另一个模块内部的数据,都会产生内容耦合。内容耦合是最高程度的耦合,应该避免采用。耦合,应该避免采用。 软软件件设计应设计应追求尽可能松散耦合,避免追求尽可能松散耦合,避免强强耦合,耦合,这样这样模模块间块间的的联联系就越小,模系就越小,模块块的独立的独立性就越性就越强强,对对模模块块的的测试测试、维护维护就越容易。就越容易。 因此建因此建议议:尽量使用数据耦合,少用控制尽量使用数据耦合,少用控制耦合,限制公用耦合,完全不用内容偶合耦合,限制公用耦合,完全不用内容偶合。二、内聚二、内聚 内内聚聚:一一个个模模块块内内部部各各个个元元素素彼彼此此结结合合的紧密程度。的紧密程度。 它它是是衡衡量量一一个个模模块块内内部部组组成成部部分分间间整整体体统一性的度量。统一性的度量。 常见的内聚有七类。常见的内聚有七类。 1)功能内聚功能内聚(FunctionalCohesion) 如果一个模如果一个模块块内所有内所有处处理元素完成一个,而理元素完成一个,而且且仅仅完成一个功能,完成一个功能,则则称称为为功能内聚。功能内聚。 功能内聚是最高程度的内聚。但在功能内聚是最高程度的内聚。但在软软件件结结构构中,并不是每个模中,并不是每个模块块都能都能设计设计成一个功能内聚成一个功能内聚模模块块。2)顺顺序内聚序内聚(SequentialCohesion)如如果果一一个个模模块块内内处处理理元元素素和和同同一一个个功功能能密密切切相相关关,而而且且这这些些处处理理元元素素必必须须顺顺序序执执行行,则则称称为顺为顺序内聚。序内聚。 如如图图,一个求一元二次方程根的模,一个求一元二次方程根的模块块由三由三个个处处理元素理元素组组成,成,该该模模块块中存在中存在顺顺序内聚。序内聚。 通常,通常,顺顺序内聚中一个序内聚中一个处处理元素的理元素的输输出是出是另一个另一个处处理元素的理元素的输输入。入。求一元二次方求一元二次方程根模块程根模块1 1输入方程系数输入方程系数2 2求解求解3 3打印方程的解打印方程的解顺序内聚示例顺序内聚示例3) 通通 信信 内内 聚聚 ( CommunicationalCohesion)如如果果一一个个模模块块中中所所有有处处理理元元素素都都使使用用同同一一个个输输入入数数据据和和(或或)产产生生同同一一个个输输出出数数据,称据,称为为通信内聚。通信内聚。 如如图图,模,模块块A的的处处理理单单元将根据同一个数元将根据同一个数据文件据文件FILE的数据的数据产产生不同的表格,因此它生不同的表格,因此它存在通信内聚。存在通信内聚。通信内聚有通信内聚有时时也称也称为为数据内聚。数据内聚。A从文件从文件FILE中读出数据中读出数据1.由数据产生报表由数据产生报表A2.由数据产生报表由数据产生报表B通信内聚示例通信内聚示例4)过过程内聚程内聚(ProceduralCohesion)如如果果一一个个模模块块内内的的处处理理元元素素是是相相关关的的,而而且必且必须须以特定的次序以特定的次序执执行,称行,称为过为过程内聚。程内聚。 过过程内聚与程内聚与顺顺序内聚的区序内聚的区别别是:是: 顺顺序内聚中是数据流从一个序内聚中是数据流从一个处处理理单单元流到元流到另一个另一个处处理理单单元,而元,而过过程内聚是控制流从一个程内聚是控制流从一个动动作流向另一个作流向另一个动动作。作。5)时间时间内聚内聚(TemporalCohesion)如如果果一一个个模模块块包包含含的的任任务务必必须须在在同同一一段段时时间间内内执执行,称行,称为时间为时间内聚。也称内聚。也称为为瞬瞬时时内聚。内聚。例例如如,完完成成各各种种初初始始化化工工作作的的模模块块,或或者者处处理理故故障障的模的模块块都存在都存在时间时间内聚。内聚。 如如图图,在在“紧紧急急故故障障处处理理模模块块”中中,“关关闭闭文文件件”、“报报警警”、“保保留留现现场场”等等任任务务都都必必须须无无中中断断地地同同时时处处理。理。紧急故障处理紧急故障处理模块模块1关闭文件关闭文件2报警报警3保留现场保留现场时间内聚示例时间内聚示例6)逻辑逻辑内聚内聚(LogicalCohesion)如如果果模模块块完完成成的的任任务务在在逻逻辑辑上上属属于于相相同同或或相似的一相似的一类类,称,称为逻辑为逻辑内聚。内聚。如如图图,A、B、C模模块块合合并并成成ABC模模块块之之后后,ABC模模块块就是就是逻辑逻辑内聚模内聚模块块。XYZABCXYZABC合并合并逻辑内聚示例逻辑内聚示例 对逻辑内聚模块的调用,常常需要有一个功能对逻辑内聚模块的调用,常常需要有一个功能开关,由上层调用模块向它发出一个控制信号,开关,由上层调用模块向它发出一个控制信号,在多个关联性功能中选择执行某一个功能。在多个关联性功能中选择执行某一个功能。 这种内聚较差,增加了模块之间的联系,不易这种内聚较差,增加了模块之间的联系,不易修改。修改。 7)偶然内聚偶然内聚(CoincidentalCohesion)如果一个模块由完成若干毫无关系的功能如果一个模块由完成若干毫无关系的功能处理元素偶然组合在一起的,就叫偶然内聚。处理元素偶然组合在一起的,就叫偶然内聚。偶然内聚是最差的一种内聚。偶然内聚是最差的一种内聚。常常犯犯这这种种错错误误的的一一种种情情况况是是:有有时时在在写写完完程程序序后后,发发现现一一组组语语句句在在多多处处出出现现,于于是是为为了了节节省省空空间间而而将将这这些些语语句句作作为为一一个个模模块块设设计计,就出就出现现偶然内聚。偶然内聚。如如图图,模,模块块A、B、C出出现现公共代公共代码码段段W,于是将,于是将W独立成一个模独立成一个模块块,而,而W中中这这些些语语句并没有任何句并没有任何联联系。系。如果在如果在测试测试中中发现发现模模块块A不需要做不需要做“X=Y+Z”,而,而应应该该做做“X=Y*Z”,此,此时对时对W的的维护维护就很困就很困难难了。了。ABCW模块模块X=Y+ZGETCARDIFI=5THENE=0偶然内聚示例偶然内聚示例 软软件件设计设计中中应该应该:力求做到高内聚力求做到高内聚,尽量少用中内聚,不用低内聚尽量少用中内聚,不用低内聚。5.3启启发发式式规则规则1.改改进软进软件件结结构提高模构提高模块块独立性独立性2.模模块规块规模模应该应该适中适中3.深度、宽度、扇出和扇入都应适当深度、宽度、扇出和扇入都应适当 深度深度:软件结构中控制的层数;:软件结构中控制的层数; 宽度宽度:软件结构内同一个层次上的模块总数的最大值;:软件结构内同一个层次上的模块总数的最大值; 扇出扇出:一个模块直接控制(调用)其它模块的数目;:一个模块直接控制(调用)其它模块的数目; 扇入扇入:一个模块被其它模块调用的数目。:一个模块被其它模块调用的数目。正文加工正文加工系统系统输入输入输出输出编辑编辑加标题加标题存储存储检索检索编目录编目录格式化格式化添加添加删除删除插入插入修改修改合并合并列表列表对对扇出、扇入扇出、扇入过过大的改大的改进进:(a)对扇入过大的改进对扇入过大的改进(b)对扇出过大的改进对扇出过大的改进4. . 模模块块的作用域的作用域应该应该在控制域之内在控制域之内MAGBCEDF图图5.2模块的作用域和控制域模块的作用域和控制域作用域:受该模块内一个判定影响的所有模块的集合。作用域:受该模块内一个判定影响的所有模块的集合。控制域:模块本身以及所有从属于它的模块的集合。控制域:模块本身以及所有从属于它的模块的集合。如:如:QUAD-ROOT(TBL,X)求求一一元元二二次次方方程程的的根根的的模模块块,其其中中TBL,X都都为为数数组组,分,分别别代表方程的系数和方程的根。代表方程的系数和方程的根。应该应该使接口更使接口更简单简单,如:,如:QUAD-ROOT(A,B,C,ROOT1,ROOT2)A、B、C是是方方程程的的系系数数,ROOT1,ROOT2是方程的根。是方程的根。5.力争降低模块接口的复杂度力争降低模块接口的复杂度6.设计单设计单入口、入口、单单出口的模出口的模块块7.模块功能应该可以预测模块功能应该可以预测5.4图图形工具形工具5.4.1层层次次图图和和HIPO图图正文加工正文加工系统系统输入输入输出输出编辑编辑加标题加标题存储存储检索检索编目录编目录格式化格式化添加添加删除删除插入插入修改修改合并合并列表列表图图5.3正文加工系统的层次图正文加工系统的层次图正文加工正文加工系统系统输入输入1.0输出输出2.0编辑编辑3.0加标题加标题4.0存储存储5.0检索检索6.0编目录编目录7.0格式化格式化8.0添加添加3.1删除删除3.2插入插入3.3修改修改3.4合并合并3.5列表列表3.6图图5.4带编号的层次图(带编号的层次图(H图)图)HIPO图是:图是:“层次图输入层次图输入/处理处理/输出图输出图”5.4.2结结构构图图产生最佳解产生最佳解得到好输入得到好输入计算最佳解计算最佳解输出结果输出结果读输入读输入编辑输入编辑输入结果格式化结果格式化显示结果显示结果图图4.5结构图的例子结构图的例子产生最佳解的一般结构产生最佳解的一般结构MAB图图5.6判定为真时调用判定为真时调用A,为假时调用为假时调用BMABC图图5.7模块模块M循环调循环调用模块用模块A、B、C5.5面向数据流的面向数据流的设计设计方法方法 面向数据流面向数据流设计设计(DataFlow-OrientedDesign,DFOD)是与数据流分析()是与数据流分析(DFA)对应对应的的结结构化构化软软件件设计设计技技术术。 面向数据流的面向数据流的设计设计将得到以数据流将得到以数据流图为图为基基础础的的软软件模件模块结块结构构图图。数据流可以分数据流可以分为为两种两种类类型:型: 1)变换变换型数据流型数据流 2)事)事务务型数据流型数据流5.5.1变换流与事务流变换流与事务流一、一、变换流变换流具有较明确的输入、变换(或称主加工)和输具有较明确的输入、变换(或称主加工)和输出界面的数据流图称为变换型数据流图。出界面的数据流图称为变换型数据流图。如图所示,该变换中心可以理解为数据的加工如图所示,该变换中心可以理解为数据的加工和处理程序。和处理程序。读入原读入原始数据始数据校验原校验原始数据始数据计算最计算最优结果优结果编辑打印编辑打印最优结果最优结果输入输入变换中心变换中心输出输出 事事务务型型数数据据流流图图中中存存在在一一个个事事务务中中心心(也也就就是是数数据据处处理理、加加工工中中心心),它它将将输输入入分分离离成成若若干干个个发发散散的的数数据据流流,形成形成许许多活多活动动路径,并根据路径,并根据输输入入值选择值选择其中一条路径。其中一条路径。要求类要求类别处理别处理分房处理分房处理调房处理调房处理退房处理退房处理住房要求住房要求事务中心事务中心活动路径活动路径二、二、事务流事务流 通常,一个通常,一个实际实际系系统统的数据流的数据流图图是是变换变换型和事型和事务务型两型两种种类类型的混合体。型的混合体。 如如图图所示,中所示,中间间的子的子块块属事属事务务型数据流,如果把中型数据流,如果把中间间子子块视为块视为一个一个处处理整体的理整体的话话,整个程序属,整个程序属变换变换型程序。型程序。A(事务型,(事务型,A为事务中心)为事务中心)变换中心变换中心输入输入输出输出混合型数据流图混合型数据流图面面向向数数据据流流设设计计软软件件结结构构的的基基本本步步骤骤有有七七步:步:1)复)复审审并精化数据流并精化数据流图图;2)确定数据)确定数据处处理流理流图图的的类类型;型;3)确定)确定变换变换中心或事中心或事务务中心;中心;5.5.2面向数据流设计的步骤面向数据流设计的步骤4)将将数数据据流流图图映映射射成成软软件件模模块块结结构构图图,设计设计出出该该数据流数据流图对应图对应的第一的第一层层模模块结块结构;构;5)基基于于数数据据流流图图逐逐步步分分解解,设设计计下下层层模模块块;6)运运用用模模块块设设计计和和优优化化准准则则优优化化软软件件结结构;构;7)描述模)描述模块块的接口。的接口。复查、精化数据流图复查、精化数据流图类型类型找出事务中心找出事务中心找出变换中心找出变换中心映射成事务结构映射成事务结构映射成变换结构映射成变换结构优化软件模块结构优化软件模块结构导出模块结构导出模块结构复查复查不满意不满意变换变换事务事务变换设计变换设计事务设计事务设计面向数据流的设计步骤面向数据流的设计步骤 变变换换设设计计就就是是从从变变换换型型数数据据流流图图映映射射出出软软件件模模块块结结构构的的过过程程,也也称称以以变变换换为为中中心心的的设计设计。5.5.3变换设计变换设计变换设计的基本方法有两步:变换设计的基本方法有两步:1)分解第一层模块结构)分解第一层模块结构就是把整个变换分解成输入控制模块就是把整个变换分解成输入控制模块Ci、输出输出控制模块控制模块Co和变换中心控制模块和变换中心控制模块Ct,由主控模由主控模块控制。块控制。主控模块主控模块输出控制模块输出控制模块Co变换中心控制模块变换中心控制模块Ct输入控制模块输入控制模块Ci2)分)分别设计输别设计输入、入、输输出和出和处处理的下理的下层层模模块结块结构构方法是:方法是:从从变换变换中心中心边边界向两界向两侧侧移移动动,分,分别别把把输输入通路入通路和和输输出通路的每个出通路的每个处处理映射成理映射成输输入控制模入控制模块块Ci和和输输出控制模出控制模块块Co的下属模的下属模块块。变换变换中心的下中心的下层层模模块块,是把每个,是把每个处处理映射成理映射成变变换换中心控制模中心控制模块块Ct的一个直接下属模的一个直接下属模块块。ABCDFEGHIJK变换中心变换中心输入输入输出输出主控模块主控模块输出控制模块输出控制模块Co变换中心控制模块变换中心控制模块Ct输入控制模块输入控制模块CiDCBAEFGIHJK事事务务设设计计就就是是从从事事务务型型数数据据流流图图映映射射出出软软件件模模块块结结构构的的过过程程,也也称称为为以以事事务务为为中心的中心的设计设计。5.5.4事务设计事务设计事事务设计务设计的基本方法有两步:的基本方法有两步:1)建立主控模)建立主控模块块、接收、接收输输入入类类型分析模型分析模块块和事和事务调务调度模度模块块;主模块主模块调度调度输入类型分析输入类型分析2)分)分别设计输别设计输入入类类型分析模型分析模块块和和调调度模度模块块的的下下层层模模块结块结构。构。 方法是:将方法是:将输输出的每条通路作出的每条通路作为调为调度模度模块块的一个判断分支,而的一个判断分支,而输输入入类类型分析模型分析模块块的下的下层层模模块块与与变换设计类变换设计类似。似。I2I3I1TCA1B1C1A2B2C2事务中心事务中心主模块主模块调度调度输入类型分析输入类型分析I1I3I2A1A2B1B2C1C2第第5章小章小结结概要概要设计说设计说明明书书该说该说明明书书是概要是概要实际阶实际阶段的工作成果,它段的工作成果,它应说应说明功能分配、模明功能分配、模块块划分、程序的划分、程序的总总体体结结构、构、输输入入输输出以及接口出以及接口设计设计、运行、运行设计设计、数据、数据结结构构设计设计和出和出错处错处理理设计设计等,等,为详细设计为详细设计提供基提供基础础。第第6章:章:详细设计详细设计目标目标:确定如何具体实现所要求的系统。:确定如何具体实现所要求的系统。不不是是具具体体编编写写程程序序,而而是是设设计计程程序序的的“蓝图蓝图”。详详细细设设计计的的结结果果决决定定最最终终程程序序代代码码的的质量。质量。E.W.Dijkstra最早提出最早提出结结构程序构程序设计设计:程序:程序质质量与量与程序中包含的程序中包含的Goto语语句的数量成反比(句的数量成反比(1965)。)。1966,Bohm,Jacopini,证证明了只用明了只用“顺顺序序”、“选择选择”、“循循环环”控制控制结结构就能构就能实现实现任何任何单单入口入口单单出口程序。出口程序。6.1结结构程序构程序设计设计理理论论上,最基本的控制上,最基本的控制结结构只有两种:构只有两种:顺顺序、序、循循环结环结构(构(选择结选择结构可由其两者构造)。构可由其两者构造)。学界学界认识认识到,不是到,不是简单简单去掉去掉Goto语语句的句的问题问题,而是要而是要创创立一种新的程序立一种新的程序设计设计方法。方法。结结构化程序构化程序设计设计(IBM率先成功运用)。率先成功运用)。结构程序设计结构程序设计:一一种种设设计计程程序序的的技技术术,它它采采用用自自顶顶向向下下逐逐步求精的步求精的设计设计方法和方法和单单入口入口单单出口的控制出口的控制结结构。构。 使用使用结结构程序构程序设计设计技技术术的好的好处处:1)提高)提高软软件开件开发发工程的成功率和生工程的成功率和生产产率;率;2)系)系统统有清晰的有清晰的层层次次结结构,容易构,容易阅读阅读理解;理解;3)单单入口入口单单出口的控制出口的控制结结构,容易构,容易诊诊断断纠纠正;正;4)模)模块块化可以使得化可以使得软软件可以重用;件可以重用;5)程序)程序逻辑结逻辑结构清晰,有利于程序正确性构清晰,有利于程序正确性证证明。明。经经典的典的结结构程序构程序设计设计:只允:只允许许使用使用顺顺序、序、IF_THEN_ELSE选择选择和和DO_WHILE循循环环;扩展的结构程序设计扩展的结构程序设计:除了三种基本控制结构,:除了三种基本控制结构,还使用还使用DO_CASE和和DO_UNTIL循环;循环;修正的结构程序设计修正的结构程序设计:除了三种基本控制结构:除了三种基本控制结构和两种扩充结构,还使用和两种扩充结构,还使用BREAK等结构。等结构。流程流程图图通常由三种通常由三种结结点点组组成:成:1)函数函数结结点点如如果果一一个个结结点点有有一一个个入入口口线线和和一一个个出出口口线线,则则称称为为函函数数结结点。点。由于函数结点一般对应于赋值由于函数结点一般对应于赋值语句,所以语句,所以F也表示了这一个结点也表示了这一个结点对应的函数关系。对应的函数关系。F函数结点函数结点6.1.1结构化程序结构化程序6.1.1.1控制结构控制结构2)谓词结谓词结点点如果一个如果一个结结点有一个入口点有一个入口线线和两个出口和两个出口线线,而且它不改而且它不改变变程序的数据程序的数据项项的的值值,则则称称为谓词为谓词结结点。点。P是一个谓词,根据是一个谓词,根据P的逻辑值(的逻辑值(T或或F),),结点有不同的出口。结点有不同的出口。P谓词结点谓词结点3)汇汇点点 如果一个如果一个结结点有两个或多个入口点有两个或多个入口线线和一个出和一个出口口线线,而且它不,而且它不执执行任何运算,行任何运算,则则称称为汇为汇点点。汇点汇点 汇点的简略表示汇点的简略表示1)顺顺序序结结构构:相当于:相当于“A、B”2.三种基本控制结构三种基本控制结构AB(a)顺序结构顺序结构2)选择结选择结构构相当于相当于“IfexpthenAelseBendif”ABexp(b)选择结构选择结构3)循循环结环结构构:相当于:相当于“WhileexpdoA”A(c)循环结构循环结构exp1)多分支多分支结结构构相当于相当于“CaseIofI=1:C1;I=2:C2;I=3:C3;I=n:Cn”3. 扩充两种控制结构扩充两种控制结构CnC3C1C2( (d)d)多分支结构多分支结构I=?2)UNTIL循循环结环结构构相当于相当于“RepeatAUntilexp”A(e)UNTIL循环循环exp6.1.1.2正正规规程序程序定定义义1:一一个个流流程程图图程程序序如如果果满满足足下下面面两两个个条件,称条件,称为为正正规规程序:程序:1)具有一个入口)具有一个入口线线和一个出口和一个出口线线;2)对对每一个每一个结结点,都有一条从入口点,都有一条从入口线线到出到出口口线线的通路通的通路通过该结过该结点。点。 由于正由于正规规程序有一个入口程序有一个入口线线和一个出口和一个出口线线,因而一个正因而一个正规规程序程序总总可以抽象可以抽象为为一个一个函数函数结结点点。 F函数结点函数结点定定义义2:如果一个正:如果一个正规规程序的某个部分仍然程序的某个部分仍然是正是正规规程序,那么称它程序,那么称它为该为该正正规规程序的正程序的正规规子程序。子程序。先先给给出一个概念:出一个概念:封封闭结闭结构构定定义义3:流流程程图图中中,两两个个结结点点之之间间所所有有没没有有重重复复结结点点的的通通路路组组成成的的结结构构称称为为封封闭闭结结构。构。6.1.1.3基本程序基本程序如如图图:封:封闭结闭结构构为为a-b1-b2-b3;c1-c2;d1-d2-d3;e-fab1b2b3c2c1d1d2d3ef1)不不包包括括多多于于一一个个结结点点的的正正规规子子程程序序,即即它它是是一一种种不不可可再再分分解解的的正正规规程程序序;(程程序序自自身身不不可可视为视为正正规规子程序)子程序)2)如果存在封)如果存在封闭结闭结构,封构,封闭结闭结构都是正构都是正规规程程序。序。6.1.1.3基本程序基本程序定定义义4:一一个个正正规规程程序序,如如果果满满足足以以下下两两个个条条件件,则称之为则称之为基本程序基本程序:基本程序形式有多种,前面提到的三种基本基本程序形式有多种,前面提到的三种基本控制控制结结构(构(顺顺序序结结构、构、选择结选择结构、循构、循环结环结构构)和)和两个两个扩扩充控制充控制结结构(构(多分支多分支结结构、构、UNTIL循循环结环结构构)都是基本程序。)都是基本程序。定定义义5:用以构造程序的基本程序的集合称用以构造程序的基本程序的集合称为为基集合基集合。如:如:顺顺序,序,if-then-else,whiledo顺顺序,序,if-then-else,repeat-until都是基集合。都是基集合。定定义义6:如果一个基本程序的函数:如果一个基本程序的函数结结点用另一点用另一个基本函数程序替个基本函数程序替换换,产产生的新的正生的新的正规规程序称程序称为为复合程序复合程序。A复合程序复合程序expBexpA:循环结构的循环结构的A函数结点用另一循环结构代替,即嵌套函数结点用另一循环结构代替,即嵌套循环,就产生了复合程序。循环,就产生了复合程序。 由于复合程序是由一些基本程序由于复合程序是由一些基本程序组组成,因此,成,因此,无无论论从从总总体上看或是从每个体上看或是从每个组组成部分看,都成部分看,都满满足足“一个入口,一个出口一个入口,一个出口”的原的原则则,这样这样的程序就的程序就是通常是通常说说的好的好结结构程序,或者构程序,或者结结构化程序。构化程序。定定义义7:由由基基本本程程序序的的一一个个固固定定的的基基集集合合构构造造出的复合程序,称出的复合程序,称为为结结构化程序构化程序。结结构构化化定定理理:任任一一正正规规程程序序都都可可以以函函数数等等价价于于一一个个由由基基集集合合顺顺序序,If-else-then,While-do产产生的生的结结构化程序。构化程序。实际实际上,只要能上,只要能证证明可以将任一正明可以将任一正规规程序程序转转换换成等价的成等价的结结构化程序就可以构化程序就可以证证明明这这个个结结构化构化定理。定理。6.1.2结构化定理结构化定理证证明明:(分三步:(分三步进进行行结结构化程序的构化程序的转换转换)步步骤骤一一:从从程程序序入入口口处处开开始始给给程程序序的的函函数数结结点点和和谓谓词词结结点点编编号号:1,2,3,n,同同时时,将将每每个个函函数数和和谓谓词词结结点点的的出出口口线线用用它它后后面面的的结结点点的的号号码码进进行行编编号号,如如果果出出口口线线后后面面没没有有结结点点,也也就就是是说说该该结结点点的的出出口口线线与与程程序序的的出出口口线线相相连连时时,出口,出口线编线编号号为为0。步步骤骤二:二:对对原程序中每一个原程序中每一个编编号号为为i,出口出口线线编编号号为为j的函数的函数结结点点H,构造一个新的序列程,构造一个新的序列程序序Gi,如,如图图:HGi=HL:=jiij类类似地,似地,对对于每个于每个编编号号为为i,出口,出口线线分分别为别为j和和k的的谓词结谓词结点,构造一个新的点,构造一个新的选择选择程序程序Gi,如,如图图:PjkiGi=PiL:=jL:=k步步骤骤三:三:利用已利用已经经得到的一些得到的一些Gi程序(程序(i=1,2,3,n),),按下按下图图的形式构造一个的形式构造一个While-do循循环环。图图中中的的循循环环体体是是一一个个对对L从从1到到n的的嵌嵌套套选选择择(if-then-else)程程序序,转转换换后后的的程程序序与与原原程程序序是是等等价价的的,是是由由基基集集合合顺顺序序、选选择择、循循环环所所复复合合成的结构化程序。成的结构化程序。L:=1L0L=1L=nL=2GnL:=0G2G1TTTTFFFF 这这种方法并不是唯一的把程序种方法并不是唯一的把程序转变为结转变为结构化构化程序的方法,所得的程序也不一定是最好的。程序的方法,所得的程序也不一定是最好的。 它的目的是它的目的是为为了了证证明明结结构化定理。构化定理。例例1:把把图图示示的的非非结结构构化化程程序序转转换换成成结结构构化化程程序(用序(用结结构化定理构化定理证证明明过过程提供的方法程提供的方法转换转换)6.1.3非结构化程序到结构化程序的转换非结构化程序到结构化程序的转换P1P2AB非结构化程序例图非结构化程序例图1)进进行行结结点及其出口点及其出口线线的的编编号;号;1340202341P1P2AB非结构化程序例图非结构化程序例图P1321G1=P11L:=3L:=22)将图中的四个结点构造新的程序)将图中的四个结点构造新的程序G1、G2、G3、G4;BG2=BL:=0220P2403G3=P23L:=4L:=0AG4=AL:=14413)利用得到的)利用得到的G1、G2、G3、G4按介按介绍绍的方法构造一个的方法构造一个While-do循循环环,最,最终结终结果如果如图图:L:=1L0L=1L=4L=2L:=0P1L:=3L:=2BL:=0L=3P2L:=4L:=0AL:=1转化后的结构化程序图转化后的结构化程序图FFFFFTTTTT6.2人机界面人机界面设计设计6.2.1设计问题设计问题1.系系统统响响应时间应时间;2.用用户户帮助;帮助;3.出出错错信息信息处处理;理;4.命令交互命令交互6.2.2设计过设计过程程6.2.3人机界面人机界面设计设计指南指南1.一般交互指南;一般交互指南;2.信息信息显显示指南;示指南;3.数据数据输输入指南。入指南。6.3过过程程设计设计的工具的工具6.3.1程序流程图程序流程图 程程序序流流程程图图:是是一一种种描描述述程程序序的的控控制制结结构流程和指令执行情况的有向图。构流程和指令执行情况的有向图。 历历史史悠悠久久、使使用用广广泛泛、直直观观描描绘绘控控制制流流程、便于初学者掌握。程、便于初学者掌握。ASP检索程序流程图:检索程序流程图:开 始加载Include文件定义记数变量、作物变量创建数据库链接对象、记录集对象打开数据库用客户提交的值对作物变量赋值SQL查询语句赋值通过记录集对象打开SQL语句设定的记录记录集末端?记数变量加1,输出记录字段值及图像转跳下一记录关闭数据库链接对象、记录集对象,并释放资源输出记录数和提示结 束YN2)程程序序流流程程图图中中用用箭箭头头代代表表控控制制流流,因因此此程程序序员员不不受受任任何何约约束束,可可以以完完全全不不顾顾结结构程序构程序设计设计的精神,随意的精神,随意转转移控制。移控制。3)程序流程)程序流程图图不易表示数据不易表示数据结结构。构。程序流程图的程序流程图的缺点缺点:1)程程序序流流程程图图本本质质上上不不是是逐逐步步求求精精的的好好工工具具,它它诱诱使使程程序序员员过过早早地地考考虑虑程程序序的的控控制流程,而不去考虑程序的全局结构。制流程,而不去考虑程序的全局结构。6.3.2盒盒图图(N-S图图)ABC条件条件FTElseBThenACase条件条件Case1ACase2BCasenN循环条件循环条件循环条件循环条件Do-While部分部分Do-Until部分部分Aa.顺序结构顺序结构b.选择结构选择结构c.多分支结构多分支结构d.当型循环结构当型循环结构e.直到型循环结构直到型循环结构f.调用子程序调用子程序A图图6.4盒图的基本符号盒图的基本符号盒盒图图的特点有:的特点有:1)功功能能域域明明确确,可可以以从从盒盒图图上上一一眼眼就就看看出出来;来;2)不可能任意)不可能任意转转移控制;移控制;3)很容易确定局部和全程数据的作用域;)很容易确定局部和全程数据的作用域; 4)很容易表)很容易表现现嵌套关系,也可以表示模嵌套关系,也可以表示模块块的的层层次次结结构。构。FTBCDACase1E2F3G4HA:盒图例子盒图例子PAD(ProblemAnalysisDiagram)是是问题问题分析分析图图。日立公司日立公司发发明和推广(明和推广(1973)。)。6.3.3PAD图图P1P2WHILECUNTILCPPP2P1CP1P2PnX=L1L2Lndefa.顺序结构顺序结构b.当型循环结构当型循环结构c.直到型循环结构直到型循环结构d.选择结构选择结构e.多分支结构多分支结构f.语句标号语句标号g.定义定义图图6.5PAD图的基本符号图的基本符号例子:例子:P1P2UNTILC2P7P4P3Cdefa.初始的初始的PAD图图图图6.6PAD图例子图例子b.使用使用def符号细化处理框符号细化处理框P2P5P2P8C1UNTILC2P9P10P6PAD图图的的优优点:点:1)使使用用表表示示结结构构化化控控制制结结构构的的PAD符符号号所所设设计计出来的程序必然是出来的程序必然是结结构化程序;构化程序;2)PAD图图所描所描绘绘的程序的程序结结构十分清晰。构十分清晰。图图中中最最左左面面的的竖竖线线是是程程序序的的主主线线,即即第第一一层层结结构构。随随着着程程序序层层次次的的增增加加,PAD图图逐逐渐渐向向右右延延伸伸,每每增增加加一一个个层层次次,图图形形向向右右扩扩展展一一条条竖竖线线。PAD图图中中竖线竖线的的总总条数就是程序的条数就是程序的层层次数;次数;3)用用PAD图图表表现现程程序序,通通俗俗易易懂懂,程程序序从从图图中中最最左左竖竖线线上上端端的的结结点点开开始始执执行行,自自上上而而下下,从从左左向向右右顺顺序序执执行行,遍遍历历所所有有结结点;点;4)容容易易将将PAD图图转转换换成成高高级级语语言言源源程程序序,这这种种转换转换可以用可以用软软件工具自件工具自动动完成;完成;5)可可用用于于表表示示程程序序逻逻辑辑,也也可可用用于于描描绘绘数据数据结结构;构;6)PAD图图的的符符号号支支持持自自顶顶向向下下、逐逐步步求求精的方法。精的方法。判定表由四部分判定表由四部分组组成:成: 左上部列出所有左上部列出所有条件条件 左下部是所有可能做的左下部是所有可能做的动动作作 右上部表示各种右上部表示各种条件条件组组合合 右右下下部部是是和和每每种种条条件件组组合合相相对对应应的的动动作作6.3.4判定表判定表123456789国内乘客国内乘客TTTTFFFF头等舱头等舱TFTFTFTF残疾乘客残疾乘客FFTTFFTT行李重量行李重量W30TFFFFFFFF免费免费(W-30)2(W-30)3(W-30)4(W-30)6(W-30)8(W-30)126.3.5判定判定树树判定判定树树是判定表的是判定表的变变种。种。行李重量行李重量W30行李重量行李重量W30国内乘客国内乘客外国乘客外国乘客头等舱头等舱其他舱其他舱头等舱头等舱其他舱其他舱残疾乘客残疾乘客正常乘客正常乘客残疾乘客残疾乘客正常乘客正常乘客残疾乘客残疾乘客正常乘客正常乘客残疾乘客残疾乘客正常乘客正常乘客(W-30)2(W-30)4(W-30)3(W-30)6(W-30)4(W-30)8(W-30)6(W-30)12免费免费图图6.7用判定树表示计算行李费的算法用判定树表示计算行李费的算法行行李李费费算算法法PDL也称也称为伪码为伪码。如:如:ifI0then执执行行订单订单数据数据输输入模入模块块else报报告出告出错错信息信息endif6.3.6过程设计语言(过程设计语言(PDL)PDL的的优优点点:1)可以作)可以作为为注注释释直接插在源程序中直接插在源程序中间间;2)可可以以使使用用普普通通的的正正文文编编辑辑程程序序或或文文字字处处理系理系统统来完成来完成PDL的的书书写和写和编辑编辑工作;工作;3)现现在在已已经经有有一一些些自自动动处处理理程程序序可可以以自自动动地把地把PDL生成程序代生成程序代码码。PDL的缺点的缺点:不如图形工具形象直观。:不如图形工具形象直观。6.4面向数据面向数据结结构的构的设计设计方法方法1)顺顺序序结结构构ABCD图图6.8A由由B、C、D三个三个元素顺序组成元素顺序组成6.4.1Jackson图图2)选择结选择结构构ABCD图图6.9根据条件根据条件A选择选择B、C、D中的某一个中的某一个3)重复结构)重复结构AB*图图6.10A由由B出出现现N次组成次组成6.4.2改改进进的的Jackson图图ABCD图图6.11改进的改进的Jackson图图ABCDAB-AB*S(i)S(i)I(i)(a)(b)(c)(d)Jackson方法的目方法的目标标是:是: 得出得出对对程序程序处处理理过过程的程的详细详细描述。描述。6.4.3Jackson方法方法Jackson结构程序设计方法由五个步骤组成:结构程序设计方法由五个步骤组成:1)分分析析并并确确定定输输入入数数据据和和输输出出数数据据的的逻逻辑辑结结构构,并用,并用Jackson图描绘这些数据结构;图描绘这些数据结构;2)找出输入数据结构和输出数据结构中有对应)找出输入数据结构和输出数据结构中有对应关系的数据单元;关系的数据单元;3)用用三三条条规规则则从从描描绘绘数数据据结结构构的的Jackson图图导导出描出描绘绘程序程序结结构的构的Jackson图图:A为为每每对对有有对对应应关关系系的的数数据据单单元元,按按照照它它们们在在数数据据结结构构图图中中的的层层次次在在程程序序结结构构图图的的相相应层应层次画一个次画一个处处理框;理框;B根根据据输输入入数数据据结结构构中中剩剩余余的的每每个个数数据据单单元元所所处处的的层层次次,在在程程序序结结构构图图的的相相应应层层次分次分别为别为它它们们画上画上对应对应的的处处理框;理框;C根根据据输输出出数数据据结结构构中中剩剩余余的的每每个个数数据据单单元元所所处处的的层层次次,在在程程序序结结构构图图的的相相应应层层次分次分别为别为它它们们画上画上对应对应的的处处理框;理框;4)列列出出所所有有操操作作和和条条件件(包包括括分分支支条条件件和和循循环环结结束束条条件件),并并且且把把它它们们分分配配到到程程序序结结构构图图的适当位置;的适当位置;5)用)用伪码伪码表示程序。表示程序。顺顺序序结结构构:AseqBCDAend与三种基本结构对应的伪码是:与三种基本结构对应的伪码是:选择结构选择结构Aselectcond1BAorcond2CAorcond3DAend重复结构重复结构Aiteruntil(或或while)condBAend例例:一个正文文件由若干:一个正文文件由若干记录组记录组成,每个成,每个记录记录是一个字符串。是一个字符串。如:如:Record1:Howmanystagesarethereinthetraditionalsoftwaredevelopmentmodel?Record2:Afterenteringtheroom,walktothepersonsittingnearesttoyouandgreethim/herwitha“highfive”.Record3:Whatareencapsulatedintoanobject?Record4:Whatdiagramisthefollowingdiagram?Simplydescribethemeaningofit. 要求:要求:1)设计设计程序程序统计统计每个每个记录记录中空格字符的个数,中空格字符的个数,输输出数据的格式是,每出数据的格式是,每读读入一个入一个记录记录(字符(字符串)之后,另起一行打印出串)之后,另起一行打印出这这个字符串及其个字符串及其空格数;空格数;2)最后打印出文件中空格的)最后打印出文件中空格的总总个数。个数。正文文件正文文件字符串字符串*字符字符*空格空格非空格非空格输出表格输出表格表格体表格体空格总数空格总数串信息串信息*字符串字符串空格数空格数IISI(a)输入数据结构输入数据结构(b)输出数据结构输出数据结构图图6.12表示输入表示输入/输出数据结构的输出数据结构的Jackson图图分分析析输输入入、输输出出数数据据结结构构,用用Jackson图图描描绘绘,并并找找出出两两者对应的数据单元:者对应的数据单元:统计空格统计空格程序体程序体印总数印总数处理字符串处理字符串*分析字符串分析字符串印空格数印空格数印字符串印字符串分析字符分析字符*处理空格处理空格处理非空格处理非空格IIS图图6.13描绘统计空格程序结构的描绘统计空格程序结构的Jackson图图导出描绘程序结构的导出描绘程序结构的Jackson图:图:(1)停止)停止(2)打开文件)打开文件(3)关)关闭闭文件文件(4)印出字符串)印出字符串(5)印出空格数目)印出空格数目(6)印出空格)印出空格总总数数(7)sum:=sum+1(8)totalsum:=totalsum+sum(9)读读入字符串入字符串(10)sum:=0(11)totalsum:=0(12)pointer:=1(13)pointer:=pointer+1I(1)文件文件结结束束I(2)字符串字符串结结束束S(3)字符是空格字符是空格列出所有操作和条件:列出所有操作和条件:统计空格统计空格程序体程序体印总数印总数处理字符串处理字符串*分析字符串分析字符串印空格数印空格数印字符串印字符串分析字符分析字符*处理空格处理空格处理非空格处理非空格I(1)I(2)S(3)图图6.14最终分配好操作和条件的最终分配好操作和条件的Jackson图图311192610124589713136.5程序复程序复杂杂度的定量度量度的定量度量定量度量程序复定量度量程序复杂杂度的作用:度的作用:(1)可估算)可估算软软件中件中错误错误的数量及的数量及软软件开件开发发工工作量;作量;(2)度量的)度量的结结果可用来比果可用来比较较不同不同设计设计或不同或不同算法的算法的优优劣;劣;(3)程序的复)程序的复杂杂度可作度可作为为模模块规块规模的限度。模的限度。1.流流图图“退化退化”的程序流程的程序流程图图,仅仅描描绘绘程序的控程序的控制流程,不表制流程,不表现对现对数据的具体操作及循数据的具体操作及循环环、选择选择的条件。的条件。 6.5.1McCabe方法方法一个圆代表一条或多条语句;一个圆代表一条或多条语句;一个顺序结构可以合并成一个结点;一个顺序结构可以合并成一个结点;汇点也是结点;汇点也是结点;一个顺序处理框序列和一个判断框可一个顺序处理框序列和一个判断框可映射成一个结点。映射成一个结点。复合条件:复合条件:包包含含了了一一个个或或多多个个布布尔尔运运算算符符( OR、 AND、NOR等)。等)。应应把把复复合合条条件件分分解解为为简简单单条条件件,每每个个条条件件对对应应一一个结点。个结点。2.计计算算环环形复形复杂杂度的方法度的方法1)环环形复形复杂杂度度V(G)等于流)等于流图图中的区域中的区域数;数;2)环环形复形复杂杂度度V(G)EN+2,其中,其中E是流是流图图中中边边的条数,的条数,N是是结结点数;点数;3)环环形复形复杂杂度度V(G)P1,其中,其中P为为流流图图中判定中判定结结点的数目。点的数目。例:例:计计算下列程序算下列程序图图的程序复的程序复杂杂度度解:解:方法一:程序方法一:程序图图把平面分把平面分为为4个区域,程序复个区域,程序复杂杂度度V(G)4;方法二:方法二:边边的条数的条数E11,结结点数点数N9,程序,程序复复杂杂度度V(G)EN24;方法三:判定方法三:判定结结点点为为1、2、4点,数目点,数目为为P3个,所以个,所以V(G)P14。3.环环形复形复杂杂度的用途度的用途对测试难对测试难度的一种定量度量,也能度的一种定量度量,也能对软对软件最件最终终的可靠性的可靠性给给出某种出某种预测预测。实实践表明,模践表明,模块规块规模以模以V(G)10为为宜。宜。根根据据程程序序中中运运算算符符和和操操作作数数的的总总数数来来度度量量程程序复序复杂杂度。度。N=N1+N2其中:其中:N定定义为义为程序程序长长度度;N1为为程序中运算符出程序中运算符出现现的的总总次数;次数;N2为为操作数出操作数出现现的的总总次数。次数。6.5.2Halstead方法方法Halstead给给出出预测预测程序程序长长度的公式度的公式为为:H=n1log2n1+n2log2n2其中:其中:H定定义为义为程序程序预测长预测长度;度;n1为为程程序序中中使使用用的的不不同同运运算算符符(包括关(包括关键键字)的个数;字)的个数;n2为为程程序序中中使使用用的的不不同同操操作作数数(变变量和常量)的个数。量和常量)的个数。多次多次验证验证都表明,程序的都表明,程序的预测长预测长度度H和和实际实际程序程序长长度度N非常接近。非常接近。Halstead还还给给出出了了预预测测程程序序中中包包含含错错误误的的个数的公式:个数的公式:E=Nlog2(n1+n2)/3000第第6章小章小结结详细设计说详细设计说明明书书着重描述每一模着重描述每一模块块是怎是怎样实现样实现的,包括的,包括实现实现算法、算法、逻辑逻辑流程等。流程等。第7章:实现 编码编码和和测试统测试统称称为实现为实现。编码编码:把:把软软件件设计结设计结果翻果翻译译成程序。成程序。测试测试:检测检测程序并改正程序并改正错误错误的的过过程。程。 计计算算机机程程序序设设计计语语言言基基本本上上可可以以分分为为两两大大类类:1.汇编语汇编语言言;2.高高级语级语言。言。 7.1编码编码7.1.1选择程序设计语言选择程序设计语言从从应应用特点看,高用特点看,高级语级语言可分言可分为为:1)基基础语础语言言如如BASIC、FORTRAN、COBOL、ALGOL等等2)结结构化构化语语言言如如ALGOL、PL/1、PASCAL、C、ADA等等3)专专用用语语言言如如APL、BLISS、FORTH、LISP、PROLOG等等选择选择一种一种编编程程语语言的理言的理论标论标准:准:1)有理想的模)有理想的模块块化机制;化机制;2)可)可读读性好的控制性好的控制结结构和数据构和数据结结构;构;3)便于)便于调试调试和提高和提高软软件可靠性;件可靠性;4)编译编译程序程序发现发现程序程序错误错误的能力的能力强强;5)有良好的独立)有良好的独立编译编译机制。机制。 选选择择语语言言时时除除了了考考虑虑理理论论上上的的标标准准,还还必必须须同同时时考考虑虑主要的主要的实实用用标标准:准:(1)系统用户要求)系统用户要求(2)可以使用的编译程序)可以使用的编译程序(3)可以得到的软件工具)可以得到的软件工具(4)工程规模)工程规模(5)程序员知识)程序员知识(6)软件可移植性要求)软件可移植性要求(7)软件的应用领域)软件的应用领域1.程序内部的文档程序内部的文档选选取取含含义义鲜鲜明明的的名名字字,如如果果使使用用缩缩写写,缩缩写写规则规则要一致,并要一致,并给给每个名字加注每个名字加注释释;通通常常在在每每个个模模块块开开始始处处要要有有一一段段注注释释,描描述模述模块块功能、算法、接口特点等;功能、算法、接口特点等;程程序序清清单单布布局局应应利利用用适适当当的的阶阶梯梯形形式式,使使程序的程序的层层次次结结构清晰明构清晰明显显。7.1.2写程序的风格写程序的风格2.数据数据说说明明数据数据说说明的次序明的次序应该标应该标准化,如按数据准化,如按数据类类型确定型确定说说明的次序;明的次序;多个多个变变量名在一个量名在一个语语句中句中说说明明时时,应该应该按按字母字母顺顺序排列序排列这这些些变变量;量;如果如果设计时设计时使用了复使用了复杂杂的数据的数据结结构,构,应该应该用注用注释说释说明明实现该实现该数据数据结结构的方法和特点。构的方法和特点。3.语语句构造句构造4.输输入入/输输出出5.效率效率A程序运行程序运行时间时间B存存储储器效率器效率C输输入入/输输出效率出效率 程序程序设计设计工具工具实实例:例:VisualC运用运用VisualC+开发工具需要掌握:开发工具需要掌握:C语言特点、语法;语言特点、语法;Windows编程基础;编程基础;MFC相关知识;相关知识;VisualC集成开发工具环境的使用;集成开发工具环境的使用;一、一、C语语言特点、言特点、语语法:法:C+语语言是在言是在C语语言的基言的基础础是是扩扩展而成的,展而成的,两种两种语语言的基本言的基本语语法和法和语义语义是相同。是相同。C+中加入了面向中加入了面向对对象程序象程序设计设计(OOP)的特征:)的特征:封装性封装性:通:通过过“类类”把属性和函数把属性和函数组组合在一起。合在一起。继继承性承性:派生:派生类类可从先前定可从先前定义义的基的基类类中中继继承函承函数和属性。数和属性。多多态态性性:一个函数名,由不同的:一个函数名,由不同的对对象解象解释执释执行,行,可得到不同的可得到不同的执执行效果。行效果。二、二、Windows编编程基程基础础:API:API是是Windows应应用程序用程序编编程接口。程接口。API是一个程序内(或一是一个程序内(或一组组相关程序内)的一相关程序内)的一组组函数函数调调用,程序用,程序员员用它用它创创建其他程序。建其他程序。程序程序员员不必知道函数内部,只要知道不必知道函数内部,只要知道API的函的函数原型及返回数原型及返回值值。API的函数原型及返回的函数原型及返回值值形式形式可由相关的技可由相关的技术规术规范范资资料料获获得。得。现现在的在的Win32API中,核心部分依靠三个中,核心部分依靠三个主要主要组组件提供件提供Windows的大部分函数,的大部分函数,这这三个三个组组件分件分别别是:是:USER32.DLL;GDI32.DLL;KERNEL32.DLL。Windows消息机制消息机制:1)基于消息的事件)基于消息的事件驱动驱动消息可以是由硬件消息可以是由硬件发发来的(存于系来的(存于系统队统队列)列),也可以由也可以由Windows系系统统和和应应用程序用程序发发来(存于程来(存于程序序队队列中);列中);每一个每一个Windows程序在不停的捕捉各种消息程序在不停的捕捉各种消息,并并进进行行处处理;理;每个窗口都必每个窗口都必须须有一个窗口函数,来有一个窗口函数,来负责负责消消息的判断与息的判断与处处理。理。2)窗口函数)窗口函数对对消息的消息的处处理理窗口函数是一个回窗口函数是一个回调调函数,可以函数,可以处处理收到理收到的消息,在程序中不需要用的消息,在程序中不需要用户显户显式式调调用。用。该该窗口函数的形式通常窗口函数的形式通常为为:WndProc(),每每个窗口个窗口类类必必须须在初始化在初始化时时指定一个窗口函数。指定一个窗口函数。三、三、MFC:MFC,即,即Microsoft基本基本类类,该类库该类库封装了封装了SDK(软软件开件开发发工具包)工具包)结结构、功能及构、功能及应应用程序用程序框架内部技框架内部技术术。它提供了它提供了许许多可以重用的多可以重用的类类,使得,使得Windows程程序序员员避免了避免了许许多重复性工作。多重复性工作。四、四、VisualC集成开集成开发发工具工具环环境境1)开)开发发工具的使用;工具的使用;2)掌握)掌握Win32程序开程序开发发流程流程;一个一个win32程序由两大程序由两大块组块组成:成:程序代程序代码码;用用户户接口接口资资源源。用用户户接口接口资资源源:菜:菜单单,对话对话框,框,图标图标,光,光标标等;等;这这些些资资源的源的实际实际内容(二内容(二进进制代制代码码)由各种工)由各种工具具产产生,并以各种生,并以各种扩扩展名的文件存在;展名的文件存在;资资源描述文件(源描述文件(*.rc)中)中对对用用户户接口接口资资源源进进行描述;行描述;RC编辑编辑器(器(RC.exe)根据)根据该资该资源描述文件源描述文件(*.rc)将所有用)将所有用户户接口接口资资源集中构造一个源集中构造一个*.RES文件;文件;*.RES文件与程序代文件与程序代码结码结合起来,构成一个合起来,构成一个Win32程序。程序。关于函数关于函数库库和和头头文件文件:动态链动态链接接库库:应应用程序用程序调调用的用的API函数在函数在“执执行期行期间间”才才链链接上的函数接上的函数库库,扩扩展名可以是展名可以是.dll,也可以是,也可以是.exe、.fon、.mod、.drv、.ocx等。等。静静态连态连接接库库:.lib头头文件文件:如:如windows.h,它包含操作系,它包含操作系统统本身本身的三大模的三大模块块gdi32.dll、user32.dll和和kernel32.dll中的所有中的所有API函数。函数。有关有关测试测试的一些的一些规则规则:(1)测测试试是是为为了了发发现现程程序序中中的的错错误误而而执执行行程序的程序的过过程;程;(2)好好的的测测试试方方案案是是极极可可能能发发现现迄迄今今为为止止尚未尚未发现发现的的错误错误的的测试测试方案;方案;(3)成功的)成功的测试测试是是发现发现了至今了至今为为止尚未止尚未发发现现的的错误错误的的测试测试。7.2.1软件测试的目标软件测试的目标7.2软软件件测试测试基基础础7.2.2软软件件测试测试准准则则1)所有测试都应该能追溯到用户需求;)所有测试都应该能追溯到用户需求;2)应该远在测试前就制定出测试计划;)应该远在测试前就制定出测试计划;3)把)把Pareto原理应用到软件测试中;原理应用到软件测试中;4)应应该该从从“小小规规模模”测测试试开开始始,并并逐逐步步进进行行“大大规模规模”测试;测试;5)穷举测试穷举测试是不可能的;是不可能的;穷尽测试穷尽测试穷尽测试穷尽测试:包含所有可能情况的测试称为穷尽测试。:包含所有可能情况的测试称为穷尽测试。程序程序main()()a2a1a3b输入输入输出输出a1、a2、a3:Integer16bits输入数据的穷输入数据的穷尽测试组合:尽测试组合:216216216248310146)为为了了达达到到最最佳佳测测试试效效果果,应应该该由由独独立立的的第第三三方从事测试工作。方从事测试工作。黑盒黑盒测试测试:如如果果已已经经知知道道软软件件应应该该具具有有的的功功能能,可可以以通通过过测测试试来来检检验验是是否否每每个个功功能能都都能能正正常常使使用用,这这种种测测试试称称黑黑盒盒测测试试。也也称称功功能能测试测试。7.2.3测试方法测试方法白盒白盒测试测试:也称也称结结构构测试测试。如如果果知知道道软软件件内内部部工工作作过过程程,可可以以通通过过测测试试来来检检验验软软件件内内部部动动作作是是否否按按照照规规格格说说明明书书的的规规定正常定正常进进行,行,这这种种测试测试称称为为白盒白盒测试测试。1.模模块测试块测试模模块块测测试试又又称称单单元元测测试试,它它把把每每个个模模块块作作为单为单独的独的实实体来体来测试测试。2.子系子系统测试统测试子子系系统统测测试试是是把把经经过过单单元元测测试试的的模模块块放放在一起形成一个子系在一起形成一个子系统统来来测试测试。7.2.4软件测试的步骤软件测试的步骤3.系系统测试统测试系系统统测测试试是是把把经经过过测测试试的的子子系系统统装装配配成成一一个个完完整的系整的系统统来来测试测试。4.验验收收测试测试验验收收测测试试把把软软件件系系统统作作为为单单一一的的实实体体进进行行测测试试(利用用(利用用户户的的实际实际数据数据测试测试)。)。5.平行运行平行运行 平平行行运运行行是是同同时时运运行行新新开开发发出出来来的的系系统统和和将将被被它它取取代代的的旧旧系系统统,以以便便比比较较新新旧旧两两个个系系统统的的处处理理结结果。果。7.2.5测试阶测试阶段的信息流段的信息流测试测试评价评价调试调试可靠性可靠性模型模型软件配置软件配置测试配置测试配置测试测试结果结果预期结果预期结果错误错误错误率数据错误率数据正确正确可靠性预测可靠性预测图图7.1测试阶段的信息流测试阶段的信息流7.3单单元元测试测试单单元元测试测试的一般方法是:的一般方法是: 首先通首先通过编译过编译系系统检查统检查并改正程序中所有的并改正程序中所有的语语法法错误错误; 然后用然后用详细设计详细设计模模块说块说明明为为指南,指南,对对重要的控重要的控制路径制路径进进行行测试测试,以便,以便发现发现模模块块内部的内部的错误错误。 通常,通常,单单元元测试测试使用白盒使用白盒测试测试方法。方法。1)模模块块接口接口应应该该对对穿穿过过模模块块接接口口的的数数据据流流进进行行检检测测,以保以保证证正确的正确的输输入和入和输输出。出。2)局部数据局部数据结结构构这这是是错错误误的的主主要要来来源源,应应该该设设计计相相应应的的测测试试用例,以便用例,以便发现发现数据数据结结构方面的构方面的错误错误。7.3.1测试重点测试重点3)重要的重要的执执行路径行路径由由于于不不可可能能进进行行穷穷尽尽测测试试,因因此此选选择择测测试试路径是非常关路径是非常关键键的。的。4)出出错处错处理通路理通路5)边边界条件界条件审查审查小小组组: 1)组长组长;2)程序的)程序的设计设计者;者;3)程序的)程序的编编写者;写者;4)程序的)程序的测试测试者。者。7.3.2代码审查代码审查7.3.3计计算机算机测试测试由由于于软软件件模模块块不不是是一一个个独独立立的的系系统统,不不能能独独立立运运行行,要要依依靠靠其其他他模模块块调调用用,或或需需要要调调用用其其他模他模块块。因因此此,必必须须要要为为测测试试的的单单元元开开发发驱驱动动程程序序或或存根程序存根程序。1)驱动驱动程序程序相相当当于于一一个个“主主程程序序”,用用来来把把测测试试数数据据传传送送给给被被测试测试的模的模块块,并打印有关,并打印有关结结果。果。2)存根程序存根程序 用来代替被用来代替被测试测试模模块块所所调调用的模用的模块块,相当于,相当于“虚虚拟拟子程序子程序”。如,如,测试测试B模模块块,设计设计了了A模模块块和和C模模块块。由由A负责传负责传送送测试测试数据,由数据,由C负责负责模模拟拟被被B调调用用的模的模块块。C模模块块可能没有,可能没有,这这取决于取决于B有没有有没有调调用用其他程序。其他程序。A、C都是一次性程序,只在都是一次性程序,只在测试时临时测试时临时使用,使用,应应尽量尽量设计设计得得简单简单一些,以一些,以节节省省费费用和用和时间时间。BAC被测试模块被测试模块驱动模块驱动模块存根模块存根模块例:例:正文加工正文加工系统系统输入输入1.0输出输出2.0编辑编辑3.0加标题加标题4.0存储存储5.0检索检索6.0编目录编目录7.0格式化格式化8.0添加添加3.1删除删除3.2插入插入3.3修改修改3.4合并合并3.5列表列表3.6图图7.2正文加工系统(正文加工系统(H图)图)TESTDRIVER编辑编辑3.0TESTSTUB对对“编辑编辑”功能的测试:功能的测试:7.4集成集成测试测试集集成成测测试试是是组组装装软软件件的的系系统统化化技技术术,它它将将经过单经过单元元测试测试的模的模块联块联系在一起系在一起进进行行测试测试。由模由模块组块组装成程序装成程序时时有两种方法:有两种方法:1)非非渐渐增式增式测试测试方法方法先先分分别别测测试试每每个个模模块块,再再把把所所有有模模块块按按设设计计要求放在一起要求放在一起结结合成所要的程序。合成所要的程序。2)渐渐增式增式测试测试方法方法 每次增加一个待每次增加一个待测试测试模模块块,把它同已,把它同已经经测试测试好的那些模好的那些模块结块结合起来合起来进进行行测试测试,反复,反复进进行直到完成所有模行直到完成所有模块测试块测试的方法。的方法。 使用使用渐渐增式增式测试测试方法把模方法把模块结块结合到合到软软件系件系统统中去中去时时,有,有自自顶顶向下向下和和自底向上自底向上两种集成方法。两种集成方法。 自自顶顶向向下下集集成成是是一一种种递递增增的的装装配配软软件件结结构构的的方方法法,这这种种方方法法应应用用非非常常广广泛泛。它它需需要要存存根根程程序序,但是不需要驱动程序。但是不需要驱动程序。7.4.1自顶向下集成自顶向下集成这这种种方方法法的的思思想想是是:从从主主控控模模块块(主主程程序序)开开始始,沿沿软软件件的的控控制制层层次次向向下下移移动动,逐逐渐渐把把各各个个模模块结块结合起来。合起来。 在自在自顶顶向下向下结结合方法中,如何将所有模合方法中,如何将所有模块组块组装装到到软软件件结结构中,又有两种方法:构中,又有两种方法:1)深度深度优优先策略先策略先先组组装装软软件件结结构的一条构的一条主主控制通路控制通路上的所有模上的所有模块块,选选择择哪条主控制通路,具有哪条主控制通路,具有较较大的任意性。大的任意性。如如图图,如果,如果选选取左通路,取左通路,就先把模就先把模块块M1、M2、M5结结合起来合起来测试测试,然后,然后结结合模合模块块M8、M6,再构造中央和,再构造中央和右右侧侧的控制通路。的控制通路。M1M2M3M4M6M5M7M8图图7.3自顶向下结合实例自顶向下结合实例2)宽宽度度优优先策略先策略沿着沿着软软件件结结构水平地构水平地移移动动,把,把处处于同一个于同一个层层次次的所有模的所有模块组块组装起来。装起来。如如图图,首先,首先结结合合M2、M3、M4和主控模和主控模块块M1,然后,然后结结合下一个控制合下一个控制层层次中的模次中的模块块M5、M6和和M7,最后,最后结结合模合模块块M8。M1M2M3M4M6M5M7M8图图7.3自顶向下结合实例自顶向下结合实例自自顶顶向向下下集集成成方方法法的基本的基本过过程如下:程如下:1)对对主主控控模模块块进进行行测测试试,测测试试时时用用存存根根程程序序代代替替所所有有直直接接被被主主控控模模块块调调用用的的模模块块;M1M2M3M4M6M5M7M8图图7.3自顶向下结合实例自顶向下结合实例M1M2M3M4M6M5M7M8图图7.3自顶向下结合实例自顶向下结合实例2)根根据据选选定定的的结结合合策策略略(深深度度优优先先或或宽宽度度优优先先),每每次次用用一一个个实实际际模模块块代代替替一一个个存存根根程程序序(新新结结合合的的模模块块往往往往又又需需要要新新的的存存根程序);根程序);3)每每结结合合一一个个模模块块,就就测试测试一个;一个;4)为为保保证证不不引引入入新新的的错错误误,需需要要进进行行回回归归测测试试,即即重重复复以以前前进进行行过过的的部部分分或或全全部部测试测试;5)重复回到第二步,)重复回到第二步,直到构成整个直到构成整个软软件件结结构。构。M1M2M3M4M6M5M7M8图图7.3自顶向下结合实例自顶向下结合实例 自自底底向向上上集集成成方方法法是是从从软软件件结结构构最最底底层层模模块块开开始始进进行行组组装装和和测测试试,它它与与自自顶顶向向下下结结合合方方法法相相反反,需需要要驱驱动动程程序序,不不需需要要存根程序。存根程序。7.4.2自底向上集成自底向上集成自自底底向向上上集集成成方方法的基本法的基本过过程如下:程如下:1)把把底底层层模模块块组组合合成成实实现现一一个个特特定定软软件件子子功功能能的的族族,如如图图族族1、2、3。McMaMbD2D1D3族族1族族2族族3图图7.4自底向上实例自底向上实例2)为为每个模每个模块设块设计计一个一个驱动驱动程序,程序,作作为测试为测试的控制程的控制程序,以序,以协调测试协调测试用用例的例的输输入和入和输输出。出。图图中中D1、D2、D3分分别别是族是族1、2、3的的驱动驱动程序;程序;McMaMbD2D1D3族族1族族2族族3图图7.4自底向上实例自底向上实例3)对对模模块进块进行行测试测试;4)用用实实际际模模块块代代替替驱驱动动程程序序组组装装成成新新的的模模块块族族,在在新新加加入入的的实实际际模模块块上上面面加加上上新新的的驱动驱动程序程序进进行行测试测试;McMaMbD2D1D3族族1族族2族族3图图7.4自底向上实例自底向上实例5)重复第二到第)重复第二到第四步,逐四步,逐渐渐向上加向上加入入实际实际模模块块,直至,直至构造出整个构造出整个软软件件结结构。构。McMaMbD2D1D3族族1族族2族族3图图7.4自底向上实例自底向上实例7.4.3不同集成测试策略的比较不同集成测试策略的比较1.改改进进的自的自顶顶向下向下测试测试方法;方法;2.混合法。混合法。M1M2M3M4M5M67.4.4回回归测试归测试指重新指重新执执行已行已经经做做过过的部分的部分测试测试。回回归测试归测试用于保用于保证证由于由于调试调试或其他原因引起或其他原因引起的程序的程序变变化,不会化,不会导导致致额额外外错误错误的的测试测试活活动动。7.5确认测试(验收测试)确认测试(验收测试)也也称称为为验验收收测测试试,目目标标是是验验证证软软件件的的有有效性。效性。 如如果果软软件件的的功功能能和和性性能能符符合合用用户户的的期期待待,软软件就是有效的。件就是有效的。 软软件件规规格格说说明明书书是是进进行确行确认测试认测试的基的基础础。7.5.1确认测试的范围确认测试的范围确确认测试认测试的主要特点及内容有:的主要特点及内容有:1)某某些些已已经经测测试试过过的的纯纯粹粹技技术术性性的的测测试试项项可可能能不不需需要要再再次次测测试试,而而对对用用户户特特别别感感兴兴趣趣的功能或性能,可能需要增加一些的功能或性能,可能需要增加一些测试测试;2)通通常常确确认认测测试试主主要要使使用用实实际际生生产产中中的的数数据来据来进进行行测试测试;3)确)确认测试认测试必必须须有用有用户户的的积积极参与,甚至极参与,甚至以用以用户为户为主,可能需要主,可能需要进进行一些与用行一些与用户户使用使用步步骤骤有关的有关的测试测试。确确认测试认测试一般使用黑盒一般使用黑盒测试测试法。法。7.5.2软件配置复查软件配置复查 目目的的:保保证证软软件件配配置置的的所所有有成成分分都都齐齐全全,质质量量符符合合要要求求,文文档档与与程程序序完完全全一一致致,而而且且已已经编好目录。经编好目录。7.5.3Alpha和和Beta测试测试AlphaAlpha测测测测试试试试:用用户户在在开开发发者者的的场场所所进进行行测测试试,并并且且在在开开发发者者的的指指导导下下进进行行,测测试试在在受受控控环环境境中进行,开发者记录发现的错误和问题;中进行,开发者记录发现的错误和问题;BetaBeta测测测测试试试试:用用户户在在一一个个或或多多个个客客户户场场所所进进行行测测试试,不不受受开开发发者者控控制制,测测试试者者记记录录发发现现的的问问题题和和错误,定期将问题报告发送给开发者。错误,定期将问题报告发送给开发者。7.6白盒白盒测试测试技技术术1.语语句覆盖句覆盖 语语句覆盖是指:句覆盖是指:设计设计的的测试测试用例能使程用例能使程序中每条序中每条语语句至少句至少执执行一次。行一次。7.6.1逻辑覆盖逻辑覆盖例:一个被测试模块的源程序为例:一个被测试模块的源程序为(PASCAL语言)语言):PROCEDUREEXAMPLE(A,B:REAL;VARX:REAL);BEGINIF(A1)AND(B=0)THENX:=X/A;IF(A=2)OR(X1)THENX:=X+1END入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图选取测试用例:选取测试用例:A=2,B=0,X=4A=2,B=0,X=4,程序执行,程序执行路径为:路径为:sacbed。2.判定覆盖判定覆盖判判定定覆覆盖盖是是指指:选选取取足足够够的的测测试试用用例例,使使得得程程序序中中每每个个判判断断的的可可能能结结果果都都至至少少执执行行一一次次,也也就就是是说说使使程程序序的的每每个个判判断断分分支支至至少少通通过一次。过一次。入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图对于上例,选取如下测试用例:对于上例,选取如下测试用例:I.A=3A=3,B=0B=0,X=3X=3(覆盖覆盖sacbd)II.A=2A=2,B=1B=1,X=1X=1(覆盖覆盖sabed)3.条件覆盖条件覆盖条条件件覆覆盖盖是是指指:选选择择足足够够的的测测试试用用例例,使使得得程程序序中中每每个个判判定定表表达达式式的的每每个个条条件件都都取取到到各各种种可能的结果。可能的结果。入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图上上例例中中,有有两两个个判判定定表表达达式式,每每个个表表达达式式有有两两个个条条件件,为为了了做做到到条条件件覆覆盖盖,应应该该选选取取测测试试数数据据使使得得a点点出出现现如如下下结果:结果:A1A1, A1A1, B=0B=0,B0B0在在b点出现如下结果:点出现如下结果:A=2A=2, A2A2, X1X1,X1X1选取如下测试用例:选取如下测试用例:I.A=2A=2,B=0B=0,X=4X=4(满满足足A1,B=0,A=2和和 X1, 执执 行行 路路 径径 为为sacbed)II.A=1A=1,B=1B=1,X=1X=1(满满足足A1,B0,A2和和 X1, 执执 行行 路路 径径 为为sabd)入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图条条件件覆覆盖盖通通常常比比判判定定覆覆盖盖强强,但但是是条条件件覆覆盖盖不不一一定定包包含含判判定定覆覆盖。盖。入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图如:如:I A=2A=2, B=0B=0, X=1X=1 ( 满满 足足 A1, B=0,A=2和和X1,执执行行路路径径为为sacbed)II A=1A=1, B=1B=1, X=2X=2( 满满 足足 A1, B0,A2和和X1,执执行行路路径径为为sabed)只只满满足足条条件件覆覆盖盖,并并不满足判定覆盖。不满足判定覆盖。入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图4.判定判定判定判定/ /条件覆盖条件覆盖条件覆盖条件覆盖判判定定/条条件件覆覆盖盖是是指指:选选取取足足够够的的测测试试用用例例使得同时满足判定覆盖和条件覆盖的要求。使得同时满足判定覆盖和条件覆盖的要求。对对于于上上例例,选选取取如如下测试用例:下测试用例:I A=2, B=0, X=4(满满足足A1,B=0,A=2和和X1,执执行行路路径为径为sacbed)II A=1, B=1, X=1( 满满 足足 A1, B0,A2和和X1,执执行行路路径为径为sabd)入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图5.条件组合覆盖条件组合覆盖条条件件组组合合覆覆盖盖指指:选选取取足足够够的的测测试试用用例例,使使得得每每个个判判定定表表达达式式中中条条件件的的各各种种可可能能的的组组合合都至少出现一次。都至少出现一次。对对于于上上例例,共共有有8种可能的条件组合:种可能的条件组合:1)A1,B=02)A1,B03)A1,B=04)A1,B05)A=2,X16)A=2,X17)A2,X18)A2,X1入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图选取如下测试用例:选取如下测试用例:IA=2A=2,B=0B=0,X=4X=4(满满足足1、5组组合合:A1, B=0, A=2,X1, 执执 行行 路路 径径sacbed)II A=2A=2, B=1B=1,X=1X=1(满满足足2、6组组合合:A1, B0, A=2,X1, 执执 行行 路路 径径sabed)入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图IIIA=1A=1,B=0B=0,X=2X=2(满满足足3、7组组合合:A1, B=0, A2,X1, 执执 行行 路路 径径sabed)IVA=1A=1,B=1B=1,X=1X=1(满满足足4、8组组合合:A1, B0, A2,X1,执行路径执行路径sabd)入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图如如果果从从对对程程序序路路径径的的覆覆盖盖程程度度分分析析,可可以以提提出出下面一些下面一些逻辑逻辑覆盖覆盖标标准:准:6.点覆盖点覆盖点覆盖是指:点覆盖是指:选选取足取足够够多的多的测试测试用例,使得程用例,使得程序序执执行路径至少行路径至少经过经过程序程序图图中每个中每个节节点一次。点一次。sabdce1234567图图7.5对应的程序图对应的程序图7.边边覆盖覆盖边边覆盖是指:覆盖是指:选选取足取足够够多的多的测试测试用例,使得用例,使得程序程序执执行路径至少行路径至少经过经过程序程序图图中每条中每条边边一次。一次。sabdce1234567图图7.5对应的程序图对应的程序图选取如下测试用例:选取如下测试用例:IA=3A=3,B=0B=0,X=3X=3(执行路径执行路径1453)IIA=2A=2,B=1B=1,X=1X=1(执行路径执行路径1267)8.路径覆盖路径覆盖路路径径覆覆盖盖是是指指:选选取取足足够够多多的的测测试试用用例例,使得程序的每条可能路径都至少使得程序的每条可能路径都至少执执行一次。行一次。sabdce1234567图图7.5对应的程序图对应的程序图选取如下测试用例:选取如下测试用例:IA=1A=1,B=1B=1,X=1X=1(执行路径执行路径123)IIA=1A=1,B=1B=1,X=2X=2(执行路径执行路径1267)IIIA=3A=3,B=0B=0,X=1X=1(执行路径执行路径1453)IVA=2A=2,B=0B=0,X=4X=4(执行路径执行路径14567)1)A=3,B=0,X=12)A=2,B=0,X=43)A=2,B=1,X=14)A=1,B=0,X=25)A=1,B=1,X=1更强的测试数据更强的测试数据更强的测试数据更强的测试数据:满足路径覆盖和条件组合覆盖:满足路径覆盖和条件组合覆盖2)5)满满足足条条件件组组合合覆覆盖盖,执执 行行 路路 径径 分分 别别 是是 : sacbed、sabed、sabed、sabd入口入口返回返回A1andB=0A=2orX1X=X/AX=X+1sabdceTTFF1234567图图7.5被测试模块的流程图被测试模块的流程图路径:路径:sacbd7.6.2控制控制结结构构测试测试(自学自学)等价等价类类划分是一种黑盒划分是一种黑盒测试测试技技术术。穷穷尽尽的的黑黑盒盒测测试试需需要要使使用用所所有有可可能能的的输输入入数数据据(有有效效的的和和无无效效的的)进进行行测测试试,通通常常是不是不现实现实的。因此的。因此产产生了等价生了等价类类划分。划分。 7.7.1等价划分(等价类划分)等价划分(等价类划分)7.7黑盒黑盒测试测试技技术术等价等价类类划分的思想划分的思想: 如果将所有可能的如果将所有可能的输输入数据(有效的和无入数据(有效的和无效的)划分效的)划分为为若干个等价若干个等价类类,就可以假定用每,就可以假定用每一个等价一个等价类类中的代表中的代表值值作作为测试为测试用例来用例来进进行行测测试时试时,等价于用,等价于用该类该类中所有中所有值进值进行了行了测试测试。用用等等价价类类划划分分设设计计测测试试用用例例时时,主主要要分分两两步步:划分等价划分等价类类、确定、确定测试测试用例。用例。1)等价等价类类划分划分划分等价划分等价类类需要需要经验经验,以下,以下给给出一些出一些规则规则:A如果某输入条件规定了输入的范围,那么可以划如果某输入条件规定了输入的范围,那么可以划分为一个有效的等价类和两个无效的等价类。分为一个有效的等价类和两个无效的等价类。如如X的值的输入范围是的值的输入范围是1,99,那么测试,那么测试X时,时,可以这样划分:有效等价类为可以这样划分:有效等价类为1,99,无效等,无效等价类为(价类为(-,1)和()和(99,+)。)。B如果某个如果某个输输入条件入条件规规定了一定了一组组可能的可能的值值,且程序,且程序可以可以对对不同的不同的值值作出不同的作出不同的处处理,那么可以理,那么可以为为每种每种值值确定一个有效的等价确定一个有效的等价类类,同,同时还时还有一个无效等价有一个无效等价类类。如,如,“职称职称”这个量可能的值是:教授、副教这个量可能的值是:教授、副教授、讲师、助教。那么可以这样划分:四类有效授、讲师、助教。那么可以这样划分:四类有效等价类分别为教授、副教授、讲师、助教,无效等价类分别为教授、副教授、讲师、助教,无效等价类为四种职称以外的所有值。等价类为四种职称以外的所有值。2)确定确定测试测试用例用例A给给每个等价每个等价类规类规定一个唯一的定一个唯一的编编号;号;B设设计计一一个个新新的的测测试试用用例例,使使其其尽尽可可能能多多地地覆覆盖盖未未被被覆覆盖盖过过的的有有效效等等价价类类。重重复复此此步步,直至所有有效等价直至所有有效等价类类被覆盖;被覆盖;C设设计计一一个个新新的的测测试试用用例例,使使其其覆覆盖盖而而且且只只覆覆盖盖一一个个尚尚未未被被覆覆盖盖的的无无效效等等价价类类。重重复复此步,直到所有无效等价此步,直到所有无效等价类类被覆盖。被覆盖。通通常常程程序序发发现现一一类类错错误误后后,就就报报出出错错信信息息,不不再再检检查查其其它它类类错错误误,所所以以设设计计测测试试用用例例时时,一次只覆盖一个无效等价一次只覆盖一个无效等价类类。实例:一个把数字串变成整数的函数。实例:一个把数字串变成整数的函数。计算机字长:计算机字长:16bits,函数由函数由PASCAL语言编写。语言编写。functionstrtoint(dstr:shortstr):integertypeshortstr=array1.6ofchar;/字符串字符串6位位/(16位字长能表示的整型数范围是位字长能表示的整型数范围是-215,215-1,即即-32768,32767 )有效输入的等价类有:有效输入的等价类有:(1)16个数字字符组成的数字串(最高位数字不为零);个数字字符组成的数字串(最高位数字不为零);如:如:0,999999(2)最高位数字是零的数字串;)最高位数字是零的数字串;如:如:“012345”(3)最高位数字左邻是负号的数字串;)最高位数字左邻是负号的数字串;如:如:“12345”无效无效输输入的等价入的等价类类有:有:(4)空字符串(全是空格);如)空字符串(全是空格);如“”;(5)左部填充的字符既不是零,又不是空格;)左部填充的字符既不是零,又不是空格;如:如:“A12345”(6)最高位数字右面由数字和空格混合而成;)最高位数字右面由数字和空格混合而成;如:如:“12345”(7)最高位数字右面由数字和其他字符混合而成;)最高位数字右面由数字和其他字符混合而成;如:如:“12A345”(8)负负号与最高位数字之号与最高位数字之间间有空格;有空格;如:如:“-1234”合法合法输输出的等价出的等价类类有:有:(9)在)在计计算机能表示的最小算机能表示的最小负负整数和零之整数和零之间间的的负负整数;整数;如:如:-32768,0)(10)零;)零;(11)在零和)在零和计计算机能表示的最大正整数算机能表示的最大正整数之之间间的正整数;的正整数;如:如:(0,32767非法非法输输出的等价出的等价类类有:有:(12)比)比计计算机能表示的最小算机能表示的最小负负整数整数还还小的小的负负整数;整数;如:如:“32769”(13)比)比计计算机能表示的最大正整数算机能表示的最大正整数还还大的正大的正整数;整数;如:如:“123456”根据划分的等价根据划分的等价类类,设计设计出出测试测试方案方案11个:个:(1)16个数字个数字组组成的字符串;成的字符串;输输入:入:1预预期的期的输输出:出:1(2)最高位数字是零的数字串;)最高位数字是零的数字串;输输入:入:000001预预期的期的输输出:出:1(3)负负号与最高位数字相号与最高位数字相邻邻;输输入:入:00001预预期的期的输输出:出:1(4)最高位数字是零的特例;)最高位数字是零的特例;输输入:入:000000预预期的期的输输出:出:0(5)太小的)太小的负负整数;整数;输输入:入:47561预预期的期的输输出:出:错误错误无效无效输输入入(6)太大的正整数;)太大的正整数;输输入:入:132767预预期的期的输输出:出:错误错误无效无效输输入入(7)空字符串;)空字符串;输输入:入:预预期的期的输输出:出:错误错误没有数字没有数字(8)字符串左部字符既不是零又不是空格;)字符串左部字符既不是零又不是空格;输输入:入:AAAAA1预预期的期的输输出:出:错误错误非数字非数字(9)最高位数字后面有空格;)最高位数字后面有空格;输输入:入:12预预期的期的输输出:出:错误错误无效无效输输入入(10)最高位数字后面有其他字符;)最高位数字后面有其他字符;输输入:入:1AAA23预预期的期的输输出:出:错误错误无效无效输输入入(11)负负号和最高位数字之号和最高位数字之间间有空格;有空格;输输入:入:12预预期的期的输输出:出:错误错误负负号位置号位置错错。程程序序通通常常在在处处理理边边缘缘情情况况时时容容易易出出现现错错误误,如等价,如等价类类与等价与等价类类之之间间的的边边界界值值。所所以以在在设设计计测测试试用用例例时时,使使用用正正好好等等于于、正正好好大大于于、正正好好小小于于边边界界值值的的数数据据进进行行测测试试,发现发现程序程序错误错误的概率的概率较较大。大。7.7.2边界值分析边界值分析边边界界值值分析分析测试测试法属黑盒法属黑盒测试测试。 在在实际设计测试实际设计测试方案方案时时,常常,常常结结合使用等合使用等价划分和价划分和边边界界值值分析两种技分析两种技术术,把一些等价,把一些等价类类的的边边界界值值作作为测试为测试用例用例进进行行测试测试。上例中上例中设计设计了了11个个测试测试用例,用例,还应该还应该用用边边界界值值分析分析补补充充测试测试用例:用例:(12)使)使输输出出刚刚好等于最小好等于最小负负整数;整数;输输入:入:32768预预期的期的输输出:出:32768(13)使)使输输出出刚刚好等于最大的正整数;好等于最大的正整数;输输入:入:32767预预期的期的输输出:出:32767(14)使)使输输出出刚刚刚刚小于最小的小于最小的负负整数;整数;输输入:入:32769预预期的期的输输出:出:错误错误无效无效输输入入(15)使)使输输出出刚刚刚刚大于最大正整数;大于最大正整数;输输入:入:32768预预期的期的输输出:出:错误错误无效无效输输入入错错误误推推测测法法在在很很大大程程度度上上靠靠直直觉觉和和经经验验进进行。行。基基本本思思想想:列列举举出出程程序序中中可可能能的的错错误误和和容容易易发发生生错错误误的的特特殊殊情情况况,且且根根据据它它们们选选择测试择测试方案。方案。如如:输输入入、输输出出为为0时时容容易易出出错错;输输出出记记录为录为0条条时时容易出容易出错错;等等。;等等。7.7.3错误推测错误推测对对软软件件系系统统进进行行实实际际测测试试时时,应应该该联联合合使使用用各各种种设设计计测测试试方方案案的的方方法法,形形成成一种一种综综合策略。具体可以使用如下策略:合策略。具体可以使用如下策略:1)在在任任何何情情况况下下都都应应该该进进行行边边界界值值分析;分析;2)必必要要时时用用等等价价划划分分法法补补充充测测试试方方案;案;7.7.4实用测试策略实用测试策略3)必要)必要时时再用再用错误错误推推测测法法补补充充测试测试方案;方案;4)对对照程序照程序逻辑逻辑,检查检查已已经设计经设计出的出的测测试试方案。可以根据方案。可以根据对对程序可靠性的要求采程序可靠性的要求采用不同的用不同的逻辑逻辑覆盖覆盖标标准。准。实实例例:程程序序TRIANGLE读读入入三三个个整整数数值值,这这三三个个整整数数代代表表同同一一个个三三角角形形三三条条边边的的长长度度,程程序序根根据据这这三三个个值值判判断断三三角形属于不等角形属于不等边边、等腰或是等、等腰或是等边边三角形。三角形。开始开始停止停止AB+CBA+CCA+BA=BA=CB=CB=C输出:等输出:等边三角形边三角形输出:不输出:不等边三角等边三角形形输出:等输出:等腰三角形腰三角形输出:不输出:不是三角形是三角形abcdefghijklmnop12345678910111213141516171819202122TFTFTFTTFFFTTF图图7.8程序程序TRIANGLE的流程图的流程图综综合合使使用用边边界界值值分分析析、等等价价值值划划分分和和错错误误推推测测等等技技术术,可以,可以设计设计出出11种种应该测试应该测试的情况:的情况:(1)正常的不等)正常的不等边边三角形三角形;(2)正常的等)正常的等边边三角形三角形;(3)正正常常的的等等腰腰三三角角形形,包包括括两两条条相相等等边边的的三三种种不同排列方法不同排列方法;(4)退退化化的的三三角角形形(即即两两边边的的和和等等于于第第三三边边),包括三种不同排列方法;包括三种不同排列方法;(5)三三条条边边不不能能构构成成三三角角形形(即即两两边边之之和和小小于于第第三三边边),包括三种不同排列方法;),包括三种不同排列方法;(6)一一条条边边的的长长度度为为零零,包包括括三三种种不不同同的的排排列列方方法;法;(7)两两条条边边的的长长度度为为零零,包包括括三三种种不不同同的的排排列列方方法;法;(8)三条)三条边边的的长长度全度全为为零;零;(9)输输入数据中包含入数据中包含负负整数;整数;(10)输输入数据不全(不足三个正整数);入数据不全(不足三个正整数);(11)输输入数据中包含非整数型的数据。入数据中包含非整数型的数据。abcdefghklmnopij1234567891011121314151617181920212223图图7.9对应的程序图对应的程序图程序程序TRIANGLE的测试数据的测试数据最后,检查测试数据的覆盖程度,通常应最后,检查测试数据的覆盖程度,通常应该做到边覆盖。该做到边覆盖。测试数据覆盖程度检验表中列出的四种测测试数据覆盖程度检验表中列出的四种测试数据已经做到了边覆盖(覆盖所有的试数据已经做到了边覆盖(覆盖所有的22条条边)。边)。测试数据覆盖程度检验表测试数据覆盖程度检验表7.8调试调试7.8.1调试过程调试过程调试是在测试发现错误之后排除错误的过程。调试是在测试发现错误之后排除错误的过程。测试用例测试用例结果结果调试调试附加测试附加测试纠正且回归测试纠正且回归测试已识别原因已识别原因被怀疑原因被怀疑原因1.蛮蛮干干法法:打打印印内内存存的的内内容容,从从中中寻寻找找错错误误的的线线索,是效率最低的程序索,是效率最低的程序调试调试方法。方法。2.回回溯溯法法:从从发发现现问问题题的的程程序序段段开开始始人人工工地地往回追踪分析程序代往回追踪分析程序代码码,直到找到,直到找到错误错误。3.原因排除法原因排除法包括:包括:对对分分查查找法、找法、归纳归纳法、演法、演绎绎法法7.8.2调试途径调试途径7.9软软件可靠件可靠性性1.软软件可靠性定件可靠性定义义软软件件可可靠靠性性:是是程程序序在在给给定定的的时时间间间间隔隔内内,按按照照规规格格说说明明书书的的规规定定成成功功地地运运行行的的概率。概率。7.9.1基本概念基本概念2.软软件的可用性件的可用性对对故故障障可可修修复复系系统统,应应同同时时使使用用可可靠靠性性和和可用性来衡量。可用性来衡量。软软件件可可用用性性是是:程程序序在在给给定定的的时时间间点点,按按照照规规格格说说明明书书的的规规定,成功地运行的概率。定,成功地运行的概率。可靠性和可用性的区可靠性和可用性的区别别是:可靠性是在是:可靠性是在0到到t时间间时间间隔内,系隔内,系统统没有失效的概率。而可用没有失效的概率。而可用性是在性是在t时时刻,系刻,系统统是正常运行的概率。是正常运行的概率。如果在如果在t时时刻,系刻,系统统是可用的,是可用的,则则有两种可有两种可能:能:1)在)在0到到t时时刻刻这这段段时间时间内,系内,系统统一直没一直没有失效(可靠);有失效(可靠);2)在)在0到到t时时刻刻这这段段时间时间内失效内失效过过,但是,但是系系统统修复后运行到修复后运行到t时时刻刻时时情况良好。情况良好。如如果果在在一一段段时时间间内内,软软件件系系统统故故障障停停机机时时间间分分别别为为:td1,td2,正正常常运运行行时时间间分分别别为为:tu1,tu2,则则系系统统的的稳态稳态可用性定可用性定义为义为:其中其中Tup=tui,Tdown=tdi如果引入系如果引入系统统平均无故障平均无故障时间时间MTTF和平均和平均维维修修时间时间MTTR的概念,的概念,则则上面公式的系上面公式的系统稳态统稳态可用性可用性变变成:成:平平平平均均均均维维维维修修修修时时时时间间间间MTTR是是修修复复一一个个故故障障平平均均需需要要用用的的时时间,取决于维护人员的技术水平和对系统熟悉程度。间,取决于维护人员的技术水平和对系统熟悉程度。平均无故障时间平均无故障时间平均无故障时间平均无故障时间MTTF是系统按照规格说明书规定成是系统按照规格说明书规定成功地运行的平均时间,取决于系统中潜伏的错误数量。功地运行的平均时间,取决于系统中潜伏的错误数量。1.符号符号估算估算MTTF时时使用到下列符号使用到下列符号ET测试测试之前程序中故障之前程序中故障总总数;数;IT程序程序长长度(机器指令度(机器指令总总数);数);测试测试(包括(包括调试调试)时间时间;Ed()在在0至至期期间发现间发现的的错误错误数;数;Ec()在在0至至期期间间改正的改正的错误错误数;数;7.9.2估算平均无故障时间估算平均无故障时间MTTF的方法的方法2.基本假定基本假定可作出下列假定:可作出下列假定:1)单单位位长长度度里里的的故故障障数数ET/IT近近似似为为常常数数。一一些些统统计计数字表明,通常有:数字表明,通常有:0.510-2ET/IT210-2。2)失失效效率率正正比比于于软软件件中中剩剩余余的的(潜潜藏藏的的)故故障障数数,而平均无故障而平均无故障时间时间MTTF与剩余的故障数成反比与剩余的故障数成反比。3)调试过调试过程没有引入新的故障程没有引入新的故障,即,即Ec()=Ed()。由于系由于系统统剩余的故障数剩余的故障数为为:Er()=ET-Ec()所以所以单单位位长长度程序中剩余的故障数度程序中剩余的故障数为为:r()=ET/IT-Ec()/IT3.估算平均无故障估算平均无故障时间时间MTTF因因为为平均无故障平均无故障时间时间与与单单位位长长度程序中剩度程序中剩余的故障数余的故障数r()成反比,所以:成反比,所以:其其中中:K为为常常数数,它它的的值值根根据据经经验验选选取取,经典值是经典值是200。由上式变换后得到程序中改正的错误数:由上式变换后得到程序中改正的错误数: 根据对软件平均无故障时间的要求,可以估计根据对软件平均无故障时间的要求,可以估计需要改正多少个错误后,测试工作就可以结束。需要改正多少个错误后,测试工作就可以结束。 4.估估计计故障故障总总数数ET的方法的方法1)植入故障法植入故障法假假设设人人为为地植入的故障数地植入的故障数为为Ns,经过经过一段一段时间时间的的测测试试之后之后发现发现ns个植入的故障,同个植入的故障,同时还发现时还发现了了n个原有的个原有的故障,故障,则则可以估可以估计计出程序中原有的故障出程序中原有的故障总总数:数:其中:其中:是故障总数是故障总数ET的估计值;的估计值;植植入入错错误误法法人人为为植植入入的的错错误误与与原原有有程程序序错错误误可可能能性性质质很很不不相相同同,发发现现它它们们的的难难度度也也不不同同,用用此法估此法估计计的的错误错误数有数有时时可能不太准确。可能不太准确。2)分分别测试别测试法法分分别别测测试试法法随随机机把把程程序序中中一一部部分分原原有有错错误误加加上上标标记记,根根据据测测试试发发现现的的有有标标记记和和无无标标记记错错误误的的比例,估比例,估计计程序程序错误总错误总数。数。分分别别测测试试法法使使用用两两个个测测试试员员,独独立立地地测测试试同同一一个个程程序序的的两两个个副副本本,由由另另一一名名分分析析员员分分析析他他们们的的测测试试结结果果,把把其其中中一一个个测测试试员员发发现现的的故故障障作作为为有有标记标记的故障。用的故障。用表示表示测试时间测试时间,假,假设设=0时时故障故障总总数数为为B0(即(即ET););=1时测试员时测试员甲甲发现发现的故障数的故障数为为B1;=1时测试员时测试员乙乙发现发现的故障数的故障数为为B2;=1时时两个两个测试员发现测试员发现的相同故障数的相同故障数为为bc。如果如果认为测试员认为测试员甲甲发现发现的故障是有的故障是有标记标记的,即的,即程序中有程序中有标记标记的故障的故障总总数数为为B1,那么,那么测试员测试员乙乙发发现现的的B2个故障中有个故障中有bc个是有个是有标记标记的。所以可以估的。所以可以估计计出出测试测试前程序中的故障前程序中的故障总总数数为为:其中,其中,是故障总数是故障总数ET的估计值。的估计值。每隔一定时间,分析员分析两名测试员的测试每隔一定时间,分析员分析两名测试员的测试结果,来估计错误总数。几次估计结果差不多时,结果,来估计错误总数。几次估计结果差不多时,用其平均值作为错误总数的估计值。用其平均值作为错误总数的估计值。一种一种预测软预测软件可靠性和衡量件可靠性和衡量软软件件质质量的量的方法。方法。用用测试测试完成率作完成率作为为度量度量软软件件质质量的量的标标准。准。7.10日立日立预测预测法法 7.10.1测试测试完成率模型完成率模型50%100%测测试试时时间间使用率使用率第一第一阶段阶段第二第二阶段阶段第三第三阶段阶段100%测测试试用用例例完完成成率率测试用例完成率随测试时测试用例完成率随测试时间变化的情况间变化的情况日日立立的的经经验验表表明明,完完成成软软件件测测试试通通常常需需要要经经历历三三个个阶阶段段,第第一一阶阶段段故故障障多多,测测试试完完成成慢慢,第第二二阶阶段段测测试试完完成成率率提提高高快快,第第三三阶阶段段错错误误难难改改正正,完完成成率率提提高不快。高不快。测测试试时时间间使使用用率率测测试试所所用用时时间间/测测试试允允许许使使用用时时间。间。50%100%测测试试时时间间使用率使用率第一第一阶段阶段第二第二阶段阶段第三第三阶段阶段100%测测试试用用例例完完成成率率测试用例完成率随测试时测试用例完成率随测试时间变化的情况间变化的情况日立的经验表明:日立的经验表明:1)第第一一个个阶阶段段平平均均占总时间的占总时间的22%;2)如如果果第第一一个个阶阶段段占占用用的的时时间间超超过过总总时时间间的的55%以以上上时时,该该项项工工程必然失败;程必然失败;3)成成功功的的工工程程第第一一个个阶阶段段占占用用的的时时间间平平均均为为总总时时间间的的15%,失失败败的的工工程程第第一一个个阶阶段段占占用用的的时时间间高高达达总时间总时间的的97%左右;左右;4)成功的工程第二)成功的工程第二阶阶段段占占总时间总时间的的57%左右,失左右,失败败的工程第二个的工程第二个阶阶段只占段只占总时间总时间的的29%左右。左右。50%100%测测试试时时间间使用率使用率第一第一阶段阶段第二第二阶段阶段第三第三阶段阶段100%测测试试用用例例完完成成率率测试用例完成率随测试时测试用例完成率随测试时间变化的情况间变化的情况错误发现错误发现率:率:单单位位时间时间内内发现发现的的错误错误数。数。峰值时间峰值时间成功的成功的工程工程失败的工失败的工程程极坏的工程极坏的工程时间时间错错误误发发现现率率错误发现率曲线错误发现率曲线7.10.2错误发现率模型错误发现率模型经经经经验验验验表表表表明明明明,失失失失败败败败工工工工程程程程的的的的错错错错误误误误发发发发现现现现率率率率曲曲曲曲线线线线的的的的斜斜斜斜率率率率范围是范围是范围是范围是-0.3-0.30 0,成功的工程为,成功的工程为,成功的工程为,成功的工程为-1-1-0.3-0.37.10.3使用日立预测法的步骤使用日立预测法的步骤1)制订测试计划,设计测试方案,确定要完)制订测试计划,设计测试方案,确定要完成的测试用例的总数;成的测试用例的总数;2)从集成测试开始,记录测试用例完成数和)从集成测试开始,记录测试用例完成数和错误发现数,绘制用例完成率曲线和错误错误发现数,绘制用例完成率曲线和错误发现率曲线;发现率曲线;3)绘制曲线时,实际的数据是一串离散的点,)绘制曲线时,实际的数据是一串离散的点,如果工程不大周期不长的话,连接这些点如果工程不大周期不长的话,连接这些点得不到平滑的曲线时,作平滑处理;得不到平滑的曲线时,作平滑处理;4)每周至少)每周至少检查检查一次一次绘绘制的曲制的曲线线,以判断,以判断处处于哪个于哪个阶阶段,如果第二段,如果第二阶阶段的到来比段的到来比计计划划时间时间推推迟迟25,就需要及,就需要及时时采取措施采取措施补补救;救;5)严严密注密注视错误发现视错误发现率率变变化情况以确定其化情况以确定其峰峰值值,在,在错误发现错误发现率下降率下降时时,计计算其斜率,算其斜率,如果大于如果大于0.3就就产产生了生了严严重的重的问题问题;6)每周至少)每周至少检验检验一次,以修正上一周作出一次,以修正上一周作出的的阶阶段性段性预测预测。第第7章小章小结结测试计测试计划划为为做好集成做好集成测试测试和和验验收收测试测试,需,需为为如何如何组织测试组织测试制制订订实实施施计计划。划。计计划划应应包括包括测试测试的内容、的内容、进进度、条件、人度、条件、人员员、测试测试用例的用例的选选取原取原则则、测试结测试结果允果允许许的偏差范的偏差范围围等。等。测试测试分析分析报报告告测试测试工作完成以后,工作完成以后,应应提交提交测试计测试计划划执执行情况的行情况的说说明,明,对测试结对测试结果加以分析,并提出果加以分析,并提出测试测试的的结论结论意意见见。测试阶段可能用到的软件工具:测试阶段可能用到的软件工具:BugfreeBug处处理理记录记录工具。工具。Wiki知知识识共享工具。共享工具。LoadRunner负负荷(荷(载载)测试软测试软件,件,预测预测系系统统行行为为和性能的和性能的负载测试负载测试工具,通工具,通过过模模拟拟多至上多至上千万用千万用户实户实施并施并发负载发负载及及实时实时性能性能监测监测的方式来的方式来查查找和确找和确认问题认问题。第第8章:章:维护维护软软件件维护维护是是软软件生命周期的最后一个件生命周期的最后一个阶阶段。段。它它的的任任务务是是:维维护护软软件件的的正正常常运运行行,不不断断改改进进软软件件的的性性能能和和质质量量,为为软软件件的的进进一一步步推推广广应应用和更新替用和更新替换换做做积积极工作。极工作。 软软件件维护维护所需的工作量非常大,一般所需的工作量非常大,一般说说来,大型来,大型软软件的件的维护维护成本高达开成本高达开发总发总成本的四倍左右。目前,成本的四倍左右。目前,软软件开件开发组织发组织把把60%以上的工作量用于以上的工作量用于维护维护自己的自己的软软件上。件上。问题问题:软软件交付使用件交付使用 软软件件验验收收测测试试以以后后,就就标标志志着着软软件件设设计计开开发阶发阶段的段的结结束。束。而而软软件件交交付付用用户户使使用用,才才真真正正标标志志漫漫长长的的维护阶维护阶段的开始。段的开始。 软软件交付使用就是新系件交付使用就是新系统统和旧系和旧系统统的的转换转换。 旧旧系系统统可可能能是是人人工工作作业业系系统统,也也可可能能是是某某个个旧的旧的计计算机系算机系统统。 软软件件交交付付应应该该是是一一个个过过程程,而而不不是是一一个个突突然然事事件件,软软件件的的交交付付使使用用应应尽尽可可能能平平稳稳过过渡渡,不不影影响生响生产产或工作,新系或工作,新系统统逐步安全地取代旧系逐步安全地取代旧系统统。一、一、软软件交付使用的工作件交付使用的工作1)将将旧旧系系统统的的数数据据转转换换到到新新系系统统(如如数数据据库库数据);数据);2)新新系系统统调调试试完完成成并并加加载载入入机机器器,准准备备运运行;行;3)将有关)将有关资资料(如使用料(如使用说说明)明)转转交交给给用用户户;4)对对用用户户做适当的培做适当的培训训。二、二、软软件交付使用的方式件交付使用的方式1)直接方式)直接方式旧系统旧系统新系统新系统(a)直接方式直接方式直接方式是用新系统直接替换旧系统,没有过渡。直接方式是用新系统直接替换旧系统,没有过渡。优点:优点:转换简单,费用最省转换简单,费用最省转换简单,费用最省转换简单,费用最省。缺点:缺点:风险大风险大风险大风险大。 由于新系由于新系统统没有承担没有承担过实际过实际工作,可能会出工作,可能会出现现意想不到的意想不到的问题问题,甚至出,甚至出现现程序程序设计错误设计错误。 因此,因此,实际应实际应用用时时,采取一些措施,以便新,采取一些措施,以便新系系统统一旦出一旦出错错,旧系,旧系统统能能够够恢复运行。恢复运行。 直接方式不适用于一些关系重大的系直接方式不适用于一些关系重大的系统统。2)并行方式)并行方式旧系统旧系统新系统新系统(b)并行方式并行方式 一一些些关关系系重重大大的的软软件件产产品品在在验验收收测测试试后后,并并不不立立即即投投入入生生产产性性运运行行,而而是是同同时时运运行行新新系系统统和和旧旧系系统统,以以比比较较处处理理结结果果,这这就就是是并并行行方方式。式。 优优点点:A.可可以以对对系系统统进进行行全全面面测测试试,减减少少了了新新系系统统失失灵灵带带来的来的风险风险,因,因为为旧系旧系统统也仍然存在;也仍然存在;B用用户户也能也能够够有一段熟悉新系有一段熟悉新系统统的的时间时间。缺点缺点:所需所需费费用用较较高,双系高,双系统统要投入更多的人力要投入更多的人力财财力。力。3)逐步方式)逐步方式 逐步方式是将逐步方式是将软软件分期,部分地交付使用。件分期,部分地交付使用。这这种方式克服了上面两种方式的缺点,既能防种方式克服了上面两种方式的缺点,既能防止直接止直接转换产转换产生的危生的危险险性,又能减少并行方式性,又能减少并行方式的的费费用。用。 但是但是这这种方法使得整个系种方法使得整个系统统中一部分是旧系中一部分是旧系统统,一部分是新系,一部分是新系统统,所以必,所以必须须考考虑虑好它好它们们的的相互配合相互配合问题问题和接口和接口问题问题。实际应用中,常常是混合以上几种方法。对实际应用中,常常是混合以上几种方法。对系统不重要的部分采用直接方式,对系统重要系统不重要的部分采用直接方式,对系统重要部分采用并行方式,使系统平稳交付使用。部分采用并行方式,使系统平稳交付使用。通常要求通常要求进进行行软软件件维护维护的原因有三种:的原因有三种:1)改改正正在在特特定定使使用用条条件件下下暴暴露露出出来来的的一一些些潜在程序潜在程序错误错误或或设计设计缺陷;缺陷;2)因因在在软软件件使使用用过过程程中中数数据据环环境境发发生生变变化化(如如所所要要处处理理的的数数据据发发生生变变化化)或或处处理理环环境境发发生生变变化化(如如硬硬件件或或软软件件操操作作系系统统等等发发生生变变化),需要修改化),需要修改软软件,以适件,以适应这应这种种变变化;化;8.1软软件件维护维护的定的定义义8.1.1软件维护的原因软件维护的原因3)用用户户和和数数据据处处理理人人员员在在使使用用时时常常提提出出改改进进现现有有功功能能、增增加加新新功功能能、以以及及改改善善总总体体性性能能的的要要求求,为为满满足足这这些些要要求求,需需要要修修改改软软件。件。1)改正性改正性维护维护交交付付给给用用户户使使用用的的软软件件,即即使使通通过过严严格格的的测测试试,仍仍可可能能有有一一些些潜潜在在的的错错误误在在用用户户使使用用的的过过程程中中发发现现和和修修改改。诊诊断断和和改改正正错错误误的的过过程称程称为为改正性改正性维护维护。8.1.2软件维护的类型软件维护的类型2)适适应应性性维护维护 随着随着计计算机的算机的飞飞速速发发展,新的硬件系展,新的硬件系统统和外和外部部设备时设备时常更新和升常更新和升级级,一些数据,一些数据库环库环境、数境、数据据输输入入/输输出方式、数据存出方式、数据存储储介介质质等也可能等也可能发发生生变换变换。为为了使了使软软件适件适应这应这些些环环境境变变化而修改化而修改软软件的件的过过程叫做适程叫做适应应性性维护维护。3)完善性完善性维护维护在在软软件件投投入入使使用用过过程程中中,用用户户可可能能还还会会有有新新的的功功能能和和性性能能要要求求,可可能能会会提提出出增增加加新新功功能能、修修改改现现有有功功能能等等要要求求。为为了了满满足足这这类类要要求而求而进进行的行的维护维护称称为为完善性完善性维护维护。4)预预防性防性维护维护为为了了改改进进软软件件未未来来的的可可维维护护性性或或可可靠靠性性,或或者者为为了了给给未未来来的的改改进进奠奠定定更更好好的的基基础础而而进进行行的的修改,称修改,称为预为预防性防性维护维护。 这这种种维护维护活活动动在在实实践中比践中比较较少少见见。在各在各类维护类维护中,完善性中,完善性维护维护占占软软件件维护维护工作的工作的大部分。大部分。根据国外的数据根据国外的数据统计统计表明,完善性表明,完善性维护维护占全部占全部维护维护活活动动的的50%66%,改正性,改正性维护维护占占17%21%,适,适应应性性维护维护占占18%25%,其它,其它维护维护活活动动占占4%左右。左右。8.2.1结结构化构化维护维护与非与非结结构化构化维护维护的差的差别别1.非非结结构化构化维护维护软软件配置的唯一成分是代件配置的唯一成分是代码码,维护维护从从评评价程序代价程序代码码开始,开始,对软对软件件结结构、数据构、数据结结构、系构、系统统接口、接口、设计约设计约束等常束等常产产生生误误解,不能解,不能进进行回行回归测试归测试,维护维护代价大。代价大。2.结结构化构化维护维护有完整的有完整的软软件配置,件配置,维护维护从从评评价价设计设计文档开始,确定文档开始,确定软软件件结结构、性能和接口特点,构、性能和接口特点,现现修改修改设计设计,接着修改代,接着修改代码码,再再进进行回行回归测试归测试。8.2软软件件维护维护的特点的特点软软件件维维护护的的代代价价表表现现为为有有形形代代价价和和无无形形代价。代价。有形代价指有形代价指软软件件维护维护的的费费用开支。用开支。70年年代代,用用于于软软件件维维护护的的费费用用只只占占软软件件总总预预算算的的30%40%,80年年代代上上升升到到60%左左右右,90年年代代许许多多软软件件项项目目的的维维护护经经费费预预算算达达到了到了80%。8.2.2软件维护的代价软件维护的代价1.有形代价与无形代价有形代价与无形代价无形代价:无形代价:1)当当一一些些看看起起来来合合理理的的要要求求不不能能及及时时满满足足时时,会引起用,会引起用户户的不的不满满;2)改改动动软软件件可可能能会会引引入入新新的的错错误误,使使软软件件质质量下降;量下降;3)把把许许多多软软件件工工程程师师调调去去从从事事维维护护工工作作,势势必影响开必影响开发发工作。工作。 软软件件维维护护所所花花费费的的工工作作量量,一一部部分分用用于于生生产产性性活活动动,如如分分析析、评评价价、修修改改设设计计、编编写写程程序序等等;另另一一部部分分用用于于非非生生产产性性活活动动,如如理理解解代代码码的的含含义义、解解释释数数据据结结构构和和接接口口特点等。特点等。2.软件维护工作量模型软件维护工作量模型Belady和和Lehman提出了一种提出了一种维护维护工作量模型:工作量模型:M=P+Ke(c-d)其中:其中:M:用于:用于维护维护工作的工作的总总工作量工作量;P:生生产产性工作量;性工作量;K:经验经验常数;常数;c:因缺乏好的因缺乏好的设计设计和文档而和文档而导导致致软软件复件复杂杂性的度量;性的度量;d:维护维护人人员对软员对软件熟悉程度的度量。件熟悉程度的度量。 上述模型指出:如果使用了不好的上述模型指出:如果使用了不好的软软件件开开发发方法,原来参加开方法,原来参加开发发的人的人员员或小或小组组不能不能参加参加维护维护,则则工作量和成本将按指数工作量和成本将按指数级级增加。增加。8.2.3软软件件维护维护的典型的典型问题问题1)如如果果维维护护时时只只有有程程序序代代码码而而没没有有注注释释说说明明,维护起来就相当困难;维护起来就相当困难;2)由由于于软软件件维维护护阶阶段段时时间间长长,软软件件开开发发人人员员经经常常流流动动,所所以以在在维维护护时时,不不可可能能所所有有的的维维护护工工作作都都依依靠靠原原来来的的开开发发人人员员。这这会会使使得维护工作量增加;得维护工作量增加;3)软软件件没没有有足足够够的的文文档档资资料料,或或者者程程序序修修改后与文档改后与文档资资料不一致;料不一致;4)绝绝大大多多数数软软件件在在设设计计时时没没有有考考虑虑将将来来的的修修改改,所所以以建建议议采采用用功功能能独独立立的的模模块块化化设设计计原原则则,增加,增加软软件的可件的可维护维护性;性;5)软软件件维护维护被被许许多人多人视为视为一种毫无吸引力一种毫无吸引力的工作,因的工作,因为维护为维护工作常常受到挫折。工作常常受到挫折。要缓解以上典型问题,建议采用软件工程的方法来开发程序。要缓解以上典型问题,建议采用软件工程的方法来开发程序。8.3软软件件维护过维护过程程1.维护组织维护组织维护要求维护要求(软件问题报告)(软件问题报告)维护管理员维护管理员系统管理员系统管理员软件系统软件系统变化授权人变化授权人图图8.1维护组织维护组织根据根据软软件件问题报问题报告(告(维护维护要求),作出的要求),作出的软软件修改件修改报报告包含的信息主要有:告包含的信息主要有:1)满满足足维护维护要求表中提出的要求所需要的工作量;要求表中提出的要求所需要的工作量;2)维护维护要求的性要求的性质质;3)这项这项要求的要求的优优先次序;先次序;4)与修改有关的事后数据(如)与修改有关的事后数据(如测试测试数据等)。数据等)。2.维护报告维护报告3.维护维护的事件流的事件流类型类型开始分开始分析问题析问题评价优评价优先度先度计划改计划改正进度正进度开始分开始分析析维护任维护任务务复审复审估量错估量错误严重误严重程度程度维护要求维护要求错误错误严重严重适应适应完善完善不严重不严重错误改正目录错误改正目录开发目录开发目录高高低低分配的人员分配的人员分配的人员分配的人员修修改改后后的的软件配置软件配置复复审审后后供供使使用用的软件配置的软件配置图图8.2维护阶段的工作流程维护阶段的工作流程 4.保存保存维护记录维护记录1)程序标识;)程序标识;2)源语句数;)源语句数;3)机器指令数;)机器指令数;4)使用的程序设计语言;)使用的程序设计语言;5)程序安装的日期;)程序安装的日期;6)自安装以来程序运行次数;)自安装以来程序运行次数;7)自安装以来程序失效次数)自安装以来程序失效次数8)程序变动的层次和标识;)程序变动的层次和标识;9)因程序变动而增加的源语句数;因程序变动而增加的源语句数;10)因程序变动而删除的源语句数;因程序变动而删除的源语句数;11)每个改动耗费的人时数;)每个改动耗费的人时数;12)程序改动的日期;)程序改动的日期;13)软件工程师的名字;)软件工程师的名字;14)维护要求表的标识;)维护要求表的标识;15)维护类型;)维护类型;16)维护开始和完成的日期;)维护开始和完成的日期;17)累计用于维护的人时数;)累计用于维护的人时数;18)与完成的维护相联系的纯效益。与完成的维护相联系的纯效益。5.评价维护活动评价维护活动可以从以下方面度量维护工作:可以从以下方面度量维护工作:1)每次程序运行平均失效的次数;)每次程序运行平均失效的次数;2)用于每一类维护活动的总人时数;)用于每一类维护活动的总人时数;3)平均每个程序、每种维护类型所做的程序变动数;)平均每个程序、每种维护类型所做的程序变动数;4)维护过程中增加或删除一个源语句平均花费的人时数;)维护过程中增加或删除一个源语句平均花费的人时数;5)维护每种语言平均花费的人时数;)维护每种语言平均花费的人时数;6)一张维护要求表的平均周转时间;)一张维护要求表的平均周转时间;7)不同维护类型所占的百分比。)不同维护类型所占的百分比。8.4软件的可维护性软件的可维护性软软件件可可维维护护性性是是:维维护护人人员员理理解解、改改正正和和改改进进软软件的件的难难易程度。易程度。一个一个软软件的可件的可维护维护性,主要由三个因素决定:性,主要由三个因素决定:1.可理解性可理解性可可理理解解性性表表现现为为外外来来读读者者理理解解软软件件的的结结构构、接接口、功能和内部口、功能和内部过过程的程的难难易程度。易程度。8.4.1决定软件可维护性的因素决定软件可维护性的因素影响影响软软件可理解性的重要因素有:模件可理解性的重要因素有:模块块化、化、结结构化构化设计设计、详细详细的的设计设计文档文档资资料、源代料、源代码码内内部文档、良好的程序部文档、良好的程序设计语设计语言等。言等。2.可测试性可测试性可测试性可测试性在设计开发阶段应该注意尽量把软件设计成在设计开发阶段应该注意尽量把软件设计成容易测试和容易诊断的,可用的测试工具和调容易测试和容易诊断的,可用的测试工具和调试工具对测试和诊断非常重要。试工具对测试和诊断非常重要。3.可修改性可修改性软软件件的的可可修修改改程程度度与与软软件件设设计计阶阶段段采采用用的的原原则则和和策策略略是是直直接接相相关关的的。如如:模模块块的的耦耦合合、内内聚聚、控控制制范范围围和和作作用用范范围围、局局部部化化程程度度都都直直接影响接影响软软件的可修改性。件的可修改性。4.可移植性可移植性5.可重用性可重用性 决定软件可维护性的最终因素是软件设计阶决定软件可维护性的最终因素是软件设计阶段所采用的方法,以及软件文档资料的好坏。段所采用的方法,以及软件文档资料的好坏。 提高软件的可维护性是软件工程的一个重要提高软件的可维护性是软件工程的一个重要目标。目标。 8.4.2文档文档1.用用户户文档文档1)功能描述;)功能描述;2)安装文档;)安装文档;3)使用手册;)使用手册;4)参考手册;)参考手册;5)操作)操作员员指南;指南;2.系系统统文档文档SVN软件:软件:配置修改记录、配置修改记录、代码版本管理。代码版本管理。8.4.3可可维护维护性复性复审审测试结测试结束束时进时进行正式的可行正式的可维护维护性复性复审审,称,称为为配置复配置复审审,目的是:保,目的是:保证软证软件配置的所有成件配置的所有成分是完整的、一致的和可理解的。分是完整的、一致的和可理解的。在在软软件件的的维维护护过过程程中中,花花费费的的大大量量工工作作量会直接影响量会直接影响软软件的成本。件的成本。因因此此,应应当当考考虑虑有有哪哪些些因因素素会会影影响响软软件件维维护护的的工工作作量量,应应该该采采取取什什么么维维护护策策略略,才才能有效地能有效地维护软维护软件并控制件并控制维护维护的成本。的成本。8.4.4影响维护工作量的因素影响维护工作量的因素影响影响软软件件维护维护工作量的因素有:工作量的因素有:1)系系统统大大小小。系系统统越越大大,功功能能越越复复杂杂,理理解解掌掌握握起起来来就就越越困困难难,需需要要的的维维护护工工作作量量越越大。大。2)程程序序设设计计语语言言。使使用用功功能能强强的的程程序序设设计计语语言言可可以以控控制制程程序序的的规规模模。语语言言的的功功能能越越强强,生生成成程程序序所所需需的的指指令令数数就就越越少少;语语言言的的功功能能越越弱弱,实实现现同同样样功功能能所所需需的的语语句句就就越越多多,程程序就越大,序就越大,维护维护起来就越困起来就越困难难。3)系系统统年年龄龄。老老系系统统比比新新系系统统需需要要更更多多的的维维护护工工作作量量。许许多多老老系系统统在在当当初初并并未未按按照照软软件件工工程程的的要要求求进进行行开开发发,没没有有文文档档,或或文文档档太太少少,或或者者在在长长期期的的维维护护中中许许多多地地方方与与程程序序不不一致,一致,维护维护起来困起来困难较难较大。大。4)数数据据库库技技术术的的应应用用。使使用用数数据据库库工工具具,可可有有效效地地管管理理和和存存储储用用户户程程序序中中的的数数据据,可可方方便便地地修修改改、扩扩充充报报表表。数数据据库库技技术术的的使使用用可可以减少维护工作量。以减少维护工作量。5)先先进进的的软软件件开开发发技技术术。在在软软件件开开发发时时,如如果果使使用用能能使使软软件件结结构构比比较较稳稳定定的的分分析析与与设设计计技技术术(如如面面向向对对象象分分析析、设设计计技技术术),可以减少一定的工作量。可以减少一定的工作量。6)其其它它。如如,应应用用的的类类型型、数数学学模模型型、任任务务的的难难度度、IF嵌嵌套套深深度度等等等等都都会会对对维维护护工作量工作量产产生一定的影响。生一定的影响。8.5预预防性防性维护维护对对旧程序旧程序维护维护的做法:的做法:1)反复多次做修改程序的)反复多次做修改程序的尝试尝试;2)先通)先通过过仔仔细细分析程序,尽可能多地掌握程序内分析程序,尽可能多地掌握程序内部工作部工作细节细节,再有效地修改;,再有效地修改;3)用)用软软件工程方法重新件工程方法重新设计设计、编码编码和和测试测试需要需要变变更的更的软软件部分;件部分;4)以)以软软件工程方法件工程方法为为指指导导,对对程序全部重新程序全部重新设计设计、编码编码和和测试测试。3)是局部再工程;)是局部再工程;4)是)是软软件再工程件再工程/预预防性防性维护维护进进行行预预防性防性维护维护的主要理由:的主要理由:(1)对对于旧系于旧系统统而言,而言,维护维护一行原代一行原代码码的的代价可能是最初开代价可能是最初开该该行源代行源代码码代价的代价的1440倍;倍;(2)重新)重新设计软设计软件体系件体系结结构(程序和数据构(程序和数据结结构)使用最新的构)使用最新的设计设计理念,理念,对对将来的将来的维护维护有有较较大帮助;大帮助;(3)原有旧系)原有旧系统统可作可作为软为软件原型使用,能件原型使用,能提高开提高开发发效率。效率。8.6软软件再工程件再工程过过程程正向正向工程工程库存库存目录目录分析分析文档文档重构重构逆向逆向工程工程代码代码重构重构数据数据重构重构活活动动以以线线性性顺顺序序发发生生,但但并并非非总是这样。总是这样。对对于于任任意意一一个个特特定定循循环环,可可在在完完成成任任意意一一个个活活动后终止。动后终止。该该模型定模型定义义的的6类类活活动动:1.库库存目存目录录分析;分析;包含每个包含每个应应用系用系统统的信息,如:名称、构建日期、修改的信息,如:名称、构建日期、修改次数、次数、过过去去18个月个月报报告的告的错误错误、用、用户户数量、文档数量、文档质质量、量、预预期期寿命,等。从中寿命,等。从中选选出再工程的候出再工程的候选选者。者。2.文档重构;文档重构;(1)如果一个程序走向生命)如果一个程序走向生命终终点,不再点,不再经历变经历变化,化,则则保持保持现现状;(状;(2)重构只)重构只针对针对当前正在修改的当前正在修改的软软件部分。件部分。3.逆向工程;逆向工程;逆向工程是一个恢复逆向工程是一个恢复设计结设计结果的果的过过程,从程序代程,从程序代码码中抽中抽取数据取数据结结构、体系构、体系结结构和构和处处理理过过程的程的设计设计信息。信息。4.代代码码重构;重构;分析源代分析源代码码,标标注出与注出与结结构化程序构化程序设计设计概念不符的概念不符的部分,重构它的代部分,重构它的代码码,测试测试重构代重构代码码并更新代并更新代码码。5.数据重构;数据重构;当数据当数据结结构构较较差差时时,进进行再工程。如以文件方式保存行再工程。如以文件方式保存数据数据变为变为以数据以数据库库方式存方式存储储。6.正向工程。正向工程。也称革新或改造,即也称革新或改造,即应应用用软软件工程的原理、概念、技件工程的原理、概念、技术术和方法来重新开和方法来重新开发现发现有系有系统统。第第8章小章小结结软软件件维护维护手册手册主要包括主要包括软软件系件系统说统说明、程序模明、程序模块说块说明、操作明、操作环环境、境、支持支持软软件的件的说说明、明、维护过维护过程的程的说说明,便于明,便于软软件的件的维护维护。软软件件问题报问题报告告指出指出软软件件问题问题的登的登记记情况,如日期、情况,如日期、发现发现人、状人、状态态、问题问题所属模所属模块块等,等,为软为软件修改提供准件修改提供准备备文档。文档。软软件修改件修改报报告告软软件件产产品投入运行以后,品投入运行以后,发现发现了需了需对对其其进进行修正、更行修正、更改等改等问题问题,应应将存在的将存在的问题问题、修改的考、修改的考虑虑以及修改的影以及修改的影响作出响作出详细详细的描述,提交的描述,提交审审批。批。软软件工程开件工程开发发中其它重要的文档中其它重要的文档开开发进发进度月度月报报该该月月报报系系软软件人件人员员按月向管理部按月向管理部门门提交提交的的项项目目进进展情况展情况报报告,告,报报告告应应包括包括进进度度计计划划与与实际执实际执行情况的比行情况的比较较、阶阶段成果、遇到的段成果、遇到的问题问题和解决的和解决的办办法以及下个月的打算等。法以及下个月的打算等。项项目开目开发总结报发总结报告告软软件件项项目开目开发发完成以后,完成以后,应应与与项项目目实实施施计计划划对对照,照,总结实际执总结实际执行的情况,如行的情况,如进进度、度、成果、成果、资资源利用、成本和投入的人力,此外,源利用、成本和投入的人力,此外,还还需需对对开开发发工作做出工作做出评评价,价,总结总结出出经验经验和教和教训训。软软件工程开件工程开发发中其它重要的文档中其它重要的文档用用户户操作手册操作手册本手册本手册详细详细描述描述软软件的功能、性能和用件的功能、性能和用户户界面,使用界面,使用户对户对如何使用如何使用该软该软件得到具体件得到具体的了解的了解,为为操作人操作人员员提供提供该软该软件各种运行情件各种运行情况的有关知况的有关知识识,特,特别别是操作方法的具体是操作方法的具体细节细节。软软件工程开件工程开发发中其它重要的文档中其它重要的文档第第9章:面向章:面向对对象方法学引象方法学引论论9.1面向面向对对象方法学概述象方法学概述9.1.1面向面向对对象方法学的要点象方法学的要点面向面向对对象方法学的基本原象方法学的基本原则则:尽可能模:尽可能模拟拟人人类习惯类习惯的思的思维维方式,使开方式,使开发软发软件的方法与件的方法与过过程尽可程尽可能接近人能接近人类认识类认识世界解决世界解决问题问题的方法与的方法与过过程。程。客客观观世界中的世界中的实实体体问题问题域中的域中的对对象;象;计计算机中的算机中的实实体体解空解空间对间对象;象;解空解空间对间对象取决于程序象取决于程序设计语设计语言:言:汇编语汇编语言的言的对对象:存象:存储单储单元;元;面向面向过过程的高程的高级语级语言的言的对对象:象:变变量、数量、数组组、记记录录、文件等;、文件等;面向面向对对象的高象的高级语级语言的言的对对象:除上述元素外,象:除上述元素外,还还包括窗体、菜包括窗体、菜单单、按、按钮钮、等等。、等等。与与传传统统方方法法不不同同,面面向向对对象象方方法法以以数数据据为为主主线线,将将数数据据和和操操作作方方法法封封装装在在对对象象中中,通通过过消消息息请请求求对对象象主主动动执执行行它它的的内内部部操操作作,改改变变其内部私有数据。其内部私有数据。面向面向对对象方法具有四个要点:象方法具有四个要点:A认为认为客客观观世界是由世界是由对对象象组组成;成;B把所有把所有对对象都划分成各种象都划分成各种对对象象类类(Class););C把把若若干干对对象象类类组组成成一一个个层层次次结结构构的的系系统统(类类等等级级););D对对象彼此象彼此间仅间仅通通过传递过传递消息互相消息互相联联系。系。OO = Objects + Class + Inheritance +Communicationwithmessage9.1.2面向面向对对象方法的象方法的优优点点1与人与人们习惯们习惯的思的思维维方法一致;方法一致;2稳稳定性好;定性好;3可重用性好;可重用性好;4较较易开易开发发大型大型软软件件产产品;品;5.可可维护维护性好。性好。9.1.3喷喷泉模型泉模型9.2面向面向对对象的概念象的概念9.2.1对对象象1、对象的形象表示、对象的形象表示状态状态S操作操作1操作操作2操作操作3界面界面操作操作1、2、3的实现的实现图图9.2对象的形象表示对象的形象表示1)定定义义1:对对象象是是具具有有相相同同状状态态的的一一组组操操作作的集合。的集合。2)定)定义义2:对对象是象是对对属性属性值值和操作的封装。和操作的封装。3)定定义义3:对对象象:=其其中中,ID是是对对象象的的名名字字;MS是是对对象象中中的的操操作作集集合合;DS是是对对象象的的数数据据集集合合;MI是是对对象象受受理的消息名集合(即理的消息名集合(即对对外接口)。外接口)。2、对象的定义、对象的定义状态状态S操作:操作:f1,f2,fn转换:转换:g1,g2,gn图图9.3用自动机模拟对象用自动机模拟对象转换:新状态转换:新状态S=gi(X,S)输出输出fi(X,S)输入输入fi,X3、对对象的特点象的特点1)以数据)以数据为为中心;中心;2)对对象是主象是主动动的;的;3)实现实现了数据封装;了数据封装;4)本)本质质上具有并行性;上具有并行性;5)模)模块块独立性好。独立性好。9.2.2其他概念其他概念1、类(、类(Class)类类就就是是对对具具有有相相同同数数据据和和相相同同操操作作的的一一组组相相似对象的定义。似对象的定义。如:如:Circle类具有相同的数据(圆心坐标、半类具有相同的数据(圆心坐标、半径、颜色)和相同的操作(显示自己、放大缩径、颜色)和相同的操作(显示自己、放大缩小半径、在屏幕上移动位置)。小半径、在屏幕上移动位置)。又又如如:下下面面C+语语言言定定义义的的Queue类类,可可用用于于实现实现一个一个队队列(即先列(即先进进先出的表):先出的表):ClassQueueintq100;intsloc,rloc;public:voidinit();/成成员员函数函数voidqput(inti);intqget(); 类类有私有有私有变变量量(Private)和公有和公有变变量量(Public)。 缺省缺省时时,都属于私有的,只能由,都属于私有的,只能由类类内部其他成内部其他成员员来来访问访问,不能由程序的其他部分来,不能由程序的其他部分来访问访问。 这这是一种是一种实现实现封装的方法。封装的方法。实实例例就就是是由由某某个个特特定定的的类类所所描描述述的的一一个个具具体的体的对对象。象。如:如:Circlea;/声明声明Circle类实类实例例aQueueQ1,Q2;/声明声明Queue类实类实例例Q1和和Q22、实例实例(Instance)消消息息就就是是用用来来请请求求对对象象执执行行某某个个处处理理或或回回答答某些信息的要求。某些信息的要求。 消息既可以是数据流,也可以是控制流。消息既可以是数据流,也可以是控制流。一条消息可以一条消息可以发发送送给给不同的不同的对对象,象,对对消息的解消息的解释释完全由接收信息的完全由接收信息的对对象来完成,不同的象来完成,不同的对对象象对对相同形式的消息可以有不同的解相同形式的消息可以有不同的解释释。3、消息消息(Message)与与传传统统程程序序的的“调调用用/返返回回”所所不不同同的的是是,对对于于传传来来的的消消息息,对对象象可可以以返返回回相相应应的的回回答答信信息,也可以不返回。息,也可以不返回。一个消息由三个部分一个消息由三个部分组组成:成:1)接收信息的)接收信息的对对象;象;2)信息)信息选择选择符(即消息名);符(即消息名);3)零个或多个)零个或多个变变元(参数)。元(参数)。如:如:MyCircle.Show(GREEN);4、方法(、方法(Method)方法,是方法,是对对象所能象所能执执行的操作。行的操作。C+中把方法称中把方法称为为成成员员函数,如函数,如Circle类类中中定定义义的成的成员员函数:函数:Show(intcolor)5、属性(、属性(Attribute)属性,是类中定义的数据。属性,是类中定义的数据。C+中把属性称为数据成员。中把属性称为数据成员。6、封装(、封装(encapsulation)封装就是信息封装就是信息隐隐藏,通藏,通过过封装封装对对外界外界隐隐藏了藏了对对象的象的实现细节实现细节。7、继继承(承(Inheritance)继承,是指能够直接获得已有的性质和特征,继承,是指能够直接获得已有的性质和特征,而不必重复定义它们。而不必重复定义它们。A的操作的操作A的变量的变量类类AA的实例变量的实例变量从从A的继承特性的继承特性B的操作的操作B的变量的变量类类B继承来的继承来的A的实例变量的实例变量B的实例变量的实例变量类类AA的实例的实例a1B的实例的实例b1类类B:A的子类的子类图图9.4实现继承机制的原理实现继承机制的原理8、多、多态态性(性(Polymorphism)多多态态性性,指指子子类类对对象象可可以以象象父父类类对对象象那那样样使使用用,同同样样的的消消息息既既可可以以发发送送给给父父类类对对象象,也也可可以以发发送送给给子子类对类对象。象。即不同等即不同等级级的的类类,可以公用一个方法的名字。,可以公用一个方法的名字。C+中,多中,多态态性是通性是通过过虚函数来虚函数来实现实现的。在不的。在不同同层层次的次的类类中,虚函数中,虚函数实现实现算法不同,在运行算法不同,在运行时时根根据接收消息的据接收消息的对对象所属于的象所属于的类类来决定来决定执执行虚函数的行虚函数的版本,称版本,称为动态联编为动态联编。9、重、重载载(Overloading)有两种重有两种重载载:1)函数重)函数重载载指指在在同同一一作作用用域域内内的的若若干干个个参参数数特特征征不不同同的的函函数可以使用相同的函数名字。数可以使用相同的函数名字。如:如:Show(inta,intb)Show(intx)Show(intx,inty,intz)C+语语言言中中函函数数重重载载是是通通过过静静态态联联编编实实现现的的。即即编编译译时时根根据据函函数数变变元元的的个个数数和和类类型型,决决定定函函数数版本。版本。2)运算符重)运算符重载载指指同同一一运运算算符符可可以以施施加加于于不不同同类类型型的的操操作作数数上上面面。当当被被操操作作数数类类型型不不同同时时,运运算算符符的的含含义义是不同的。是不同的。编编译译时时根根据据被被操操作作数数的的类类型型,决决定定使使用用算算符符的哪种的哪种语义语义。另另外外,在在实实现现一一个个类类成成员员函函数数时时,必必须须通通过过用用类类名名限定函数名来告限定函数名来告诉编译诉编译器器这这个函数属于哪个个函数属于哪个类类。如,如,编编写写qput()函数:函数:VoidQueue:qput(inti)if(sloc=100)cout“验证验证卡号卡号”;3.与数据流与数据流图图中中处处理框理框对应对应的操作(服的操作(服务务)如如“更新更新帐户帐户”等;等;4.利用利用继继承减少冗余操作(服承减少冗余操作(服务务)第第11章章面向面向对对象象设计设计11.1面向面向对对象象设计设计的准的准则则1.模模块块化化面面向向对对象象的的软软件件开开发发模模式式,支支持持了了系系统统模模块块化化的的原原则则:对对象象就就是是模模块块。它它把把数数据据结结构构和和操操作作(方法)(方法)紧紧密地密地结结合在一起构成模合在一起构成模块块。2.抽象抽象类实际类实际上是一种抽象数据上是一种抽象数据类类型,它型,它对对外开放外开放的公共接口构成了的公共接口构成了类类的的规规格格说说明(明(协议协议),),这这种接口种接口规规定了外界可以使用的合法操作符,利定了外界可以使用的合法操作符,利用用这这些操作符可以些操作符可以对类对类的的实实例中包含的数据例中包含的数据进进行操作。行操作。3.信息隐蔽信息隐蔽在面向对象方法中,信息隐蔽通过对象的封在面向对象方法中,信息隐蔽通过对象的封装性实现:类结构分离了类的接口与类的实现,装性实现:类结构分离了类的接口与类的实现,从而支持了信息隐蔽。从而支持了信息隐蔽。4.弱耦合弱耦合弱弱的的耦耦合合可可以以提提高高软软件件模模块块的的独独立立性性,避避免免某某一一部部分分模模块块发发生生变变化化对对其其它它模模块块有有较较大大的的影影响。响。一般来一般来说说,对对象象间间的耦合有两大的耦合有两大类类:A交交互互耦耦合合:对对象象间间的的耦耦合合通通过过信信息息连连接来接来实现实现。应应使交互耦合尽量松散。使交互耦合尽量松散。B继继承偶合承偶合:与交互耦合相反,:与交互耦合相反,应该应该提提高高继继承耦合的程度。因承耦合的程度。因为为通通过继过继承关系承关系结结合起来的基合起来的基类类和派生和派生类类,结结合得越合得越紧紧密越密越好。好。5.强强内聚内聚面向面向对对象象设计设计中存在三种内聚:中存在三种内聚:A服服务务内内聚聚:一一个个服服务务应应该该完完成成一一个个且且完成一个功能。完成一个功能。B类类内内聚聚:一一个个类类应应该该只只有有一一个个用用途途,它的属性和服它的属性和服务应该务应该是高内聚的。是高内聚的。C一般一般特殊内聚:即基特殊内聚:即基类类派生派生类类的的内聚。内聚。6.可重用可重用使使用用已已经经存存在在的的类类(包包括括开开发发环环境境提提供供的的类类库库,及及以以往往开开发发相相似似系系统统时时创创建建的的类类),可以提高软件重用性,提高软件生产率。可以提高软件重用性,提高软件生产率。人人们们在在面面向向对对象象方方法法中中也也积积累累了了一一些些经经验验,总结总结出几条启出几条启发规则发规则:1.设计结设计结果果应该应该清晰易懂;清晰易懂;1)用)用词词一致;一致;2)使用已有的)使用已有的协议协议;3)减少消息模式的数目;)减少消息模式的数目;4)避免模糊的定)避免模糊的定义义。11.2启启发规则发规则2.一一般般特特殊殊结结构构的的深深度度应应适适当当:中中等等规规模模的的系系统统中中,类类等等级级层层次次数数应应保保持持为为72。不是必要情况,不不是必要情况,不应该应该随意随意创创建派生建派生类类;3.设设计计简简单单的的类类:设设计计小小而而简简单单的的类类,便便于开于开发发和管理;和管理;1)避免包含)避免包含过过多的属性;多的属性;2)有明确的定)有明确的定义义;3)尽量)尽量简简化化对对象之象之间间的合作关系;的合作关系;4)不要提供太多服)不要提供太多服务务。4.使使用用简简单单的的协协议议:设设计计简简单单的的类类接接口口,发发送的消息中参数要少。送的消息中参数要少。5.使使用用简简单单的的服服务务:编编写写实实现现每每一一个个服服务务时时,避免复避免复杂杂的的语语句和句和结结构;构;6.把把设计变动设计变动减至最小。减至最小。11.3软软件重用件重用11.3.1概述概述1.重用重用重用的三个重用的三个层层次:次:1)知)知识识重用;重用;2)方法和)方法和标标准的重用;准的重用;3)软软件成分的重用。件成分的重用。2.软软件成分的重用件成分的重用级别级别:1)代)代码码重用重用a.源代源代码码剪剪贴贴;b.源代源代码码包含;包含;c.继继承;承;2)设计结设计结果重用果重用3)分析)分析结结果重用果重用3.典型的可重用典型的可重用软软件成分件成分1)项项目目计计划;划;2)成本)成本计计划;划;3)体系)体系结结构;构;4)需求模型和)需求模型和规规格格说说明;明;5)设计设计;6)源代)源代码码;7)用)用户户文档和技文档和技术术文档;文档;8)用)用户户界面;界面;9)数据;)数据;10)测试测试用例。用例。11.4系系统统分解分解类与对象层类与对象层人机交人机交互部分互部分问题域问题域部分部分任务管任务管理部分理部分数据管数据管理部分理部分主题层主题层结构层结构层属性层属性层服务层服务层图图11.2典型的面向对象设计模型典型的面向对象设计模型11.5设计问题设计问题域子域子系系统统 在在设计问题设计问题域部分域部分时时,仅仅需要从需要从实现实现的的角度角度对问题对问题域模型(域模型(对对象模型、象模型、动态动态模型、模型、功能模型)作一些功能模型)作一些补补充、修改,主要是增充、修改,主要是增添、合并或分解添、合并或分解类类与与对对象、属性和服象、属性和服务务,调调整整继继承关系等。承关系等。1.调调整需求整需求2.重用已有的重用已有的类类3.组组合合问题问题域的域的类类4.增添基增添基类类以定以定义义公共函数集合公共函数集合5.调调整整继继承承层层次次1)使用多重)使用多重继继承机制承机制2)使用)使用单继单继承机制承机制6.ATM系系统实统实例例11.6设计设计人机交互子系人机交互子系统统 在在面面向向对对象象分分析析中中,已已经经对对用用户户界界面面需需求求作作了了初初步步分分析析,在在面面向向对对象象设设计计过过程程中中,要要对对系系统统人人机机交交互互部部分分进进行行详详细细设设计计,其其中中包包括括指指定定窗窗口口和和报报表表的的形形式式、设设计计命命令令层层次次等等。等等。设计设计人机交互子系人机交互子系统统的策略:的策略:1)分)分类类用用户户;2)描述用)描述用户户;3)设计设计命令命令层层次;次;4)设计设计人机交互人机交互类类。11.7设计设计任任务务管理子系管理子系统统任任务务可可视视作作进进程(程(Process)1.分析并分析并发发性性基于基于动态动态模型分析并模型分析并发发性,如果性,如果对对象象间间不存在交互,不存在交互,或不同或不同时时接受事件,接受事件,则则是并是并发发的。的。并并发发任任务务可以在不同的可以在不同的处处理器上理器上实现实现,也可以在,也可以在单单个个处处理器上利用多任理器上利用多任务务操作系操作系统实现统实现。2.设计设计任任务务管理子系管理子系统统1)确定事件)确定事件驱动驱动型任型任务务:主要完成通信工作:主要完成通信工作工作工作过过程:睡眠程:睡眠等待来自数据等待来自数据线线的中断的中断任任务务唤唤醒、接收数据醒、接收数据通知相通知相应对应对象象继续继续睡眠睡眠2)确定)确定时钟驱动时钟驱动型任型任务务每隔一定每隔一定时间时间触触发执发执行某些任行某些任务务。3)确定)确定优优先任先任务务4)确定关)确定关键键任任务务5)确定)确定协调协调任任务务当同当同时时运行的任运行的任务较务较多多时时(3个以上),一般个以上),一般设计协调设计协调任任务务,会增加系,会增加系统统开开销销,但有利于封,但有利于封装不同任装不同任务间务间的的协调协调控制。控制。6)尽量减少任)尽量减少任务务数数7)确定)确定资资源需求源需求计计算系算系统载统载荷(荷(单单位位时间处时间处理理业务业务数),估数),估算所需算所需CPU性能。性能。11.8设计设计数据管理子系数据管理子系统统11.8.1选择选择数据存数据存储储管理模式管理模式1.文件管理系文件管理系统统2.关系数据关系数据库库管理系管理系统统3.面向面向对对象数据象数据库库管理系管理系统统11.8.2设计设计数据管理子系数据管理子系统统1.设计设计数据格式数据格式2.设计设计相相应应的服的服务务11.8.3ATM系统实例系统实例 采用成熟的商品化关系数据库。根据数据库范式设计,保持数据采用成熟的商品化关系数据库。根据数据库范式设计,保持数据一致性、完整性。一致性、完整性。 处理并发事务时,每个事务作为一个不可分割的批操作来处理,处理并发事务时,每个事务作为一个不可分割的批操作来处理,由事务封锁帐户,直至事务结束。由事务封锁帐户,直至事务结束。11.9设计类设计类中的服中的服务务11.9.1确定确定类类中中应应有的服有的服务务11.9.2设计实现设计实现服服务务的方法的方法1.设计实现设计实现服服务务的算法的算法1)算法复)算法复杂杂度;度;2)容易理解、容易)容易理解、容易实现实现;3)容易修改;)容易修改;2.选择选择数据数据结结构构3.定定义义内部内部类类和内部操作和内部操作第第12章章面向面向对对象象实现实现12.1.1面向面向对对象象语语言的言的优优点点 使用面向对象语言时,编译程序可以自动把使用面向对象语言时,编译程序可以自动把面向对象概念映射到目标程序中。面向对象概念映射到目标程序中。 使用非面向对象语言编写面向对象程序,则使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到程序必须由程序员自己把面向对象概念映射到程序中。中。 1980年的年的smalltalk-80发发展了展了Simula-67的的对对象和象和类类的概念,并引入了方法、消的概念,并引入了方法、消息、元息、元类类及及协议协议等概念,所以有人将等概念,所以有人将smalltalk80称称为为第一个面向第一个面向对对象象语语言。言。但是,使面向但是,使面向对对象广泛流行的是象广泛流行的是C+。12.1.2面向对象语言的技术特点面向对象语言的技术特点选择选择面向面向对对象象语语言言时应时应考考虑虑的技的技术术特点:特点:1.支持支持类类与与对对象概念的机制象概念的机制2.实现实现整体部分(聚集)整体部分(聚集)结结构的机制构的机制3.实现实现一般特殊(泛化)一般特殊(泛化)结结构的机制构的机制4.实现实现属性和服属性和服务务的机制的机制5.类类型型检查检查6.类库类库7.效率效率8.持久保存持久保存对对象象9.参数化参数化类类10.开开发环发环境境12.1.3选择选择面向面向对对象象语语言言1.将来能否占主将来能否占主导导地位地位2.可重用性可重用性3.类库类库和开和开发环发环境境4.其他因素其他因素有否提供技有否提供技术术支持?提供开支持?提供开发发人人员员什么开什么开发发平台平台?对对及其性能的需求?集成已有及其性能的需求?集成已有软软件的容易程度。件的容易程度。12.2程序程序设计风设计风格格12.2.1提高可重用性提高可重用性12.2.2提高可提高可扩扩充性充性12.2.3提高健壮性提高健壮性12.3测试测试策略策略12.3.1面向面向对对象的象的单单元元测试测试基类:操作基类:操作A:X子类:操作子类:操作A1:XA2:XA3:X有必要有必要在每个在每个子类中子类中测试操测试操作作X不孤立地测试单个操作(函数),而是把操作作为类不孤立地测试单个操作(函数),而是把操作作为类的一部分进行测试。的一部分进行测试。12.3.2面向面向对对象的集成象的集成测试测试两种不同的两种不同的测试测试策略:策略:1)基于)基于线线程的程的测试测试(threadbasedtesting)将响将响应应系系统统的一个的一个输输入或一个事件所需要的哪些入或一个事件所需要的哪些类类集集成起来成起来测试测试。2)基于使用的)基于使用的测试测试(usebasedtesting)先先测试测试独立独立类类,再,再测试测试使用独立使用独立类类的下一的下一层层次的次的类类(依(依赖类赖类),重复直至完),重复直至完毕毕。12.3.3面向面向对对象的确象的确认测试认测试主要是根据主要是根据动态动态模型和描述系模型和描述系统统行行为为的脚本来的脚本来设计设计确确认测试认测试用例。用例。12.4设计测试设计测试用例用例12.4.1测试类测试类的方法的方法1.随机随机测试测试ATM系系统统中中account(帐户帐户)类类的操作有:的操作有:Open(打(打开)、开)、Setup(建立)、(建立)、Deposit(存款)、(存款)、Withdraw(取(取款)、款)、Balance(余(余额额)、)、Summarize(清(清单单)、)、CreditLimit(透支限(透支限额额)、)、Close(关(关闭闭)。)。可以随机地可以随机地产产生一系列不同的操作序列:生一系列不同的操作序列:测试测试用例用例1:Open.Setup.Deposit.Balance.Summarize.Withdraw.Close测试测试用例用例2:Open.Setup.Withdraw.Deposit.Balance.CreditLimit.Close2.划分划分测试测试(类类似于等价似于等价类类划分)划分)1)基于状)基于状态态的划分的划分改改变变Account类类状状态态的操作:的操作:deposit,withdraw;不改不改变变Account类类状状态态的操作:的操作:balance,summarize,creditLimit测试测试用例:用例:1.open.setup.deposit.deposit.withdraw.withdraw.close;2.open.setup.balance.summarize.creditLimit.close;2)基于属性的划分)基于属性的划分根据根据类类操作使用的属性来划分操作。操作使用的属性来划分操作。例,按属性例,按属性Balance分可三分可三类类:使用使用Balance的操作;的操作;不使用不使用Balance的操作;的操作; 不使用也不修改不使用也不修改balance的操作。的操作。3)基于功能的划分)基于功能的划分依据依据类类操作完成的功能来划分操作完成的功能来划分类类操作。操作。例,初始化操作:例,初始化操作:open,setup计计算操作:算操作:deposit,withdraw查询查询操作:操作:balance,summarize,creditLimit3.基于故障的基于故障的测试测试 一般依靠一般依靠经验经验和直和直觉觉,类类似于似于错误错误推推测测试测测试法。法。12.4.2集成集成测试测试方法方法测试类协测试类协作可以使用随机作可以使用随机测试测试方法、划分方法、划分测试测试方法、行方法、行为测试为测试等。等。1.多多类测试类测试2.从从动态动态模型模型导导出出测试测试用例用例EmptyacctsetupacctworkingacctnonworkingacctdeadacctopenSetup acctDeposit(initial)closeWithdraw (final)depositwithdrawBalanceCreditAcct InfoAccount类的状态转换图类的状态转换图应应使使Account类实类实例遍例遍历历所有允所有允许许的状的状态转换态转换:测试测试用例用例1:open.setupacct.deposit(initial).withdraw(final).Close测试测试用例用例2:open.setupacct.deposit(initial).deposit.blance.credit.withdraw(final).Close测试测试用例用例3:open.setupacct.deposit(initial).deposit.withdraw.AcctInfo.withdraw(final).Close第13章:软件评价与管理 ANSI/IEEEStd729-1983定定义义的的“软软件件质质量量”为为:与与软软件件产产品品满满足足规规定定的的和和隐隐含含的需求的能力有关的特征或特性的全体的需求的能力有关的特征或特性的全体。M.J.Fisher定定义义的的“软软件件质质量量”为为:所有所有描述描述计计算机算机软软件件优优秀程度的特性的秀程度的特性的组组合合。13.1软件质量软件质量在在计计算算机机发发展展早早期期,计计算算机机内内存存容容量量有有限限,运运行行速速度度慢慢,人人们们设设计计软软件件时时特特别别强强调时间调时间、空、空间间效率。效率。现现今今对对软软件件质质量量已已经经开开始始形形成成较较全全面面的的评评价。价。13.1.1软件质量标准软件质量标准一般一般说说来,来,应应从三个方面考从三个方面考虑软虑软件件质质量:量:1)功能与性能方面功能与性能方面 软软件件应该应该能能够够按照既定的要求按照既定的要求进进行工作,与行工作,与明确明确规规定的功能和性能需求一致。定的功能和性能需求一致。 软软件要保件要保证证能能够够可靠的工作,合法的可靠的工作,合法的输输入下入下正确运行,非法正确运行,非法输输入和意外事件可安全入和意外事件可安全处处理。理。2)软软件件结结构方面构方面软软件件应该应该具具备备良好的良好的结结构构:1)要求系)要求系统统内部内部结结构清晰,易于构清晰,易于软软件人件人员员阅读阅读和理解,方便和理解,方便对软对软件的修改和件的修改和维护维护;2)要求系)要求系统统具具备备良好的人机交互界面,方良好的人机交互界面,方便用便用户户使用。使用。与明确与明确规规定的功能和性能要求相比,定的功能和性能要求相比,这这些些需求是需求是隐隐含的,也是含的,也是“软软件件质质量量”概念中所定概念中所定义义的。的。3)开开发标发标准与文档方面准与文档方面软软件开件开发应该发应该与明确成文的开与明确成文的开发标发标准相一准相一致,而且要遵循一些致,而且要遵循一些软软件开件开发发准准则则,软软件文件文档档资资料也必料也必须齐须齐全。全。以上三方面是相以上三方面是相辅辅相成的,但相成的,但还还必必须须指出:指出:A不不同同的的人人对对软软件件质质量量的的要要求求不不同同。用用户户要要求求软软件件使使用用方方便便,执执行行效效率率高高;而而维维护护人人员员要求要求软软件文档件文档资资料清晰、完整。料清晰、完整。B不不同同的的软软件件系系统统,它它的的关关键键特特性性有有所所不不同同。例例如如,可可移移植植性性是是某某类类软软件件系系统统的的重重要要特特性性,而而对对于于另另外外一一些些系系统统却却不不是是最最重重要的。要的。C质质量量的的不不同同特特性性之之间间可可能能是是矛矛盾盾的的。例例如如,片片面面强强调调软软件件执执行行效效率率,设设计计出出来来的的软软件件就就可可能能结结构构复复杂杂;追追求求良良好好的的可可靠靠性,就不一定能性,就不一定能获获得得较较高的运行速度。高的运行速度。大型软件系统的质量应该从可靠性、易理大型软件系统的质量应该从可靠性、易理解性、易维护性和效率等几个方面评价。解性、易维护性和效率等几个方面评价。具体开发时应使诸多的质量特性最大限度具体开发时应使诸多的质量特性最大限度地满足。地满足。软软件件质质量保量保证证(SQA)主要做好几方面:)主要做好几方面:1)应应用技用技术术手段手段软软件件质质量量保保证证活活动动开开始始于于帮帮助助分分析析员员获获得得高高质质量量的的规规格格说说明明书书,帮帮助助设设计计员员应应用用高高效效的的技技术术方法和工具,并且始方法和工具,并且始终贯终贯穿整个开穿整个开发过发过程。程。13.1.2软件质量保证软件质量保证2)组织组织技技术评审术评审 在在软软件开件开发过发过程的每个程的每个阶阶段段结结束后,都需束后,都需要要组织组织技技术评审术评审,可以及早,可以及早发现软发现软件开件开发过发过程中可能引起的潜在程中可能引起的潜在错误错误,并,并对质对质量量进进行行评评价。价。3)加加强强软软件件测试测试软软件件测测试试是是软软件件质质量量保保证证的的重重要要手手段段,可以可以发现软发现软件中大多数件中大多数隐隐蔽的蔽的错误错误。4)推行推行软软件工程件工程标标准准 标标准是由用准是由用户户或委托或委托单单位确定的,有位确定的,有时时是是设计设计者自定的。者自定的。 一旦一旦标标准确定,就准确定,就应该应该重重视标视标准,并在准,并在软软件开件开发发中中统统一遵循。因此,可以将一遵循。因此,可以将软软件件规规范情范情况作况作为软为软件技件技术评审术评审的一的一项项内容。内容。5)控制控制软软件件变变更更软软件件质质量量的的一一个个主主要要威威胁胁来来自自于于对对软软件件的的修修改和改和变变更。更。在在修修改改的的过过程程中中常常常常会会引引起起一一些些新新的的潜潜在在错错误误。因此,。因此,应严应严格控制格控制软软件的修改和件的修改和变变更。更。6)对软对软件件质质量量进进行度量行度量 软软件件质质量保量保证证的一个重要目的一个重要目标标也是也是对软对软件件质质量量进进行跟踪,行跟踪,这这就需要就需要对软对软件件质质量量进进行度量,并行度量,并对软对软件件质质量情况及量情况及时记录时记录和和报报告。告。Boehm在在1976年提出了定量年提出了定量评评价价软软件件质质量的概量的概念,并念,并给给出了出了60个个质质量度量公式,量度量公式,还还第一次提出了第一次提出了软软件件质质量的量的层层次次模型。模型。可移植性可移植性可使用性可使用性可维护性可维护性可靠性可靠性效率效率环境工程环境工程可测试性可测试性可理解性可理解性可修改性可修改性设备独立性设备独立性完善性完善性准确性准确性一致性一致性设备效率设备效率可存取性可存取性通信性通信性结构性结构性自描述性自描述性简洁性简洁性易读性易读性可扩充性可扩充性图图13.1Boehm模型模型一、一、Boehm模型模型13.2软软件件质质量度量模型量度量模型 McCall于于1979年年提提出出了了包包括括软软件件质质量量要要素素、软软件件评评价价准准则则、软软件件质质量量度度量量的的三三个个层层次次的的McCall软软件件质质量度量模型。量度量模型。产品修正产品修正产品转移产品转移互连性互连性可移植性可移植性复用性复用性可维护性可维护性可测试性可测试性灵活性灵活性正确性正确性可靠性可靠性可使用性可使用性效率效率完整性完整性图图13.2McCall软件质量模型软件质量模型产品运行产品运行二、二、McCall模型模型 这这个个模模型型提提出出了了11个个软软件件质质量量要要素素,22个个软软件件属属性性(评评价价准准则则)。其其中中11个个质质量量要要素素分分别别面面向向软软件件产产品的运行、修正和品的运行、修正和转转移等三个主要用途。移等三个主要用途。产品修正产品修正产品转移产品转移互连性互连性可移植性可移植性复用性复用性可维护性可维护性可测试性可测试性灵活性灵活性正确性正确性可靠性可靠性可使用性可使用性效率效率完整性完整性图图13.2McCall软件质量模型软件质量模型产品运行产品运行软软件的件的质质量因素定量因素定义义如下:如下:1)正正确确性性:软软件件满满足足设设计计规规格格说说明明及及用用户预户预期目期目标标的程度,它要求的程度,它要求软软件没有件没有错误错误。2)可可靠靠性性:软软件件按按设设计计要要求求,在在规规定定时时间间和条件下不出故障、持和条件下不出故障、持续续运行的程度。运行的程度。3)效效率率:为为完完成成预预定定功功能能,软软件件系系统统所所需的需的计计算机算机资资源的多少。源的多少。4)完完整整性性:为为某某一一目目的的而而保保护护数数据据,避避免免它受到有意、偶然的破坏或它受到有意、偶然的破坏或遗遗失的能力。失的能力。5)可可使使用用性性:用用户户学学习习、使使用用软软件件以以及及为为程程序序准准备备输输入入和和解解释释输输出出所所需需工工作作量量的的大大小。小。6)可可维维护护性性:对对一一个个已已投投入入运运行行的的软软件件进进行相行相应诊应诊断和修改所需工作量的大小。断和修改所需工作量的大小。7)可可测测试试性性:测测试试软软件件以以确确保保其其能能够够执执行行预预定功能所需工作量的大小。定功能所需工作量的大小。8)灵灵活活性性:修修改改或或改改进进一一个个已已投投入入运运行行的的软软件所需工作量的大小。件所需工作量的大小。9)可可移移植植性性:将将一一个个软软件件系系统统从从一一个个计计算算机机系系统统移移植植到到另另一一个个计计算算机机系系统统或或环环境境所所需需工作量的大小。工作量的大小。10)复复用用性性:一一个个软软件件(或或软软件件的的部部件件)能能再次用于其它再次用于其它应应用的程度。用的程度。11)互互连连性性:连连接接一一个个软软件件或或其其他他系系统统所所需需工作量的大小。工作量的大小。通常,通常,对对以上以上11个个质质量要素直量要素直接度量是困接度量是困难难的,的,因此因此McCall定定义义了一些了一些评评价准价准则则,使用它,使用它们们来来估估计软计软件件质质量要量要素的素的值值。可训练性可训练性可操作性可操作性可跟踪性可跟踪性完整性完整性容错性容错性准确性准确性一致性一致性执行效率执行效率复杂性复杂性安全性安全性工具性工具性简明性简明性可审计性可审计性可扩充性可扩充性模块性模块性自描述性自描述性简洁性简洁性通用性通用性硬件独立性硬件独立性软件独立性软件独立性通信共用性通信共用性数据共用性数据共用性可使用性可使用性正确性正确性可靠性可靠性效率效率完整性完整性可维护性可维护性灵活性灵活性可测试性可测试性可移植性可移植性复用性复用性互连性互连性产品运行产品运行产品修正产品修正产品转移产品转移图图13.3McCall质量度量模型质量度量模型质量因素质量因素主要用途主要用途软件属性(评价准则)软件属性(评价准则)度量度量三、三、ISO质质量度量模型量度量模型1985年年,国国际际标标准准化化组组织织(ISO)提提出出建建议议,软软件件质质量度量模型由三量度量模型由三层组层组成:成:1)高)高层层是是软软件件质质量需求量需求评评价准价准则则(SQRC)2)中)中层层是是软软件件质质量量设计评设计评价准价准则则(SQDC)3)底)底层层是是软软件件质质量度量量度量评评价准价准则则(SQMC)ISO的三的三层结层结构来源于构来源于McCall的模型,其的模型,其高高层层、中、中层层、底、底层层分分别别与与McCall模型的模型的质质量量因素、因素、评评价准价准则则、度量相、度量相对应对应。 其中其中SQRC由由8个个质质量因素量因素组组成,成,SQDC选选用了用了23个个评评价准价准则则。ISO认为认为,高,高层层和和中中层应层应建立国建立国际标际标准,准,以便在国以便在国际际范范围围内推内推广广应应用用SQM技技术术。而底而底层层SQMC则则可可以由各使用以由各使用单单位根据位根据实际实际情况制定。情况制定。图图13.4ISO建建议的质议的质量度量量度量模型模型可跟踪性可跟踪性完整性完整性一致性一致性准确性准确性容错性容错性简洁性简洁性模块性模块性通用性通用性可扩充性可扩充性工具性工具性自描述性自描述性简明性简明性执行效率执行效率存储效率存储效率存取控制存取控制存取审查存取审查可操作性可操作性可训练性可训练性通信性通信性软件独立性软件独立性硬件独立性硬件独立性通信共用性通信共用性数据共用性数据共用性正确性正确性可靠性可靠性可维护性可维护性适应性适应性效率效率安全性安全性可用性可用性连接性连接性SQRCSQDCSQMC由由各各使使用用单单位位根根据据实实际际情况制定情况制定1991年年ISO发发布的布的ISO/IEC9126质质量特性国量特性国际际标标准中准中:SQRC(高(高层层)改称)改称为为“质质量特性量特性”;SQDC(中(中层层)称)称为为“质质量子特性量子特性”;SQMC(底(底层层)称)称为为“度量度量”。高高层质层质量特性降量特性降为为6个,分个,分别别是:是:1)功能性功能性;2)可靠性可靠性;3)可可维护维护性性;4)效率效率;5)可使用性可使用性;6)可移植性可移植性。中中层层子特性推荐使用子特性推荐使用21个。个。软软件件的的各各种种质质量量因因素素之之间间相相互互存存在在有有利利和和不不利利的的影影响响,所所以以没没有有一一种种软软件件的的设设计计能能同同时时使所有的使所有的质质量因素都是最佳的。量因素都是最佳的。在在实实际际中中,应应根根据据软软件件的的不不同同类类型型和和不不同同要求,要求,对对不同的不同的评评价准价准则给则给出不同的出不同的权权重。重。软软件件质质量量度度量量(SQM)技技术术,仍仍然然处处于于发发展和完善展和完善阶阶段。段。关关于于软软件件质质量量因因素素的的选选用用,有有面面向向用用户户的的,有面向有面向软软件开件开发发人人员员的,有面向管理人的,有面向管理人员员的。的。根根据据ISO今今年年来来讨讨论论的的趋趋势势,逐逐渐渐向向面面向向用用户户靠靠拢拢。因因为为,软软件件质质量量因因素素是是在在软软件件需需求求分分析和定析和定义阶义阶段,由用段,由用户户根据需要提出来的要求。根据需要提出来的要求。13.3软软件工程管理件工程管理 软软件工程管理就是指件工程管理就是指对对整个整个软软件开件开发发运行运行过过程,包括分析、程,包括分析、设计设计、编码编码、测测试试及及维护维护各个各个阶阶段的一切活段的一切活动进动进行有效行有效的管理和控制。的管理和控制。 它主要包括开它主要包括开发发人人员员、组织组织机构、用机构、用户户、文档、文档资资料、料、计计划划进进度、度、经费经费开支等开支等方面的管理。方面的管理。一、一、组织组织机构机构软软件件开开发发没没有有统统一一的的模模式式,但但是是一一个个好好的的软软件件开开发发组组织织应应该该具具有有好好的的组组织织机机构构、合合理理的的人人员员分分工工、有有效的通效的通讯讯。软件经理软件经理项目经理项目经理1项目经理项目经理2项目经理项目经理n程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组审审查查小小组组图图13.5大型软件开发组织结构大型软件开发组织结构13.3.1组织机构与人员管理组织机构与人员管理 在大型在大型软软件开件开发组织结发组织结构中,构中,软软件件经经理理负责负责管理管理软软件开件开发发部部门门,在各个,在各个项项目目间间分配和分配和协调协调各种各种资资源。源。项项目目经经理理领导领导1到到6个程序小个程序小组组,管理一个具体,管理一个具体项项目的各个方目的各个方面(包括面(包括计计划、划、进进度、度、审查审查、复、复审审等)。等)。软件经理软件经理项目经理项目经理1项目经理项目经理2项目经理项目经理n程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组审审查查小小组组图图13.5大型软件开发组织结构大型软件开发组织结构 每个程序小每个程序小组负责项组负责项目的一部分开目的一部分开发发工作。工作。审查审查小小组组从事从事质质量保量保证证活活动动,在,在项项目开目开发发每个每个阶阶段段结结束之束之前前进进行技行技术审查术审查和管理复和管理复审审。软件经理软件经理项目经理项目经理1项目经理项目经理2项目经理项目经理n程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组程程序序小小组组审审查查小小组组图图13.5大型软件开发组织结构大型软件开发组织结构二、主程序二、主程序员组员组 主程序主程序员组员组由由IBM公司在公司在70年代初期提出,年代初期提出,它是一种程序小它是一种程序小组组的的较为较为流行的流行的组织组织形式。形式。高级工程师高级工程师(主程序员)(主程序员)后备工程师后备工程师技术人员技术人员专家专家资料员资料员辅助人员辅助人员图图13.6主程序员组主程序员组主主程程序序员员组组中中选选用用经经验验丰丰富富、技技术术好好的的程程序序员员担担任任主主程程序序员员。他他负负责责主主持持计计划划、协协调调和和复复审审该该程程序序小小组组中中的的全全部部技技术术活活动动。技技术术人人员员一一般般由由2到到5人人组组成成,负负责责软软件件分分析析和和开开发发活活动动。后后备备工工程程师师支支持持高高级级工工程程师师(主主程程序序员员)的工作,必要)的工作,必要时时代替主程序代替主程序员员工作。工作。高级工程师高级工程师(主程序员)(主程序员)后备工程师后备工程师技术人员技术人员专家专家资料员资料员辅助人员辅助人员图图12.6主程序员组主程序员组 根根据据应应用用的的规规模模和和类类型型,程程序序小小组组可可能能还还需需要要临临时时或或长长期期地地增增加加一一些些具具体体领领域域的的专专家家、辅辅助助人人员员(初初级级程序程序设计员设计员、秘、秘书书、打字、打字员员等)、等)、资资料管理料管理员员。高级工程师高级工程师(主程序员)(主程序员)后备工程师后备工程师技术人员技术人员专家专家资料员资料员辅助人员辅助人员图图12.6主程序员组主程序员组三、用三、用户户用用户户是是应应用用软软件件开开发发中中一一个个重重要要的的,不不可可忽忽视视的因素。的因素。在在软软件件开开发发过过程程中中必必须须得得到到用用户户的的密密切切配配合合与与支支持持。项项目目负负责责人人必必须须特特别别留留意意与与用用户户保保持持联联系系,掌掌握握用用户户的的心心理理和和动动态态,防防止止来来自自用用户户的一些干的一些干扰扰。用用户户的干的干扰扰,如:,如:1)不不配配合合。这这种种表表现现来来自自于于对对软软件件持持怀怀疑疑态态度或抵触心理的用度或抵触心理的用户户。2)急于求成急于求成。3)变变化化无无常常。这这种种表表现现来来自自于于个个别别用用户户不不假假思思索索,不不断断改改变变原原有有的的需需求求,提提出出新新的要求和修改意的要求和修改意见见。为为了了保保证证软软件件开开发发能能按按预预定定的的时时间间表表进进行,必行,必须对软须对软件开件开发过发过程加以控制:程加以控制:1)进进度控制度控制项项目目进进度度的的制制定定应应在在软软件件定定义义与与分分析析阶阶段段完完成成,一一旦旦制制定定,要要严严格格执执行行,不不要随意更改。要随意更改。13.3.2软件工程控制软件工程控制2)人人员员控制控制人人员员的的频频繁繁变变动动或或流流动动将将会会大大大大增增加加软软件件出出错错机会,因此要保机会,因此要保证证开开发发人人员员的的稳稳定性。定性。至至少少要要保保证证软软件件项项目目每每一一期期工工程程,或或者者软软件生存周期每一件生存周期每一阶阶段中人段中人员员的相的相对稳对稳定性。定性。还还要努力要努力调动调动每一个开每一个开发发人人员员的的积积极性。极性。3)经费经费控制控制要要编编制制详详细细的的经经费费预预算算,并并在在各各个个阶阶段段进进行行经费经费的核算,尽量避免的核算,尽量避免预预算超支。算超支。4)质质量控制量控制 认认真抓好各个真抓好各个阶阶段的复段的复审审工作。工作。软软件件工工程程管管理理很很大大程程度度上上是是通通过过对对文文档档资资料料的管理来的管理来实现实现的。的。每每个个阶阶段段的的文文档档资资料料是是对对前前面面工工作作的的总总结结和和审审核核,又又是是后后一一阶阶段段的的工工作作基基础础。所所以以,应应该该建建立立一一套套完完整整的的文文档档资资料料体体系系,描描述述和和记记录录整整个开个开发过发过程。程。 文档文档资资料料标标准化是文档管理的重要准化是文档管理的重要课题课题。13.3.3文档资料管理文档资料管理13.4软软件件产权产权 软软件件产产品的特殊性是:品的特殊性是:软软件开件开发发工作量工作量大、周期大、周期长长、投、投资资高,然而高,然而软软件复制却相件复制却相当容易,而且复制当容易,而且复制费费用很低。用很低。 所以所以长长期以来,期以来,软软件件产产品的侵品的侵权权行行为为非非常常严严重,重,严严重挫重挫伤伤了人了人们们开开发软发软件的件的积积极极性。性。计计算算机机软软件件是是一一种种人人类类智智力力的的创创作作成成果果,享享有有的的经经济济权权利利和和精精神神权权利利主主要要靠靠知知识识产产权权来保来保护护。有关有关软软件件产权产权保保护护的法律有:的法律有:1)版)版权权法法2)专专利法利法3)商)商标标法法4)商)商业业秘密法秘密法13.4.1软件知识产权的法律保护软件知识产权的法律保护1)版版权权法法版版权权法法主主要要保保护护对对象象是是文文字字作作品品。计计算算机机软软件件中中的的文文档档资资料料大大部部分分是是文文字字作作品品,源源程程序序中的注中的注释释部分也是文字作品。部分也是文字作品。如如果果将将代代码码看看作作是是特特殊殊的的文文字字,整整个个程程序序就就是是文文字字作作品品了了。所所以以,版版权权法法保保护护计计算算机机软软件。件。 版版权权法要求受保法要求受保护护的的软软件件产产品具有品具有独独创创性性(也称(也称为为初初创创性、原性、原创创性),不能抄性),不能抄袭袭或复制他人的或复制他人的软软件。件。2)专专利法利法版版权权法法保保护护的的只只是是文文字字作作品品的的表表达达形形式式,不保不保护护作品中反映出的作者的构思、方案。作品中反映出的作者的构思、方案。软软件件产产品品的的作作者者在在软软件件构构思思上上的的工工作作是是创创造造性性劳劳动动,类类似似于于发发明明成成果果,可可以以使使用用专专利利法来保法来保护护。 对软对软件件产产品的保品的保护护,专专利法比版利法比版权权法要求法要求严严格。它要求受保格。它要求受保护护的的软软件具有三个特性:件具有三个特性:新新颖颖性、技性、技术术先先进进性、性、实实用性用性。 对对于已于已经获经获得得专专利的利的软软件,可以享受件,可以享受专专利法利法和版和版权权法所法所赋赋予的双重法律保予的双重法律保护护。3)商商标标法法计计算算机机软软件件兼兼有有作作品品和和产产品品的的特特征征,所所以以也得到商也得到商标标法的保法的保护护。4)商商业业秘密法秘密法 无无论论采采取取哪哪种种知知识识产产权权法法的的保保护护,对对软软件件的一部分源程序始的一部分源程序始终终受到商受到商业业秘密法的保秘密法的保护护。 一一些些软软件件的的主主要要开开发发者者在在许许可可他他人人使使用用有有关关软软件件时时,如如果果不不愿愿意意将将源源程程序序及及有有关关文文件件中中某某些些内内容容透透露露出出去去,就就可可以以利利用用“许许可可合合同同”或或“第第三三方方保保存存源源程程序序合合同同”等等合合同同中中制制定定的的相相应应的保持商的保持商业业秘密的条款来保秘密的条款来保护护。 一、一、软软件著作件著作权权保保护护的基本条件的基本条件中中华华人人民民共共和和国国著著作作权权法法明明确确规规定定,计计算机算机软软件是它受保件是它受保护护客体中的一客体中的一项项。受保受保护护的的软软件必件必须满须满足两个基本条件:足两个基本条件:13.4.2软件著作权保护软件著作权保护1)必必须须是开是开发发者独立开者独立开发发的,即具有原的,即具有原创创性性著著作作权权保保护护的的主主要要形形式式和和内内容容是是在在一一定定时时间间范范围围内内,禁禁止止他他人人未未经经软软件件权权利利人人许许可可进进行行的的复复制制或或抄抄袭袭软软件件的的行行为为。任任何何有有复复制制或或抄抄袭袭他人的他人的软软件不能件不能获获得著作得著作权权。2)在某种有形物体上在某种有形物体上 如如纸纸、磁、磁带带、磁、磁盘盘等,通等,通过这过这些有形物体些有形物体能能为为人所感知、人所感知、传传播和复制。播和复制。只只要要满满足足著著作作权权法法中中基基本本条条件件的的计计算算机机软软件件(包包括括程程序序和和文文件件),都都受受著著作作权权保保护护。二、软件著作权保护范围二、软件著作权保护范围注注:尽尽管管程程序序的的目目标标代代码码是是以以二二进进制制数数码码形形式式构构成成的的,但但是是应应该该把把它它和和源源代代码码视视为为同同一作品,因而也享有著作权保护。一作品,因而也享有著作权保护。 软软件著作件著作权权保保护护的只是的只是软软件的表件的表现现,而不,而不是是软软件的一切。件的一切。 例如,例如,软软件的程序代件的程序代码码受著作受著作权权保保护护,但,但软软件开件开发过发过程中使用的任何思想、概念、程中使用的任何思想、概念、发现发现、原理、算法、原理、算法、处处理理过过程和运行方式都不受保程和运行方式都不受保护护,可以被他人使用以制作功能相似的可以被他人使用以制作功能相似的软软件。件。三、著作三、著作权权人人权权利利根根据据我我国国著著作作权权法法规规定定,作作品品著著作作权权人人(版(版权权人)的人)的专专利利权权包括:包括:1)发发表表权权2)署名署名权权3)修改修改权权4)保保护护作品完整作品完整权权5)使用使用权权和和获获得得报报酬酬权权四、精神四、精神权权利和利和经济权经济权利利一一般般说说来来,版版权权法法授授予予著著作作权权人人的的专专有有权权利可以分利可以分为为两个方面:两个方面:1)精神精神权权利利也也称称为为非非财财产产权权利利。发发表表权权、署署名名权权、保保护护作作品品完完整整权权属属于于精精神神权权利利。许许多多国国家家的的版版权权法都法都规规定,作者的精神定,作者的精神权权利是永久的。利是永久的。2)经济权经济权利利 也称也称财产权财产权利,是指作者使用自己的作品利,是指作者使用自己的作品以以获获得得经济经济收益的收益的专专有有权权利,以及作者在社会利,以及作者在社会大众使用自己的作品大众使用自己的作品时时取得取得报报酬的酬的权权利。修改利。修改权权、使用、使用权权和和获获得得报报酬酬权权属于属于经济权经济权利。利。 经济权经济权利可以利可以转让给转让给他人。他人。Thank You!The End
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号