软件工程225页完整版教学课件汇总全书电子教案

上传人:cn****1 文档编号:567444597 上传时间:2024-07-20 格式:PPT 页数:225 大小:1.78MB
返回 下载 相关 举报
软件工程225页完整版教学课件汇总全书电子教案_第1页
第1页 / 共225页
软件工程225页完整版教学课件汇总全书电子教案_第2页
第2页 / 共225页
软件工程225页完整版教学课件汇总全书电子教案_第3页
第3页 / 共225页
软件工程225页完整版教学课件汇总全书电子教案_第4页
第4页 / 共225页
软件工程225页完整版教学课件汇总全书电子教案_第5页
第5页 / 共225页
点击查看更多>>
资源描述

《软件工程225页完整版教学课件汇总全书电子教案》由会员分享,可在线阅读,更多相关《软件工程225页完整版教学课件汇总全书电子教案(225页珍藏版)》请在金锄头文库上搜索。

1、软件工程第一章软件工程概论第一章软件工程概论本章首先对软件技术进行了概括性的说明,在此基础上,对软件工程产生的原因、发展历程、研究内容等进行了阐述。进一步对软件工程的基本原理和原则、软件生命周期模型、软件工程工具和开发集成环境进行了较详细的讲解。通过本章的学习能使读者对软件工程学科的全貌有较深入的了解。软件发展史2020世纪世纪世纪世纪5050年代,程序是由设计者本人开发和维护的结构简年代,程序是由设计者本人开发和维护的结构简年代,程序是由设计者本人开发和维护的结构简年代,程序是由设计者本人开发和维护的结构简单,功能单一,可靠性差的小型源程序。所以,人们认为单,功能单一,可靠性差的小型源程序。

2、所以,人们认为单,功能单一,可靠性差的小型源程序。所以,人们认为单,功能单一,可靠性差的小型源程序。所以,人们认为软件就是程序,软件系统就是程序系统;软件就是程序,软件系统就是程序系统;软件就是程序,软件系统就是程序系统;软件就是程序,软件系统就是程序系统;6060年代,软件的功能、规模日益增大,软件的开发只能由年代,软件的功能、规模日益增大,软件的开发只能由年代,软件的功能、规模日益增大,软件的开发只能由年代,软件的功能、规模日益增大,软件的开发只能由群体来承担,软件设计进入到了作坊式生产阶段。为了提群体来承担,软件设计进入到了作坊式生产阶段。为了提群体来承担,软件设计进入到了作坊式生产阶段

3、。为了提群体来承担,软件设计进入到了作坊式生产阶段。为了提高程序的可维护性,人们认为软件等于程序加文档,所谓高程序的可维护性,人们认为软件等于程序加文档,所谓高程序的可维护性,人们认为软件等于程序加文档,所谓高程序的可维护性,人们认为软件等于程序加文档,所谓文档就是指软件开发过程中与分析、设计、实现、测试、文档就是指软件开发过程中与分析、设计、实现、测试、文档就是指软件开发过程中与分析、设计、实现、测试、文档就是指软件开发过程中与分析、设计、实现、测试、维护相关的文档。但不包括与软件开发过程相关的管理文维护相关的文档。但不包括与软件开发过程相关的管理文维护相关的文档。但不包括与软件开发过程相关

4、的管理文维护相关的文档。但不包括与软件开发过程相关的管理文档;档;档;档;对管理文档的全面认识是从对管理文档的全面认识是从对管理文档的全面认识是从对管理文档的全面认识是从7070年代开始的。在这一时期,年代开始的。在这一时期,年代开始的。在这一时期,年代开始的。在这一时期,随着软件需求的规模、数量剧增和交付的紧迫,要求大型随着软件需求的规模、数量剧增和交付的紧迫,要求大型随着软件需求的规模、数量剧增和交付的紧迫,要求大型随着软件需求的规模、数量剧增和交付的紧迫,要求大型程序的开发活动要按照工程项目的模式运作。此时,软件程序的开发活动要按照工程项目的模式运作。此时,软件程序的开发活动要按照工程项

5、目的模式运作。此时,软件程序的开发活动要按照工程项目的模式运作。此时,软件工程方法被引入到软件开发过程中,对软件定义的认识也工程方法被引入到软件开发过程中,对软件定义的认识也工程方法被引入到软件开发过程中,对软件定义的认识也工程方法被引入到软件开发过程中,对软件定义的认识也得到了提高,得到了如下的软件构成公式:得到了提高,得到了如下的软件构成公式:得到了提高,得到了如下的软件构成公式:得到了提高,得到了如下的软件构成公式:软件程序文档数据软件程序文档数据软件程序文档数据软件程序文档数据8080年代,人们开始认识到软件管理是一个过程管年代,人们开始认识到软件管理是一个过程管理。因此,到理。因此,

6、到9090年代,出现了软件过程能力成熟年代,出现了软件过程能力成熟度模型,人们开始研究软件过程管理的具体内容度模型,人们开始研究软件过程管理的具体内容与方法。与方法。19971997年出现的统一建模语言(年出现的统一建模语言(UnifiedUnifiedModelingLanguageModelingLanguage,UMLUML)就是突出的研究成)就是突出的研究成果之一。果之一。UMLUML的目标之一就是为开发团队提供标的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。准通用的设计语言来开发和构建计算机应用。UMLUML的出现标志着软件开发进入到了一个以规范的出现标志着软

7、件开发进入到了一个以规范化、过程化、工厂化、大型化、自动化为特征的化、过程化、工厂化、大型化、自动化为特征的较成熟的阶段。较成熟的阶段。 软件分类分类准则分类准则软件类别软件类别软件功能系统软件、支撑软件、应用软件。工作方式实时软件、分时软件、交互式软件、批处理软件。规模微型软件、小型软件、中型软件、大型软件、超大型软件、极大型软件。服务对象定制软件、产品软件。应用领域操作系统、数据库管理系统、软件开发系统、工程软件、办公软件、财会软件、网络工具软件、图形图像处理软件、多媒体软件、游戏软件、教育软件等。收费方式商品软件、共享软件、自由软件。软件工程的发展软件工程产生的诱因是20世纪60年代的软

8、件危机。通过解决软件危机,软件工程的理论和方法逐渐形成,并最终成为了现代软件技术的核心之一。为了解决软件危机,人们认识到有以下三种途径:为了解决软件危机,人们认识到有以下三种途径:采用工程化方法来开发和维护软件。软件开发不应只采用工程化方法来开发和维护软件。软件开发不应只是个体化的劳动,而应该是由组织良好、管理严密、是个体化的劳动,而应该是由组织良好、管理严密、种类人员共同配合完成的一个工程项目,因此应该注种类人员共同配合完成的一个工程项目,因此应该注意吸收和借鉴从事其它工程项目行之有效的科学原理意吸收和借鉴从事其它工程项目行之有效的科学原理和方法;和方法;采用先进的技术、方法、工具开发和设计

9、软件。即采采用先进的技术、方法、工具开发和设计软件。即采用先进的管理技术、规范的开发方法和模型、各种提用先进的管理技术、规范的开发方法和模型、各种提高开发效率的软件工具等;高开发效率的软件工具等;采用必要的组织管理措施。软件工程正是解决软件危采用必要的组织管理措施。软件工程正是解决软件危机问题的过程中形成的一门综合技术与管理两个方面机问题的过程中形成的一门综合技术与管理两个方面的新兴学科,并逐渐成为指导计算机开发、维护、管的新兴学科,并逐渐成为指导计算机开发、维护、管理的理论依据。理的理论依据。软件工程的定义19831983年年IEEE(InstituteofElectricalandElec

10、tronicsIEEE(InstituteofElectricalandElectronicsEngineers)Engineers)为软件工程下的定义是:软件工程是开为软件工程下的定义是:软件工程是开发、运行、维护和修复软件的系统方法;发、运行、维护和修复软件的系统方法;19931993年年IEEEIEEE进一步给出了一个更全面的定义:(进一步给出了一个更全面的定义:(1 1)把系)把系统化的,规范的,可度量的信息途径应用于软件开统化的,规范的,可度量的信息途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软发、运行和维护的过程,也就是把工程化应用于软件中(件中(2 2)研究()研究

11、(1 1)中提到的途径;概括起来,所)中提到的途径;概括起来,所谓软件工程就是采用工程化的概念、原理和技术、谓软件工程就是采用工程化的概念、原理和技术、方法来开发和维护软件,把经过时间考验证明是正方法来开发和维护软件,把经过时间考验证明是正确的管理技术和当前好的技术方法结合起来指导计确的管理技术和当前好的技术方法结合起来指导计算机软件开发和维护的工程学科。算机软件开发和维护的工程学科。软件工程的内容研究内容研究内容内容举例内容举例软件开发模型瀑布模型、增量模型、原型模型、迭代模型软件开发方法面向过程的方法、面向数据的方法、面向对象的方法软件支持过程CASE工具类软件过程管理ISO9000、CM

12、M软件工程的基本原理软件工程的基本原理用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应能清楚地审查;开发小组的成员应该少而精;承认不断改进软件工程实践的必要性。软件工程的原则软件工程的原则抽象原则信息隐藏原则模块化原则局部化原则确定性原则一致性原则完备性原则可验证性原则软件生命周期目前有许多种软件生命周期模型,常见的如瀑布模型、演化模型、增量模型、螺旋模型、喷泉模型、变换模型和基本知识的模型等。软件开发工具需求工具类别需求工具类别说明说明需求分析工具 需求定义阶段所使用的工具,包括描述工具和分析工具。用以辅助系统分析员生成完整、正确、一致的需求

13、说明,改善软件开发人员间的通信状况,减少管理和维护费用。设计工具系统设计阶段所使用的工具,以形成设计规格说明,检查并排除规格说明中的错误;一种是描述工具,如图形、表格和语言描述的工具,另一种是变换工具,从一种描述转换成另一种描述。编码工具编码所使用的工具。主要包括各种实现性语言、编译程序、编辑程序和解释程序等。测试工具测试阶段所使用的工具,如测试数据产生程序、跟踪程序、测试程序和验证评价程序等。软件维护工具软件维护工具类别软件维护工具类别说明说明版本控制工具用来存储、更新、恢复和管理一个软件多个版本;文档分析工具用以对软件开发过程形成的文档资料进行分析,给出软件维护活动所需的维护信息;逆向工程

14、工具辅助软件人员将某种形式表示的软件转换成更高抽象形式表示的软件;再工程工具支持软件重构,提高软件功能、性能以及可维护性。软件管理和支持工具软件维护工具类别软件维护工具类别说明说明项目管理工具辅助管理人员进行项目的计划、成本估算、资源分配、质量控制等管理活动;开发信息库工具维护软件项目的种开发信息;配置管理工具完成软件配置的标识、版本控制、变化控制等基本任务;软件评价工具辅助管理人员进行质量保证的有关活动。软件工程第二章第二章 软件系统可行性研究与需求分析软件系统可行性研究与需求分析本章对软件系统的可行性研究和需求分析进行了全面的阐述。可行性研究和需求分析是软件系统开发初期相继要做的重要工作,

15、相关工作的质量直接影响到软件开发的成败。掌握软件系统的可行性研究和需求分析的基本原则和方法有助于读者把握软件开发的全局和预测开发结果。软件系统可行性研究软件系统可行性研究 一般要从以下五个方面进行可行性研究一般要从以下五个方面进行可行性研究一般要从以下五个方面进行可行性研究一般要从以下五个方面进行可行性研究技术可行性技术可行性技术可行性技术可行性经济可行性经济可行性经济可行性经济可行性 操作可行性操作可行性 调度可行性调度可行性 法律可行性法律可行性 软件系统可行性都是针对具体的方案的,系统分析员要对软件系统可行性都是针对具体的方案的,系统分析员要对每一个可能的方案进行以上几个方面的分析,如果

16、各个方每一个可能的方案进行以上几个方面的分析,如果各个方案均无可行性,系统分析员应建议终止项目。如果项目是案均无可行性,系统分析员应建议终止项目。如果项目是可行的,则应向有关方推荐较优的方案,并附带提供相应可行的,则应向有关方推荐较优的方案,并附带提供相应的初步工程计划。的初步工程计划。可行性研究的步骤可行性研究的步骤 细化软件系统的目标和规模认真研究现有系统设计新系统的高层系统模型评审新系统的逻辑模型设计和评价新系统的实现方案制定行动方案制定开发计划书写可行性报告,提交审查可行性研究的循环流程项目号项目号项目号项目号项目项目项目项目详细内容详细内容详细内容详细内容1 1引言引言问题的定义问题

17、的定义系统实现的环境系统实现的环境系统的约束条件系统的约束条件2 2管理总结和意见管理总结和意见关键性问题关键性问题相关解释相关解释管理管理意意见见系统的影响系统的影响3 3可选择性可选择性可选择方案的系统设计方案可选择方案的系统设计方案用于选择和评价方案的标准用于选择和评价方案的标准4 4推荐方案描述推荐方案描述方案的简要说明方案的简要说明各系统元素的可行性各系统元素的可行性5 5推荐方案的成本效益分析推荐方案的成本效益分析成本效益表成本效益表成本效益分析表述成本效益分析表述6 6推荐方案的技术风险性分析推荐方案的技术风险性分析所需技术列表所需技术列表技术风险分析表技术风险分析表7 7推荐方

18、案的进度表推荐方案的进度表方案的进度表方案的进度表进度协调方案进度协调方案8 8方案的法律问题方案的法律问题列举所涉及的法律因素列举所涉及的法律因素法律风险分析法律风险分析9 9其它问题其它问题前八个项目以外的内容前八个项目以外的内容可行性报告的一般性内容软件需求分析软件需求分析 软件需求分析的任务的内容软件需求分析的任务的内容软件需求分析的任务的内容软件需求分析的任务的内容确定对软件系统的要求确定对软件系统的要求分析软件系统的数据及操作要求分析软件系统的数据及操作要求确定软件系统的详细逻辑模型确定软件系统的详细逻辑模型 修订系统开发计划修订系统开发计划编写软件需求规格说明书编写软件需求规格说

19、明书软件需求分析法软件需求分析法功能分解法功能分解法 信息建模法信息建模法 面向对象的分析法面向对象的分析法 结构化分析法结构化分析法结构化分析法结构化方法是一种实用的软件开发方法集,它由结构化分析结构化方法是一种实用的软件开发方法集,它由结构化分析(StructureAnalysis,SAStructureAnalysis,SA)、结构化设计)、结构化设计(StructureDesign,(StructureDesign,SD)SD)和结构化程序设计和结构化程序设计(StructureProgramming,SP)(StructureProgramming,SP)构成。其中,构成。其中,结构

20、化分析法是需求分析中较常被采用的方法。结构化分析法是需求分析中较常被采用的方法。结构化分析法的优点在于:简单实用,易为开发者掌握,在结构化分析法的优点在于:简单实用,易为开发者掌握,在成功率方面仅次于面向对象的方法。特别适合于数据处理领域中成功率方面仅次于面向对象的方法。特别适合于数据处理领域中的应用,对其它领域的应用也基本适用。该方法存在的主要问题的应用,对其它领域的应用也基本适用。该方法存在的主要问题有:对于规模很大,特别复杂的项目不太适应;难以适应需求的有:对于规模很大,特别复杂的项目不太适应;难以适应需求的变化。变化。结构化分析法的描述工具数据流图数据流图 数据字典数据字典 描述加工逻

21、辑的结构化语言、判定表及判定树描述加工逻辑的结构化语言、判定表及判定树 结构化分析法的步骤建立现行系统的物理模型建立现行系统的物理模型 抽象出现行系统的逻辑模型抽象出现行系统的逻辑模型 建立目标系统的逻辑模型建立目标系统的逻辑模型作进一步补充和优化作进一步补充和优化数据流图数据流图(数据流图(DataFlowDiagram,DFDDataFlowDiagram,DFD),是结构化分析法中),是结构化分析法中用于表示系统逻辑模型的工具。它以图形的方式描绘数据在系统用于表示系统逻辑模型的工具。它以图形的方式描绘数据在系统中流动和处理的过程。它反映的是目标系统的逻辑功能,故它是中流动和处理的过程。它

22、反映的是目标系统的逻辑功能,故它是一种功能模型。一种功能模型。数据字典数据流图对信息处理逻辑模型的描述具有直观、全面、数据流图对信息处理逻辑模型的描述具有直观、全面、易懂的优点,但没有准确、完整地定义图元。结构化分析易懂的优点,但没有准确、完整地定义图元。结构化分析法要求对于数据流图中的所有数据流流,文件和底层加工法要求对于数据流图中的所有数据流流,文件和底层加工进行准确、完整地定义,这些定义为系统的分析、设计和进行准确、完整地定义,这些定义为系统的分析、设计和维护提供了数据流图中所出现的各种成份的进一步说明。维护提供了数据流图中所出现的各种成份的进一步说明。图元定义汇集在一起就构成了数据词典

23、(图元定义汇集在一起就构成了数据词典(DataDictionaryDataDictionary,DDDD),数据词典和数据流图共同构成了系统的逻辑模),数据词典和数据流图共同构成了系统的逻辑模型,是软件需求规格说明书的主要成份。在数据词典中,型,是软件需求规格说明书的主要成份。在数据词典中,用数据项、数据流和数据文件来对数据进行描述。用数据项、数据流和数据文件来对数据进行描述。 软件需求规格说明书软件需求规格说明书在用户和开发人员充分地理解了用户的要求之后,应在用户和开发人员充分地理解了用户的要求之后,应将共同的理解以规范化的形式准确地表达出来,并形成需将共同的理解以规范化的形式准确地表达出来

24、,并形成需求规格说明书。需求规格说明书是软件开发过程中非常重求规格说明书。需求规格说明书是软件开发过程中非常重要的文档。为了保证开发的正常进行,在分析阶段就必须要的文档。为了保证开发的正常进行,在分析阶段就必须及时地建立该文档,并保证其质量。需求规格说明书实际及时地建立该文档,并保证其质量。需求规格说明书实际上是为软件系统描绘了一个逻辑模型,在开发早期就为软上是为软件系统描绘了一个逻辑模型,在开发早期就为软件系统建立一个可以清晰预见的模型,并以该逻辑模型为件系统建立一个可以清晰预见的模型,并以该逻辑模型为开发的核心。开发的核心。 需求规格说明书主要会有以下三个作用:需求规格说明书主要会有以下三

25、个作用:作为用户和软件开发机构之间的合同,为双方相互了解提作为用户和软件开发机构之间的合同,为双方相互了解提供基础;供基础;反映问题的结构,作为设计和编码的基础;反映问题的结构,作为设计和编码的基础;作为测试和验收目标系统的依据。作为测试和验收目标系统的依据。需求分析的复审需求分析的复审所提交的软件需求文档,必须进行全面、认真的复审,所提交的软件需求文档,必须进行全面、认真的复审,以防止理解错误和需求遗漏的发生。由项目开发组织将软以防止理解错误和需求遗漏的发生。由项目开发组织将软件需求文档和用户需求的原始文档分发给用户和软件开发件需求文档和用户需求的原始文档分发给用户和软件开发人员,要求他们阅

26、读审查,提出问题或建议。人员,要求他们阅读审查,提出问题或建议。 复审一般可围绕下列问题进行:复审一般可围绕下列问题进行:系统定义的目标是否与用户的要求一致;系统定义的目标是否与用户的要求一致;系统需求分析阶段提供的文档资料是否齐全;系统需求分析阶段提供的文档资料是否齐全;文档中的所有描述是否完整、清晰、准确地反映了用户的要求;文档中的所有描述是否完整、清晰、准确地反映了用户的要求;与所有的其它系统成分的重要接口是否都已描述;与所有的其它系统成分的重要接口是否都已描述;所开发项目的数据流与数据结构是否足够且确定;所开发项目的数据流与数据结构是否足够且确定;所有图表是否清楚,在没有补充说明时是否

27、易于理解;所有图表是否清楚,在没有补充说明时是否易于理解;主要功能是否已包含在规定的软件范围之内,是否都已充分说明;主要功能是否已包含在规定的软件范围之内,是否都已充分说明;设计的约束条件或限制条件是否符合实现;设计的约束条件或限制条件是否符合实现;开发的技术风险是什么;开发的技术风险是什么;是否考虑过将来可能会提出的软件需求;是否考虑过将来可能会提出的软件需求;是否详细制定了检验标准,标准能否对系统定义的成败进行确认;是否详细制定了检验标准,标准能否对系统定义的成败进行确认;有无遗漏、重复或不一致的地方;有无遗漏、重复或不一致的地方;用户是否审查了初步的用户手册;用户是否审查了初步的用户手册

28、;软件开发计划中的估算是否受到了影响。软件开发计划中的估算是否受到了影响。软件工程第三章第三章 软件设计软件设计软件设计是在需求分析的基础上构建软件系统具体实现框架的过程,这一过程基本确定了软件系统的规模、结构和所需资源。软件设计的质量会影响到软件系统的性能、成本和可维护性。本章对软件设计中的结构设计和详细设计分别进行了深入的阐述,读者可以了解软件设计的概念、方法和支持工具。软件设计的基本概念软件设计的基本概念是从软件设计的基本概念是从2020世纪世纪6060年代陆续提出的。年代陆续提出的。经过多年来软件工程师们的不懈努力,基本概念和配套方经过多年来软件工程师们的不懈努力,基本概念和配套方法不

29、断完善。法不断完善。软件设计的基本原则如下:软件设计的基本原则如下:模块化模块化 抽象与逐步求精抽象与逐步求精 信息隐藏原理信息隐藏原理 信息隐藏原理中的耦合耦合性度量一个程序结构中各个模块之间相互联系的程度,它取耦合性度量一个程序结构中各个模块之间相互联系的程度,它取决于各个模块之间接口的复杂程度,取决于如何进入或访问一个模块,决于各个模块之间接口的复杂程度,取决于如何进入或访问一个模块,以及哪些数据将通过该接口。程序中总是希望各模块间的耦合尽可能以及哪些数据将通过该接口。程序中总是希望各模块间的耦合尽可能低,追求尽可能松散耦合的系统。这样的程序容易修改和维护,且当低,追求尽可能松散耦合的系

30、统。这样的程序容易修改和维护,且当共处出现错误并沿着系统蔓延时也不致引起连锁反应。耦合一般具有共处出现错误并沿着系统蔓延时也不致引起连锁反应。耦合一般具有以下几种形式:以下几种形式:数据耦合数据耦合 标记耦合标记耦合 控制耦合控制耦合 外部耦合外部耦合 公共耦合公共耦合 内容耦合内容耦合 耦合性与模块属性的关系属性耦合属性耦合属性耦合属性耦合对修改的敏感对修改的敏感对修改的敏感对修改的敏感性性性性可重用可重用可重用可重用性性性性可修改性可修改性可修改性可修改性可理解性可理解性可理解性可理解性内容耦合内容耦合很强很强很差很差很差很差很差很差公共耦合公共耦合强强很差很差中中很差很差外部耦合外部耦合

31、一般一般很差很差很差很差中中控制耦合控制耦合一般一般差差差差差差标记耦合标记耦合弱弱中中中中中中数据耦合数据耦合最弱最弱好好好好好好信息隐藏原理中的内聚内聚标志一个模块内部各个元素之间的紧密程度。作内聚标志一个模块内部各个元素之间的紧密程度。作为度量模块相对功能强度的指标,总是希望它越高超好。为度量模块相对功能强度的指标,总是希望它越高超好。内聚一般具有以下几种形式:内聚一般具有以下几种形式:偶然内聚偶然内聚逻辑内聚逻辑内聚时间内聚时间内聚信息内聚信息内聚顺序内聚顺序内聚功能内聚功能内聚内聚性与模块属性的关系属性内聚属性内聚属性内聚属性内聚内部联系内部联系内部联系内部联系清晰性清晰性清晰性清晰

32、性可重用性可重用性可重用性可重用性可修改性可修改性可修改性可修改性可理解性可理解性可理解性可理解性内容耦合内容耦合很差很差差差很差很差很差很差很差很差公共耦合公共耦合很差很差很差很差很差很差很差很差差差外部耦合外部耦合差差中中很差很差中中中中控制耦合控制耦合中中好好差差中中中中标记耦合标记耦合好好好好中中好好好好数据耦合数据耦合好好好好好好好好好好面向数据流的设计过程面向数据流的设计过程面向数据流的设计方法的目标是给出提供软件结构的面向数据流的设计方法的目标是给出提供软件结构的一个系统化的途径。在软件工程的需求分析阶段,信息流一个系统化的途径。在软件工程的需求分析阶段,信息流是一个关键考虑,通

33、常用数据流图来描绘信息在系统中被是一个关键考虑,通常用数据流图来描绘信息在系统中被加工和信息流动的情况。面向数据流的设计方法定义了一加工和信息流动的情况。面向数据流的设计方法定义了一些不同的些不同的“ “映射映射” ”,利用这些映射可以把数据流图变换成,利用这些映射可以把数据流图变换成软件结构。因为任何软件系统都可以用数据流图表示,所软件结构。因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。以面向数据流的设计方法理论上可以设计任何软件的结构。对于不同的信息流的类型采用不同的映射方法。对于不同的信息流的类型采用不同的映射方法。 信息流有以下两种类型:信

34、息流有以下两种类型:变换流变换流在基本系统模型中,信息通常以在基本系统模型中,信息通常以“ “外部世界外部世界” ”所具所具有的形式进入系统,经过处理后又以这种形式离开系统,有的形式进入系统,经过处理后又以这种形式离开系统,如图所示。如图所示。 信息流事务流事务流事务流出于基本系统模型呈变换流,故任意系统中的信息均出于基本系统模型呈变换流,故任意系统中的信息均可用变换流刻画。但若数据流具有如图所示形状,则称为可用变换流刻画。但若数据流具有如图所示形状,则称为“ “事务流事务流” ”。事务流面向数据流的软件设计过程变换分析与事务分析变换分析变换分析变换分析是一系列设计步骤的总称,经过这些步骤把变

35、换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件具有变换流特点的数据流图按预先确定的模式映射成软件结构。结构。事物分析事物分析当数据流具有明显的事务特征时,即能找到一个事务当数据流具有明显的事务特征时,即能找到一个事务(亦称触发数据项)和一个事务中心,采用事物分析法更(亦称触发数据项)和一个事务中心,采用事物分析法更为适宜。与变换分析一样,事务分析也是从分析数据流图为适宜。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统结构图。开始,自顶向下,逐步分解,建立系统结构图。数据库设计数据库设计是指在已有数据库管理系统的基础上

36、建立数据库设计是指在已有数据库管理系统的基础上建立数据库的过程。它在数据库系统的开发中占有非常重要的数据库的过程。它在数据库系统的开发中占有非常重要的地位。数据库设计的好坏直接影响整个系统的效率。数据地位。数据库设计的好坏直接影响整个系统的效率。数据库设计包括以下两方面的内容:库设计包括以下两方面的内容:结构特性设计结构特性设计结构特性设计也就是数据库框架或数据结构的设计。结构特性设计也就是数据库框架或数据结构的设计。它是数据库设计的关键所在。结构特性设计要达到的目的它是数据库设计的关键所在。结构特性设计要达到的目的是:汇总各用户视图,尽量减少冗余,实现数据共享,设是:汇总各用户视图,尽量减少

37、冗余,实现数据共享,设计出一个包含各用户视图的统一数据模型。计出一个包含各用户视图的统一数据模型。行为特性设计行为特性设计行为特性设计是指应用程序的设计。例如,数据库查行为特性设计是指应用程序的设计。例如,数据库查询、事务处理和报表处理等应用程序的设计。询、事务处理和报表处理等应用程序的设计。数据库设计工作流程数据库设计的基本步骤数据库设计的基本步骤需求分析需求分析 需求分析是整个数据库设计过程中非常重要的一步,需求分析是整个数据库设计过程中非常重要的一步,它是全部设计工作的基础。这个过程的工作做得越细,它是全部设计工作的基础。这个过程的工作做得越细,设计工作也就会越顺利。需求分析的目的是了解

38、用户要设计工作也就会越顺利。需求分析的目的是了解用户要求,对现实世界中的处理对象进行调查、分析,制定出求,对现实世界中的处理对象进行调查、分析,制定出数据库设计的目标。数据库设计的目标。 概念结构设计概念结构设计念结构设计是系统结构设计的第一步,它是在需求念结构设计是系统结构设计的第一步,它是在需求分析的基础上对客观世界所做的抽象,它独立于数据库分析的基础上对客观世界所做的抽象,它独立于数据库的逻辑结构,也独立于具体的的逻辑结构,也独立于具体的DBMSDBMS。概念模型是对实。概念模型是对实际应用对象形象而具体的描述,因此也可以把它看成是际应用对象形象而具体的描述,因此也可以把它看成是逻辑设计

39、的开始。逻辑设计的开始。 需求分析过程组织机构情况的调查是分析信息流程的基础,它对掌握数据组织机构情况的调查是分析信息流程的基础,它对掌握数据的规律、数据的组织形式有着重要的作用;的规律、数据的组织形式有着重要的作用;了解具体的业务现状,即了解各部门的业务活动情况。通过了解具体的业务现状,即了解各部门的业务活动情况。通过这项调查可以知道现行业务中信息的种类、信息的流程、信这项调查可以知道现行业务中信息的种类、信息的流程、信息的处理方式及各种业务的工作过程等。这实际上是对数据息的处理方式及各种业务的工作过程等。这实际上是对数据的产生过程、数据之间的联系以及数据的方式和用途的详细的产生过程、数据之

40、间的联系以及数据的方式和用途的详细了解过程,它是调查的重点;了解过程,它是调查的重点;了解外部要求。例如,响应时间的要求,数据安全性、完整了解外部要求。例如,响应时间的要求,数据安全性、完整性的要求等;性的要求等;了解长远规划中的应用范围和要求。一个数据库的建立,特了解长远规划中的应用范围和要求。一个数据库的建立,特别是大型数据库的建立要投入大量的人力和物力,如果不充别是大型数据库的建立要投入大量的人力和物力,如果不充分考虑长远的发展需要,那么,所建立的数据库可能暂时满分考虑长远的发展需要,那么,所建立的数据库可能暂时满足了用户的应用要求,但随着形势的发展,当用户提出新的足了用户的应用要求,但

41、随着形势的发展,当用户提出新的应用要求时,原有的系统就不能适应需要,从而导致系统失应用要求时,原有的系统就不能适应需要,从而导致系统失效,造成很大的浪费。因此,在设计数据库时,要充分考虑效,造成很大的浪费。因此,在设计数据库时,要充分考虑今后发展的需要,要留有余地,要充分考虑系统的可修改和今后发展的需要,要留有余地,要充分考虑系统的可修改和可扩充性。可扩充性。概念结构设计过程概念结构设计要借助于某种方便、直观的描述工具,概念结构设计要借助于某种方便、直观的描述工具,E-E-R R(EntityEntityRelationshipRelationship)图是设计概念模型的有力工具。在)图是设计

42、概念模型的有力工具。在E-RE-R图中用三种图框分别表示实体、属性及实体间的联系。规图中用三种图框分别表示实体、属性及实体间的联系。规定如下:定如下:用矩形框表示实体,框内标明实体名;用矩形框表示实体,框内标明实体名;用椭圆状框表示实体的属性,并在其内写上属性名;用椭圆状框表示实体的属性,并在其内写上属性名;用菱形框表示实体间的联系,框内写上联系名;用菱形框表示实体间的联系,框内写上联系名;实体与其属性之间以无向边联接,菱形框及相关实体之间亦用实体与其属性之间以无向边联接,菱形框及相关实体之间亦用无向边联接,并在无向边穷标明联系的类型。无向边联接,并在无向边穷标明联系的类型。建立分建立分E-R

43、E-R图的主要工作是对需求分析阶段收集到的数据进图的主要工作是对需求分析阶段收集到的数据进行分类、组织,划分实体和属性,确定实体之间的联系。实行分类、组织,划分实体和属性,确定实体之间的联系。实体和属性之间在形式上并没有可以截然划分的界限,而常常体和属性之间在形式上并没有可以截然划分的界限,而常常是现实对它们的存在所作的大概的自然划分。是现实对它们的存在所作的大概的自然划分。 建立了各分建立了各分E-RE-R图以后,要对它们进行综合,即把各分图以后,要对它们进行综合,即把各分E-RE-R图图联接在一起。这一步主要的工作是找出各分联接在一起。这一步主要的工作是找出各分E-RE-R图之间的联图之间

44、的联系,而在确定各分系,而在确定各分E-RE-R图的联系时,可能会遇到相互之间不图的联系时,可能会遇到相互之间不一致的问题,称之为冲突。这是因为分一致的问题,称之为冲突。这是因为分E-RE-R图是实际应用问图是实际应用问题的抽象,不同的应用通常由不同的设计人员进行概念结构题的抽象,不同的应用通常由不同的设计人员进行概念结构的设计,因此分的设计,因此分E-RE-R图之间的冲突往往是不可避免的。图之间的冲突往往是不可避免的。 初步的初步的E-RE-R图综合了系统中各用户对信息的要求,它可能存图综合了系统中各用户对信息的要求,它可能存在冗余的数据和冗余的联系。也就是说,在初步的在冗余的数据和冗余的联

45、系。也就是说,在初步的E-RE-R图中图中可能存在这样的数据和联系,它们分别可以由基本数据和基可能存在这样的数据和联系,它们分别可以由基本数据和基本联系导出。冗余的数据和联系的存在会破坏数据库的完整本联系导出。冗余的数据和联系的存在会破坏数据库的完整性,增加数据库管理的困难,因此,需要加以消除。初步性,增加数据库管理的困难,因此,需要加以消除。初步E ER R图消除了冗余以后,称为基本图消除了冗余以后,称为基本E-RE-R图。图。为了建立用户所要求的数据库,必须把概念结构转换为某个为了建立用户所要求的数据库,必须把概念结构转换为某个具体的具体的DBMSDBMS所支持的数据模型,这就是逻辑结构设

46、计所要所支持的数据模型,这就是逻辑结构设计所要完成的任务。完成的任务。 在完成了数据库的逻辑结构设计以后,则要进行物理结构在完成了数据库的逻辑结构设计以后,则要进行物理结构的设计。物理结构设计的任务就是为逻辑结构设计阶段所的设计。物理结构设计的任务就是为逻辑结构设计阶段所得到的逻辑数据模型选择一个最适合应用环境的物理结构。得到的逻辑数据模型选择一个最适合应用环境的物理结构。物理结构的设计依赖于具体的计算机系统,它是一个反复物理结构的设计依赖于具体的计算机系统,它是一个反复进行的过程,首先要针对具体的进行的过程,首先要针对具体的DBMSDBMS和设备的特性,确和设备的特性,确定实现所设计的逻辑数

47、据模型必须采取的存储结构和存取定实现所设计的逻辑数据模型必须采取的存储结构和存取方法,然后对该存储模式进行性能评价。若评价结果满足方法,然后对该存储模式进行性能评价。若评价结果满足原设计要求则进入设计实施阶段,否则就要修改设计,经原设计要求则进入设计实施阶段,否则就要修改设计,经过多次反复,直到取得满意的结果为止。过多次反复,直到取得满意的结果为止。设计优化启发式设计策略启发式设计策略: :调整模块的功能和规模,降低锅台度,提高内聚度调整模块的功能和规模,降低锅台度,提高内聚度 调整软件结构的深度、宽度、扇出和扇入数目,改善软件调整软件结构的深度、宽度、扇出和扇入数目,改善软件结构性能结构性能

48、 改造程序结构,使任一模块的作用域在其控制域之内改造程序结构,使任一模块的作用域在其控制域之内 分析模块之间的接口信息,降低界面的复杂性和冗余程度,分析模块之间的接口信息,降低界面的复杂性和冗余程度,提高协调性提高协调性 模块功能应该可预言,避免对模块施加过多限制模块功能应该可预言,避免对模块施加过多限制 改造程序结构,追求单入口、单出口的模块改造程序结构,追求单入口、单出口的模块 为满足设计或可移植性的要求,把某些软件用包为满足设计或可移植性的要求,把某些软件用包(packagepackage)的形式封装起来)的形式封装起来 设计优化准则设计优化准则: :在不考虑时间因素的前提下开发并精化软

49、件结构;在不考虑时间因素的前提下开发并精化软件结构;在详细设计阶段选出最耗费时间的那些模块,仔细地设在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;计它们的处理过程(算法),以求提高效率;使用高级程序设计语言编写程序;使用高级程序设计语言编写程序;在软件中孤立出那些大量占用处理机资源的模块;在软件中孤立出那些大量占用处理机资源的模块;必要时重新设计或用依赖于机器的语言重写上述大量占必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。用资源的模块的代码,以求提高效率。软件详细设计详细设计就是要在结构设计的基础上,考虑详细设计就

50、是要在结构设计的基础上,考虑“ “怎样实怎样实现现” ”这个软件系统,直到对系统中的每个模块给出足够详这个软件系统,直到对系统中的每个模块给出足够详细的过程性描述,从而在编码阶段可以将这个描述直接翻细的过程性描述,从而在编码阶段可以将这个描述直接翻译成用某种程序设计语言书写的程序。译成用某种程序设计语言书写的程序。 详细设计是以结构设计阶段的工作为基础的,但又不详细设计是以结构设计阶段的工作为基础的,但又不同于结构设计,主要表现为以下两个方面:同于结构设计,主要表现为以下两个方面:在结构设计阶段,数据项和数据结构以比较抽象的方式描在结构设计阶段,数据项和数据结构以比较抽象的方式描述,而详细设计

51、阶段则应在此基础上给出足够详细的描述。述,而详细设计阶段则应在此基础上给出足够详细的描述。例如,结构设计可以声明一组值从概念上表示一个矩阵,例如,结构设计可以声明一组值从概念上表示一个矩阵,详细设计就要确定用什么样的数据结构来实现这样的矩阵。详细设计就要确定用什么样的数据结构来实现这样的矩阵。详细设计要提供关于算法的更多细节,例如,结构设计可详细设计要提供关于算法的更多细节,例如,结构设计可以声叫一个模块的作用是对一个表进行排序,详细设计则以声叫一个模块的作用是对一个表进行排序,详细设计则要确定使用哪种排序算法。在详细设计阶段为每个模块增要确定使用哪种排序算法。在详细设计阶段为每个模块增加了足

52、够的细节后,程序员才能够以相当直接的方式进行加了足够的细节后,程序员才能够以相当直接的方式进行下一阶段的编码工作。下一阶段的编码工作。详细设计的任务详细设计的任务: :详细设计的月的详细设计的月的, ,是为软件结构图(是为软件结构图(SCSC图或图或HCHC图)中的每一图)中的每一个模块确定采用的实现算法和块内数据结构,用选定的表达个模块确定采用的实现算法和块内数据结构,用选定的表达工具给出清晰的描述。表达工具可以由开发单位或设计人员工具给出清晰的描述。表达工具可以由开发单位或设计人员自由选择,但它必须具有描述过程细节的能力,进而可在编自由选择,但它必须具有描述过程细节的能力,进而可在编码阶段

53、能够直接将它翻译为用程序设计语言书写的源程序。码阶段能够直接将它翻译为用程序设计语言书写的源程序。主要任务如下:主要任务如下:为每个模块确定采用的算法,选择某种适当的工具表达算法为每个模块确定采用的算法,选择某种适当的工具表达算法的过程的过程, ,写出模块的详细过程性描述;写出模块的详细过程性描述;确定每一模块使用的数据结构;确定每一模块使用的数据结构;确定模块接口的细节,包括对系统外部的接口和用户界面,确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其他模块的接口,以及模块输人数据、输出数据对系统内部其他模块的接口,以及模块输人数据、输出数据及局部数据的全部细节;及局部数据的全

54、部细节;为每一个模块设计出一组测试用例,以便在编码阶段对模块为每一个模块设计出一组测试用例,以便在编码阶段对模块代码进行预定的测试代码进行预定的测试, ,模块的测试用例是软件测试计划的重要模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据、期望输出等内容。组成部分,通常应包括输入数据、期望输出等内容。详细设计的过程中应遵循以下原则:详细设计的过程中应遵循以下原则:模块的逻辑描述要清晰易读、正确可靠;模块的逻辑描述要清晰易读、正确可靠;采用结构化设计方法改善控制结构,降低程序的复杂程度,采用结构化设计方法改善控制结构,降低程序的复杂程度,从而提高程序的可读性、可测试性、可维护性。其基

55、本内从而提高程序的可读性、可测试性、可维护性。其基本内容归纳为如下几点:容归纳为如下几点:(1)(1)程序语言中应尽量少用程序语言中应尽量少用GOTOGOTO语句,以确保程序结构的语句,以确保程序结构的独立性;独立性;(2)(2)使用单入口单出口的控制结构,确保程序的静态结构与使用单入口单出口的控制结构,确保程序的静态结构与动态执行情况相一致,保证程序易理解;动态执行情况相一致,保证程序易理解;(3)(3)程序的控制结构一般采用顺序、选择、循环三种结构来程序的控制结构一般采用顺序、选择、循环三种结构来构成,确保结构简单;构成,确保结构简单;(4)(4)用自顶向下逐步求精方法完成程序设计。结构化

56、程序设用自顶向下逐步求精方法完成程序设计。结构化程序设计的缺点是存储容量和运行时间增加计的缺点是存储容量和运行时间增加10102020,但可读,但可读性、维护性好。性、维护性好。选择恰当描述工具来描述各模块算法。选择恰当描述工具来描述各模块算法。详细设计工具在详细设计阶段,软件开发人员面临两个方面的问题:在详细设计阶段,软件开发人员面临两个方面的问题:一个是决定实现每个模块的算法,另一个是如何精确地表一个是决定实现每个模块的算法,另一个是如何精确地表达这些算法。自然,前一问题涉及到所开发项目的具体要达这些算法。自然,前一问题涉及到所开发项目的具体要求和对每个模块规定的功能。算法的问题不属于本书

57、讨论求和对每个模块规定的功能。算法的问题不属于本书讨论的范围。后一问题需要给出适用的算法表达形式,或者说的范围。后一问题需要给出适用的算法表达形式,或者说应提供详细设计的表达工具。应提供详细设计的表达工具。在理想情况下,算法过程描述应采用自然语言来表达,这样在理想情况下,算法过程描述应采用自然语言来表达,这样不熟悉软件的人要理解起来比较容易,无需重新学习,但是,自不熟悉软件的人要理解起来比较容易,无需重新学习,但是,自然语言在语法和语义上往往具有多义性,常常要依赖上下文才能然语言在语法和语义上往往具有多义性,常常要依赖上下文才能把问题交代清楚。因此,目前流行的详细设计的工具主要有以下把问题交代

58、清楚。因此,目前流行的详细设计的工具主要有以下三种。三种。图形工具。利用图形工具可以把过程的细节用图形描述出来,如图形工具。利用图形工具可以把过程的细节用图形描述出来,如程序流程图;程序流程图;表格工具。可以用一张表来描述过程的细节,在这张表中列出了表格工具。可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件;各种可能的操作和相应的条件;语言工具。用与某种高级语言相类似的伪码来描述过程的细节。语言工具。用与某种高级语言相类似的伪码来描述过程的细节。按此准则要求设计工具具有下列属性:按此准则要求设计工具具有下列属性:模块化(模块化(modularitymodularity)

59、。支持模块化软件的开发并提供描述接口的机制(例如)。支持模块化软件的开发并提供描述接口的机制(例如直接表示子程序和块结构);直接表示子程序和块结构);整体简洁性(整体简洁性(overallsimplicityoverallsimplicity)。设计表示相对易学、易用、易读;)。设计表示相对易学、易用、易读;便于编辑(便于编辑(easeofeditingeaseofediting)。支持后续设计、测试乃至维护阶段对设计进行)。支持后续设计、测试乃至维护阶段对设计进行的修改;的修改;机器可读性(机器可读性(machinereadabilitymachinereadability)。计算机辅助软件

60、工程()。计算机辅助软件工程(CASECASE)环境已)环境已被广泛接受。一种设计表示法若能直接输入并被被广泛接受。一种设计表示法若能直接输入并被CASECASE工具识别,将带来极大工具识别,将带来极大便利;便利;可维护性(可维护性(maintainabilitymaintainability)。过程设计表示应支持各种软件配置项的维护;)。过程设计表示应支持各种软件配置项的维护;强制结构化(强制结构化(structureenforcementstructureenforcement)。过程设计工具应能强制设计人员采用)。过程设计工具应能强制设计人员采用结构化构件,有助于产生好的设计;结构化构件

61、,有助于产生好的设计;自动产生报告(自动产生报告(automaticprocessingautomaticprocessing)。设计人员通过分析详细设计的结果)。设计人员通过分析详细设计的结果往往能突发灵感,改进设计。若存在自动处理器,能产生有关设计的分析报往往能突发灵感,改进设计。若存在自动处理器,能产生有关设计的分析报告,必将增强设计人员在这方面的能力;告,必将增强设计人员在这方面的能力;数据表示(数据表示(datarepresentationdatarepresentation)。详细设计应具备表示局部与全局数据的能)。详细设计应具备表示局部与全局数据的能力;力;逻辑验证(逻辑验证(l

62、ogicverificationlogicverification)。能自动验证设计逻辑的正确性是软件测试追)。能自动验证设计逻辑的正确性是软件测试追求的最高目标,设计表示愈易于逻辑验证,其可测试性愈强;求的最高目标,设计表示愈易于逻辑验证,其可测试性愈强;可编码能力(可编码能力(“codeto”ability“codeto”ability)。若能自然地转换为代码,则能减少开发费)。若能自然地转换为代码,则能减少开发费用,降低出错率。用,降低出错率。Warnier设计法WarnierWarnier设计法又称为逻辑地构造程序的方法设计法又称为逻辑地构造程序的方法(LCPLCP),是由),是由J.

63、DJ.DWarnierWarnier提出的一种面向数据结构的提出的一种面向数据结构的设计方法。设计方法。WarnierWarnier方法的原理是从数据结构出发设计程方法的原理是从数据结构出发设计程序,这种方法的逻辑比较严格。序,这种方法的逻辑比较严格。 WarnierWarnier程序设计方法的最终目标同样是得出对程序处理过程的详细描述,程序设计方法的最终目标同样是得出对程序处理过程的详细描述,这种设计方法有下面五个步骤:这种设计方法有下面五个步骤:第一步:分析确定输入数据和输出数据的逻辑结构,并用第一步:分析确定输入数据和输出数据的逻辑结构,并用WarnierWarnier图描绘这图描绘这些

64、数据结构;些数据结构;第二步:主要依据输入数据结构导出程序结构,并用第二步:主要依据输入数据结构导出程序结构,并用WarnierWarnier图描绘程序的图描绘程序的处理层次;处理层次;第三步:画出程序流程图并自上而下依次给每个处理框编序号;第三步:画出程序流程图并自上而下依次给每个处理框编序号;第四步:分类写出伪码指令,第四步:分类写出伪码指令,WarnierWarnier定义了下列五类指令:定义了下列五类指令:(1 1)输入和输入准备;)输入和输入准备;(2 2)分支和分支很备;)分支和分支很备;(3 3)计算;)计算;(4 4)输出和输出准备;)输出和输出准备;(5 5)子程序调用。)子

65、程序调用。第五步:把前一步中分类写出的指令按顺序排序,从而得到描述处理过程的第五步:把前一步中分类写出的指令按顺序排序,从而得到描述处理过程的伪码。伪码。 人机界面设计人机交互(人机交互(HCIHCI,HumanComputerInteractionHumanComputerInteraction)是)是指人(即计算机用户)与计算机系统之间的信息交换,故指人(即计算机用户)与计算机系统之间的信息交换,故又称人机对话(又称人机对话(HumancomputerDialogueHumancomputerDialogue)或人机通信)或人机通信(HumanComputerCommunicationHu

66、manComputerCommunication)。实现人与计算机)。实现人与计算机之间通信的软硬件系统就是交互系统。这里所说的之间通信的软硬件系统就是交互系统。这里所说的“ “交互交互” ”是指信息交换,包括计算机通过输出设备提供给人的信是指信息交换,包括计算机通过输出设备提供给人的信息,也包括人通过输入设备提供给计算机的信息。息,也包括人通过输入设备提供给计算机的信息。人机界面又称用户界面或人机接口,是用户与计算机人机界面又称用户界面或人机接口,是用户与计算机系统之间的分界线,是有用户与计算机系统之间的通信媒系统之间的分界线,是有用户与计算机系统之间的通信媒体或人机对话(体或人机对话(Hu

67、manComputerDialogueHumanComputerDialogue)的手段,是)的手段,是实现人机双向信息交换的支持硬件和软件,是计算机系统实现人机双向信息交换的支持硬件和软件,是计算机系统的一个重要组成部分。的一个重要组成部分。人机界面的设计过程可以分为下面几个步骤:人机界面的设计过程可以分为下面几个步骤:创建系统功能的外部模型创建系统功能的外部模型确定为完成此系统功能人和计算机应分别完成的任务确定为完成此系统功能人和计算机应分别完成的任务 考虑界面设计中的典型问题考虑界面设计中的典型问题借助借助CASECASE工具构造界面原型工具构造界面原型人机界面设计基本原则人机界面设计基

68、本原则: :说起人机界面,人们就会想到说起人机界面,人们就会想到“ “人性化人性化” ”、“ “个性化个性化” ”、“ “以人为本以人为本” ”以及以及“ “用户友好(用户友好(UserFriendlyUserFriendly)” ”这这些字眼,它的核心就是些字眼,它的核心就是“ “以用户为中心(以用户为中心(UserUsercenteredcentered)” ”的用户界面设计原则。人们总结了交互式系的用户界面设计原则。人们总结了交互式系统设计的基本准则,这些被称作统设计的基本准则,这些被称作“ “黄金法则黄金法则” ”的设计准则的设计准则是人们在用户界面设计实践中受到启发而得来,并正在进是

69、人们在用户界面设计实践中受到启发而得来,并正在进一步被证实和完善。一步被证实和完善。n n一致性。一致性。n n快捷的操作方式。快捷的操作方式。n n及时的反馈信息。及时的反馈信息。n n对话过程闭合性。对话过程闭合性。n n简明的错误处理。简明的错误处理。n n动作的可逆性。动作的可逆性。n n支持内部控制节。支持内部控制节。n n减少用户记忆负担。减少用户记忆负担。目前,最通用的界面标准是目前,最通用的界面标准是X-WindowsX-Windows系统,它定系统,它定义了人机界面设计的语法和语义,提供了一套用于创建显义了人机界面设计的语法和语义,提供了一套用于创建显示(示(displayd

70、isplay)、窗口()、窗口(windowwindow)和图形()和图形(graphicsgraphics)的工)的工具,以及有关资源处理(具,以及有关资源处理(resourcehandlingresourcehandling)、设备交互)、设备交互(deviceinteractiondeviceinteraction)和事件处理()和事件处理(eventhandlingeventhandling)的)的一套协议。许多一套协议。许多X-WindowsX-Windows标准的变种和扩充版已在各种标准的变种和扩充版已在各种PCPC机和工作站上出现,它们多在机和工作站上出现,它们多在UNIXUNI

71、X和其他一些操作系和其他一些操作系统下运行。统下运行。软件工程第四章第四章 编码与程序设计语言编码与程序设计语言程序编码就是把软件设计阶段的结果用某种程序设计程序编码就是把软件设计阶段的结果用某种程序设计语言翻译成计算机能理解的形式,即程序的过程。作为软语言翻译成计算机能理解的形式,即程序的过程。作为软件工程的一个阶段,编码实质就是对软件设计的翻译,翻件工程的一个阶段,编码实质就是对软件设计的翻译,翻译过程所使用的程序设计语言及程序员的编码风格对程序译过程所使用的程序设计语言及程序员的编码风格对程序的可靠性、可读性、可测试性、可维护性方面将产生深远的可靠性、可读性、可测试性、可维护性方面将产生

72、深远的影响,从而最终影响到软件系统的质量。的影响,从而最终影响到软件系统的质量。编码风格及其特点编码风格又称程序设计风格或编程风格,编码风格实际上指编程的基本原则。有相当长的一段时间,许多人认为程序只是机器执行的,而不是供人阅读的,所以只要程序逻辑正确,能为机器理解并依次执行就足够了,至于文体如何无关紧要。但随着软件规模增大,复杂性增加,人们逐渐看到,在软件生存期中需要经常阅读程序,特别是在软件测试阶段和维护阶段,编写程序的人与参与测试、维护的人都要阅读程序。认识到阅读程序是软件开发和维护过程中的一个重要组成部分,而且读程序的时间比写程序的时间还要多。因此,程序实际上也需要增加可读性。2020

73、世纪世纪7070年代以来人们逐步意识到,良好的编码风年代以来人们逐步意识到,良好的编码风格能在一定程度上弥补语言存在的缺陷,而如果不注意风格能在一定程度上弥补语言存在的缺陷,而如果不注意风格就很难写出高质量的程序。尤其当多个程序员合作编写格就很难写出高质量的程序。尤其当多个程序员合作编写一个很大的程序时,需要强调良好而一致的编码风格,以一个很大的程序时,需要强调良好而一致的编码风格,以便相互通信,减少因不协调而引起的问题。总之,良好的便相互通信,减少因不协调而引起的问题。总之,良好的编码风格有助于编写出可靠而又容易维护的程序,编码的编码风格有助于编写出可靠而又容易维护的程序,编码的风格在很大程

74、度上决定着程序的质量。风格在很大程度上决定着程序的质量。源程序文档化虽然编码的目的是产生程序,但是为了提高程序的可虽然编码的目的是产生程序,但是为了提高程序的可维护性,源代码必需要实现文档化,称之为内部文档编维护性,源代码必需要实现文档化,称之为内部文档编制。源程序文档化包括选择标识符制。源程序文档化包括选择标识符( (变量和标号变量和标号) )的名字、的名字、安排注释及程序的视觉组织等。安排注释及程序的视觉组织等。标识符的命名标识符的命名 程序的注释程序的注释标准的书写格式标准的书写格式数据说明为了使程序中的数据说明易于理解和维护,数据说为了使程序中的数据说明易于理解和维护,数据说明应当规范

75、化,既要有利于数据属性的查找,也要有利于明应当规范化,既要有利于数据属性的查找,也要有利于程序的测试、排错和维护。因此在编写程序时,必须注意程序的测试、排错和维护。因此在编写程序时,必须注意以下几点:以下几点:数据说明的次序应规范。进而有利于测试、排错和维护。数据说明的次序应规范。进而有利于测试、排错和维护。说明的先后次序固定。例如,按常量说明、简单变量类型说明的先后次序固定。例如,按常量说明、简单变量类型说明、数组说明、公用数据块说明、所有的文件说明的顺说明、数组说明、公用数据块说明、所有的文件说明的顺序说明。在类型说明中还可进一步要求。例如,可按如下序说明。在类型说明中还可进一步要求。例如

76、,可按如下顺序排列:整型量说明、实型量说明、字符量说明、逻辑顺序排列:整型量说明、实型量说明、字符量说明、逻辑量说明。量说明。当用一个语句说明多个变量名时,应当对这些变量按字母当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。的顺序排列。对于复杂数据结构,应利用注释说明实现这个数据结构的对于复杂数据结构,应利用注释说明实现这个数据结构的特点。例如对特点。例如对C C中的链表结构应当在注释中做必要的说明,中的链表结构应当在注释中做必要的说明,进而增强程序的可阅读性。进而增强程序的可阅读性。语句结构在设计阶段确定软件的逻辑结构,但编码阶段的任务在设计阶段确定软件的逻辑结构,但编码阶段的

77、任务是构造单个语句。构造的语句要简单、直接,不要为了是构造单个语句。构造的语句要简单、直接,不要为了提高效率而使语句变得复杂。提高效率而使语句变得复杂。使用标准的控制结构使用标准的控制结构尽可能使用库函数尽可能使用库函数首先应当考虑可读性首先应当考虑可读性注意注意GOTOGOTO语句的使用语句的使用输入输出在输入方面,应注意以下几点:在输入方面,应注意以下几点:程序应对所有输入数据进行有效性检验,防止对程序的有程序应对所有输入数据进行有效性检验,防止对程序的有意和无意的破坏;意和无意的破坏;输入格式力求简单、一致,并尽可能采用自由格式输入;输入格式力求简单、一致,并尽可能采用自由格式输入;使用

78、数据结束或文件结束标志来终止输入,一般不要由用使用数据结束或文件结束标志来终止输入,一般不要由用户来计算输入的项数或记录数;户来计算输入的项数或记录数;向用户显示向用户显示“ “请输入请输入” ”的提示信息,同时说明允许的选择的提示信息,同时说明允许的选择范围和边界值;范围和边界值;对多个相关输入项的组合进行检查,剔除似是而非的输入对多个相关输入项的组合进行检查,剔除似是而非的输入值。例如,检查代表三角形三条边长的数据项,如果它们值。例如,检查代表三角形三条边长的数据项,如果它们不能组成有效的三角形,便拒绝接受并要求用户重新输入。不能组成有效的三角形,便拒绝接受并要求用户重新输入。在输出方面,

79、应注意以下两点:在输出方面,应注意以下两点:标志所有的输出数据,加以必要的说明;标志所有的输出数据,加以必要的说明;他所有报表、报告具有良好的格式。他所有报表、报告具有良好的格式。程序设计语言不同的程序设计语言有不同的特点,下面我们介绍语言的几种特不同的程序设计语言有不同的特点,下面我们介绍语言的几种特点。点。一致性一致性(Uniformity)(Uniformity)。语言的一致性指语言中单词。语言的一致性指语言中单词(Token)(Token)语义语义的协调性。例如的协调性。例如“()”“()”在在FORTRANFORTRAN语言中既可以作优先级的修语言中既可以作优先级的修正符,又可以作数

80、组的下标,还可以作子程序参数表的分隔符,正符,又可以作数组的下标,还可以作子程序参数表的分隔符,这种这种“ “一词多用一词多用” ”会明显地给理解程序带来困难。一致性不好的会明显地给理解程序带来困难。一致性不好的语言程序不仅可读性差,而且在编写程序的过程中容易出错。语言程序不仅可读性差,而且在编写程序的过程中容易出错。二义性二义性(ambiguity)(ambiguity)。语言的二义性是指语言是否允许使用具有。语言的二义性是指语言是否允许使用具有二义性的语句。允许使用二义性语句的语言在可理解性和可修改二义性的语句。允许使用二义性语句的语言在可理解性和可修改性上都要差一些。性上都要差一些。紧致

81、性紧致性(compactness)(compactness)。紧致性是指程序员写程序时必须记忆的。紧致性是指程序员写程序时必须记忆的关于语言的信息总量。关于语言的信息总量。局部性局部性(locality)(locality)。局部性是指语言的模块化和信息隐藏特性。局部性是指语言的模块化和信息隐藏特性。一个局部性差的语言必然会导致程序的复杂性增加。比如,一种一个局部性差的语言必然会导致程序的复杂性增加。比如,一种不具有块机制的语言,那么信息的作用域必然是全局的,程序的不具有块机制的语言,那么信息的作用域必然是全局的,程序的走向也是全局的,从而导致程序的复杂性增加,可读性、可修改走向也是全局的,从

82、而导致程序的复杂性增加,可读性、可修改性和可维护性都会相应降低。性和可维护性都会相应降低。程序设计语言的分类程序设计语言的选择可以参照以下标准来选择语言可以参照以下标准来选择语言: :理想标准理想标准实践标准实践标准(1)(1)语言的自身功能语言的自身功能(2)(2)系统用户的要求系统用户的要求(3)(3)编码和维护成本编码和维护成本(4)(4)软件的兼容性软件的兼容性(5)(5)可以使用的软件工具可以使用的软件工具(6)(6)软件可移植性软件可移植性(7)(7)开发系统的规模开发系统的规模(8)(8)程序设计人员的知识水平程序设计人员的知识水平软件工程第五章第五章 软件的技术度量及其质量保证

83、软件的技术度量及其质量保证如何保证软件质量是软件生命周期中的重要问题。软如何保证软件质量是软件生命周期中的重要问题。软件质量与软件复杂性和软件可靠性之间有着密切的关联,件质量与软件复杂性和软件可靠性之间有着密切的关联,评价复杂性和可靠性就需要进行度量,软件度量为改进软评价复杂性和可靠性就需要进行度量,软件度量为改进软件开发过程和提高软件质量提供了一个客观的评价体系。件开发过程和提高软件质量提供了一个客观的评价体系。为了提高软件的质量,要建立相应的质量保证体系,以便为了提高软件的质量,要建立相应的质量保证体系,以便在软件开发的各个阶段都有相应的质量保证措施。通过本在软件开发的各个阶段都有相应的质

84、量保证措施。通过本章的学习可使读者了解到软件的技术度量及质量保证方面章的学习可使读者了解到软件的技术度量及质量保证方面的知识。的知识。软件度量的概念在软件开发中,软件度量的根本目的是为了软件管理在软件开发中,软件度量的根本目的是为了软件管理的需要,利用度量来改进软件开发过程和软件产品质量。的需要,利用度量来改进软件开发过程和软件产品质量。到目前为止有关软件度量方面的研究还是很初步的,还需到目前为止有关软件度量方面的研究还是很初步的,还需要进一步努力才可能真正做到实用化。实用化的成果将对要进一步努力才可能真正做到实用化。实用化的成果将对软件开发技术的发展至关重要。软件开发技术的发展至关重要。在软

85、件领域,所谓软件度量就是针对计算机软件的某在软件领域,所谓软件度量就是针对计算机软件的某些属性进行评估或描述,是对一个软件系统、组件或过程些属性进行评估或描述,是对一个软件系统、组件或过程具有的某个给定属性的度的一个定量测量。通过度量,可具有的某个给定属性的度的一个定量测量。通过度量,可以对软件给出客观的评价,可用于指出软件属性的趋势,以对软件给出客观的评价,可用于指出软件属性的趋势,能有针对性地进行改善。简单说,软件度量就是对软件质能有针对性地进行改善。简单说,软件度量就是对软件质量的评价。量的评价。 软件度量的目标软件度量的目标对管理者而言对管理者而言: :需要度量软件开发过程中的不同阶段

86、的费用。例如:度量需要度量软件开发过程中的不同阶段的费用。例如:度量开发整个软件系统的费用(包括从需求分析阶段到发布之开发整个软件系统的费用(包括从需求分析阶段到发布之后的维护阶段);后的维护阶段);为了支付开发小组的薪酬,需要度量不同小组的生产率;为了支付开发小组的薪酬,需要度量不同小组的生产率;为了设定合理的改进目标等目的,需要度量软件产品的质为了设定合理的改进目标等目的,需要度量软件产品的质量;量;决定项目的度量目标。例如:决定测试覆盖率、系统运行决定项目的度量目标。例如:决定测试覆盖率、系统运行性能、系统的可靠性等;性能、系统的可靠性等;为找出影响费用和生产率的因素,需要反复测试某一特

87、定为找出影响费用和生产率的因素,需要反复测试某一特定过程和获得相应资源的属性;过程和获得相应资源的属性;需要度量和估计不同软件工程方法和工具的效用,以便决需要度量和估计不同软件工程方法和工具的效用,以便决定是否有必要把它们引入到开发组织中。定是否有必要把它们引入到开发组织中。对软件工程师而言对软件工程师而言: :需要制定过程度量以监视系统的不断演进。这包括设计过需要制定过程度量以监视系统的不断演进。这包括设计过程中的改动、在不同的阶段发现的错误等等;程中的改动、在不同的阶段发现的错误等等;需使用严格的度量术语来指定对软件质量和性能的要求,需使用严格的度量术语来指定对软件质量和性能的要求,以使这

88、些要求可测试。例如:系统必须以使这些要求可测试。例如:系统必须“ “可靠可靠” ”,可用如,可用如下的更具体的文字加以描述:下的更具体的文字加以描述:“ “平均错误时间必须大于平均错误时间必须大于1515个个CPUCPU时间片。时间片。” ”;为了验收需要对产品的测试属性进行度量。例如:看一个为了验收需要对产品的测试属性进行度量。例如:看一个产品是否合格要看产品的一些可度量的特性如产品是否合格要看产品的一些可度量的特性如 测试阶段测试阶段少于少于2020个错误等;个错误等;为了预测将来的产品,需要度量已有产品的过程和属性。为了预测将来的产品,需要度量已有产品的过程和属性。例如:通过度量软件规格

89、说明书的内容来预测目标系统的例如:通过度量软件规格说明书的内容来预测目标系统的规模;通过度量设计文档的结构特性来预测将来可能有的规模;通过度量设计文档的结构特性来预测将来可能有的维护盲点;通过度量测试阶段的软件的可靠性来预测软件维护盲点;通过度量测试阶段的软件的可靠性来预测软件今后操作、运行的可靠性等等。今后操作、运行的可靠性等等。软件度量研究的范畴软件度量研究的范畴软件工程需要度量,但如何确定度量范畴呢?首先软件工程需要度量,但如何确定度量范畴呢?首先必须弄清楚必须弄清楚“ “软件度量软件度量” ”是一个包含很多完全不同的活动是一个包含很多完全不同的活动的术语。它主要包括:费用和工作量估计模

90、型和度量、生的术语。它主要包括:费用和工作量估计模型和度量、生产率度量模型和标准、质量控制和保证、数据收集、质量产率度量模型和标准、质量控制和保证、数据收集、质量模型和度量、可靠性模型、模型和度量、可靠性模型、 性能评价和模型、算法复杂性性能评价和模型、算法复杂性度量、结构和复杂性度量等。度量、结构和复杂性度量等。 软件技术度量框架任何软件度量活动的目的就是识别实体和实体的属性。在软任何软件度量活动的目的就是识别实体和实体的属性。在软件中应度量其属性的实体可以分为三类,它们是:件中应度量其属性的实体可以分为三类,它们是:过程。是与软件相关的一些活动,这些活动都有一个时间因素。过程。是与软件相关

91、的一些活动,这些活动都有一个时间因素。产品。是指在软件开发过程中产生的各种中间产品、发布的资料产品。是指在软件开发过程中产生的各种中间产品、发布的资料和文档等和文档等 。资源。是指在开发中给予过程的输入。资源。是指在开发中给予过程的输入。实体实体实体实体属性属性属性属性内部属性内部属性内部属性内部属性外部属性外部属性外部属性外部属性产产产产品品品品规格说明书规格说明书规模、可复用性、模块化、冗余、功能、规模、可复用性、模块化、冗余、功能、语法等语法等可理解性、可维护性等可理解性、可维护性等设计设计规模、可复用性、模块化、耦合、聚合、规模、可复用性、模块化、耦合、聚合、功能等功能等质量、复杂性、

92、可维护性等质量、复杂性、可维护性等编码编码规模、可复用性、模块化、耦合、功能、规模、可复用性、模块化、耦合、功能、算法复杂性、控制流、结构性等算法复杂性、控制流、结构性等可靠性、可用性、可维护性等可靠性、可用性、可维护性等测试数据测试数据规模、覆盖度等规模、覆盖度等质量等质量等过过过过程程程程构造规格说明书构造规格说明书时间、工作量、需求变动数、事件(故障时间、工作量、需求变动数、事件(故障与变化)等与变化)等质量、费用、稳定性等质量、费用、稳定性等详细设计详细设计时间、工作量、在规格说明书中找到的缺时间、工作量、在规格说明书中找到的缺陷数等陷数等费用、性能费用、性能/ /价格比等价格比等测试

93、测试时间、工作量、找到的缺陷数时间、工作量、找到的缺陷数费用、性能费用、性能/ /价格比、稳定性等价格比、稳定性等资资资资源源源源人员人员年龄、工资待遇等年龄、工资待遇等生产率、经验、智力等生产率、经验、智力等团队团队规模、交流活动水平、结构等规模、交流活动水平、结构等生产率、质量等生产率、质量等硬件硬件价格、速度、内存容量等价格、速度、内存容量等可靠性等可靠性等软件软件价格、规模等价格、规模等可用性、可靠性等可用性、可靠性等办公地点办公地点面积、温度、照明等面积、温度、照明等舒适程度、质量等舒适程度、质量等软件度量的属性软件作为一种产品,人们也试图给它一种定量的评价,但由于工程软件软件作为一

94、种产品,人们也试图给它一种定量的评价,但由于工程软件产品的特殊性,恰当地给出其定量评价是极为困难的。下面以工程软件复产品的特殊性,恰当地给出其定量评价是极为困难的。下面以工程软件复杂性和可靠性为例作来做介绍。杂性和可靠性为例作来做介绍。1 1、工程软件复杂性度量、工程软件复杂性度量工程软件复杂性度量的参数很多,主要有:工程软件复杂性度量的参数很多,主要有:规模,即软件具有总指令数,或源程序代码行数。估算程序复杂性的一个规模,即软件具有总指令数,或源程序代码行数。估算程序复杂性的一个经典的方法是用程序规模,即用指令条数或者源程序行数来衡量。但它显经典的方法是用程序规模,即用指令条数或者源程序行数

95、来衡量。但它显然不是很好的方法。一方面,指令条数虽是衡量程序复杂性的最重要因素,然不是很好的方法。一方面,指令条数虽是衡量程序复杂性的最重要因素,但它难刻画算法的难易程度;另一方面,在软件系统开发之初,很难精确但它难刻画算法的难易程度;另一方面,在软件系统开发之初,很难精确估算一个软件系统该用多少条指令才能完成;估算一个软件系统该用多少条指令才能完成;统计复杂性度量,通常用在程序中出现的操作符和操作数的数目所决定的统计复杂性度量,通常用在程序中出现的操作符和操作数的数目所决定的量来表示。量来表示。MMHalsteadHalstead提出把程序操作数和操作符的总数作为程序复杂性提出把程序操作数和

96、操作符的总数作为程序复杂性度量的标准,提出了程序复杂性的估算因子公式,并将这些结果联系到程度量的标准,提出了程序复杂性的估算因子公式,并将这些结果联系到程序执行时间和故障的估计;序执行时间和故障的估计;结构复杂性度量。主要依靠基于程序控制流向图的拓扑结构来度量;结构复杂性度量。主要依靠基于程序控制流向图的拓扑结构来度量;智能度,即算法的难易程度;智能度,即算法的难易程度;其他的复杂性度量。如程序的时空复杂性,与算法复杂性的研究不同,程其他的复杂性度量。如程序的时空复杂性,与算法复杂性的研究不同,程序的时空复杂性还有一些自身的特点。比如,程序能使用覆盖技术从而使序的时空复杂性还有一些自身的特点。

97、比如,程序能使用覆盖技术从而使存储空间可以重叠装入。在程序执行时,一部分存储空间实际上为多个块存储空间可以重叠装入。在程序执行时,一部分存储空间实际上为多个块所共享而先后反复使用。所共享而先后反复使用。2 2、工程软件可靠性、工程软件可靠性任何技术性系统的可靠性都是用随机项来测量的,可任何技术性系统的可靠性都是用随机项来测量的,可靠性的含义是:在给定的时间内,在规定的环境条件下,靠性的含义是:在给定的时间内,在规定的环境条件下,系统完成所规定的功能的概率。为了实现工程软件可靠系统完成所规定的功能的概率。为了实现工程软件可靠性的定量分析,人们尝试建立了各种可靠性分析模型模性的定量分析,人们尝试建

98、立了各种可靠性分析模型模型大致可分为如下几类:型大致可分为如下几类:由硬件可靠性理论导出的模型;由硬件可靠性理论导出的模型;基于程序内部特性的模型。试图求出存在于软件中的错基于程序内部特性的模型。试图求出存在于软件中的错误的预期数目。根据软件复杂性度量函数导出的定量关误的预期数目。根据软件复杂性度量函数导出的定量关系,这类模型建立在程序中的操作符和操作数的数目与系,这类模型建立在程序中的操作符和操作数的数目与程序中错误的初始估计数字之间的关系;程序中错误的初始估计数字之间的关系;植入模型。就是在软件中植入已知的错误,并计算发现植入模型。就是在软件中植入已知的错误,并计算发现的植入错误数与发现的

99、实际错误数之比的方法来估计系的植入错误数与发现的实际错误数之比的方法来估计系统的可靠性。要随机地植入带标记的错误到程序中,假统的可靠性。要随机地植入带标记的错误到程序中,假设程序中尚未发现的残留错误总数为设程序中尚未发现的残留错误总数为N N,植入的错误总,植入的错误总数为数为NtNt,在经历一段时间的测试之后,总共发现程序有,在经历一段时间的测试之后,总共发现程序有n n个残留错误,其中有个残留错误,其中有ntnt个带标记的植入错误。假定植入个带标记的植入错误。假定植入错误和程序中尚未发现的残留错误都可以同等难易地被错误和程序中尚未发现的残留错误都可以同等难易地被测试到(这个假定在实际中并不

100、容易做到)。那么,可测试到(这个假定在实际中并不容易做到)。那么,可用公式求出程序中尚未发现的残留错误总数用公式求出程序中尚未发现的残留错误总数N N。 面向对象度量面向对象(面向对象(Object_Orient,OOObject_Orient,OO)度量的基本目标和那)度量的基本目标和那些针对传统软件的度量的目标是一样的:些针对传统软件的度量的目标是一样的:更好地理解产品;更好地理解产品;评估过程的效果;评估过程的效果;改善在项目的质量。改善在项目的质量。 对任何工程产品的度量都是由产品的专有特性所决定对任何工程产品的度量都是由产品的专有特性所决定的。用的。用OOOO方法开发的软件和用传统方

101、法开发的软件有本方法开发的软件和用传统方法开发的软件有本质不同。为此,对质不同。为此,对OOOO系统的技术度量必须进行调整。系统的技术度量必须进行调整。软件质量的概念按照按照ANSI/IEEE1983ANSI/IEEE1983年的标准,软件质量定义为:与年的标准,软件质量定义为:与软件产品满足需求所规定的和隐含的能力有关的特征和特软件产品满足需求所规定的和隐含的能力有关的特征和特性的全体。具体包括:性的全体。具体包括:n n软件产品中所能满足用户给定需求的全部特性的集合;软件产品中所能满足用户给定需求的全部特性的集合;n n软件具有所期望的各种属性组合的程度;软件具有所期望的各种属性组合的程度

102、;n n用户主观得出的软件是否满足其综合期望的程度;用户主观得出的软件是否满足其综合期望的程度;n n决定所用软件在使用中将满足其综合期望程度的软件决定所用软件在使用中将满足其综合期望程度的软件合成特性;合成特性;n n是否遵循一定开发标准和准则。是否遵循一定开发标准和准则。软件的质量因素软件的质量因素正 确 性 与 精 确 性性 能 与 效 率易 用 性可理解性与简洁性可复用性与可扩充性产品操作修订移植可靠性效率可维护性可测试性可用性可安装性可再用性精确性完整性一致性存储效率可通讯性可访问性简练性易读性模块化结构化硬件依赖性度 量 标 准使用使用因素因素标准标准McCall的FCM模型软件质

103、量体系的建立的必要性软件是信息技术的核心。软件产品的质量直接影响到国民经济信息软件是信息技术的核心。软件产品的质量直接影响到国民经济信息系统和国际装备系系统和国际装备系 统的可靠性与安全运行,在国内外软件市场激烈的竞统的可靠性与安全运行,在国内外软件市场激烈的竞争中,提高软件质量已经成为一个软件企业生存发展的关键问题,软件争中,提高软件质量已经成为一个软件企业生存发展的关键问题,软件企业在工作实践中总结出在软件质量问题上必须认识到:企业在工作实践中总结出在软件质量问题上必须认识到:1 1、软件本身的特点和目前软件开发模式使隐藏在软件内部的质量缺陷、软件本身的特点和目前软件开发模式使隐藏在软件内

104、部的质量缺陷不可能完全避免,这首先因为软件需求模糊以及需求的变更,从根本上不可能完全避免,这首先因为软件需求模糊以及需求的变更,从根本上影响着软件产品的质量;其次目前广为采用的手工开发方式难于避免出影响着软件产品的质量;其次目前广为采用的手工开发方式难于避免出现差错,软件质量更多决定于软件开发人员的能力;再次软件开发过程现差错,软件质量更多决定于软件开发人员的能力;再次软件开发过程中各个环节的接口处不易保证安全;还有就是软件测试技术存在着不可中各个环节的接口处不易保证安全;还有就是软件测试技术存在着不可克服的缺陷,通过测试不可能把软件的缺陷全部排除;克服的缺陷,通过测试不可能把软件的缺陷全部排

105、除;2 2、从技术上解决软件质量问题的效果十分有限。目前还找不到一个理、从技术上解决软件质量问题的效果十分有限。目前还找不到一个理想的软件开发技术能够从根本上防止缺陷的出现,人们对软件质量的认想的软件开发技术能够从根本上防止缺陷的出现,人们对软件质量的认识,软件质量的度量方法仍处于初级阶段;识,软件质量的度量方法仍处于初级阶段;3 3、技术人员和管理人员在软件开发工作中仍有一些不正确的认识需要、技术人员和管理人员在软件开发工作中仍有一些不正确的认识需要纠正,这需要在企业建立和实施质量体系的过程中加以解决;纠正,这需要在企业建立和实施质量体系的过程中加以解决;4 4、目前多数软件企业的质量管理尚

106、未得到应有的重视,他们需要认真、目前多数软件企业的质量管理尚未得到应有的重视,他们需要认真总结教训,并将其渗入质量体系形成制度化的规定;总结教训,并将其渗入质量体系形成制度化的规定;5 5、软件开发必须靠加强管理来实现工程化,质量管理要体现在建立和、软件开发必须靠加强管理来实现工程化,质量管理要体现在建立和实施开发规范中,保证软件工程的各个步骤和各个岗位的工作都符合要实施开发规范中,保证软件工程的各个步骤和各个岗位的工作都符合要求,并且即使产品在使用中出现了问题,也能及时的发现,及时妥善解求,并且即使产品在使用中出现了问题,也能及时的发现,及时妥善解决。决。软件质量体系的建立和实施软件质量体系

107、的建立与实施应坚持以下原则:软件质量体系的建立与实施应坚持以下原则:以顾客为中心:组织依存于顾客。因此,组织应理解顾客当前和未来的需以顾客为中心:组织依存于顾客。因此,组织应理解顾客当前和未来的需求,满足顾客要求并争取超越顾客期望。求,满足顾客要求并争取超越顾客期望。领导作用:领导将本组织的宗旨、方向和内部环境统一起来,并创造使员领导作用:领导将本组织的宗旨、方向和内部环境统一起来,并创造使员工能够充分参与实现组织目标的环境。工能够充分参与实现组织目标的环境。全员参与:各级人员是组织之本。只有他们的充分参与,才能使他们的才全员参与:各级人员是组织之本。只有他们的充分参与,才能使他们的才干为组织

108、带来最大的收益。干为组织带来最大的收益。过程方法:将相关的资源和活动作为过程进行管理,重视输入和输出,可过程方法:将相关的资源和活动作为过程进行管理,重视输入和输出,可以更高效地得到期望的结果。以更高效地得到期望的结果。管理的系统方法:针对设定的目标,识别、理解并管理一个由相互关联的管理的系统方法:针对设定的目标,识别、理解并管理一个由相互关联的过程所组成的系统,有助于提高组织的有效性和效率。过程所组成的系统,有助于提高组织的有效性和效率。持续改进:持续改进是组织的一个永恒目标。持续改进:持续改进是组织的一个永恒目标。基于事实的决策方法:对数据和信息的逻辑分析或直觉判断是有效决策的基于事实的决

109、策方法:对数据和信息的逻辑分析或直觉判断是有效决策的基础。基础。互利的供方关系:通过互利的关系,增强组织及其供方创造价值的能力。互利的供方关系:通过互利的关系,增强组织及其供方创造价值的能力。 软件能力成熟度模型(CMM)许多年以来,人们为提高软件生产效率和软件产品质量,进行了长期许多年以来,人们为提高软件生产效率和软件产品质量,进行了长期探讨,取得了显著成绩。这些探讨和成绩表现在以下方面。探讨,取得了显著成绩。这些探讨和成绩表现在以下方面。从软件开发技术来说,包括:从软件开发技术来说,包括:力图从编程语言上实现突破。已经从机器语言、汇编语言、面向过程的语力图从编程语言上实现突破。已经从机器语

110、言、汇编语言、面向过程的语言、面向数据的语言发展到面向对象、面向构架的语言;言、面向数据的语言发展到面向对象、面向构架的语言;力图从力图从CASECASE工具上实现突破。这些工具有工具上实现突破。这些工具有OracleDesignerOracleDesigner,PowerDesignerPowerDesigner,ERwinERwin,RoseRose,SanFranciscoSanFrancisco,北大青鸟系统等;,北大青鸟系统等;力图从软件过程管理上实现突破。如力图从软件过程管理上实现突破。如CMMCMM,ISO9000ISO9000,微软企业文化,微软企业文化,IBMIBM企业文化等

111、;企业文化等;力图从测试与纠错上实现突破。先后出现了各种测试方法、工具和纠错手力图从测试与纠错上实现突破。先后出现了各种测试方法、工具和纠错手段。段。工程软件质量是由多种因素决定的,解决它也需要多方面的努力。工程软件质量是由多种因素决定的,解决它也需要多方面的努力。从软件开发的组织管理来看,软件开发的管理经历了从个人开发能力从软件开发的组织管理来看,软件开发的管理经历了从个人开发能力到团队开发能力到到团队开发能力到CMMCMM以及现在越来越强调的三者结合的开发组织管理以及现在越来越强调的三者结合的开发组织管理模式。模式。CMMCMM将软件组织的管理水平划分为将软件组织的管理水平划分为5 5个级

112、别,初始级个级别,初始级(CMML1CMML1)、可重复级()、可重复级(CMML2CMML2)、定义()、定义(CMML3CMML3)、定量)、定量管理级(管理级(CMML4CMML4)和优化级()和优化级(CMML5CMML5)共计)共计1818个关键过程域,个关键过程域,5252个具体目标,个具体目标,316316个关键实践。个关键实践。 第一级:初始级第一级:初始级 第二级:可重复级第二级:可重复级 第三级:定义级第三级:定义级第四级:定量管理级第四级:定量管理级第五级:(不断)优化级第五级:(不断)优化级初始级可重复级确定级可管理级优化级不断改进的过程能预见的过程标准一致的过程有纪律

113、的过程CMM中的五个等级的层次关系改进软件开发设计过程的模型软件工程第六章第六章 软件测试软件测试在软件开发的一系列活动中,都有可能引入导致软件可靠性下降的因素。为了不断排除这些因素,软件测试是不可缺少的开发活动。软件测试代表了需求分析、软件设计和编码的最终复审,是软件系统交付前的重要检验环节。本章介绍了有关软件测试方面的内容,使读者能对软件测试的方式、方法有所了解。软件测试的基本概念软件测试是在软件投入运行前软件测试是在软件投入运行前, ,对软件需求分析、设对软件需求分析、设计规格说明和编码的最终复查,是软件质量保证的关键步计规格说明和编码的最终复查,是软件质量保证的关键步骤。通过软件测试,

114、可以发现软件中绝大部分潜伏的错误,骤。通过软件测试,可以发现软件中绝大部分潜伏的错误,从而可以大大提高软件产品的正确性、可靠性,进而可显从而可以大大提高软件产品的正确性、可靠性,进而可显著提高产品质量。著提高产品质量。 一般认为对于软件测试的结果,其衡量标准可以用四一般认为对于软件测试的结果,其衡量标准可以用四个字概括:多,快,好,省。个字概括:多,快,好,省。多:能够找到尽可能多的、以至于所有的去除错误;多:能够找到尽可能多的、以至于所有的去除错误;快:能够尽可能早地发现最严重的错误;快:能够尽可能早地发现最严重的错误;好:找到的错误是关键的、用户最关心的,找到这些错误好:找到的错误是关键的

115、、用户最关心的,找到这些错误后能够发现新的相关的错误,并为修正这些错误提供尽可后能够发现新的相关的错误,并为修正这些错误提供尽可能多的信息;能多的信息;省:能够用最少的时间、人力和资源发现错误,并且测试省:能够用最少的时间、人力和资源发现错误,并且测试的过程和数据可以重用,最好是能实现测试的自动化,即的过程和数据可以重用,最好是能实现测试的自动化,即通过专门的软件去检验程序。通过专门的软件去检验程序。软件测试的目标与原则检验对象的正确性及对象之间的相互作用检验对象的正确性及对象之间的相互作用检验所有的模块是否正确地集成检验所有的模块是否正确地集成 确保软件产品中的问题在分发之前被准确定位确保软

116、件产品中的问题在分发之前被准确定位 软件测试与软件开发的关系系统测试需求分析软件设计编码单元测试集成测试验收测试为了能够进行完整而又有效地软件测试,通常需要遵照以下原则为了能够进行完整而又有效地软件测试,通常需要遵照以下原则: :测试应该基于用户需求。也就是说软件的目的就是帮助用户实现其自测试应该基于用户需求。也就是说软件的目的就是帮助用户实现其自身需求。因此,在进行软件测试的时候,一定要以用户需求为主要目身需求。因此,在进行软件测试的时候,一定要以用户需求为主要目的进行测试。当然,在实现用户需求的前提下,也要考虑软件其他方的进行测试。当然,在实现用户需求的前提下,也要考虑软件其他方面的性能,

117、如速度、可靠性、复杂程度或可扩展性。通常情况下,速面的性能,如速度、可靠性、复杂程度或可扩展性。通常情况下,速度、可靠性、复杂程度或可扩展性也会作为用户需求的一部分。这就度、可靠性、复杂程度或可扩展性也会作为用户需求的一部分。这就要求软件设计人员和开发人员在软件设计的早期就对这些因素进行综要求软件设计人员和开发人员在软件设计的早期就对这些因素进行综合考虑;合考虑;应以测试设计为关键。为了实现软件测试的多、快、好、省,通常在应以测试设计为关键。为了实现软件测试的多、快、好、省,通常在进行软件测试前,都必须进行详细的软件测试设计,形成软件测试方进行软件测试前,都必须进行详细的软件测试设计,形成软件

118、测试方案,这样做的原因是:首先,测试时间和资源是有限的。其次,测试案,这样做的原因是:首先,测试时间和资源是有限的。其次,测试到所有情况是不可能的。这就要求在测试前做好充分的准备,考虑各到所有情况是不可能的。这就要求在测试前做好充分的准备,考虑各种可能的情况。尤其必须考虑例外情况。比如突然停电对软件运行的种可能的情况。尤其必须考虑例外情况。比如突然停电对软件运行的影响,出现除数为零的情况如何解决,多个并发用户使用对软件系统影响,出现除数为零的情况如何解决,多个并发用户使用对软件系统的影响。这些都必须体现在测试计划中。最后,按照在开发各阶段分的影响。这些都必须体现在测试计划中。最后,按照在开发各

119、阶段分别制定出的测试计划进行测试,可以防止测试的随意性和主观性;别制定出的测试计划进行测试,可以防止测试的随意性和主观性;应该尽早开始测试。尽早和不断地进行软件应该尽早开始测试。尽早和不断地进行软件“ “测试测试” ”,即将这种,即将这种“ “测测试试” ”贯穿于软件开发的各个阶段,坚持各个阶段的技术评审,以便尽贯穿于软件开发的各个阶段,坚持各个阶段的技术评审,以便尽早地发现和预防错误;早地发现和预防错误;测试用例中,不仅要选择合理的输入数据,还要选择不合理的输入数测试用例中,不仅要选择合理的输入数据,还要选择不合理的输入数据;据;对发现错误较多的程序模块,应进行重点测试。对发现错误较多的程序

120、模块,应进行重点测试。ParetoPareto指出,测试发指出,测试发现错误的现错误的80%80%集中在集中在20%20%的模块中。发现错误较多的模块质量较差,的模块中。发现错误较多的模块质量较差,需重点测试,并要测试是否引入了新的错误。需重点测试,并要测试是否引入了新的错误。从测试的经验上看,有以下几点特别需要注意从测试的经验上看,有以下几点特别需要注意: :心理素质最重要。对于测试人员来说,首先必须有足够的责任心,不能抱心理素质最重要。对于测试人员来说,首先必须有足够的责任心,不能抱着反正测试是不可能发现所有错误的这样的想法。其次测试人员要通过测着反正测试是不可能发现所有错误的这样的想法。

121、其次测试人员要通过测试任务不断总结经验,培养敏锐度,提升个人价值和权威,而不是简单测试任务不断总结经验,培养敏锐度,提升个人价值和权威,而不是简单测试看作没有创造性、枯燥的工作。最后就是要求测试人员要有足够的自信试看作没有创造性、枯燥的工作。最后就是要求测试人员要有足够的自信心,不能认为自己的技术比开发人员差而不敢多提错误;心,不能认为自己的技术比开发人员差而不敢多提错误;测试前必须明确预期的输出结果。也就是要明确目标,否则实际的输出结测试前必须明确预期的输出结果。也就是要明确目标,否则实际的输出结果很可能成为检验的标准,测试失去意义。其次必须检查每一个实际输出果很可能成为检验的标准,测试失去

122、意义。其次必须检查每一个实际输出结果。虽然这个很简单,但是许多测试人员都喜欢想当然的认为这个太容结果。虽然这个很简单,但是许多测试人员都喜欢想当然的认为这个太容易,不会出错,而不认真检查输出结果;易,不会出错,而不认真检查输出结果;一段程序中存在错误的概率与这段程序中已经发现的错误数成正比。错误一段程序中存在错误的概率与这段程序中已经发现的错误数成正比。错误这是因此编码规范、需求理解、技术能力、内部耦合性都会导致这种错误这是因此编码规范、需求理解、技术能力、内部耦合性都会导致这种错误成堆的现象;成堆的现象;尽可能避免测试自己的软件。首先,这样不容易发现思路错误,因为人做尽可能避免测试自己的软件

123、。首先,这样不容易发现思路错误,因为人做事情总是喜欢按照自己的思维。其次,这样不容易发现环境错误,所谓环事情总是喜欢按照自己的思维。其次,这样不容易发现环境错误,所谓环境包括硬件和软件两方面的。自己测试自己的软件,则环境一样,就无法境包括硬件和软件两方面的。自己测试自己的软件,则环境一样,就无法发现环境错误了。最后,心理因素导致测试可能不够彻底和全面;发现环境错误了。最后,心理因素导致测试可能不够彻底和全面;依照用户的要求、配置环境和使用习惯进行测试并评价结果;依照用户的要求、配置环境和使用习惯进行测试并评价结果;测试设计决定了测试的有效性和效率,测试工具只能提高测试效率;测试设计决定了测试的

124、有效性和效率,测试工具只能提高测试效率;注意保留测试设计,测试用例、出错统计和有关的分析报告,并注意测试注意保留测试设计,测试用例、出错统计和有关的分析报告,并注意测试设计的可重用性和说明文档;设计的可重用性和说明文档;测试活动要有组织、有计划、有选择。测试活动要有组织、有计划、有选择。软件测试的方法软件测试方法静态测试方法动态测试方法代码走查技术评审代码审查黑盒测试白盒测试功能测试性能测试攻击测试语句覆盖分支覆盖路径覆盖软件测试方法回归测试软件测试的信息流测试评价排错可靠性模型软件配置测试配置测试结果预期结果错误错误统计正确的程序可靠性预测软件测试中的信息流软件测试过程单元测试单元测试单元测

125、试部件代码部件代码部件代码。集成测试功能测试性能测试系统测试安装测试设计规格说明功能需求说明其他软件需求用户需求规格说明用户环境集成后的模块功能系统验证生效的软件被用户接受的系统使用中的系统测试后的模块软件测试过程 选择测试人员构造测试用例实际运行测试软件计划用户文档开发文档源程序文本支持环境有效性测试软件配置复查管理机构裁决专家鉴定会交付用户运行维护测试报告软件配置确定测试的步骤设计测试方案设计一个测试方案包括四个步骤,包括计划测试、设计测试、执行测试和评估测试。设计一个测试方案包括四个步骤,包括计划测试、设计测试、执行测试和评估测试。在计划测试中,包括明确测试需求、进行风险评估、确定所需要

126、的资源等。在计划测试中,包括明确测试需求、进行风险评估、确定所需要的资源等。首先计划测试时,要详细说明要验证的被测软件的工作情况,指出测试范围、方法和首先计划测试时,要详细说明要验证的被测软件的工作情况,指出测试范围、方法和任务。测试范围包括单元测试、集成测试、系统测试等等,方法包括前面所讲的测试任务。测试范围包括单元测试、集成测试、系统测试等等,方法包括前面所讲的测试方法。范围包括业务功能、系统界面、软件性能等。这些可以统称为测试需求,在明方法。范围包括业务功能、系统界面、软件性能等。这些可以统称为测试需求,在明确了这些需求后,必须保证测试需求可被验证,有明显可衡量的结果。确了这些需求后,必

127、须保证测试需求可被验证,有明显可衡量的结果。风险评估描述的动作的功能或顺序失败,将会有什么影响?比如操作者的错误、网络风险评估描述的动作的功能或顺序失败,将会有什么影响?比如操作者的错误、网络失败、电源断电或者硬盘空间不够。必须明确出现这样的情况时,系统会造成什么样失败、电源断电或者硬盘空间不够。必须明确出现这样的情况时,系统会造成什么样的后果。的后果。所需要的资源包括系统运行所必须的软件、硬件资源和人力资源。在这里,我们主要所需要的资源包括系统运行所必须的软件、硬件资源和人力资源。在这里,我们主要是指人力资源,即测试人员。由于测试工作是比较注重经验的,因此测试人员的素质是指人力资源,即测试人

128、员。由于测试工作是比较注重经验的,因此测试人员的素质对测试结果影响重大。在确定测试人员时,主要考虑是否有测试过程的知识和经验,对测试结果影响重大。在确定测试人员时,主要考虑是否有测试过程的知识和经验,是否熟悉软件本身的业务知识以及是否熟悉测试工具。测试人员应该还具备一定的网是否熟悉软件本身的业务知识以及是否熟悉测试工具。测试人员应该还具备一定的网络和服务器知识。络和服务器知识。在明确上述事项后,根据进度要求,可以设计一个测试计划。在明确上述事项后,根据进度要求,可以设计一个测试计划。设计测试时,要明确系统的应用流程,包括检查事件流,检查已有过程的描述,遍历设计测试时,要明确系统的应用流程,包括

129、检查事件流,检查已有过程的描述,遍历系统提供的功能。系统提供的功能。然后设计测试,就是建立测试过程关系和顺序,确定测试起始条件然后设计测试,就是建立测试过程关系和顺序,确定测试起始条件( (状态状态) )并构造或选并构造或选取测试过程的测试用例。取测试过程的测试用例。构造测试过程要求建立测试需要的数据,测试过程的起始条件、状态、行为,测试的构造测试过程要求建立测试需要的数据,测试过程的起始条件、状态、行为,测试的步骤,输入的数据值及其期待的结果,根据结果进行评估,最后定义测试过程的结束步骤,输入的数据值及其期待的结果,根据结果进行评估,最后定义测试过程的结束条件、状态、行为。条件、状态、行为。

130、设计测试用例的原则全面性:指编写的测试用例应该覆盖所有的详细设计文档描述的功能。全面性:指编写的测试用例应该覆盖所有的详细设计文档描述的功能。 正确性:包括数据的正确性和操作的正确性。正确性:包括数据的正确性和操作的正确性。 符合正常业务惯例:测试数据应符合用户实际工作业务流程,实际就符合正常业务惯例:测试数据应符合用户实际工作业务流程,实际就是测试用例的先后顺序,先新增,后修改或删除,不能将删除放在第是测试用例的先后顺序,先新增,后修改或删除,不能将删除放在第一位一位 仿真性:人名、地名、电话号码等应具有模拟功能,符合一般的命名仿真性:人名、地名、电话号码等应具有模拟功能,符合一般的命名惯例

131、;不允许出现与知名人士、小说中人物名等雷同情况惯例;不允许出现与知名人士、小说中人物名等雷同情况 可操作性:测试用例中应写清测试的操作步骤,不同的操作步骤相对可操作性:测试用例中应写清测试的操作步骤,不同的操作步骤相对应的操作结果不同。需达到的目的是:任何人均可以根据测试用例,应的操作结果不同。需达到的目的是:任何人均可以根据测试用例,单独进行测试单独进行测试 可重复执行:换一个人执行测试用例能够重复上一个人的操作。可重复执行:换一个人执行测试用例能够重复上一个人的操作。 设计测试用例的方法等价类划分法等价类划分法 边界值分析法边界值分析法 设计好测试后,就执行测试。首先必须建立测试环境设计好

132、测试后,就执行测试。首先必须建立测试环境并进行初始化,执行测试过程。执行测试过程可以通过专并进行初始化,执行测试过程。执行测试过程可以通过专用工具或写程序自动测试,也可以手工测试。用工具或写程序自动测试,也可以手工测试。如果所有的测试过程或测试标准按计划结束,则测试如果所有的测试过程或测试标准按计划结束,则测试正常;反之测试未达到预期的测试覆盖则测试不正常。正常;反之测试未达到预期的测试覆盖则测试不正常。软件调试技术调试则是在进行了一次成功的测试之后立即开始的。调试则是在进行了一次成功的测试之后立即开始的。调试的目的是确定错误的位置和引起错误的原因,并加以调试的目的是确定错误的位置和引起错误的

133、原因,并加以改正。因此,又称为排错或纠错。实践表明,错误定位是改正。因此,又称为排错或纠错。实践表明,错误定位是软件工程中最困难的工作,确定发生错误的位置和内在原软件工程中最困难的工作,确定发生错误的位置和内在原因所需的工作量几乎占整个调试工作量的因所需的工作量几乎占整个调试工作量的90%90%。 软件调试的一般方法原始法排除法回溯法软件工程第七章第七章 软件维护软件维护软件投入使用后就进入了软件维护阶段。之所以要进行软件维护是因为软件系统本身可能隐含了错误,或是需要进行功能上的改进。维护阶段是软件生命周期中时间最长的一个阶段,所花费的和费用也是最多的。如何提高软件的可维护性,减少维护的工作量

134、和费用是软件工程的重要任务。通过本章的学习能使读者了解到软件维护的概念、一般性流程和维护方法等方面的内容。软件维护概述软件维护概述一个软件产品投入使用后,通常由于各种理一个软件产品投入使用后,通常由于各种理由需要对它作适当的变更,软件交付使用后的变由需要对它作适当的变更,软件交付使用后的变更称为维护。软件维护是软件生存周期中非常重更称为维护。软件维护是软件生存周期中非常重要的一个阶段,也是耗费人力和时间较多的一个要的一个阶段,也是耗费人力和时间较多的一个阶段,但是它的重要性往往被人们忽视。有人把阶段,但是它的重要性往往被人们忽视。有人把维护比喻为一座冰山,显露出来的部分不多,大维护比喻为一座冰

135、山,显露出来的部分不多,大量的问题都是隐藏的。平均而言,大型软件的维量的问题都是隐藏的。平均而言,大型软件的维护成本是开发成本的护成本是开发成本的4 4倍左右。国外许多软件开发倍左右。国外许多软件开发组织把组织把60%60%以上的人力用于维护已投入运行的软以上的人力用于维护已投入运行的软件。这个比例随着软件数量的增多和使用寿命的件。这个比例随着软件数量的增多和使用寿命的延长,还在继续上升。学习软件工程学的主要目延长,还在继续上升。学习软件工程学的主要目的之一就是研究如何减少软件维护的工作量,降的之一就是研究如何减少软件维护的工作量,降低维护成本。低维护成本。投入运行的软件需要变更的原因很多,但

136、主要原因投入运行的软件需要变更的原因很多,但主要原因有:有:(1 1)软件的原有功能和性能可能不再适应用户的要求;)软件的原有功能和性能可能不再适应用户的要求;(2 2)软件的工作环境改变了(例如,增加了新的外部设)软件的工作环境改变了(例如,增加了新的外部设备等),软件也要做相应的变更;备等),软件也要做相应的变更; (3 3)软件运行中发现错误,需要修改。)软件运行中发现错误,需要修改。结构化维护和非结构化维护的特性非结构化维护非结构化维护用手工方式开发的软件,只有源代码,这种软件用手工方式开发的软件,只有源代码,这种软件的维护是一种非结构化维护。非结构化维护是从读代码的维护是一种非结构化

137、维护。非结构化维护是从读代码开始,由于缺少必要的文档资料,所以很难搞清软件结开始,由于缺少必要的文档资料,所以很难搞清软件结构、全程数据结构、系统接口等系统内部的内涵;因为构、全程数据结构、系统接口等系统内部的内涵;因为缺少原始资料的可比性,很难估量对源代码所做修改的缺少原始资料的可比性,很难估量对源代码所做修改的后果;因为没有测试记录,不能进行回归测试,很难保后果;因为没有测试记录,不能进行回归测试,很难保证系统修改后的质量。证系统修改后的质量。结构化维护结构化维护 用工程化方法开发的软件有一个完整的软件配置。用工程化方法开发的软件有一个完整的软件配置。维护活动是从评价设计文档开始,确定该软

138、件的主要结维护活动是从评价设计文档开始,确定该软件的主要结构性能;估量所要求的变更的影响及可能的结果;确定构性能;估量所要求的变更的影响及可能的结果;确定实施计划和方案;修改原设计;进行复审;开发新的代实施计划和方案;修改原设计;进行复审;开发新的代码;用测试说明书进行回归测试;最后修改软件配置,码;用测试说明书进行回归测试;最后修改软件配置,再次发布该软件的新版本。再次发布该软件的新版本。 维护的代价在过去的几十年中,软件维护费用逐步上升。在过去的几十年中,软件维护费用逐步上升。7070年年代用于维护软件的费用只占软件总预算的代用于维护软件的费用只占软件总预算的35%35%40%40%,80

139、80年代上升为年代上升为40%40%60%60%,到了,到了9090年代则上升为年代则上升为70%70%80%80%。 维护的困难(1 1)文档不全,或者文档不能完全与当前的软件相对应,)文档不全,或者文档不能完全与当前的软件相对应,甚至仅有源代码而没有相关的文档,软件的维护工作将非甚至仅有源代码而没有相关的文档,软件的维护工作将非常困难;常困难;(2 2)源代码编写过程中没有严格遵循合适的开发规范,)源代码编写过程中没有严格遵循合适的开发规范,没有注释或者注释不全,命名不规范,都会带来软件维护没有注释或者注释不全,命名不规范,都会带来软件维护的困难;的困难;(3 3)开发人员与维护人员大多数

140、不是同一个人,理解别)开发人员与维护人员大多数不是同一个人,理解别人写的程序通常非常困难。人写的程序通常非常困难。(4 4)软件维护不是一项吸引人的工作。成功的维护也只)软件维护不是一项吸引人的工作。成功的维护也只不过是保证他人开发的系统能正常运行,而且维护别人开不过是保证他人开发的系统能正常运行,而且维护别人开发的软件经常受挫,使得维护人员无成就感。发的软件经常受挫,使得维护人员无成就感。软件的可维护性软件的可维护性是指维护人员理解、修改软件的难软件的可维护性是指维护人员理解、修改软件的难易程度。软件生存周期每个阶段的工作都和软件的可维护易程度。软件生存周期每个阶段的工作都和软件的可维护性有

141、密切的关系,提高软件的可维护性是软件开发各个阶性有密切的关系,提高软件的可维护性是软件开发各个阶段的关键目标。段的关键目标。影响软件可维护性的因素主要有以下三个方面:影响软件可维护性的因素主要有以下三个方面:可理解性可理解性可测试性可测试性可修改性可修改性软件维护的过程的工作内容软件维护的过程的工作内容评价系统提升请求。根据软件功能和使用环境的分析,评价系统提升请求。根据软件功能和使用环境的分析,对用户提升系统的请求进行评价,评价后提出提升建议;对用户提升系统的请求进行评价,评价后提出提升建议;评价改正问题请求。分析系统在用户使用环境中出现的评价改正问题请求。分析系统在用户使用环境中出现的问题

142、和请求,评价后应提出改正问题请求解决方法;问题和请求,评价后应提出改正问题请求解决方法;程序紧急排错。对出现故障的程序实施紧急排错,使程程序紧急排错。对出现故障的程序实施紧急排错,使程序尽快恢复正常工作;序尽快恢复正常工作;指定系统维护更新计划。根据用户的请求和系统提升建指定系统维护更新计划。根据用户的请求和系统提升建议,制定系统更新计划,确定优先级别和维护更新版本议,制定系统更新计划,确定优先级别和维护更新版本日期;日期;维护更新版本需求分析。详细地分析与系统更新版本有维护更新版本需求分析。详细地分析与系统更新版本有关的需求,编写出版维护更新版本的需求文档;关的需求,编写出版维护更新版本的需

143、求文档;维护更新版本的设计。设计维护更新版本的程序及数据维护更新版本的设计。设计维护更新版本的程序及数据结构完成版本的概要设计和详细设计;结构完成版本的概要设计和详细设计;维护更新版本编写和测试。对正常维护的更新版本进行维护更新版本编写和测试。对正常维护的更新版本进行编码新版本的概要设计和详细设计;编码新版本的概要设计和详细设计;新版本的发布;新版本的发布;实行预防性维护。对投入市场后的软件进行监督,及时实行预防性维护。对投入市场后的软件进行监督,及时掌握进行情况,如确实必要,适当地对程序进行预防性掌握进行情况,如确实必要,适当地对程序进行预防性维护,使软件处于最佳运行状态;维护,使软件处于最

144、佳运行状态;人员培训。针对拥护和市场需要编写维护更新版本培训人员培训。针对拥护和市场需要编写维护更新版本培训资料,组织员工培训,提高员工的能力,支持新版本发资料,组织员工培训,提高员工的能力,支持新版本发布后的用户服务工作;布后的用户服务工作;周期性系统评估。软件开发维护单位主动对软件进行一周期性系统评估。软件开发维护单位主动对软件进行一种定期评估,用来考察本系统开发的软件产品的效能和种定期评估,用来考察本系统开发的软件产品的效能和适用性,每次评估后应撰写出评估报告;适用性,每次评估后应撰写出评估报告;进行执行后评审。在软件使用相当长时间后,对系统的进行执行后评审。在软件使用相当长时间后,对系

145、统的功能和性能进行全面和生如的评审,评估后应撰写出执功能和性能进行全面和生如的评审,评估后应撰写出执行后评审报告。行后评审报告。实际上,软件维护是一个循环过程,不同过程的维护类实际上,软件维护是一个循环过程,不同过程的维护类型可能不同,重点可能也不同,但软件维护的原则不会型可能不同,重点可能也不同,但软件维护的原则不会改变。改变。软件维护的副作用软件维护的副作用编码副作用:编码副作用:使用任何程序设计语言开发的系统,在软件维护过使用任何程序设计语言开发的系统,在软件维护过程中都有可能带入不可预知的错误。特别是由于后期的程中都有可能带入不可预知的错误。特别是由于后期的软件维护人员不了解系统的整体

146、架构的情况下,任意的软件维护人员不了解系统的整体架构的情况下,任意的修改或增加某些关键判断条件、添加某些新的功能模块修改或增加某些关键判断条件、添加某些新的功能模块访问原来的公用数据等等。访问原来的公用数据等等。 数据副作用数据副作用: : 在修改数据结构的时候,有可能造成软件接口与数在修改数据结构的时候,有可能造成软件接口与数据结构的不匹配,因而导致软件错误。数据副作用是不据结构的不匹配,因而导致软件错误。数据副作用是不严谨地修改软件系统的信息表示、数据格式等导致的结严谨地修改软件系统的信息表示、数据格式等导致的结果。果。文档副作用文档副作用: :对数据流、软件架构、模块接口、模块内的运算逻

147、辑对数据流、软件架构、模块接口、模块内的运算逻辑或任何其他有关特性进行修改时,必须对相关技术文档或任何其他有关特性进行修改时,必须对相关技术文档进行相应修改。否则会导致文档与程序版本不一致,使进行相应修改。否则会导致文档与程序版本不一致,使文档不能反映软件当前的状态。如果对可执行程序的修文档不能反映软件当前的状态。如果对可执行程序的修改没有反映到文档中,就会产生文档副作用。改没有反映到文档中,就会产生文档副作用。 版本管理版本管理随着项目的进展,将创建单个工作产品的很多版本。随着项目的进展,将创建单个工作产品的很多版本。必须将所有这些版本存储起来,使得能够有效地管理产品必须将所有这些版本存储起

148、来,使得能够有效地管理产品发布并允许开发者在测试和调试过程中回到以前的版本。发布并允许开发者在测试和调试过程中回到以前的版本。版本控制可以使用压缩算法使得存储花销最少,并允许通版本控制可以使用压缩算法使得存储花销最少,并允许通过某些处理重新生成任意的以前版本。软件的版本管理可过某些处理重新生成任意的以前版本。软件的版本管理可以使用专门的软件工具,例如以使用专门的软件工具,例如VSSVSS(VisualSourceVisualSourceSafeSafe)。)。 软件版本演变示意图软件维护总结软件维护总结维护是软件生命周期的最后一个阶段,也是持续时间最长维护是软件生命周期的最后一个阶段,也是持续

149、时间最长代价最大的一个阶段。软件维护通常包含四类活动:为了代价最大的一个阶段。软件维护通常包含四类活动:为了纠正使用过程中暴露出来的错误而进行的改正性维护,为纠正使用过程中暴露出来的错误而进行的改正性维护,为了适应外界环境改变而进行的适应性维护,为了改进原有了适应外界环境改变而进行的适应性维护,为了改进原有软件而进行的完善性维护,以及为了改进将来可维护性和软件而进行的完善性维护,以及为了改进将来可维护性和可靠性而进行的预防性维护。可靠性而进行的预防性维护。软件的可理解性、可测试性和可修改性是决定软件可维护软件的可理解性、可测试性和可修改性是决定软件可维护性的基本因素。软件生命周期每个阶段的工作

150、都和软件可性的基本因素。软件生命周期每个阶段的工作都和软件可维护性有密切关系。良好的设计、完善的文档资料、以及维护性有密切关系。良好的设计、完善的文档资料、以及一系列严格的复审和测试使得一旦发现错误是比较容易诊一系列严格的复审和测试使得一旦发现错误是比较容易诊断和纠正。当用户由新的要求或者外部环境变化时,软件断和纠正。当用户由新的要求或者外部环境变化时,软件能够比较容易适应,并能够减少维护引入的错误。因此在能够比较容易适应,并能够减少维护引入的错误。因此在软件生命周期每个阶段都必须充分考虑软件维护问题,并软件生命周期每个阶段都必须充分考虑软件维护问题,并且为软件维护做准备。且为软件维护做准备。

151、软件工程第八章软件项目管理软件项目管理就是对整个软件生命周期的一切活动进行管理。对任何工程而言,工程的成败都与管理的好坏有密切的关系,软件工程也不例外。由于软件产品的独特性,软件工程管理自然有别于其它工程管理,采用软件工程特有的管理方法对保证高质量的软件产品具有极为重要的意义。通过本章的学习,能使读者了解从工程的角度对软件项目进行管理的方式和方法。项目工程类过程项目工程类过程软件项目立项后,在整个生命周期内的工程类过程包括:软件项目立项后,在整个生命周期内的工程类过程包括:启动与计划、需求分析、系统设计、开发、测试与发布、启动与计划、需求分析、系统设计、开发、测试与发布、试运行、推广实施和项目

152、验收交付过程。在实际项目中,试运行、推广实施和项目验收交付过程。在实际项目中,可以根据项目的规模、项目实施周期、参加人员的数量、可以根据项目的规模、项目实施周期、参加人员的数量、是否多家开发商异地开发等实际情况进行剪裁或增加。是否多家开发商异地开发等实际情况进行剪裁或增加。项目工程类过程中的活动和主要输出物表项目工程类过程中的活动和主要输出物表工程类过程工程类过程工程类过程工程类过程活动活动活动活动主要活动及输出物描述主要活动及输出物描述主要活动及输出物描述主要活动及输出物描述责任人责任人责任人责任人项目启动与项目启动与计划过程计划过程下达项目开发命令下达项目开发命令书书项目开发命令书,任命项

153、目开发命令书,任命项目经理。项目经理。分管经理分管经理进行项目的组织落实、进行项目的组织落实、人员落实和软硬件环人员落实和软硬件环境落实境落实成立项目组,成立项目组, 明确用户、开明确用户、开发商、监理单位的组织结构、发商、监理单位的组织结构、参加人员、职责和工作方式;参加人员、职责和工作方式;落实软硬件环境。落实软硬件环境。项目经理项目经理召开项目启动会议召开项目启动会议明确项目的整体范围、总体明确项目的整体范围、总体进度、项目组成员职责以及进度、项目组成员职责以及各种相关工作规范等。各种相关工作规范等。项目经理项目经理进行项目预算,编制进行项目预算,编制项目总体计划,定义项目总体计划,定义

154、项目管理过程和活动项目管理过程和活动根据项目范围估算工作量,根据项目范围估算工作量,进行项目预算;编制项目总进行项目预算;编制项目总体计划;编制项目风险管理体计划;编制项目风险管理质量管理和配置管理计划。质量管理和配置管理计划。项目经理项目经理需求过程需求过程进行项目需求总体规划进行项目需求总体规划明确需求分析小组中客户与开发明确需求分析小组中客户与开发商各自的责任和工作流程;界定商各自的责任和工作流程;界定系统的范围,明确本系统与外部系统的范围,明确本系统与外部相关系统的接口,划分子系统;相关系统的接口,划分子系统;明确需求文档规范;编制需求调明确需求文档规范;编制需求调研、分析计划。研、分

155、析计划。项目经理、项目经理、架构师、架构师、系统分析师系统分析师需求调研需求调研组织协调需求调研;各子系统编组织协调需求调研;各子系统编写需求调研列表、调研记录和会写需求调研列表、调研记录和会议纪要;完成客户需求规格说明议纪要;完成客户需求规格说明书及签字确认。书及签字确认。项目经理、项目经理、系统分析师系统分析师需求分析需求分析进行系统需求分析、完成系统开进行系统需求分析、完成系统开发需求文档发需求文档系统分析师系统分析师需求评审与确认需求评审与确认组织需求评审;完善系统开发需组织需求评审;完善系统开发需求文档,并由客户签字确认;形求文档,并由客户签字确认;形成需求跟踪矩阵;入配置库。成需求

156、跟踪矩阵;入配置库。项目经理、项目经理、系统分析师系统分析师需求变更管理需求变更管理评审需求变更,进行工作量估算、评审需求变更,进行工作量估算、进度分析和成本分析;编写需求进度分析和成本分析;编写需求变更报告,并由用户和项目相关变更报告,并由用户和项目相关干系人签字确认;修改系统需求干系人签字确认;修改系统需求文档;维护需求跟踪矩阵。文档;维护需求跟踪矩阵。项目经理、项目经理、系统分析师系统分析师设计过程设计过程编制系统设计计划编制系统设计计划编制系统设计计划。编制系统设计计划。项目经理项目经理系统架构设计系统架构设计完成系统架构设计文档。完成系统架构设计文档。架构师架构师系统详细设计系统详细

157、设计完成系统设计文档;完成数据库完成系统设计文档;完成数据库设计文档;完成界面设计文档;设计文档;完成界面设计文档;系统设计师系统设计师设计方案评审设计方案评审召集设计评审会议,完善系统设召集设计评审会议,完善系统设计文档和数据库设计文档。邀请计文档和数据库设计文档。邀请客户评审界面设计,并请客户签客户评审界面设计,并请客户签字确认,完善界面设计;入配置字确认,完善界面设计;入配置库。库。项目经理、项目经理、系统设计师系统设计师编制和评审测试计划、编制和评审测试计划、测试用例测试用例编制测试计划和测试用例;评审编制测试计划和测试用例;评审测试计划和测试用例。测试计划和测试用例。项目经理、项目经

158、理、测试人员测试人员开发过程开发过程编制开发计划编制开发计划根据设计文档估算开发工作量,根据设计文档估算开发工作量,编制开发计划,并进行评审。编制开发计划,并进行评审。项目经理项目经理开发前的准备开发前的准备开发规范培训;可复用构件选用开发规范培训;可复用构件选用和使用培训;工作日志、工作周和使用培训;工作日志、工作周报、缺陷跟踪表的使用培训。报、缺陷跟踪表的使用培训。项目经理项目经理编程和单元测试编程和单元测试编程及单元自测编程及单元自测程序员程序员进度跟踪和质量管理进度跟踪和质量管理跟踪项目进度;通过缺陷跟踪表跟踪项目进度;通过缺陷跟踪表跟踪开发质量;进行里程碑评审。跟踪开发质量;进行里程

159、碑评审。项目经理项目经理测试与发布测试与发布过程过程集成测试集成测试根据测试计划和测试用例进行集根据测试计划和测试用例进行集成测试,编写集成测试报告,填成测试,编写集成测试报告,填写缺陷跟踪表。写缺陷跟踪表。测试人员测试人员系统测试系统测试根据测试计划和测试用例进行系根据测试计划和测试用例进行系统测试,编写系统测试报告,填统测试,编写系统测试报告,填写缺陷跟踪表。写缺陷跟踪表。测试人员测试人员缺陷修改与跟踪缺陷修改与跟踪根据测试报告和缺陷跟踪表确定根据测试报告和缺陷跟踪表确定修改内容,编制修改计划,由程修改内容,编制修改计划,由程序员修改软件缺陷,由测试人员序员修改软件缺陷,由测试人员进行复测

160、,直到缺陷关闭为止。进行复测,直到缺陷关闭为止。项目经理、项目经理、程序员、程序员、测试人员测试人员软件发布软件发布制作软件安装包,书写软件用户制作软件安装包,书写软件用户手册和培训教材,刻录光盘并包手册和培训教材,刻录光盘并包装;根据软件发布流程进行软件装;根据软件发布流程进行软件发布。发布。项目经理、项目经理、文档人员、文档人员、配置管理员配置管理员试运行过程试运行过程软件试运行软件试运行编制试运行计划;软件安装部署;编制试运行计划;软件安装部署;进行老系统数据迁移;软件培训;进行老系统数据迁移;软件培训;软件试运行。软件试运行。项目经理、项目经理、实施人员、实施人员、客户客户试运行缺陷修

161、改试运行缺陷修改评审试运行阶段发生的软件缺陷,评审试运行阶段发生的软件缺陷,制定缺陷修改计划,由程序员修制定缺陷修改计划,由程序员修改软件缺陷,由测试人员进行测改软件缺陷,由测试人员进行测试,由客户确认,直到缺陷关闭试,由客户确认,直到缺陷关闭为止。为止。项目经理、项目经理、程序员、程序员、测试人员、测试人员、客户客户推广实施过程推广实施过程软件推广实施、培训软件推广实施、培训编制推广实施计划和培训计划;编制推广实施计划和培训计划;软件安装部署;进行老系统数据软件安装部署;进行老系统数据迁移;软件培训。迁移;软件培训。项目经理项目经理实施人员实施人员培训人员培训人员验收交付过程验收交付过程验收

162、交付前的准备验收交付前的准备收集客户使用报告;整理合同约收集客户使用报告;整理合同约定的系统提交物,如安装包、用定的系统提交物,如安装包、用户手册、测试报告、设计文档、户手册、测试报告、设计文档、源代码等;与客户确定验收交付源代码等;与客户确定验收交付的具体日期和方式。的具体日期和方式。项目经理、项目经理、配置管理员配置管理员验收交付计划验收交付计划编制验收交付计划编制验收交付计划项目经理项目经理项目验收交付项目验收交付组织客户和相关专家,召开项目组织客户和相关专家,召开项目验收交付会议,根据合同和客户验收交付会议,根据合同和客户需求文档进行系统提交物的审核需求文档进行系统提交物的审核和交接,

163、由相关人员签字,完成和交接,由相关人员签字,完成项目验收交付。项目验收交付。项目经理项目经理系统分析师系统分析师客户及专家客户及专家项目管理类过程项目管理类过程项目管理类过程与项目工程类过程相结合,贯穿于项目整项目管理类过程与项目工程类过程相结合,贯穿于项目整个生命周期的各个阶段,主要包括项目立项管理、项目跟个生命周期的各个阶段,主要包括项目立项管理、项目跟踪监控、风险管理和项目结项管理,是对项目的成本、进踪监控、风险管理和项目结项管理,是对项目的成本、进度和质量进行的一系列管理监控过程。度和质量进行的一系列管理监控过程。 项目管理类过程中的活动和主要输出物表管理类过程管理类过程管理类过程管理

164、类过程活动活动活动活动主要活动及输出物描述主要活动及输出物描述主要活动及输出物描述主要活动及输出物描述责任人责任人责任人责任人项目立项项目立项立项调查立项调查编写立项调查报告编写立项调查报告销售人员销售人员可行性分析可行性分析编写项目可行性分析报告编写项目可行性分析报告销售人员销售人员立项申请立项申请编写立项报告,申请立项或投标。编写立项报告,申请立项或投标。销售人员销售人员项目跟踪监控项目跟踪监控审核工作日志审核工作日志审核项目组成员的工作日志,随审核项目组成员的工作日志,随时监控项目的进度。时监控项目的进度。项目经理项目经理召开项目会议召开项目会议召开项目周例会、里程碑会议、召开项目周例会

165、、里程碑会议、工作汇报,监控项目的进度。工作汇报,监控项目的进度。项目经理项目经理编写项目周报、里程碑编写项目周报、里程碑报告报告编写项目周报、里程碑报告,以编写项目周报、里程碑报告,以便分管经理掌握项目的进展情况。便分管经理掌握项目的进展情况。项目经理项目经理协调工作协调工作进行项目的协调工作,包括与客进行项目的协调工作,包括与客户的协调、项目组的工作协调和户的协调、项目组的工作协调和资源的协调。资源的协调。项目经理项目经理项目质量跟踪监控项目质量跟踪监控对项目的质量问题进行跟踪,协对项目的质量问题进行跟踪,协调开发人员和测试人员解决软件调开发人员和测试人员解决软件缺陷;对项目的待处理问题进

166、行缺陷;对项目的待处理问题进行跟踪,协调客户和项目组解决问跟踪,协调客户和项目组解决问题。题。项目经理项目经理项目成本监控项目成本监控统计项目的实际工时、缺陷数量、统计项目的实际工时、缺陷数量、相关费用等,对项目进行成本监相关费用等,对项目进行成本监控。控。项目经理项目经理风险管理风险管理风险识别风险识别识别风险。识别风险。项目经理项目经理风险分析风险分析分析风险,制定规避方法。分析风险,制定规避方法。项目经理项目经理风险计划风险计划拟定风险管理计划。拟定风险管理计划。项目经理项目经理风险跟踪风险跟踪跟踪风险,进行有效的规避跟踪风险,进行有效的规避项目经理项目经理项目结项项目结项书写项目结项报

167、告书写项目结项报告书写项目结项报告,对项目进行书写项目结项报告,对项目进行总结。总结。项目经理项目经理召开项目结项会议召开项目结项会议召开项目结项会议。召开项目结项会议。项目经理项目经理移交项目资料移交项目资料移交项目资料。移交项目资料。项目经理项目经理项目支持类过程项目支持类过程项目支持类过程与项目工程类过程相结合,贯穿于项目整项目支持类过程与项目工程类过程相结合,贯穿于项目整个生命周期的各个阶段,主要包括质量保证过程和配置管个生命周期的各个阶段,主要包括质量保证过程和配置管理过程。理过程。项目支持类中的活动和主要输出物表支持类过程支持类过程支持类过程支持类过程活动活动活动活动主要活动及输出

168、物描述主要活动及输出物描述主要活动及输出物描述主要活动及输出物描述责任人责任人责任人责任人质量保证质量保证制订质量保证计划制订质量保证计划制订质量保证计划制订质量保证计划QAQA过程审核过程审核审核项目各个管理过程是否符合审核项目各个管理过程是否符合规范,过程输出物是否规范完备。规范,过程输出物是否规范完备。QAQA跟踪与验证不符合项跟踪与验证不符合项对项目个阶段过程中产生的不符对项目个阶段过程中产生的不符合项进行跟踪和验证,确定符合合项进行跟踪和验证,确定符合项目要求。项目要求。QAQA内部验收内部验收在提交给客户前,组织内部验收,在提交给客户前,组织内部验收,跟踪验收不符合项。跟踪验收不符

169、合项。QAQA配置管理配置管理制订配置管理计划制订配置管理计划制订配置管理计划制订配置管理计划配置管理员配置管理员标识配置项标识配置项标识配置项标识配置项配置管理员配置管理员建立配置库建立配置库建立配置库建立配置库配置管理员配置管理员建立基线建立基线建立基线建立基线配置管理员配置管理员跟踪变更跟踪变更跟踪变更跟踪变更配置管理员配置管理员配置审核配置审核配置审核配置审核配置管理员配置管理员配置管理工作汇报配置管理工作汇报配置管理工作汇报配置管理工作汇报配置管理员配置管理员启动与计划过程管理启动与计划过程管理软件项目正式立项后,进入项目的启动与计划阶段。软件项目正式立项后,进入项目的启动与计划阶段

170、。项目的启动与计划管理过程包括下达项目开发命令书、项目的启动与计划管理过程包括下达项目开发命令书、进行项目的组织落实与人员落实、召开项目启动会、进行进行项目的组织落实与人员落实、召开项目启动会、进行项目预算、编制项目总体计划。其中,项目开发命令书项目预算、编制项目总体计划。其中,项目开发命令书由分管经理下达,任命项目经理,描述项目任务、周期、由分管经理下达,任命项目经理,描述项目任务、周期、系统提交物。项目开发命令书下达后,由项目经理组系统提交物。项目开发命令书下达后,由项目经理组建项目组,根据项目需要设置项目岗位和组织结构,落实建项目组,根据项目需要设置项目岗位和组织结构,落实项目组成员,落

171、实各种软硬件资源,进行工作量估算,编项目组成员,落实各种软硬件资源,进行工作量估算,编制项目预算和项目总体计划,召开项目启动会议,明确项制项目预算和项目总体计划,召开项目启动会议,明确项目的整体范围、总体进度、项目组成员职责以及各种相关目的整体范围、总体进度、项目组成员职责以及各种相关工作规范。项目的启动与计划过程管理是整个项目顺利实工作规范。项目的启动与计划过程管理是整个项目顺利实施的基础,项目的组织落实、人员落实、项目估算和项目施的基础,项目的组织落实、人员落实、项目估算和项目计划对项目的成功尤其重要。计划对项目的成功尤其重要。项目组织结构项目估算项目估算项目估算,就是结合项目的各种实际情

172、况,对项目规模、项目估算,就是结合项目的各种实际情况,对项目规模、所需的工作量、成本和进度进行的预测。项目估算是软件所需的工作量、成本和进度进行的预测。项目估算是软件开发中很重要的一个环节,如果低估项目周期会造成人力开发中很重要的一个环节,如果低估项目周期会造成人力低估、成本预算低估、日程过短,最终人力资源耗尽,成低估、成本预算低估、日程过短,最终人力资源耗尽,成本超出预算,为完成项目不得不赶工,影响项目质量,甚本超出预算,为完成项目不得不赶工,影响项目质量,甚至导致项目失败。因此,项目估算过程中重点考虑的是如至导致项目失败。因此,项目估算过程中重点考虑的是如何将估算误差限定在一定范围内。何将

173、估算误差限定在一定范围内。项目计划项目计划在软件项目管理过程中一个关键的活动是制定项目计划,它是软件开在软件项目管理过程中一个关键的活动是制定项目计划,它是软件开发的第一步。项目计划的目标是为项目负责人提供一个框架,使之能发的第一步。项目计划的目标是为项目负责人提供一个框架,使之能合理地估算项目开发所需的资源、费用、开发时间进度,并控制软件合理地估算项目开发所需的资源、费用、开发时间进度,并控制软件项目开发过程按此计划进行。软件项目计划一般在可行性研究阶段结项目开发过程按此计划进行。软件项目计划一般在可行性研究阶段结束后制定初稿,在需求分析阶段结束后才能定稿。束后制定初稿,在需求分析阶段结束后

174、才能定稿。软件项目计划制定后,需要保证其执行力,保证其计划能够确切软件项目计划制定后,需要保证其执行力,保证其计划能够确切实施。由于项目计划是在项目初期制定的,在项目的开发进行中难免实施。由于项目计划是在项目初期制定的,在项目的开发进行中难免会发生变更,以及计划与实际的不一致状况,这就需要在项目的实施会发生变更,以及计划与实际的不一致状况,这就需要在项目的实施过程中根据实际状况修正项目计划的相关内容。过程中根据实际状况修正项目计划的相关内容。在做计划时,必须就需要的人力、项目持续时间、以及成本作出在做计划时,必须就需要的人力、项目持续时间、以及成本作出估算。这种估算大多是参考以前的花费作出的。

175、软件项目计划包括两估算。这种估算大多是参考以前的花费作出的。软件项目计划包括两部分:研究与估算。即通过研究确定该软件项目的主要功能、性能、部分:研究与估算。即通过研究确定该软件项目的主要功能、性能、系统界面。估算是在软件项目开发前,估算项目开发所需的经费、所系统界面。估算是在软件项目开发前,估算项目开发所需的经费、所需的资源、以及开发进度。估算是所有其他活动进行的基础,项目计需的资源、以及开发进度。估算是所有其他活动进行的基础,项目计划也为软件工程过程提供了工作方向,所以不能没有项目计划就着手划也为软件工程过程提供了工作方向,所以不能没有项目计划就着手开发,否则会陷入盲目性。开发,否则会陷入盲

176、目性。 项目计划内容范围:对软件项目作综合描述,定义其所要做的工作以范围:对软件项目作综合描述,定义其所要做的工作以及性能限制,包括项目目标、主要功能描述、性能限制及性能限制,包括项目目标、主要功能描述、性能限制或约束、系统接口、特殊要求、开发概述;或约束、系统接口、特殊要求、开发概述;资源:定义并获取项目所需的人力资源、构建开发环境资源:定义并获取项目所需的人力资源、构建开发环境所需的软件资源、硬件资源、以及其他的特殊场地、工所需的软件资源、硬件资源、以及其他的特殊场地、工具等资源;具等资源;进度安排:进度安排是否合理往往会影响整个项目的按进度安排:进度安排是否合理往往会影响整个项目的按期完

177、成,因此这一环节是十分重要的。制定进度与其他期完成,因此这一环节是十分重要的。制定进度与其他工程没有太大差别,其方法主要有工程网络图法、甘特工程没有太大差别,其方法主要有工程网络图法、甘特图、任务资源表;图、任务资源表;成本估算:为使开发项目在规定时间内完成,且不超成本估算:为使开发项目在规定时间内完成,且不超过预算,成本估算是很重要的。软件成本估算是一门不过预算,成本估算是很重要的。软件成本估算是一门不成熟的技术,基本上取决于历史项目和估算者的经验,成熟的技术,基本上取决于历史项目和估算者的经验,国外已有技术只能作为参考。;国外已有技术只能作为参考。;培训计划:为各类用户制定培训计划。特别是

178、领域性较培训计划:为各类用户制定培训计划。特别是领域性较强的大型项目,培训特别重要。强的大型项目,培训特别重要。软件质量保证软件质量保证是软件工程管理的重要内容,软件质量保证要做好以下几软件质量保证是软件工程管理的重要内容,软件质量保证要做好以下几方面的工作:方面的工作:采用技术手段和工具:质量保证活动要贯穿开发过程的始终,必须采用技术采用技术手段和工具:质量保证活动要贯穿开发过程的始终,必须采用技术手段和好的工具,尤其是使用软件开发环境来进行软件开发。手段和好的工具,尤其是使用软件开发环境来进行软件开发。组织正式的技术评审:在软件开发的每一个阶段结束时,都要组织正式的技组织正式的技术评审:在

179、软件开发的每一个阶段结束时,都要组织正式的技术评审。国家标准要求单位必须采用审查、文档评审、设计评审、审计和测术评审。国家标准要求单位必须采用审查、文档评审、设计评审、审计和测试等具体手段来保证软件质量。试等具体手段来保证软件质量。加强软件测试:软件测试是保证软件质量的传统的手段,因为测试可以发现加强软件测试:软件测试是保证软件质量的传统的手段,因为测试可以发现软件系统中的大多数潜在错误。软件测试要按照规定的流程制定测试用例、软件系统中的大多数潜在错误。软件测试要按照规定的流程制定测试用例、准备测试环境和测试数据。准备测试环境和测试数据。推行软件工程规范:软件工程规范可以从软件开发流程的各个阶

180、段保证软件推行软件工程规范:软件工程规范可以从软件开发流程的各个阶段保证软件实施的规范,从而保证软件具有高质量。如目前业界广泛采用的实施的规范,从而保证软件具有高质量。如目前业界广泛采用的CMMICMMI软件生软件生产流程。产流程。对软件的变更进行控制:软件的变更和修改常常会引起潜伏的错误,因此必对软件的变更进行控制:软件的变更和修改常常会引起潜伏的错误,因此必须严格控制软件的变更和修改,做要变更后的测试。须严格控制软件的变更和修改,做要变更后的测试。对软件的质量进行度量:对每个项目的质量状况进行有效跟踪,及时记录和对软件的质量进行度量:对每个项目的质量状况进行有效跟踪,及时记录和报告软件的质

181、量验证情况,并记录归档,作为后续软件项目质量保证计划的报告软件的质量验证情况,并记录归档,作为后续软件项目质量保证计划的参考数据。参考数据。需求过程管理需求过程管理需求总体规划需求总体规划需求总体规划需求总体规划 需求调研和分析需求调研和分析需求调研和分析需求调研和分析 需求说明规格书和需求评审需求说明规格书和需求评审需求说明规格书和需求评审需求说明规格书和需求评审 需求变更管理需求变更管理需求变更管理需求变更管理 需求阶段的质量、进度跟踪和配置管理需求阶段的质量、进度跟踪和配置管理需求阶段的质量、进度跟踪和配置管理需求阶段的质量、进度跟踪和配置管理 设计过程管理设计过程管理系统设计过程是介于

182、软件的需求分析与编码阶段的中间阶系统设计过程是介于软件的需求分析与编码阶段的中间阶段,设计质量的优劣直接导致编码质量,系统设计过程的段,设计质量的优劣直接导致编码质量,系统设计过程的工作计划、计划的实施和监控也是整个软件项目管理的重工作计划、计划的实施和监控也是整个软件项目管理的重要环节,所以,系统设计阶段的管理和计划也很重要。系要环节,所以,系统设计阶段的管理和计划也很重要。系统设计阶段工作内容包括编制系统设计计划、系统架构设统设计阶段工作内容包括编制系统设计计划、系统架构设计、系统详细设计、设计方案评审、编制和评审测试计划、计、系统详细设计、设计方案评审、编制和评审测试计划、测试用例。测试

183、用例。设计过程内容设计过程内容编制系统设计计划编制系统设计计划编制系统设计计划编制系统设计计划 系统架构设计系统架构设计系统架构设计系统架构设计 系统详细设计系统详细设计系统详细设计系统详细设计 设计方案的评审设计方案的评审设计方案的评审设计方案的评审 设计测试用例设计测试用例设计测试用例设计测试用例 设计阶段的质量、进度跟踪和配置管理设计阶段的质量、进度跟踪和配置管理设计阶段的质量、进度跟踪和配置管理设计阶段的质量、进度跟踪和配置管理 开发过程管理开发过程管理在系统详细设计完成后就进入项目的开发实施过程,这阶在系统详细设计完成后就进入项目的开发实施过程,这阶段的主要工作重点转移到系统编码过程

184、上。主要的工作内段的主要工作重点转移到系统编码过程上。主要的工作内容除了包括编码外,还需要很多的相关的计划和协调工作,容除了包括编码外,还需要很多的相关的计划和协调工作,在进行编码开始之前,项目负责人要编制开发计划,确定在进行编码开始之前,项目负责人要编制开发计划,确定各个模块编码阶段的负责人、项目重要的里程碑或检查点,各个模块编码阶段的负责人、项目重要的里程碑或检查点,项目开发环境的准备由项目经理或技术经理负责实施,其项目开发环境的准备由项目经理或技术经理负责实施,其工作内容包括:开发规范培训、可复用构件选用和使用培工作内容包括:开发规范培训、可复用构件选用和使用培训、项目开发工作环境的准备

185、和搭建。在开发实施的时候,训、项目开发工作环境的准备和搭建。在开发实施的时候,项目组成员要填写工作日志、工作周报、作单元测试和单项目组成员要填写工作日志、工作周报、作单元测试和单元测试报告。项目经理特别要跟踪项目进度,制定缺陷跟元测试报告。项目经理特别要跟踪项目进度,制定缺陷跟踪表跟踪开发质量;进行里程碑评审。踪表跟踪开发质量;进行里程碑评审。 开发过程内容开发过程内容编制开发计划编制开发计划编制开发计划编制开发计划 开发前的准备开发前的准备开发前的准备开发前的准备 编程和单元测试编程和单元测试编程和单元测试编程和单元测试 开发阶段的质量、进度跟踪和配置管理开发阶段的质量、进度跟踪和配置管理开

186、发阶段的质量、进度跟踪和配置管理开发阶段的质量、进度跟踪和配置管理测试与发布过程管理测试与发布过程管理测试阶段需要项目经理协助测试人员或测试经理制定测试测试阶段需要项目经理协助测试人员或测试经理制定测试计划,测试计划需要定义测试的范围和内容、测试持续时计划,测试计划需要定义测试的范围和内容、测试持续时间、测试用例和测试报告的规格、测试过程的质量要求和间、测试用例和测试报告的规格、测试过程的质量要求和测试出口准则、测试的资源设备等。测试出口准则、测试的资源设备等。软件测试过程是保证软件质量的重要阶段,测试人员需要软件测试过程是保证软件质量的重要阶段,测试人员需要在项目开始就需要介入,至少测试经理

187、和主要测试人员要在项目开始就需要介入,至少测试经理和主要测试人员要能够参加需求阶段的里程碑会议和重要的需求评审,便于能够参加需求阶段的里程碑会议和重要的需求评审,便于更好更全面地理解需求,只有这样才能写出高质量的测试更好更全面地理解需求,只有这样才能写出高质量的测试用例。用例。测试完成后需要项目经理确认测试的结果是否达到预期的测试完成后需要项目经理确认测试的结果是否达到预期的质量目标,达到则进入发布阶段,否则必须继续进行测试,质量目标,达到则进入发布阶段,否则必须继续进行测试,直到达到预定的质量目标。直到达到预定的质量目标。 试运行过程管理试运行过程管理试运行过程是软件系统在正式通入使用前的准

188、备阶段,试试运行过程是软件系统在正式通入使用前的准备阶段,试运行过程要求系统必须经过严格的测试,能够提供软件系运行过程要求系统必须经过严格的测试,能够提供软件系统的测试报告,切不可认为试运行的软件质量无所谓。试统的测试报告,切不可认为试运行的软件质量无所谓。试运行要模拟真实用户的环境进行演示,包括真实的软件环运行要模拟真实用户的环境进行演示,包括真实的软件环境、硬件环境、运行数据,由用户实际操作软件系统。试境、硬件环境、运行数据,由用户实际操作软件系统。试运行阶段也是发现系统潜在缺陷、了解开发的软件系统与运行阶段也是发现系统潜在缺陷、了解开发的软件系统与用户期望的系统功能是否有差异的重要过程,

189、在试运行过用户期望的系统功能是否有差异的重要过程,在试运行过程中要随时记录运行过程中出现的异常情况,这将是系统程中要随时记录运行过程中出现的异常情况,这将是系统改进的直接参考资料。改进的直接参考资料。试运行过程一般也需要编制试运行计划,规划试运行持续试运行过程一般也需要编制试运行计划,规划试运行持续的时间、需要的软硬件资源、需要哪些人员协助、是否需的时间、需要的软硬件资源、需要哪些人员协助、是否需要客户协助以及需要客户提供哪些试运行数据等等。还包要客户协助以及需要客户提供哪些试运行数据等等。还包括软件安装部署、进行老系统数据迁移、软件培训、用户括软件安装部署、进行老系统数据迁移、软件培训、用户

190、实际操作软件运行。实际操作软件运行。验收过程管理验收过程管理软件验收过程就是在软件项目开发完成后,由客户方自己软件验收过程就是在软件项目开发完成后,由客户方自己或者邀请该软件系统相关领域的专家对软件进行验收的活或者邀请该软件系统相关领域的专家对软件进行验收的活动,特别是专业性很强的软件系统,通常会邀请资深专家、动,特别是专业性很强的软件系统,通常会邀请资深专家、业界人员、最终用户等组成验收小组进行验收。验收过程业界人员、最终用户等组成验收小组进行验收。验收过程包括验收前的准备过程、制定验收交付计划、验收交付。包括验收前的准备过程、制定验收交付计划、验收交付。验收前项目经理要组织验收准备会议,落

191、实验收需要注意验收前项目经理要组织验收准备会议,落实验收需要注意的事项、需要准别的材料和文档。按照合同的规定准备开的事项、需要准别的材料和文档。按照合同的规定准备开发上需要提交的产出物,如系统安装包、用户操作手册、发上需要提交的产出物,如系统安装包、用户操作手册、测试报告、分析设计文档、原、源代码等,并按照合同规测试报告、分析设计文档、原、源代码等,并按照合同规定的方式保存或制作光盘。验收准备工作结束后还需要与定的方式保存或制作光盘。验收准备工作结束后还需要与客户商定最终验收交付的具体日期和交付方式。客户商定最终验收交付的具体日期和交付方式。软件工程第九章第九章 新型软件工程技术新型软件工程技

192、术随着软件工程技术的发展,新型的软件工程技术不断涌现,这些新型的软件工程技术极大地提高了软件开发的效率和可靠度。本章对面向对象的软件开发技术、软件复用和构件技术、软件接口技术和软件智能化技术进行了介绍,使读者对新型的软件工程技术能有一个较全面的了解。面向对象的软件开发技术在软件开发与设计中,对一个系统的认识是一个渐进过程,在软件开发与设计中,对一个系统的认识是一个渐进过程,是在继承了以往的有关知识的基础上,多次迭代往复并逐是在继承了以往的有关知识的基础上,多次迭代往复并逐步深化而形成的。在这种认识的深化过程中,既包括了从步深化而形成的。在这种认识的深化过程中,既包括了从一般到特殊的演绎,也包括

193、了从特殊到一般的归纳。而目一般到特殊的演绎,也包括了从特殊到一般的归纳。而目前用于分析、设计和实现一个系统的过程和方法大部分是前用于分析、设计和实现一个系统的过程和方法大部分是瀑布型的即后一步是实现前一步所提出的需求,或者是瀑布型的即后一步是实现前一步所提出的需求,或者是进一步发展前一步所得出的结果。因此,当越接近系统设进一步发展前一步所得出的结果。因此,当越接近系统设计或实现的后期时,对系统设计或实现的前期的结果作修计或实现的后期时,对系统设计或实现的前期的结果作修改就越困难同时也只有在系统设计的后期才能发现在前改就越困难同时也只有在系统设计的后期才能发现在前期所形成的一些差错,而且当这个系

194、统越大、问题越复杂期所形成的一些差错,而且当这个系统越大、问题越复杂时,由于这种对系统的认识过程相对系统的设计或实现过时,由于这种对系统的认识过程相对系统的设计或实现过程不一致所引起的困难也就越大。程不一致所引起的困难也就越大。为了解决上述这个问题,就应使分析、设计和实现一个系为了解决上述这个问题,就应使分析、设计和实现一个系统的方法尽可能地接近认识一个系统的方法。统的方法尽可能地接近认识一个系统的方法。 面向对象方法概述面向对象(面向对象(Object-OrientedObject-Oriented,缩写为,缩写为OOOO)方法的出发点)方法的出发点和基本原则,是尽可能模拟人类习惯的思维方式

195、,使开发和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。能一致。 概括地说,面向对象方法具有下述四个要点:概括地说,面向对象方法具有下述四个要点:认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的

196、对象以某种方式组合而成。因此,面向对象的软件系统是由对象组成较简单的对象以某种方式组合而成。因此,面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。把所有对象都划分成各种对象类(简称为类,把所有对象都划分成各种对象类(简称为类,ClassClass),每个对象类都定义了一),每个对象类都定义了一组数据的方法。数据用于表示对象的静态属性,是对象的状态信息。因此,每组数据的方法。数据用于表示对象的静态属性,是对象的状态信息。因此,每当建立该对象类的一个新实例时,就按照类中对数据的

197、定义为这个新对象生成当建立该对象类的一个新实例时,就按照类中对数据的定义为这个新对象生成组专用的数据,以便描述该对象独特的属性值。例如,荧光屏上不同位置显组专用的数据,以便描述该对象独特的属性值。例如,荧光屏上不同位置显示的半径不同的几个圆,虽然都是示的半径不同的几个圆,虽然都是CircleCircle类的对象,但是,各自都有自已专用的类的对象,但是,各自都有自已专用的数据,以便记录各自的圆心位置、半径等。类中定义的方法是允许施加于该类数据,以便记录各自的圆心位置、半径等。类中定义的方法是允许施加于该类对象上的操作,是该类所有对象共享的,并不需要为每个对象都复制操作的代对象上的操作,是该类所有

198、对象共享的,并不需要为每个对象都复制操作的代码。码。按照子类(或称为派生类)与父类(或称为基类)的关系,将若干个对象类组按照子类(或称为派生类)与父类(或称为基类)的关系,将若干个对象类组成成个层次结构的系统(也称为类等级)。在这中层次结构中,通常下层的派个层次结构的系统(也称为类等级)。在这中层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(InheritanceInheritance)。但是,如果在派生类中对某些特性又做了重新描述,则在派)。但是,如果在派生类中对某些特性又做了重新描

199、述,则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。特性。对象彼此之间仅能通过传递消息互相联系。对象与传统的数据有本质区别,它对象彼此之间仅能通过传递消息互相联系。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。也就是说,一切局部于

200、该对象的私有信息,都被封装在该对象数据进行操作。也就是说,一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是封装性。不能直接使用,这就是封装性。面向对象的分析方法面向对象软件开发方法采用面向对象分析(面向对象软件开发方法采用面向对象分析(Object-Object-OrientedAnalysis,OOA)OrientedAnalysis,OOA)技术对问题进行分析建模,它将技术对问题进行分析建模,它将问题表述为问题表述为“ “对象对象+ +关联

201、关联” ”的形式,其中,对象描述问题的形式,其中,对象描述问题空间中的事物,关联描述问题空间中事物和事物之间的关空间中的事物,关联描述问题空间中事物和事物之间的关系。同时,可以像结构化分析技术一样,借助数据词典、系。同时,可以像结构化分析技术一样,借助数据词典、结构化语言、判定表、判定树等工具对它们进行详细说明。结构化语言、判定表、判定树等工具对它们进行详细说明。因此,面向对象分析工作主要包括对问题空间中对象的确因此,面向对象分析工作主要包括对问题空间中对象的确定和对对象之间关联的确定,对对象的确定包括对对象属定和对对象之间关联的确定,对对象的确定包括对对象属性和行为的确定;对关联的确定包括对

202、对象结构关系、实性和行为的确定;对关联的确定包括对对象结构关系、实例关联关系和消息关联关系的确定,最终建立起问题域的例关联关系和消息关联关系的确定,最终建立起问题域的正确模型。正确模型。 面向对象分析工作的内容和步骤OOA的过程的过程OOAOOA过程从分析用户需求说明书开始。用户需求说明书包过程从分析用户需求说明书开始。用户需求说明书包含的内容有问题范围、性能需求、应用环境及假设条件等。含的内容有问题范围、性能需求、应用环境及假设条件等。它应该阐明它应该阐明“ “做什么做什么” ”而不是而不是“ “如何做如何做” ”。在面向对象建模的过程中,系统分析员必须认真向领域专在面向对象建模的过程中,系

203、统分析员必须认真向领域专家学习,尤其是建模过程中的分类工作往往难度很大。另家学习,尤其是建模过程中的分类工作往往难度很大。另外,还应该仔细研究以前针对相同的或类似的问题域进行外,还应该仔细研究以前针对相同的或类似的问题域进行面向对象分析所得到的结果。由于面向对象分析结果具有面向对象分析所得到的结果。由于面向对象分析结果具有稳定性和可复用性,因此这些结果在当前项目中往往有许稳定性和可复用性,因此这些结果在当前项目中往往有许多是可以复用的。多是可以复用的。通过面向对象分析建立的系统模型是以对象为中心的,称通过面向对象分析建立的系统模型是以对象为中心的,称为概念模型。它是由一组相关的类组成的。面向对

204、象分析为概念模型。它是由一组相关的类组成的。面向对象分析可以采用自顶向下的方法,逐层分解建立系统模型;也可可以采用自顶向下的方法,逐层分解建立系统模型;也可以采用自底向上的方法,从已有定义的基类出发,逐步构以采用自底向上的方法,从已有定义的基类出发,逐步构造新的类。造新的类。 面向对象建模得到的概念模型包含对象的三个要素,即静面向对象建模得到的概念模型包含对象的三个要素,即静态结构(对象模型态结构(对象模型) )、交互次序(动态模型)和数据变换、交互次序(动态模型)和数据变换(功能模型)。大型系统的面向对象分析概念模型通常由(功能模型)。大型系统的面向对象分析概念模型通常由五个层次组成,分别是

205、类与对象层、属性层、服务层、结五个层次组成,分别是类与对象层、属性层、服务层、结构层和主题层。这五个层次不是构成软件系统的层次,而构层和主题层。这五个层次不是构成软件系统的层次,而是分析过程中的层次,也可以说是问题的不同侧面。每个是分析过程中的层次,也可以说是问题的不同侧面。每个层次的工作都为系统的规格说明增加了一个组成部分。当层次的工作都为系统的规格说明增加了一个组成部分。当五个层次的工作全部完成时,面向对象分析的任务也就完五个层次的工作全部完成时,面向对象分析的任务也就完成了。成了。 OOA的概念模型面向对象的设计方法分析是提取和整理用户需求分析是提取和整理用户需求, ,并建立问题域精确模

206、型的过并建立问题域精确模型的过程。设计则是把分析阶段得到的需求转变成符合成本和质程。设计则是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。从面向对象分析量要求的、抽象的系统实现方案的过程。从面向对象分析到面向对象设计(通常缩写为到面向对象设计(通常缩写为OOD)OOD),是一个逐渐扩充模,是一个逐渐扩充模型的过程。或者说,面向对象设计就是用面向对象观点建型的过程。或者说,面向对象设计就是用面向对象观点建立求解域模型的过程。立求解域模型的过程。尽管分析和设计的定义有明显区别,但是在实际的软件开尽管分析和设计的定义有明显区别,但是在实际的软件开发过程中两者的界限是模糊的

207、。许多分析结果可以直接映发过程中两者的界限是模糊的。许多分析结果可以直接映射成设计结果,而在设计过程中又往往会加深和补充对系射成设计结果,而在设计过程中又往往会加深和补充对系统需求的理解,从而进一步完善分析结果。因此,分析和统需求的理解,从而进一步完善分析结果。因此,分析和设计是一个多次反复迭代的过程。设计是一个多次反复迭代的过程。面向对象设计(面向对象设计(OOD)OOD)将面向对象分析所创建的分析模型,将面向对象分析所创建的分析模型,转变为将作为软件构造蓝图的设计模型。和传统软件设计转变为将作为软件构造蓝图的设计模型。和传统软件设计方法不同,方法不同,OODOOD实现一个完成一系列不同的模

208、块性等级的实现一个完成一系列不同的模块性等级的设计。主要的系统构件和组织称为子系统的系统级模块,设计。主要的系统构件和组织称为子系统的系统级模块,数据和操纵数据的操作被封装为对象,即一种作为数据和操纵数据的操作被封装为对象,即一种作为OODOOD系系统构造块的模块形式。此外,统构造块的模块形式。此外,OODOOD必须描述属性的特定数必须描述属性的特定数据组织和个体操作的过程细节,这些表示了面向对象系统据组织和个体操作的过程细节,这些表示了面向对象系统的数据和算法,从而实现整体模块性。的数据和算法,从而实现整体模块性。面向对象设计的独特性在于其基于四个重要的软件设计概面向对象设计的独特性在于其基

209、于四个重要的软件设计概念,即抽象、信息隐蔽、功能独立性和模块性建造系统的念,即抽象、信息隐蔽、功能独立性和模块性建造系统的能力。所有的设计方法均力图建造有这些基本特征的软件,能力。所有的设计方法均力图建造有这些基本特征的软件,但是,只有但是,只有OODOOD提供了使设计者能够以较少的复杂性和折提供了使设计者能够以较少的复杂性和折衷达到所有这四个特征的机制。衷达到所有这四个特征的机制。面向对象设计的准则面向对象设计的准则模块化模块化 面向对象软件开发模式很自然地支持了把系统分解面向对象软件开发模式很自然地支持了把系统分解成模块的设计原理:对象就是模块。它是把数据结构和成模块的设计原理:对象就是模

210、块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。操作这些数据的方法紧密地结合在一起所构成的模块。抽象抽象面向对象方法不仅支持过程抽象,而且支持数据抽面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,它对外开放的公共象。类实际上是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明(即协议接口构成了类的规格说明(即协议) ),这种接口规定了,这种接口规定了外界可以使用的合法操作符,利用这些操作符可以对类外界可以使用的合法操作符,利用这些操作符可以对类实例中包含的数据进行操作。使用者无须知道这些操作实例中包含的数据进行操作。使用者无须知道这些操作符

211、的实现算法和类中数据元素的具体表示方法,就可以符的实现算法和类中数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据。通常把这类抽象通过这些操作符使用类中定义的数据。通常把这类抽象称为规格说明抽象。称为规格说明抽象。信息隐藏信息隐藏面向对象方法中,信息隐藏通过对象的封装性实现:面向对象方法中,信息隐藏通过对象的封装性实现:类结构分离了接口与实现,从而支持了信息隐藏。对于类结构分离了接口与实现,从而支持了信息隐藏。对于类的用户来说,属性的表示方法和操作的实现算法都应类的用户来说,属性的表示方法和操作的实现算法都应该是隐藏的。该是隐藏的。弱耦合弱耦合耦合是指一个软件结构内不向模块之间互连

212、的紧密耦合是指一个软件结构内不向模块之间互连的紧密程度。在面向对象方法中,对象是最基本的模块,因此,程度。在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。弱耦合耦合主要指不同对象之间相互关联的紧密程度。弱耦合是优秀设计的一个重要标准,因为这有助于使得系统中是优秀设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其他部分的影响降到最低程度。在理某一部分的变化对其他部分的影响降到最低程度。在理想情况下,对某一部分的理解、测试或修改无须涉及系想情况下,对某一部分的理解、测试或修改无须涉及系统的其他部分。统的其他部分。 强内聚强内聚内聚衡量一个模块内各个元

213、素彼此结合的紧密程度。内聚衡量一个模块内各个元素彼此结合的紧密程度。也可以把内聚定义为设计中使用的一个构件内的各个元也可以把内聚定义为设计中使用的一个构件内的各个元素对完成一个定义明确的目的所做出的贡献程度,在设素对完成一个定义明确的目的所做出的贡献程度,在设计时应该力求做到高内聚。计时应该力求做到高内聚。可扩充性可扩充性面向对象易扩充设计,继承机制以两种方式支持扩面向对象易扩充设计,继承机制以两种方式支持扩充设计。第一,继承关系有助于复用已有定义,使开发充设计。第一,继承关系有助于复用已有定义,使开发新定义更加容易。随着继承结构逐渐变深,新类定义继新定义更加容易。随着继承结构逐渐变深,新类定

214、义继承的规格说明和实现的量也就逐渐增大,这通常意味着,承的规格说明和实现的量也就逐渐增大,这通常意味着,当继承结构增长时,并发一个新类的工作量反而逐渐减当继承结构增长时,并发一个新类的工作量反而逐渐减小。第二,在面向对象的语言中,类型系统的多态性也小。第二,在面向对象的语言中,类型系统的多态性也支持可扩充的设计。支持可扩充的设计。 类的设计准则 准则准则11要求的信息隐蔽增强了开发表示独立的设计;要求的信息隐蔽增强了开发表示独立的设计; 准则准则22进一步说明类这种封装性,它禁止访问作为类的进一步说明类这种封装性,它禁止访问作为类的部分表示的类实例。这些准则都强调了一个类是由其操作部分表示的类

215、实例。这些准则都强调了一个类是由其操作集来刻画的,而不是其表示的思想;集来刻画的,而不是其表示的思想; 准则准则33把公共接口定义为在类表示中包含了全部的公共把公共接口定义为在类表示中包含了全部的公共操作集;操作集; 准则准则44要求属于类的每个操作符都必须表示其建模的概要求属于类的每个操作符都必须表示其建模的概念行为。念行为。 准则准则55要求设计者尽可能少地连接一个类与其他类。如要求设计者尽可能少地连接一个类与其他类。如果一个正被设计的类需要另一个类的许多设施的话,也许果一个正被设计的类需要另一个类的许多设施的话,也许这种功能应表示成这种功能应表示成个新类;个新类; 准则准则66试图减少或

216、者消除全局信息。一个类所需要的任试图减少或者消除全局信息。一个类所需要的任何信息都应该从另一个类中用参数显式地传递给它;何信息都应该从另一个类中用参数显式地传递给它; 准则准则77禁止使用继承性开发新类的公共接口之外的部分。禁止使用继承性开发新类的公共接口之外的部分。利用类实例作为另利用类实例作为另个类的部分表示的最佳方法是,在新个类的部分表示的最佳方法是,在新设计的类表示中声明支持类实例;设计的类表示中声明支持类实例; 准则准则88鼓励设计者开发类的继承结构,这种类是抽象的鼓励设计者开发类的继承结构,这种类是抽象的特殊。这些抽象导致了更多的可复用子类,并确定了子类特殊。这些抽象导致了更多的可

217、复用子类,并确定了子类之间的不同。之间的不同。面向对象设计的构成问题论域的设计问题论域的设计 用户界面的设计用户界面的设计任务管理的设计任务管理的设计数据管理的设计数据管理的设计软件复用和构件技术软件复用是在软件开发中避免重复劳动的解决方案。通过软件复用是在软件开发中避免重复劳动的解决方案。通过软件复用,可以提高软件开发的效率和质量。近十几年来,软件复用,可以提高软件开发的效率和质量。近十几年来,面向对象技术出现并逐步成为主流技术,为软件复用提供面向对象技术出现并逐步成为主流技术,为软件复用提供了基本的技术支持。软件复用研究重新成为热点,被视为了基本的技术支持。软件复用研究重新成为热点,被视为

218、解决软件危机,提高软件生产效率和质量的现实可行的途解决软件危机,提高软件生产效率和质量的现实可行的途径。径。软件复用通常可分为产品复用和过程复用两条途径。基于软件复用通常可分为产品复用和过程复用两条途径。基于构件的复用是产品复用的主要形式,也是当前复用研究的构件的复用是产品复用的主要形式,也是当前复用研究的焦点。当前软件构件技术被视为实现成功复用的关键因素焦点。当前软件构件技术被视为实现成功复用的关键因素之一。之一。实现软件复用的关键因素软件接口技术从软件的作用来看,软件接口为相互不兼容的软件系统提从软件的作用来看,软件接口为相互不兼容的软件系统提供了一个统一的编程界面,为软件系统的相互利用,

219、充分供了一个统一的编程界面,为软件系统的相互利用,充分利用各个软件系统本身的优势提供了很好的基础。但是目利用各个软件系统本身的优势提供了很好的基础。但是目前软件系统有很多种,不同种类的软件系统都自成体系,前软件系统有很多种,不同种类的软件系统都自成体系,要想使所有的软件系统都有一个统一的编程接口,那是不要想使所有的软件系统都有一个统一的编程接口,那是不可能的。因此我们要分门别类地进行研究和学习可能的。因此我们要分门别类地进行研究和学习。软件分类层次结构图从软件系统的分类来看,软件接口可以分为如下三类:从软件系统的分类来看,软件接口可以分为如下三类:操作系统接口类;操作系统接口类;应用系统接口类

220、;应用系统接口类;应用软件接口类。应用软件接口类。这是很粗糙的接口分类,不便于学习和开发。下面我们首先从软件的应用角这是很粗糙的接口分类,不便于学习和开发。下面我们首先从软件的应用角度来进行软件分类,然后再讨论软件接口的分类。度来进行软件分类,然后再讨论软件接口的分类。从软件应用来分类,软件系统可分为如下几类:从软件应用来分类,软件系统可分为如下几类:操作系统类软什;操作系统类软什;数据库系统类软件;数据库系统类软件;图形、图像处理系统类软件;图形、图像处理系统类软件;办公系统类软件;办公系统类软件;网络、通信系统类软件;网络、通信系统类软件;多媒体系统类软件;多媒体系统类软件;其他系统类软件

221、。其他系统类软件。按上面软件系统分类,软件的编程接口分类大致可以分为如下几类:按上面软件系统分类,软件的编程接口分类大致可以分为如下几类:数据库编程接口数据库编程接口l l多媒体编程接口多媒体编程接口网络、通信程序编程接口网络、通信程序编程接口图形、图像程序编程接口图形、图像程序编程接口其他类编程接口其他类编程接口软件智能化技术自上世纪自上世纪8080年代中期以来,软件智能化技术在工业、商业、年代中期以来,软件智能化技术在工业、商业、军事和科技领域的应用得到稳步的开发和线性的增长。尽军事和科技领域的应用得到稳步的开发和线性的增长。尽管关于智能的本质尚无深入和统一的认识,但符号推理是管关于智能的

222、本质尚无深入和统一的认识,但符号推理是高级智能行为,知识是人类智能行为的结晶已得到公认、高级智能行为,知识是人类智能行为的结晶已得到公认、从而导致基于知识的软件智能化成为人工智能应用事业的从而导致基于知识的软件智能化成为人工智能应用事业的主流方向。主流方向。软件智能化技术发展趋势知识处理技术的深化知识处理技术的深化开发深入理解开发深入理解知识获取的自动化知识获取的自动化与主流计算环境的紧密结合与主流计算环境的紧密结合开发基于知识的软件智能化技术低价高性能计算机技术的普及应用,尤其是因特网、分布低价高性能计算机技术的普及应用,尤其是因特网、分布计算和综合集成技术的快速成长,为开发基于知识的软件计

223、算和综合集成技术的快速成长,为开发基于知识的软件智能化技术提供了广阔的应用机遇,进而使人工智能的工智能化技术提供了广阔的应用机遇,进而使人工智能的工程化面临前所未有的应用前景。程化面临前所未有的应用前景。尽管人工智能的最终目标是建立关于智能的理论,以期阐尽管人工智能的最终目标是建立关于智能的理论,以期阐明自然的智能行为和建立人工的明自然的智能行为和建立人工的“ “智能人智能人” ”,由此可以认,由此可以认为人工智能是一门科学;但是得不到实际应用的纯学术研为人工智能是一门科学;但是得不到实际应用的纯学术研究是没有生命力的,所以人工智能必须同时作为工程得到究是没有生命力的,所以人工智能必须同时作为

224、工程得到实际应用,并在实际应用中不断提高理论研究水平。实际应用,并在实际应用中不断提高理论研究水平。软件工程第十章第十章 软件工程文件软件工程文件软件工程强调文档的管理。软件开发过程的软件工程强调文档的管理。软件开发过程的各个阶段都会涉及到大量的软件工程文件,这些各个阶段都会涉及到大量的软件工程文件,这些软件工程文件不仅起到了指导开发的作用,还对软件工程文件不仅起到了指导开发的作用,还对将来软件的维护起到非常重要的作用。软件工程将来软件的维护起到非常重要的作用。软件工程文件有规范化的格式,这种规范化的文件对于在文件有规范化的格式,这种规范化的文件对于在开发过程中构建完备的开发信息是非常重要的。

225、开发过程中构建完备的开发信息是非常重要的。通过本章的学习能使读者了解到与软件开发过程通过本章的学习能使读者了解到与软件开发过程相关的一系列工程文件的一般性内容和格式,这相关的一系列工程文件的一般性内容和格式,这对在实际开发中撰写相关文档相当有用。对在实际开发中撰写相关文档相当有用。 软件工程文件的编制与管理软件工程文件编制的目的软件工程文件编制的目的 :作为开发人员在一定阶段内的工作成果和结束标志;作为开发人员在一定阶段内的工作成果和结束标志;向管理人员提供软件开发过程中的进展情况,把软件开向管理人员提供软件开发过程中的进展情况,把软件开发过程中的一些不可见的事物转换成可见的文字资料。发过程中

226、的一些不可见的事物转换成可见的文字资料。以便管理人员在各个阶段检查开发计划的进展情况,使以便管理人员在各个阶段检查开发计划的进展情况,使之能够判断原定目标是否已达到,以及还将继续耗用资之能够判断原定目标是否已达到,以及还将继续耗用资源的种类和数量;源的种类和数量;记录开发过程中的技术信息,便于协调以后的软件开发、记录开发过程中的技术信息,便于协调以后的软件开发、使用和修改;使用和修改;提供对软件的有关运行、维护和培训的信息,便于管理提供对软件的有关运行、维护和培训的信息,便于管理人员、开发人员、操作人员和用户之间相互了解彼此的人员、开发人员、操作人员和用户之间相互了解彼此的工作;工作;向潜在用

227、户报导软件的功能和性能,使其能判定该软件向潜在用户报导软件的功能和性能,使其能判定该软件能否服满足自己的需要。能否服满足自己的需要。 软件工程文件种类 在一项计算机软件的开发过程中,一般地说,应该产生十四种文在一项计算机软件的开发过程中,一般地说,应该产生十四种文件。这十四种文件是:件。这十四种文件是:可行性研究报告;可行性研究报告;项目开发计划书;项目开发计划书;软件需求说明书;软件需求说明书;数据要求说明书;数据要求说明书;概要设计说明书;概要设计说明书;详细设计说明书;详细设计说明书;数据库设计说明书;数据库设计说明书;用户手册;用户手册;操作手册;操作手册;模块开发卷宗;模块开发卷宗;

228、测试计划;测试计划;测试分析报告;测试分析报告;开发进度月报;开发进度月报; 项目开发总结报告。项目开发总结报告。软件工程文件的编制1 1、软件生存周期与各种文件的编制、软件生存周期与各种文件的编制一项计算机软件系统,从出现一个构思之日起,经过一项计算机软件系统,从出现一个构思之日起,经过这项软件开发成功投入使用,直到最后决定停止使用,并这项软件开发成功投入使用,直到最后决定停止使用,并被另一项软件代替之时止,被认为是该软件的一个生存周被另一项软件代替之时止,被认为是该软件的一个生存周期。一般来说这个软件生存周期可以分成以下六个阶段:期。一般来说这个软件生存周期可以分成以下六个阶段:可行性与计

229、划研究阶段;可行性与计划研究阶段;需求分析阶段;需求分析阶段;设计阶段;设计阶段;实现阶段;实现阶段;测试阶段;测试阶段;运行与维护阶段。运行与维护阶段。软件生存周期各阶段中的文件编制22、文件编制中的考虑因素、文件编制中的考虑因素文件编制是一个不断努力的工作过程。是一个从文件编制是一个不断努力的工作过程。是一个从最初轮廓形成,经反复检查和修改,直到程序和最初轮廓形成,经反复检查和修改,直到程序和文件正式交付使用的完整过程。其中每一步都要文件正式交付使用的完整过程。其中每一步都要求工作人员做出很大努力。要保证文件编制的质求工作人员做出很大努力。要保证文件编制的质量,要体现每个开发项目的特点,也

230、要注意不要量,要体现每个开发项目的特点,也要注意不要花太多的人力。为此,在编制文件中一般要考虑花太多的人力。为此,在编制文件中一般要考虑如下各项因素,但通常文件的编制与各个公司或如下各项因素,但通常文件的编制与各个公司或行业的习惯、要求及每个人的经验也有非常大的行业的习惯、要求及每个人的经验也有非常大的关系。关系。 文件的读者文件的读者每一种文件都具有特定的读者。这些读者包括个人每一种文件都具有特定的读者。这些读者包括个人或小组、软件开发单位的成员或社会上的公众、从事软或小组、软件开发单位的成员或社会上的公众、从事软件工作的技术人员、管理人员或领导干部。他们期待着件工作的技术人员、管理人员或领

231、导干部。他们期待着使用这些文件的内容来进行工作,例如设计、编写程序、使用这些文件的内容来进行工作,例如设计、编写程序、测试、使用、维护或进行计划管理。因此,这些文件的测试、使用、维护或进行计划管理。因此,这些文件的作者必须了解自己的读者,这些文件的编写必须注意适作者必须了解自己的读者,这些文件的编写必须注意适应自己的特定读者的水平、特点和要求。应自己的特定读者的水平、特点和要求。 重复性重复性虽然软件工程要求的文件有十四种,但其实这虽然软件工程要求的文件有十四种,但其实这十四种文件的内容要求中,不可避免地存在某些重复。十四种文件的内容要求中,不可避免地存在某些重复。较明显的重复有两类。引言是每

232、一种文件都要包含的内较明显的重复有两类。引言是每一种文件都要包含的内容,以向读者提供该软件系统总的描述。第二类明显的容,以向读者提供该软件系统总的描述。第二类明显的重复是各种文件中的说明部分,如对功能性能的说明、重复是各种文件中的说明部分,如对功能性能的说明、对输入和输出的描述、系统中包含的硬件设备等。这是对输入和输出的描述、系统中包含的硬件设备等。这是为了方便每种文件各自的读者,每种产品文件应该自成为了方便每种文件各自的读者,每种产品文件应该自成体系,尽量避免读一种文件时又不得不去参考另一种文体系,尽量避免读一种文件时又不得不去参考另一种文件。当然,在每一种文件里,有关引言、说明等同其他件。

233、当然,在每一种文件里,有关引言、说明等同其他文件相重复的部分,在行文上、在所用的术语上、在详文件相重复的部分,在行文上、在所用的术语上、在详细的程度上,还是应该有一些差别,以适应各种文件的细的程度上,还是应该有一些差别,以适应各种文件的不同读者的需要。如一个学生管理系统中,同样是对学不同读者的需要。如一个学生管理系统中,同样是对学生的描述,作为系统设计者,可能称之为学生对象或学生的描述,作为系统设计者,可能称之为学生对象或学生实体;对于开发人员,可能称之为学生基表或数据库生实体;对于开发人员,可能称之为学生基表或数据库表;对于用户,则就叫学生信息或学生基本情况。表;对于用户,则就叫学生信息或学

234、生基本情况。灵活性灵活性鉴于软件开发是具有创造性的脑力劳动,也鉴于不同鉴于软件开发是具有创造性的脑力劳动,也鉴于不同软件在规模上和复杂程度上差别极大以及具体编制人员软件在规模上和复杂程度上差别极大以及具体编制人员经验、能力和行业背景的不同,在文件编制工作中应该经验、能力和行业背景的不同,在文件编制工作中应该允许一定的灵活性。这种灵活性主要表现在应编制的文允许一定的灵活性。这种灵活性主要表现在应编制的文件种类。件种类。文件的详细程度文件的详细程度 从同一份提纲起草的文件的篇幅大小往往不同,可以从同一份提纲起草的文件的篇幅大小往往不同,可以少到几页,也可以长达几百页。对于这种差别少到几页,也可以长

235、达几百页。对于这种差别 本指南是本指南是允许的。此详细程度取决于任务的规模、复杂性和项目允许的。此详细程度取决于任务的规模、复杂性和项目负责人对该软件的开发过程及运行环与所需要的详细程负责人对该软件的开发过程及运行环与所需要的详细程度的判断。度的判断。文件的扩展文件的扩展当被开发系统的规模非常大(例如源码超过一百万行)当被开发系统的规模非常大(例如源码超过一百万行)时,一种文件可以分成几卷编写,可以按其功能划分子时,一种文件可以分成几卷编写,可以按其功能划分子系统,每一个子系统分别编制,也可以按内容划分成多系统,每一个子系统分别编制,也可以按内容划分成多卷卷 文件的表现形式文件的表现形式 对于

236、文件的表现形式目前没有特别规定或对于文件的表现形式目前没有特别规定或限制,可以使用自然语言,也可以使用形式化限制,可以使用自然语言,也可以使用形式化语言。语言。文件的其他种类文件的其他种类 如果已列出的文件种类尚不能满足某些应如果已列出的文件种类尚不能满足某些应用部门的特殊需要时,软件公司或软件项目负用部门的特殊需要时,软件公司或软件项目负责人可以建立一些特殊的文件种类要求,例如责人可以建立一些特殊的文件种类要求,例如软件质量保证计划、软件配置管理计划等,这软件质量保证计划、软件配置管理计划等,这些要求可以包含在本单位的文件编制实施规定些要求可以包含在本单位的文件编制实施规定中以满足特殊需要。

237、中以满足特殊需要。软件工程文件编制的管理工作1 1、文件的形成、文件的形成开发集体中的每个成员,尤其是项目负责人,应该认开发集体中的每个成员,尤其是项目负责人,应该认识到:文件是软件产品的必不可少的组成部分;在软件开识到:文件是软件产品的必不可少的组成部分;在软件开发过程的各个阶段中,必须按照规定及时地完成各种产品发过程的各个阶段中,必须按照规定及时地完成各种产品文件的编写工作;必须把在一个开发步骤中做出的决定和文件的编写工作;必须把在一个开发步骤中做出的决定和取得的结果及时地写入文件;开发集体必须及时地对这些取得的结果及时地写入文件;开发集体必须及时地对这些文件进行严格的评审;这些文件的形成

238、是各个阶段开发工文件进行严格的评审;这些文件的形成是各个阶段开发工作正式完成的标志。这些文件上必须有编写者、评审者和作正式完成的标志。这些文件上必须有编写者、评审者和批准者的签字,必须有编写、评审完成的日期和批准的日批准者的签字,必须有编写、评审完成的日期和批准的日期。期。2 2、文件的分类与标识、文件的分类与标识在软件开发的过程中,产生的文件是很多的,为了便在软件开发的过程中,产生的文件是很多的,为了便于保存、查找、使用和修改,应该对文件按层次地加以分于保存、查找、使用和修改,应该对文件按层次地加以分类组织。一个软件开发单位应该建立一个对本单位文件的类组织。一个软件开发单位应该建立一个对本单

239、位文件的标识方法,使文件的每一页都具有明确的标识。标识方法,使文件的每一页都具有明确的标识。3 3、文件的控制、文件的控制 在一项软件的开发过程中,随着程序的逐步形成和逐在一项软件的开发过程中,随着程序的逐步形成和逐步修改,各种文件亦在不断地产生、不断地修改或补充。步修改,各种文件亦在不断地产生、不断地修改或补充。因此,必须加以周密的控制,以保持文件与程序产品的一因此,必须加以周密的控制,以保持文件与程序产品的一致性,保持各种文件之间的一致性和文件的安全性。致性,保持各种文件之间的一致性和文件的安全性。4 4、文件的修改管理、文件的修改管理在一个项目的开发过程中的任何时刻,开发集体内的在一个项

240、目的开发过程中的任何时刻,开发集体内的所有成员都可能对开发工作的已有成果所有成员都可能对开发工作的已有成果文件,提出进文件,提出进行修改的要求。提出修改要求的理由可能是各种各样的,行修改的要求。提出修改要求的理由可能是各种各样的,进行修改而引起的影响可能很小,也可能会牵涉到本项目进行修改而引起的影响可能很小,也可能会牵涉到本项目的很多方面。因此,修改活动的进行必须谨慎,必须对修的很多方面。因此,修改活动的进行必须谨慎,必须对修改活动的进行加以管理,必须执行修改活动的规程,使整改活动的进行加以管理,必须执行修改活动的规程,使整个修改活动有控制地进行。个修改活动有控制地进行。软件工程文件的内容可行

241、性研究报告可行性研究报告可行性研究报告的编写目的是:说明该软件开发项可行性研究报告的编写目的是:说明该软件开发项目的实现在技术、经济和社会条件方面的可行性;评述为目的实现在技术、经济和社会条件方面的可行性;评述为了合理地达到开发目标而可能选择的各种方案;说明并论了合理地达到开发目标而可能选择的各种方案;说明并论证所选定的方案。可行性研究报告的编写内容要求引言、证所选定的方案。可行性研究报告的编写内容要求引言、可行性研究前提、现有系统分析、建议系统、可选择方案可行性研究前提、现有系统分析、建议系统、可选择方案比较、投资效益分析、社会条件可行性和结论。比较、投资效益分析、社会条件可行性和结论。 可

242、行性研究报告的内容一般如下:可行性研究报告的内容一般如下: 1 1、引言、引言引言中主要包括软件项目编写目的,指出预期的读者。引言中主要包括软件项目编写目的,指出预期的读者。背景,包括软件系统名称、社会背景、行业背景和用户背背景,包括软件系统名称、社会背景、行业背景和用户背景等。定义,列出本文件中用到的专门术语的定义和外文景等。定义,列出本文件中用到的专门术语的定义和外文首字母组词的原词组,以及参考资料。首字母组词的原词组,以及参考资料。2 2、可行性研究前提、可行性研究前提可行性研究前提包括软件项目的要求、实现目标、为可行性研究前提包括软件项目的要求、实现目标、为实现该目标所需要的条件、假定

243、和限制、进行可行性研究实现该目标所需要的条件、假定和限制、进行可行性研究的方法以及评价尺度。的方法以及评价尺度。3 3、现有系统分析、现有系统分析对现有系统分析指当前实际使用的系统,这个系统可能是计算机对现有系统分析指当前实际使用的系统,这个系统可能是计算机系统,也可能是一个机械系统甚至是一个人工系统。分析现有系统的系统,也可能是一个机械系统甚至是一个人工系统。分析现有系统的目的是为了进一步阐明建议中的开发新系统或修改现有系统的必要性。目的是为了进一步阐明建议中的开发新系统或修改现有系统的必要性。现有系统分析包括对用户当前的数据流程和处理流程的分析、当前用现有系统分析包括对用户当前的数据流程和

244、处理流程的分析、当前用户的工作负荷和费用开支以及为此投入的人员和设备,并由此得到的户的工作负荷和费用开支以及为此投入的人员和设备,并由此得到的现有系统存在哪些局限性的结论,例如处理时间赶不上需要,响应不现有系统存在哪些局限性的结论,例如处理时间赶不上需要,响应不及时,数据存储能力不足,处理功能及时,数据存储能力不足,处理功能 不够等。并且要说明,为什么对不够等。并且要说明,为什么对现有系统的改进性维护已经不能解决问题。现有系统的改进性维护已经不能解决问题。4 4、建议系统、建议系统根据现有系统的问题,可行性研究报告应提出建议系统,建议系根据现有系统的问题,可行性研究报告应提出建议系统,建议系统

245、说明用户的目标和要求将如何被满足。包括对所建议系统的说明,统说明用户的目标和要求将如何被满足。包括对所建议系统的说明,针对建议系统的数据流程和处理流程以及与现有系统的改进之处和对针对建议系统的数据流程和处理流程以及与现有系统的改进之处和对当前用户造成的影响,主要包括可能影响的硬件设备(需要购买或改当前用户造成的影响,主要包括可能影响的硬件设备(需要购买或改造),对当前软件的影响(如果已经存在软件系统)、对用户单位机造),对当前软件的影响(如果已经存在软件系统)、对用户单位机构的影响(人员数量和技术水平)、对系统运行的影响。在论述以上构的影响(人员数量和技术水平)、对系统运行的影响。在论述以上影

246、响之后,需要进一步描述为实现建议系统,所需要的开发工作量,影响之后,需要进一步描述为实现建议系统,所需要的开发工作量,建议系统对地点和设施的要求,大致所需要的经费开支,建议系统对地点和设施的要求,大致所需要的经费开支, 以及建议系以及建议系统存在的局限性和技术条件方面的可行性。统存在的局限性和技术条件方面的可行性。5 5、投资效益分析、投资效益分析投资效益分析主要包括支出、收益和对两者的分析。投资效益分析主要包括支出、收益和对两者的分析。支出包括基本建设投资(如场地购买、布线、装潢等)其支出包括基本建设投资(如场地购买、布线、装潢等)其他一次性支出(如购买的设备、操作系统、数据库等)、他一次性

247、支出(如购买的设备、操作系统、数据库等)、非一次性支出(包括软件的开发、调试费用以及后期的软非一次性支出(包括软件的开发、调试费用以及后期的软件维护升级费用)。件维护升级费用)。6 6、社会条件可行性、社会条件可行性社会条件可行性主要是从法律和道德方面论述系统的社会条件可行性主要是从法律和道德方面论述系统的可行性,如合同责任、侵犯专利权、侵犯版权等方面的陷可行性,如合同责任、侵犯专利权、侵犯版权等方面的陷阱,软件人员通常是不熟悉的,有可能陷入,务必要注意阱,软件人员通常是不熟悉的,有可能陷入,务必要注意研究。研究。7 7、结论、结论在进行可行性研究报告的编制时,必须有一个研究的结在进行可行性研

248、究报告的编制时,必须有一个研究的结论。结论可以是:论。结论可以是:可以立即开始进行;可以立即开始进行;需要推迟到某些条件(例如资金、人力、设备等)落实之需要推迟到某些条件(例如资金、人力、设备等)落实之后才能开始进行;后才能开始进行;需要对开发目标进行某些修改之后才能开始进行;需要对开发目标进行某些修改之后才能开始进行;不能进行或不必进行(例如因技术不成熟、经济上不合算不能进行或不必进行(例如因技术不成熟、经济上不合算等)。根据上述分析,最后得出结论,系统是否可行。等)。根据上述分析,最后得出结论,系统是否可行。项目开发计划书编制项目开发计划书的目的是用文件的形式,把对于在开编制项目开发计划书

249、的目的是用文件的形式,把对于在开发过程中各项工作的负责人员、开发进度、所需经费预算、发过程中各项工作的负责人员、开发进度、所需经费预算、所需软、硬件条件等问题做出的安排记载下来,以便根据所需软、硬件条件等问题做出的安排记载下来,以便根据本计划开展和检查本项目的开发工作。项目开发计划包括本计划开展和检查本项目的开发工作。项目开发计划包括引言、项目概述、实施总计划、支持条件和专题计划要点。引言、项目概述、实施总计划、支持条件和专题计划要点。 项目开发计划书内容一般如下:项目开发计划书内容一般如下:1 1、引言、引言项目开发计划书的引言部分与可靠行性报告的引言基项目开发计划书的引言部分与可靠行性报告

250、的引言基本一致,在此不再重复,后面各文件也都不在描述。本一致,在此不再重复,后面各文件也都不在描述。2 2、项目概述、项目概述简要地说明在本项目的开发中须进行的各项主要工作简要地说明在本项目的开发中须进行的各项主要工作和为完成这些工作所需参加本项目开发工作的主要人员的和为完成这些工作所需参加本项目开发工作的主要人员的情况,包括他们的技术水平。情况,包括他们的技术水平。3 3、实施计划、实施计划实施计划包括人员的分配、进度的安排、费用及关键实施计划包括人员的分配、进度的安排、费用及关键问题。问题。4 4、支持条件、支持条件说明为支持本项目的开发所需要的各种条件和设施。说明为支持本项目的开发所需要

251、的各种条件和设施。包括为支持本项目的开发所需要的各种条件和设施。逐项包括为支持本项目的开发所需要的各种条件和设施。逐项列出需要用户承担的工作和完成期限。包括需由用户提供列出需要用户承担的工作和完成期限。包括需由用户提供的条件及提供时间。逐项列出需要外单位分合同承包者承的条件及提供时间。逐项列出需要外单位分合同承包者承担的工作和完成的时间,包括需要由外单位提供的条件和担的工作和完成的时间,包括需要由外单位提供的条件和提供的时间。提供的时间。5 5、专题计划要点、专题计划要点说明本项目开发中需制订的各个专题计划(如分合同说明本项目开发中需制订的各个专题计划(如分合同计划、开发人员培训计划、测试计划

252、、安全保密计划、开发人员培训计划、测试计划、安全保密 计划、质计划、质量保证计划、配置管理计划、用户培训计划、系统安装计量保证计划、配置管理计划、用户培训计划、系统安装计划等)的要点。划等)的要点。软件需求说明书软件需求说明书的编制是为了使用户和软件开发者双方对软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解,该软件的初始规定有一个共同的理解, 使之成为整个开发使之成为整个开发工作的基础。包括引言、任务概述、需求规定和运行环境。工作的基础。包括引言、任务概述、需求规定和运行环境。 软件需求说明书的一般内容如下软件需求说明书的一般内容如下: :1 1、引言、引言

253、(略)(略)2 2、任务概述、任务概述任务概述首先说明该任务的目的。即叙述该项软件开发的意图、任务概述首先说明该任务的目的。即叙述该项软件开发的意图、应用目标、作用范围以及其他应向读者说明的有关该软件开发的背景应用目标、作用范围以及其他应向读者说明的有关该软件开发的背景材料。解释被开发软件与其他有关软件之间的关系。如果本软件产品材料。解释被开发软件与其他有关软件之间的关系。如果本软件产品是一项独立的软件,而且全部内容自含,则说明这一点。如果所定义是一项独立的软件,而且全部内容自含,则说明这一点。如果所定义的产品是一个更大的系统的一个组成部分,则应说明本产品与该系统的产品是一个更大的系统的一个组

254、成部分,则应说明本产品与该系统中其他各组成部分之间的关系,为此可使用一张方框图来说明该系统中其他各组成部分之间的关系,为此可使用一张方框图来说明该系统的组成和本产品同其他各部分的联系和接口。的组成和本产品同其他各部分的联系和接口。其次需要列出本软件的最终用户的特点,充分说明操作人员、维其次需要列出本软件的最终用户的特点,充分说明操作人员、维护人员的教育水平和技术专长,以及本软件的预期使甩频度。这些是护人员的教育水平和技术专长,以及本软件的预期使甩频度。这些是软件设计工作的重要约束。约束还包括经费限制、开发期限等。软件设计工作的重要约束。约束还包括经费限制、开发期限等。3 3、需求规定、需求规定

255、n n对功能的规定对功能的规定n n对性能的规定对性能的规定n n输人输出要求输人输出要求 n n数据管理能力要求数据管理能力要求 n n故障处理要求故障处理要求 n n其他专门要求其他专门要求 对于具体的软件系统设计过程,还有:对于具体的软件系统设计过程,还有:数据要求说明书数据要求说明书 概要设计说明书概要设计说明书 详细设计说明书详细设计说明书 数据库设计说明书数据库设计说明书 用户手册用户手册 操作手册操作手册 模块开发情况表测试计划这里所说的测试,主要是指整个程序系统的组装测试和确这里所说的测试,主要是指整个程序系统的组装测试和确认测试。测试计划的编制是为了提供一个对该软件的测试认测

256、试。测试计划的编制是为了提供一个对该软件的测试计划,包括对每项测试活动的内容、进度安排、设计考虑、计划,包括对每项测试活动的内容、进度安排、设计考虑、测试数据的整理方法及评价准则。测试数据的整理方法及评价准则。 测试计划的一般性内容如下:测试计划的一般性内容如下: 引言引言计划计划模块测试设计说明模块测试设计说明评价准则评价准则测试分析报告测试分析报告的编写是为了把组装测试和确认测试的结测试分析报告的编写是为了把组装测试和确认测试的结果、发现及分析写成文件加以记载,具体的内容要求如下:果、发现及分析写成文件加以记载,具体的内容要求如下:引言引言测试概要测试概要测试结果及发现测试结果及发现对软件功能的结论对软件功能的结论 分析摘要分析摘要 项目开发总结报告项目开发总结报告的编制是为了总结本项目开发工作项目开发总结报告的编制是为了总结本项目开发工作的经验,说明实际取得的开发结果以及对整个开发工作的的经验,说明实际取得的开发结果以及对整个开发工作的各个方面的评价,包括:各个方面的评价,包括:引言引言实际开发结果实际开发结果开发工作评价开发工作评价

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号