软件工程课件(全).ppt

上传人:pu****.1 文档编号:576791228 上传时间:2024-08-20 格式:PPT 页数:336 大小:10.49MB
返回 下载 相关 举报
软件工程课件(全).ppt_第1页
第1页 / 共336页
软件工程课件(全).ppt_第2页
第2页 / 共336页
软件工程课件(全).ppt_第3页
第3页 / 共336页
软件工程课件(全).ppt_第4页
第4页 / 共336页
软件工程课件(全).ppt_第5页
第5页 / 共336页
点击查看更多>>
资源描述

《软件工程课件(全).ppt》由会员分享,可在线阅读,更多相关《软件工程课件(全).ppt(336页珍藏版)》请在金锄头文库上搜索。

1、1目录页1软件工程概述软件工程概述2软件的定义及可行性研究软件的定义及可行性研究3需求分析需求分析4概要设计概要设计5详细设计详细设计目目 录录6面向对象概念和面向对象概念和RoseRose建模技术建模技术7面向对象的分析与设计面向对象的分析与设计8编码编码9软件测试软件测试10软件维护软件维护11软件项目管理软件项目管理2目录页软件工程概述第1章教学教学要求要求n1了解软件的概念、特点及主要分类;n2掌握软件危机的产生、表现及原因;n3掌握软件工程的定义以及基本原理;n4掌握软件生存周期概念;n5理解软件开发模型;n6了解软件开发工具与环境。3目录页1.1软件与软件危机第1章1 1软件的定义

2、软件的定义软件是计算机中与硬件相互依存的另一部分,软件包括程序、数据及其相关文档的完整集合。1.1.1 软件的定义及其特点软件的定义及其特点软件软件程序程序数据数据文档文档程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能够正确地处理信息的数据结构文档是与程序开发、维护和使用有关的图文资料4目录页2.软件具有下列特点:软件具有下列特点:1.1软件与软件危机第1章1.1.1 软件的定义及其特点软件的定义及其特点软件是逻辑产品生产与硬件不同不会磨损和老化依赖硬件手工开发为主成本高、风险高比硬件发展慢5目录页1.软件技术的发展软件技术的发展1.1软件与软件危机第1章1.1.2 软件的发展及

3、其分类软件的发展及其分类 程序设计程序设计 程序系统程序系统 软件工程软件工程6目录页2.软件的分类软件的分类1.1软件与软件危机第1章1.1.2 软件的发展及其分类软件的发展及其分类 重点掌握7目录页1. 软件危机的主要表现软件危机的主要表现1.1软件与软件危机第1章1.1.3 软件危机软件危机(1)软件不能满足用户的需求。(2)软件开发成本严重超标,开发周期大大超过规定日期。(3)软件质量难于保证,可靠性差。(4)软件难于维护。(5)软件开发速度跟不上计算机发展速度。8目录页2. 软件危机产生的原因软件危机产生的原因1.1软件与软件危机第1章1.1.3 软件危机软件危机(1)忽视软件开发前

4、期的调研和需求分析工作。(2)缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难制定。(3)开发过程缺乏统一的、规范化的方法论指导。(4)忽视与用户、开发组成员间的及时有效的沟通。(5)文档资料不规范或不准确。导致开发者失去工作的基础,管理者失去管理的依据。(6)没有完善的质量保证体系。9目录页3. 软件危机解决途径软件危机解决途径1.1软件与软件危机第1章1.1.3 软件危机软件危机 要解决软件危机问题,需要采取以下措施: (1)使用好的软件开发技术和方法。 (2)使用好的软件开发工具,提高软件生产率。 (3)有良好的组织、严密的管理,各方面人员相互配合共同完成任务。 为了解决软件

5、危机,既要有技术措施(好的方法和工具),也要有组织管理措施。软件工程正是从技术和管理两方面来研究如何更好地开发和维护计算机软件的。10目录页 为了克服软件危机,为了克服软件危机,1968年年10月月在北大西洋公约组织(在北大西洋公约组织(NATO)召开的计算)召开的计算机科学会议上,机科学会议上,Fritz Bauer首次提出首次提出“软件工程软件工程”的概念。的概念。 按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一条主要出路。条主要出路。 软件工程的软件工程的主要思想主要思想是强调软件开发过程中应用工程化原则的

6、重要性。软是强调软件开发过程中应用工程化原则的重要性。软件工程的件工程的目标目标是实现软件的优质高产。软件工程的是实现软件的优质高产。软件工程的目的目的是在经费的预算范围内,是在经费的预算范围内,按期交付出用户满意的、质量合格的软件产品。按期交付出用户满意的、质量合格的软件产品。1.2软件工程第1章1.2.1 软件工程的定义和目标软件工程的定义和目标11目录页 著名软件工程专家著名软件工程专家Boehm提出。提出。(1)用)用分阶段分阶段的软件生存周期计划进行严格的质量管理。的软件生存周期计划进行严格的质量管理。(2)坚持进行)坚持进行阶段评审阶段评审。(3)实行严格的)实行严格的产品控制产品

7、控制。(4)采用)采用现代程序设计技术现代程序设计技术。(5)软件工程)软件工程结果结果应能清楚地应能清楚地审查审查。(6)开发小组的人员应该)开发小组的人员应该少而精少而精。(7)承认)承认不断改进软件工程实践不断改进软件工程实践的必要性。的必要性。1.2软件工程第1章1.2.2 软件工程的基本原理软件工程的基本原理12目录页1.2软件工程第1章1.2.3 软件工程的研究内容软件工程的研究内容13目录页1.3软件生存周期第1章可行性研究问题定义需求分析详细设计总体设计编码系统测试确认测试集成测试单元测试运行与维护计划时期开发时期运行时期时间14目录页1.4软件开发模型第1章1.4.1 瀑布模

8、型瀑布模型问题定义可行性研究需求分析软件设计编码软件测试运行维护开发时期运行时期计划时期15目录页1.4软件开发模型第1章1.4.1 瀑布模型瀑布模型瀑布模型的主要瀑布模型的主要优点优点:(1)原理简单、容易掌握。)原理简单、容易掌握。(2)各阶段间都有验证和确认环节,以便进行质量管理。)各阶段间都有验证和确认环节,以便进行质量管理。(3)主要用于支持结构化方法。)主要用于支持结构化方法。瀑布模型的主要瀑布模型的主要缺点缺点:(1)缺乏灵活性,)缺乏灵活性,不能适应用户需求的变化不能适应用户需求的变化。(2)缺乏演化性,)缺乏演化性,返回返回上一级的开发需要付出十分高昂的上一级的开发需要付出十

9、分高昂的代价代价。(3)是线性的软件开发模型,)是线性的软件开发模型,回溯性很差回溯性很差。16目录页1.4软件开发模型第1章1.4.2 快速原型模型快速原型模型17目录页1.4软件开发模型第1章1.4.2 快速原型模型快速原型模型快速原型模型的优点:快速原型模型的优点:(1)增强了开发者与用户间的)增强了开发者与用户间的交流交流,有助于满足用户的真实需求。,有助于满足用户的真实需求。(2)用户可)用户可及早得到及早得到有用的有用的产品产品,可及早发现问题,随时纠正错误。,可及早发现问题,随时纠正错误。(3)减小技术、应用风险,可降低开发费用,缩短开发时间。)减小技术、应用风险,可降低开发费用

10、,缩短开发时间。快速原型模型的缺点:快速原型模型的缺点:(1)缺乏丰富而强有力的)缺乏丰富而强有力的软件工具和开发环境软件工具和开发环境。(2)对设计人员水平及开发环境)对设计人员水平及开发环境要求较高要求较高。(3)在多次重复改变原型的过程中,)在多次重复改变原型的过程中,程序员会厌倦程序员会厌倦。(4)对于做到彻底测试,更新文档较为困难。)对于做到彻底测试,更新文档较为困难。18目录页1.4软件开发模型第1章1.4.3 渐增模型渐增模型19目录页1.4软件开发模型第1章1.4.3 渐增模型渐增模型渐增模型的渐增模型的优点优点:渐增模型是瀑布模型的一个变体,可以看作是重复执行的多个瀑布模型,

11、具有瀑布模型渐增模型是瀑布模型的一个变体,可以看作是重复执行的多个瀑布模型,具有瀑布模型的所有优点,此外,还有以下优点:的所有优点,此外,还有以下优点:(1)可分批次提交软件产品可分批次提交软件产品,方便用户及时了解软件开发进展情况,及早发现问题。,方便用户及时了解软件开发进展情况,及早发现问题。(2)以组件为单位进行开发以组件为单位进行开发,降低了软件开发风险。,降低了软件开发风险。(3)开发顺序灵活。优先级最高的服务首先交付。)开发顺序灵活。优先级最高的服务首先交付。渐增模型的渐增模型的缺点缺点:(1)由于对整个软件系统的需求没有一个完整的定义,)由于对整个软件系统的需求没有一个完整的定义

12、,会给总体设计带来麻烦会给总体设计带来麻烦。(2)在把每个新的增量构件集成到现有软件结构中时,)在把每个新的增量构件集成到现有软件结构中时,必须不破坏原来已开发出的产品必须不破坏原来已开发出的产品。(3)软件的体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。)软件的体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。每次增量开发的产品都应当是每次增量开发的产品都应当是可测试的、可扩充的可测试的、可扩充的。20目录页1.4软件开发模型第1章1.4.4 喷泉模型喷泉模型21目录页1.4软件开发模型第1章1.4.4 喷泉模型喷泉模型喷泉模型的主要特点:喷泉模型的主

13、要特点:(1)各阶段相互重叠,反映了软件过程的并行性。)各阶段相互重叠,反映了软件过程的并行性。(2)以分析为基础,资源消耗呈塔形,在分析阶段消耗资源最多。)以分析为基础,资源消耗呈塔形,在分析阶段消耗资源最多。(3)反映了软件过程迭代的自然特性,从高层返回低层无资源消耗。)反映了软件过程迭代的自然特性,从高层返回低层无资源消耗。(4)强调增量开发,依据分析一点、设计一点的原则,不要求一个阶段的彻底完成,整)强调增量开发,依据分析一点、设计一点的原则,不要求一个阶段的彻底完成,整个过程是一个迭代的逐步提炼的过程。个过程是一个迭代的逐步提炼的过程。(5)是对象驱动的过程,对象是所有活动作用的主体

14、,也是项目管理的基本内容。)是对象驱动的过程,对象是所有活动作用的主体,也是项目管理的基本内容。22目录页1.4软件开发模型第1章1.4.5 螺旋模型螺旋模型23目录页1.4软件开发模型第1章1.4.5 螺旋模型螺旋模型24目录页1.5软件开发方法第1章1结构化方法结构化方法结构化方法又称传统方法、生存周期法、面向过程的方法、面向功能的方法、面向数据结构化方法又称传统方法、生存周期法、面向过程的方法、面向功能的方法、面向数据流的方法。流的方法。所谓所谓结构化分析结构化分析,就是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流,就是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流

15、图来建立系统的功能模型,从而完成需求分析。图来建立系统的功能模型,从而完成需求分析。所谓所谓结构化设计结构化设计,就是根据模块独立性准则、软件结构准则,将数据流图转换为软件的,就是根据模块独立性准则、软件结构准则,将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的总体设计。体系结构,用软件结构图来建立系统的物理模型,实现系统的总体设计。所谓所谓结构化程序设计结构化程序设计,就是根据结构程序设计原理,将每个模块的功能用相应的标准控,就是根据结构程序设计原理,将每个模块的功能用相应的标准控制结构表示出来,从而实现详细设计。制结构表示出来,从而实现详细设计。25目录页1.5

16、软件开发方法第1章2面向数据结构方法面向数据结构方法面向数据结构方法(也称为面向数据结构方法(也称为Jackson方法)。该方法从目标系统的输入、输出数据结构入方法)。该方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其他细节,就可得到完整的程序结构图。这一方法以数据结构手,导出程序框架结构,再补充其他细节,就可得到完整的程序结构图。这一方法以数据结构为驱动,其优点是通俗易懂,特别适合信息系统中数据层(数据库服务器)上的设计与实现,为驱动,其优点是通俗易懂,特别适合信息系统中数据层(数据库服务器)上的设计与实现,对输入、输出数据结构明确的中小型系统特别有效。其缺点是实现窗口界面

17、较困难。该方法也对输入、输出数据结构明确的中小型系统特别有效。其缺点是实现窗口界面较困难。该方法也可与其他方法结合,用于模块的详细设计。可与其他方法结合,用于模块的详细设计。26目录页1.5软件开发方法第1章3面向对象方法面向对象方法面向对象方法是一种自底向上和自顶向下相结合的方法,该方法把对象作为数据和在数面向对象方法是一种自底向上和自顶向下相结合的方法,该方法把对象作为数据和在数据上的操作(服务)相结合的软件构件。据上的操作(服务)相结合的软件构件。用对象分解取代结构化方法的功能分解用对象分解取代结构化方法的功能分解。把所有对象。把所有对象都划分成类,把若干个相关的类组织成具有层次结构的系

18、统,下层的类继承上层的类所定义的都划分成类,把若干个相关的类组织成具有层次结构的系统,下层的类继承上层的类所定义的属性和服务。对象之间通过发送消息进行联系。属性和服务。对象之间通过发送消息进行联系。使用面向对象方法开发软件时,使用面向对象方法开发软件时,可以重复使用对象和类等构件可以重复使用对象和类等构件,从而降低了软件开发成,从而降低了软件开发成本,所开发的软件本,所开发的软件能适应需求变化,稳定性好,可重用性好,可维护性好,能适应需求变化,稳定性好,可重用性好,可维护性好,对于大型、复杂及对于大型、复杂及交互性比较强的系统,使用面向对象方法更有优势。交互性比较强的系统,使用面向对象方法更有

19、优势。27目录页1.6软件工具与开发环境第1章1.6.1 软件工具软件工具软件工具是指用来软件工具是指用来辅助计算机软件开发、维护和管理的软件辅助计算机软件开发、维护和管理的软件。按照软件过程活动可将软。按照软件过程活动可将软件工具分为支持软件开发过程的工具、支持软件维护过程的工具、支持软件管理过程与支持过件工具分为支持软件开发过程的工具、支持软件维护过程的工具、支持软件管理过程与支持过程的工具等。程的工具等。支持软件开发过程的工具支持软件开发过程的工具包括需求分析工具、设计工具、编码与排错工具和测试工具等;包括需求分析工具、设计工具、编码与排错工具和测试工具等;支持软件维护过程的工具支持软件

20、维护过程的工具包括版本控制工具、文档分析工具、开发信息库工具、逆向工包括版本控制工具、文档分析工具、开发信息库工具、逆向工程工具和再工程工具等;程工具和再工程工具等;支持软件管理与软件支持的工具支持软件管理与软件支持的工具包括项目管理工具、配置管理工具和软件评价工具等。包括项目管理工具、配置管理工具和软件评价工具等。28目录页1.6软件工具与开发环境第1章1.6.2 软件开发环境软件开发环境1计算机辅助软件工程计算机辅助软件工程 计算机辅助软件工程计算机辅助软件工程(Computer Aided Software Engineering,CASE)将各种软件工具、)将各种软件工具、开发机器和一

21、个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。2集成化集成化CASE环境环境集成化开发环境集成化开发环境(Integrated- CASE,I -CASE)是一种把支持多种软件开发方法和过程模)是一种把支持多种软件开发方法和过程模型的软件工具集成到一起的软件开发环境。型的软件工具集成到一起的软件开发环境。3软件工程环境软件工程环境软件工程环境软件工程环境(Software Engineering Environment,SEE)是指以软件工程为依据,支持)是指以软件工程为依据,支持典型软件生产的系统。包括三层

22、含义,一组软件工具的集合;工具按一定方法或模型组织;工典型软件生产的系统。包括三层含义,一组软件工具的集合;工具按一定方法或模型组织;工具支持整个生存周期各阶段或部分阶段。具支持整个生存周期各阶段或部分阶段。29目录页软件的定义及可行性研究第2章本章本章要点要点n理解问题定义的内容与方法;n学会书写问题定义报告;n理解可行性研究的任务与步骤;n学会书写可行性研究报告;n学会绘制系统流程图。30目录页2.1问题定义第2章31目录页(1)问题的背景,弄清楚待开发系统现在处于什么状态,为什么要开发它,是否具备开)问题的背景,弄清楚待开发系统现在处于什么状态,为什么要开发它,是否具备开发条件等问题。发

23、条件等问题。(2)提出开发系统的问题要求以及总体要求。)提出开发系统的问题要求以及总体要求。(3)明确问题的性质、类型和范围。)明确问题的性质、类型和范围。(4)明确待开发系统要实现的目标、功能和规模。)明确待开发系统要实现的目标、功能和规模。(5)提出开发的条件要求和环境要求。)提出开发的条件要求和环境要求。 以上主要内容应写在问题定义报告(或系统目标和范围说明书)中,作为这一阶段的以上主要内容应写在问题定义报告(或系统目标和范围说明书)中,作为这一阶段的“工作总结工作总结”。 2.1问题定义第2章2.1.1 问题定义的内容问题定义的内容32目录页具体步骤如下具体步骤如下:首先,系统分析员要

24、针对用户的要求做详细的调查研究,认真听取用户对问题的介绍;阅首先,系统分析员要针对用户的要求做详细的调查研究,认真听取用户对问题的介绍;阅读与问题有关的资料,必要时还要深入现场,亲自操作;调查开发系统的背景;了解用户对开读与问题有关的资料,必要时还要深入现场,亲自操作;调查开发系统的背景;了解用户对开发的要求。发的要求。其次是与用户反复讨论,以使问题进一步确定化。经过用户和系统分析员双方充分协商,其次是与用户反复讨论,以使问题进一步确定化。经过用户和系统分析员双方充分协商,确定问题定义的内容。确定问题定义的内容。 最后写出双方均认可的问题定义报告。最后写出双方均认可的问题定义报告。2.1问题定

25、义第2章2.1.2 问题定义的方法问题定义的方法 33目录页可行性研究是在问题定义之后进行的,它是软件定义时期的第二个阶段。可行性研究是指可行性研究是在问题定义之后进行的,它是软件定义时期的第二个阶段。可行性研究是指在项目进行开发之前,根据项目发起文件(或称项目建议书)和实际情况,对该项目是否能在在项目进行开发之前,根据项目发起文件(或称项目建议书)和实际情况,对该项目是否能在特定的资源、时间等制约条件下完成做出评估,并且确定该项目是否值得去开发。可行性研究特定的资源、时间等制约条件下完成做出评估,并且确定该项目是否值得去开发。可行性研究的目的不在于如何解决问题,而在于确定问题的目的不在于如何

26、解决问题,而在于确定问题“是否能够解决是否能够解决”和和“是否值得解决是否值得解决”。其中的。其中的项目发起文件(或称项目建议书),是项目发起时,由发起人或单位递交给项目支持者或领导项目发起文件(或称项目建议书),是项目发起时,由发起人或单位递交给项目支持者或领导的书面材料,其作用是让项目支持者或领导明白项目的必要性和可行性。的书面材料,其作用是让项目支持者或领导明白项目的必要性和可行性。2.2可行性研究第2章34目录页2.2可行性研究第2章1.技术可行性技术可行性技术可行性从技术的角度去研究系统实现的可行性。主要包括风险、资源和技术分析。风技术可行性从技术的角度去研究系统实现的可行性。主要包

27、括风险、资源和技术分析。风险分析主要考虑在给定的约束条件下设计和实现系统的风险;资源分析是考虑技术资源的可行险分析主要考虑在给定的约束条件下设计和实现系统的风险;资源分析是考虑技术资源的可行性,也就是参与人员的技术基础、基础硬件与软件的可用性和软件工具的实用性;技术分析是性,也就是参与人员的技术基础、基础硬件与软件的可用性和软件工具的实用性;技术分析是考虑技术解决方案的实用性,即所使用技术的实用化程度和技术解决方案的合理程度。考虑技术解决方案的实用性,即所使用技术的实用化程度和技术解决方案的合理程度。2.经济可行性经济可行性经济可行性从经济角度评价开发一个新系统是否可行。主要任务是对软件开发项

28、目进行成经济可行性从经济角度评价开发一个新系统是否可行。主要任务是对软件开发项目进行成本估算、效益估算和成本本估算、效益估算和成本/效益分析,分析实现这个系统有没有经济效益和社会效益。效益分析,分析实现这个系统有没有经济效益和社会效益。2.2.1 可行性研究的任务可行性研究的任务 35目录页2.2可行性研究第2章3.运行可行性(或用户使用可行性)运行可行性(或用户使用可行性)即判断为新系统规定的运行方式是否可行。首先要分析用户类型(如外行型、熟练型或专即判断为新系统规定的运行方式是否可行。首先要分析用户类型(如外行型、熟练型或专家型),然后从操作习惯、使用单位的计算机使用情况和相关规章制度等方

29、面进行分析,判断家型),然后从操作习惯、使用单位的计算机使用情况和相关规章制度等方面进行分析,判断当系统交付使用后,使用单位是否有能力保证系统的正常运行和使用。当系统交付使用后,使用单位是否有能力保证系统的正常运行和使用。4.法律可行性法律可行性研究新系统的开发在社会上和政治上会不会引起侵权和责任问题,如是否违反专利法、著研究新系统的开发在社会上和政治上会不会引起侵权和责任问题,如是否违反专利法、著作权法和软件保护条例等法律,是否涉及信息安全和个人隐私等问题。作权法和软件保护条例等法律,是否涉及信息安全和个人隐私等问题。2.2.1 可行性研究的任务可行性研究的任务 36目录页2.2可行性研究第

30、2章1.审核系统的规模和目标审核系统的规模和目标2.分析研究现行系统分析研究现行系统3.设计新系统的高层逻辑模型设计新系统的高层逻辑模型4.获得并比较可行的方案获得并比较可行的方案5.撰写可行性研究报告撰写可行性研究报告2.2.2 可行性研究的步骤可行性研究的步骤 37目录页2.2可行性研究第2章2.2.3 系统流程图系统流程图 38目录页2.2可行性研究第2章在可行性研究过程中,经济可行性研究占有重要地位,它从经济上衡量一个项目是否在可行性研究过程中,经济可行性研究占有重要地位,它从经济上衡量一个项目是否有开发价值。有开发价值。经济可行性研究主要包括两个方面的内容:一是新系统成本的估计;二是

31、新系统可能经济可行性研究主要包括两个方面的内容:一是新系统成本的估计;二是新系统可能产生的效益。又称为成本产生的效益。又称为成本/效益分析。效益分析。2.2.4 经济可行性经济可行性 39目录页2.3可行性研究报告的内容及作用第2章可行性研究报告编制中应注意以下几个方面的问题:可行性研究报告编制中应注意以下几个方面的问题:(1)坚持实事求是的原则,不要随意夸大新系统的功能和其他指标。)坚持实事求是的原则,不要随意夸大新系统的功能和其他指标。(2)任何一项内容的书写均要以科学分析的结果为依据,不能凭空想象。)任何一项内容的书写均要以科学分析的结果为依据,不能凭空想象。(3)对每一项内容的描述必须

32、反复推敲,一定要做到用词恰当、准确。)对每一项内容的描述必须反复推敲,一定要做到用词恰当、准确。(4)从具体情况出发。可行性研究报告不一定面面俱到,但对于用户关心的部分或项)从具体情况出发。可行性研究报告不一定面面俱到,但对于用户关心的部分或项目中重要的部分要重点阐明。目中重要的部分要重点阐明。(5)书写形式要规范。)书写形式要规范。2.3.1 可行性研究报告编制中应注意的问题可行性研究报告编制中应注意的问题 40目录页2.3可行性研究报告的内容及作用第2章可行性研究报告在软件开发中起着重要的作用:可行性研究报告在软件开发中起着重要的作用:(1)可行性研究报告是可行性研究阶段的成果。)可行性研

33、究报告是可行性研究阶段的成果。(2)可行性研究报告提出了软件开发的总体目标和范围,因此它是软件开发的行动指)可行性研究报告提出了软件开发的总体目标和范围,因此它是软件开发的行动指南。南。(3)可行性研究报告是需求分析的基础和依据。)可行性研究报告是需求分析的基础和依据。2.3.2 可行性研究报告在软件开发中的作用可行性研究报告在软件开发中的作用 41目录页2.4项目开发计划第2章经过可行性研究后,如果一个项目是值得开发的,则接下来应制定项目开发计划。软经过可行性研究后,如果一个项目是值得开发的,则接下来应制定项目开发计划。软件项目开发计划是软件工程中的一种管理性文档,主要是对所开发的软件项目的

34、费用、时间件项目开发计划是软件工程中的一种管理性文档,主要是对所开发的软件项目的费用、时间进度、人员组织、硬件设备的配置、软件开发环境和运行环境的配置等进行说明和规划,是进度、人员组织、硬件设备的配置、软件开发环境和运行环境的配置等进行说明和规划,是项目管理人员对项目进行管理的依据,据此对项目的费用、进度和资源进行控制和管理。项目管理人员对项目进行管理的依据,据此对项目的费用、进度和资源进行控制和管理。项目开发计划的目的是提供一个框架,使得主管人员在项目开始后较短时间内就可以项目开发计划的目的是提供一个框架,使得主管人员在项目开始后较短时间内就可以对资源、成本、进度进行合理的估计,而不必等到详

35、细的需求分析完成之后。对资源、成本、进度进行合理的估计,而不必等到详细的需求分析完成之后。项目开发计划有分析和估算两项任务。分析是对系统内各软件功能界限的划定,估算项目开发计划有分析和估算两项任务。分析是对系统内各软件功能界限的划定,估算是指根据已有的定性数据和以往的经验对系统开发的资源、费用和进度进行定量的估计。项是指根据已有的定性数据和以往的经验对系统开发的资源、费用和进度进行定量的估计。项目复杂性越高、规模越大,估算的难度就越大,当项目的结构化程度越高且估算人员的经验目复杂性越高、规模越大,估算的难度就越大,当项目的结构化程度越高且估算人员的经验越丰富时,则估算就更为准确。越丰富时,则估

36、算就更为准确。42目录页需求分析第3章本章本章要点要点n理解需求分析的任务;n熟悉需求分析的步骤;n理解结构化需求分析的基本思想;n掌握数据流图和数据词典的用法。43目录页3.1需求分析的任务第3章需求分析的任务是要准确地定义新系统的目标,准确回答需求分析的任务是要准确地定义新系统的目标,准确回答“系统必须做什么系统必须做什么”的问题,并的问题,并用需求规格说明书规范的形式准确地表达用户的需求。用需求规格说明书规范的形式准确地表达用户的需求。需求分析是理解、分析和表达需求分析是理解、分析和表达“系统必须做什么系统必须做什么”的过程。的过程。虽然在可行性研究阶段,对用户需求有了初步了解,但对需求

37、的了解是概括的、粗略的,虽然在可行性研究阶段,对用户需求有了初步了解,但对需求的了解是概括的、粗略的,许多细节被忽略了。可行性研究是决定许多细节被忽略了。可行性研究是决定“做还是不做做还是不做”,而不是对需求进行定义。而需求分析,而不是对需求进行定义。而需求分析阶段则需要充分理解用户需求,通过分析得出对新系统完整、准确、清晰、具体的要求。阶段则需要充分理解用户需求,通过分析得出对新系统完整、准确、清晰、具体的要求。需求分析的结果是否正确,关系到软件开发的成败和软件产品的质量,正确的需求分析是需求分析的结果是否正确,关系到软件开发的成败和软件产品的质量,正确的需求分析是整个系统开发的基础。整个系

38、统开发的基础。44目录页3.2需求获取的方法第3章在需求分析过程中,需求获取阶段是开发人员和用户交往最多的阶段。一般情况下,用户在需求分析过程中,需求获取阶段是开发人员和用户交往最多的阶段。一般情况下,用户并不熟悉计算机的相关知识,更不懂得需求分析方法,所以他们不知道如何全面而又准确无误并不熟悉计算机的相关知识,更不懂得需求分析方法,所以他们不知道如何全面而又准确无误地表达自己的需求。而软件开发人员对相关的业务领域也不甚了解,用户与开发人员之间对同地表达自己的需求。而软件开发人员对相关的业务领域也不甚了解,用户与开发人员之间对同一问题理解的差异和习惯用语的不同往往会给需求分析带来很大困难。所以

39、,开发人员与用户一问题理解的差异和习惯用语的不同往往会给需求分析带来很大困难。所以,开发人员与用户之间要进行充分和有效的沟通,需要采取科学的需求获取方法与技巧,恰当地启发引导用户表之间要进行充分和有效的沟通,需要采取科学的需求获取方法与技巧,恰当地启发引导用户表达自己的需求,以减少后期重复修改需求的次数。达自己的需求,以减少后期重复修改需求的次数。45目录页3.2需求获取的方法第3章1深入浅出深入浅出需求获取要尽可能全面、细致。调研获取的需求是个全集,而目标系统真正实现的是个子需求获取要尽可能全面、细致。调研获取的需求是个全集,而目标系统真正实现的是个子集。分析时的调研内容并不一定都要纳入到新

40、系统中,但全面、细致的调研既有利于弄清系统集。分析时的调研内容并不一定都要纳入到新系统中,但全面、细致的调研既有利于弄清系统全局,又有利于以后的扩充。全局,又有利于以后的扩充。2以流程为主线以流程为主线在与用户交流的过程中,应该用流程将所有的内容串起来,如单据、信息、组织结构和处在与用户交流的过程中,应该用流程将所有的内容串起来,如单据、信息、组织结构和处理规则等,这样便于交流沟通。流程的描述既要有宏观描述,也要有微观描述。理规则等,这样便于交流沟通。流程的描述既要有宏观描述,也要有微观描述。3.2.1 需求获取的基本原则需求获取的基本原则 46目录页3.2需求获取的方法第3章1.问卷调查问卷

41、调查2.访谈和会议访谈和会议3.市场调查市场调查4.实地操作实地操作5.建立原型建立原型3.2.2 需求获取的途径和方法需求获取的途径和方法 47目录页3.2需求获取的方法第3章要获取用户需求,就需要深入企业现场调研,需求调研的步骤如下:要获取用户需求,就需要深入企业现场调研,需求调研的步骤如下:(1)调研用户领域的组织结构、岗位设置和职责定义,从功能上区分有多少个子系统,)调研用户领域的组织结构、岗位设置和职责定义,从功能上区分有多少个子系统,划分系统的大致范围,明确系统的目标。划分系统的大致范围,明确系统的目标。(2)调研每个子系统所需的工作流程、功能与处理规则,收集单据、报表和账本等原始

42、)调研每个子系统所需的工作流程、功能与处理规则,收集单据、报表和账本等原始资料,分析物流、资金流和信息流三者的关系,以及如何用数据流来表示这三者的关系。资料,分析物流、资金流和信息流三者的关系,以及如何用数据流来表示这三者的关系。(3)对调研的内容事先准备,针对不同管理层次的用户询问不同的问题,列出问题清单。)对调研的内容事先准备,针对不同管理层次的用户询问不同的问题,列出问题清单。将操作层、管理层和决策层的需求既联系又区分开来,形成一个金字塔,使下层满足上层的需将操作层、管理层和决策层的需求既联系又区分开来,形成一个金字塔,使下层满足上层的需求。求。(4)对与用户沟通的情况及时总结归纳,整理

43、调研结果,找出新的疑点,初步构成需求)对与用户沟通的情况及时总结归纳,整理调研结果,找出新的疑点,初步构成需求基线。基线。(5)若需求基线符合要求,则需求分析完毕;反之返回到前面某一步。如此循环多次,)若需求基线符合要求,则需求分析完毕;反之返回到前面某一步。如此循环多次,直到需求分析使双方满意为止。直到需求分析使双方满意为止。3.2.3 需求调研的步骤需求调研的步骤 48目录页3.3需求获取的步骤第3章49目录页3.3需求获取的步骤第3章此阶段的工作是需求获取、问题识别,即收集并明确用户需求的过程。此阶段的工作是需求获取、问题识别,即收集并明确用户需求的过程。首先,系统分析员要研究可行性研究

44、报告和软件项目实施计划。主要是从系统的角度来首先,系统分析员要研究可行性研究报告和软件项目实施计划。主要是从系统的角度来理解软件,确定对目标系统的综合要求,即软件的需求。还要提出这些需求实现的条件,以及理解软件,确定对目标系统的综合要求,即软件的需求。还要提出这些需求实现的条件,以及需求应达到的标准。也就是解决待开发系统需要需求应达到的标准。也就是解决待开发系统需要“做什么做什么”,“做到什么程度做到什么程度”的问题。这些的问题。这些需求包括:(需求包括:(1)功能需求:()功能需求:(2)性能需求:()性能需求:(3)环境需求:()环境需求:(4)可靠性需求:()可靠性需求:(5)安全)安全

45、保密性需求:(保密性需求:(6)用户界面需求:()用户界面需求:(7)资源使用需求:()资源使用需求:(8)软件成本消耗与开发进度需求:)软件成本消耗与开发进度需求:(9)预计系统可达到的目标:)预计系统可达到的目标:3.3.1 需求获取需求获取 50目录页3.3需求获取的步骤第3章获取到需求后,要把来自用户的信息加以分析,通过获取到需求后,要把来自用户的信息加以分析,通过“抽象抽象”建立待开发的系统逻辑模建立待开发的系统逻辑模型。模型是为了理解事物而对事物做出的一种抽象,通常由一组符号和组织这些符号的规则组型。模型是为了理解事物而对事物做出的一种抽象,通常由一组符号和组织这些符号的规则组成。

46、为待开发系统建立模型,有助于人们更好地理解问题,常用的建模方法有数据流图、实体成。为待开发系统建立模型,有助于人们更好地理解问题,常用的建模方法有数据流图、实体联系图(联系图(E-R图)、状态转换图、用例图、类图、对象图等。图)、状态转换图、用例图、类图、对象图等。系统分析员根据目标系统的模型,从信息流和信息结构出发,逐步细化所有的软件功能,系统分析员根据目标系统的模型,从信息流和信息结构出发,逐步细化所有的软件功能,找出系统各元素之间的联系、接口特性和对设计的限制,剔除需求中不合理的成分,增加需要找出系统各元素之间的联系、接口特性和对设计的限制,剔除需求中不合理的成分,增加需要的部分,最终把

47、各项需求组织起来,提交目标系统的详细逻辑模型。的部分,最终把各项需求组织起来,提交目标系统的详细逻辑模型。3.3.2 分析建模分析建模 51目录页3.3需求获取的步骤第3章需求描述就是指编制需求分析阶段的文档。即将已经过分析的需求清晰、全面、系统、需求描述就是指编制需求分析阶段的文档。即将已经过分析的需求清晰、全面、系统、准确地描述成正式的文档准确地描述成正式的文档软件需求规格说明书。软件需求规格说明书。软件需求规格说明书以开发人员的角度,对开发系统的业务模型、功能模型、数据模型软件需求规格说明书以开发人员的角度,对开发系统的业务模型、功能模型、数据模型等内容进行描述,明确地表达了用户与系统分

48、析员对软件系统的共同理解,将作为概要设计和等内容进行描述,明确地表达了用户与系统分析员对软件系统的共同理解,将作为概要设计和详细设计的基线。详细设计的基线。对于复杂的软件系统,此阶段除产生软件需求规格说明书(称软件需求文档,主要描述对于复杂的软件系统,此阶段除产生软件需求规格说明书(称软件需求文档,主要描述软件部分的需求)外,还要产生系统定义文档(即用户需求报告)和系统需求文档(即系统需软件部分的需求)外,还要产生系统定义文档(即用户需求报告)和系统需求文档(即系统需求规格说明书)。求规格说明书)。3.3.3 需求描述需求描述52目录页3.3需求获取的步骤第3章需求验证就是验证(复查)需求分析

49、的成果,也称综合评审。需求验证就是对需求的正需求验证就是验证(复查)需求分析的成果,也称综合评审。需求验证就是对需求的正确性进行严格的验证,确保需求的一致性、完整性、清晰性、现实性和有效性,确保设计与实确性进行严格的验证,确保需求的一致性、完整性、清晰性、现实性和有效性,确保设计与实现过程中的需求可回溯性,并进行需求变更管理。现过程中的需求可回溯性,并进行需求变更管理。一般情况下,需求验证以用户、系统分析员、系统设计人员和管理人员共同参与的会议一般情况下,需求验证以用户、系统分析员、系统设计人员和管理人员共同参与的会议形式进行,最后由评审负责人签字。形式进行,最后由评审负责人签字。3.3.4

50、需求验证需求验证 53目录页3.4结构化需求分析方法第3章1.分析策略分析策略结构化分析(结构化分析(Structured Analysis,简称,简称SA)方法是)方法是20世纪世纪70年代由年代由EYourdon等人提出的等人提出的一种面向数据流的分析方法,适用于大型的数据处理系统。由于利用图形来表达需求会使文档一种面向数据流的分析方法,适用于大型的数据处理系统。由于利用图形来表达需求会使文档清晰、简明、易于学习和掌握,所以软件分析人员仍在广泛使用这种传统的分析方法。清晰、简明、易于学习和掌握,所以软件分析人员仍在广泛使用这种传统的分析方法。结构化分析方法总的指导思想是结构化分析方法总的指

51、导思想是“自顶向下,逐步求精自顶向下,逐步求精”,它的两个基本原则是,它的两个基本原则是“抽象抽象”和和“分解分解”,即按照功能分解的原则,对系统进行逐层分解,直到找到所有满足功能要求的,即按照功能分解的原则,对系统进行逐层分解,直到找到所有满足功能要求的可实现软件元素为止。可实现软件元素为止。3.4.1 结构化分析方法概述结构化分析方法概述 54目录页3.4结构化需求分析方法第3章3.4.1 结构化分析方法概述结构化分析方法概述 55目录页3.4结构化需求分析方法第3章2.描述工具描述工具结构化分析方法利用图形等半形式化的描述表达需求,用它们形成需求规格说明书的主结构化分析方法利用图形等半形

52、式化的描述表达需求,用它们形成需求规格说明书的主要部分,主要工具有:要部分,主要工具有:(1)数据流图()数据流图(DFD)。描述系统的分解,即描述系统由哪几部分组成,各部分之间有)。描述系统的分解,即描述系统由哪几部分组成,各部分之间有什么联系等。什么联系等。(2)数据词典()数据词典(DD)。明确定义数据流图中的数据和加工。它是数据流条目、数据存储)。明确定义数据流图中的数据和加工。它是数据流条目、数据存储条目、数据项条目和基本加工条目的汇集。条目、数据项条目和基本加工条目的汇集。(3)结构化语言、判定表和判定树。用于详细描述数据流图中不能再分解的每一个基本)结构化语言、判定表和判定树。用

53、于详细描述数据流图中不能再分解的每一个基本加工的处理逻辑。加工的处理逻辑。3.4.1 结构化分析方法概述结构化分析方法概述 56目录页3.4结构化需求分析方法第3章3.分析步骤分析步骤3.4.1 结构化分析方法概述结构化分析方法概述 57目录页3.4结构化需求分析方法第3章1.数据流图的基本符号数据流图的基本符号3.4.2 数据流图数据流图 58目录页3.4结构化需求分析方法第3章2.数据流图的绘制步骤数据流图的绘制步骤(1)画顶层数据流图)画顶层数据流图列出系统的全部数据源点和终点,将系统加工处理过程作为一个整体,就可能得到顶层列出系统的全部数据源点和终点,将系统加工处理过程作为一个整体,就

54、可能得到顶层图。具体说就是:画一个圆,在其中写上系统名称,然后在圆的外围画上系统的输入和输出,图。具体说就是:画一个圆,在其中写上系统名称,然后在圆的外围画上系统的输入和输出,这一步工作实际上是决定研究的内容和系统的范围。这一步工作实际上是决定研究的内容和系统的范围。(2)画各层数据流图)画各层数据流图对系统处理过程自顶向下,逐步分解,画出各层的数据流图。对系统处理过程自顶向下,逐步分解,画出各层的数据流图。(3)画总的数据流图)画总的数据流图这一步对了解整个系统很有好处,但也要根据实际情况来决定总图的布局,不要把数据这一步对了解整个系统很有好处,但也要根据实际情况来决定总图的布局,不要把数据

55、流图画得太复杂。流图画得太复杂。3.4.2 数据流图数据流图 59目录页3.4结构化需求分析方法第3章3.数据流图中的命名规则数据流图中的命名规则(1)数据流)数据流 数据流表明数据和数据流向,它通常由一组数据项组成。数据流表明数据和数据流向,它通常由一组数据项组成。(2)加工)加工加工是对数据的某种操作或变换。加工是对数据的某种操作或变换。(3)文件)文件文件起暂时保存数据的作用。文件起暂时保存数据的作用。(4)数据源点和终点)数据源点和终点数据源点和终点是数据的始发点和终止点,是软件系统外部环境中的实体(包括人员、数据源点和终点是数据的始发点和终止点,是软件系统外部环境中的实体(包括人员、

56、组织或其他软件系统),统称外部实体。组织或其他软件系统),统称外部实体。3.4.2 数据流图数据流图 60目录页3.4结构化需求分析方法第3章4.数据流图中分层技术数据流图中分层技术对于比较复杂的实际问题,在数据流图上常对于比较复杂的实际问题,在数据流图上常常出现十几个乃至几十个、上百个加工,这样的数常出现十几个乃至几十个、上百个加工,这样的数据流图复杂而且难以理解。为了避免这种情况出现,据流图复杂而且难以理解。为了避免这种情况出现,可以采用数据流图的分层技术。分层技术的基本思可以采用数据流图的分层技术。分层技术的基本思想是,不是在一个数据流图中一次引入太多的细节,想是,不是在一个数据流图中一

57、次引入太多的细节,而是有控制地逐步增加细节,实现从抽象到具体的而是有控制地逐步增加细节,实现从抽象到具体的逐步过渡。逐步过渡。3.4.2 数据流图数据流图 61目录页3.4结构化需求分析方法第3章1.数据词典的内容数据词典的内容一般说来,数据词典的每个条目中应包括以下信息。一般说来,数据词典的每个条目中应包括以下信息。(1)名字:数据流、数据项、数据存储或外部实体的名称。)名字:数据流、数据项、数据存储或外部实体的名称。(2)别名或编号:第()别名或编号:第(1)项中对象的其他名字。)项中对象的其他名字。(3)分类:数据流、数据项、加工、数据存储、外部实体等。)分类:数据流、数据项、加工、数据

58、存储、外部实体等。(4)内容描述:描述内容或数据结构等。)内容描述:描述内容或数据结构等。(5)何处使用:哪些加工使用该条目。)何处使用:哪些加工使用该条目。3.4.3 数据词典数据词典 62目录页3.4结构化需求分析方法第3章2.数据词典中使用的符号数据词典中使用的符号3.4.3 数据词典数据词典 63目录页3.4结构化需求分析方法第3章3.数据词典书写实例数据词典书写实例3.4.3 数据词典数据词典 64目录页3.4结构化需求分析方法第3章3.数据词典书写实例数据词典书写实例3.4.3 数据词典数据词典 65目录页3.4结构化需求分析方法第3章3.数据词典书写实例数据词典书写实例3.4.3

59、 数据词典数据词典 66目录页3.4结构化需求分析方法第3章4.数据词典的实现数据词典的实现通常,实现数据词典有三种途径:(1)人工方法:人工方法实现时,每一词典条目(即每一个数据定义或每一个加工逻辑说明)写在一张卡片上,由专人管理和维护。为了便于搜索,所有卡片按数据名称排序。人工方法的优点是容易实现。(2)自动方法:把词典存在计算机中,用计算机对它搜索和维护。现有多种“词典管理程序”,如PLS/PSA。用计算机管理词典质量高,搜索、维护方便。(3)人工和自动混合的方法:在人工过程中可借助正文编写程序、报告生成程序等工具辅助完成。3.4.3 数据词典数据词典 67目录页3.4结构化需求分析方法

60、第3章4.数据词典的实现数据词典的实现不论通过哪种途径实现的数据词典都应尽量做到以下几点:不论通过哪种途径实现的数据词典都应尽量做到以下几点:(1)没有冗余:主要指数据定义不能重复。在规格说明书的其他组成部分中已出现的信息没有冗余:主要指数据定义不能重复。在规格说明书的其他组成部分中已出现的信息不能重复。不能重复。(2)查阅方便:通过名字可以方便地查阅数据词典中的每个定义。查阅方便:通过名字可以方便地查阅数据词典中的每个定义。(3)定义的书写方法简单、方便、严谨,而且可读性强。定义的书写方法简单、方便、严谨,而且可读性强。(4)建议采用卡片形式书写。建议采用卡片形式书写。3.4.3 数据词典数

61、据词典 68目录页3.4结构化需求分析方法第3章1. 结构化语言结构化语言3.4.4 加工逻辑的描述加工逻辑的描述 69目录页3.4结构化需求分析方法第3章2. 判定表判定表在一些数据处理中,数据流图的加工需要经过多个逻辑条件组合的取值而确定,此时用在一些数据处理中,数据流图的加工需要经过多个逻辑条件组合的取值而确定,此时用自然语言或结构化语言难以描述,而运用判定表描述就比较清晰明了。自然语言或结构化语言难以描述,而运用判定表描述就比较清晰明了。3.4.4 加工逻辑的描述加工逻辑的描述 70目录页3.4结构化需求分析方法第3章3. 判定树判定树判定树也是用来表达加工逻辑的工具,它是判定表的变形

62、,有时比判定表更直观,更易判定树也是用来表达加工逻辑的工具,它是判定表的变形,有时比判定表更直观,更易于理解和使用。图书优惠政策的判定树如图于理解和使用。图书优惠政策的判定树如图3-8所示。所示。3.4.4 加工逻辑的描述加工逻辑的描述 71目录页3.5需求规格说明书的编写与评审第3章1需求规格说明书的编写内容需求规格说明书的编写内容需求分析阶段应交付的主要文档是软件需求规格说明书。它提供了用户与开发人员对开需求分析阶段应交付的主要文档是软件需求规格说明书。它提供了用户与开发人员对开发软件的共同理解,其作用相当于用户与开发单位之间的技术合同,是后续设计和编码的基发软件的共同理解,其作用相当于用

63、户与开发单位之间的技术合同,是后续设计和编码的基础,是测试和验收的依据。础,是测试和验收的依据。软件需求规格说明书的内容框架可参阅软件需求规格说明书的内容框架可参阅GB/T 8567-2006计算机软件文档编制规范计算机软件文档编制规范。在编写需求规格说明书时应注意以下几个问题:在编写需求规格说明书时应注意以下几个问题:(1)说明书中的每一部分都非常重要,因此要慎重对待。)说明书中的每一部分都非常重要,因此要慎重对待。(2)问题的描述要做到准确无误,没有二义性。)问题的描述要做到准确无误,没有二义性。(3)说明书的书写形式要规范。)说明书的书写形式要规范。(4)允许用户根据项目的具体情况适当的

64、将书写内容进行调整和筛选。)允许用户根据项目的具体情况适当的将书写内容进行调整和筛选。72目录页3.5需求规格说明书的编写与评审第3章2需求分析的评审需求分析的评审在需求分析规格说明书编写完成后,必须进行需求评审,以验证需求的正确性。在需求分析规格说明书编写完成后,必须进行需求评审,以验证需求的正确性。如果在评审过程中发现说明书存在错误或缺陷,应及时进行更改或弥补,重新进行相应如果在评审过程中发现说明书存在错误或缺陷,应及时进行更改或弥补,重新进行相应部分的需求分析、需求建模、修改需求规格说明书,并再行评审。部分的需求分析、需求建模、修改需求规格说明书,并再行评审。需求分析评审的主要内容如下:

65、需求分析评审的主要内容如下:(1)一致性。所有需求必须是一致的,任何一条需求不能和其他需求相矛盾。)一致性。所有需求必须是一致的,任何一条需求不能和其他需求相矛盾。(2)完整性。需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。)完整性。需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。(3)现实性。指定的需求应该是用现有的软硬件技术基本上可以实现的。对硬件技术)现实性。指定的需求应该是用现有的软硬件技术基本上可以实现的。对硬件技术的进步可以预测,对软件技术的进步则很难预测,只能从现有技术水平判断需求的现实性。的进步可以预测,对软件技术的进步则很难预测,只能从现有技

66、术水平判断需求的现实性。(4)有效性。必须证明需求是正确而有效的,确实能解决用户所面对的问题。)有效性。必须证明需求是正确而有效的,确实能解决用户所面对的问题。73目录页3.6项目实践:“图书管理系统”软件需求分析第3章下面以第下面以第2章的章的“图书管理系统图书管理系统”为例,说明面向数据流的结构化分析方法及软件需求为例,说明面向数据流的结构化分析方法及软件需求说明书的编写内容。说明书的编写内容。在图书馆负责人和计算机系的技术人员通过了在图书馆负责人和计算机系的技术人员通过了“图书管理系统图书管理系统”项目开发计划项目开发计划后,后,项目组随即进入了项目开发阶段,计算机系教师与图书馆相关业务

67、人员紧密合作,经过项目组随即进入了项目开发阶段,计算机系教师与图书馆相关业务人员紧密合作,经过15天天的工作,形成了的工作,形成了“图书管理系统图书管理系统”软件需求说明书软件需求说明书。主要数据流图如下:。主要数据流图如下: 74目录页3.6项目实践:“高校图书管理系统”软件需求分析第3章75目录页3.6项目实践:“高校图书管理系统”软件需求分析第3章76目录页3.6项目实践:“高校图书管理系统”软件需求分析第3章77目录页3.6项目实践:“高校图书管理系统”软件需求分析第3章78目录页3.6项目实践:“高校图书管理系统”软件需求分析第3章79目录页3.6项目实践:“高校图书管理系统”软件需

68、求分析第3章80目录页概要设计第4章本章本章要点要点n掌握软件设计的概念与原则;n理解软件设计的任务;n掌握概要设计的内容与步骤;n掌握结构化设计方法;n了解概要设计说明书的内容。81目录页4.1软件设计概述第4章软件设计是软件工程的重要阶段,是一个将软件需求转换为软件表示的过程。软件设计的软件设计是软件工程的重要阶段,是一个将软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即确定系统的物理模型,基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即确定系统的物理模型,解决软件系统解决软件系统“怎么做怎么做”的问题。的问题。软件设

69、计不同于程序设计,程序设计是软件设计的编码实现过程。软件设计的重要性有以软件设计不同于程序设计,程序设计是软件设计的编码实现过程。软件设计的重要性有以下几点:下几点:(1)软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件)软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开发中形成质量的关键环节。开发中形成质量的关键环节。(2)软件设计是开发阶段最重要的步骤,是将用户需求准确地转化为最终的软件产品的)软件设计是开发阶段最重要的步骤,是将用户需求准确地转化为最终的软件产品的唯一途径。唯一途径。(3)软件设计作出的决策,最终将直接影响软件实现的成败。)

70、软件设计作出的决策,最终将直接影响软件实现的成败。(4)软件设计是软件工程和软件维护的基础。)软件设计是软件工程和软件维护的基础。4.1.1 软件设计的概念与重要性软件设计的概念与重要性82目录页4.1软件设计概述第4章从工程管理的角度来看,可以将软件设计分为两个阶段:概要设计(又称总体设计)阶段从工程管理的角度来看,可以将软件设计分为两个阶段:概要设计(又称总体设计)阶段和详细设计(又称过程设计)阶段。概要设计阶段得到软件系统的基本框架,详细设计阶段明和详细设计(又称过程设计)阶段。概要设计阶段得到软件系统的基本框架,详细设计阶段明确系统内部的实现细节。确系统内部的实现细节。4.1.2 软件

71、设计的任务软件设计的任务83目录页4.2概要设计的任务与步骤第4章概要设计的基本任务是:概要设计的基本任务是:(1)设计软件系统结构;)设计软件系统结构;(2)数据结构及数据库设计;)数据结构及数据库设计;(3)编写概要设计文档;)编写概要设计文档;(4)评审概要设计文档。)评审概要设计文档。4.2.1 概要设计的任务概要设计的任务84目录页4.2概要设计的任务与步骤第4章概要设计的一般步骤如下:概要设计的一般步骤如下:1.选定体系结构选定体系结构2.确定设计方案确定设计方案3.设计软件结构设计软件结构4.数据结构及数据库设计数据结构及数据库设计5.制订测试计划制订测试计划6.编写概要设计文档

72、编写概要设计文档7.概要设计文档评审概要设计文档评审4.2.2 概要设计的步骤概要设计的步骤85目录页4.3概要设计的原则第4章1.模块化模块化模块化是模块化是“分而治之分而治之”策略的具体表现。模块化就是将整体软件划分成独立命名且可独立策略的具体表现。模块化就是将整体软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同访问的模块,不同的模块通常具有不同的功能或职责。每个模块可独立地开发、的功能或职责。每个模块可独立地开发、测试,最后组装成完整的软件。在结构测试,最后组装成完整的软件。在结构化方法中,函数、过程和子程序等都可化方法中,函数、过程和子程序等都可作为模块;在面向对象方法中,

73、对象、作为模块;在面向对象方法中,对象、对象内的方法也是模块。模块是构成软对象内的方法也是模块。模块是构成软件的基本构件。件的基本构件。86目录页4.3概要设计的原则第4章2.抽象与分解抽象与分解抽象是指忽视一个主题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方抽象是指忽视一个主题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面。抽象可以分成若干级别,级别越高,细节越少。其实整个软件的开发过程就是一个从抽象面。抽象可以分成若干级别,级别越高,细节越少。其实整个软件的开发过程就是一个从抽象到具体的过程:需求分析时,使用问题域语言来概括性地描述解决方案,抽象级别最高;软件到

74、具体的过程:需求分析时,使用问题域语言来概括性地描述解决方案,抽象级别最高;软件设计时,同时使用面向问题域和面向实现的两种术语描述解决方案,抽象级别次之;在编码时,设计时,同时使用面向问题域和面向实现的两种术语描述解决方案,抽象级别次之;在编码时,使用直接实现的方式(源程序代码)来描述解决方案,抽象级别最低。在软件设计中,过程抽使用直接实现的方式(源程序代码)来描述解决方案,抽象级别最低。在软件设计中,过程抽象和数据抽象是两种常用的抽象手段。象和数据抽象是两种常用的抽象手段。87目录页4.3概要设计的原则第4章3.信息隐蔽和局部化信息隐蔽和局部化信息隐蔽是指模块所包含的信息,不允许其他不需要这

75、些信息的模块访问,独立的模块间信息隐蔽是指模块所包含的信息,不允许其他不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。信息隐蔽的目的是提高模块的独立性,减少修改仅仅交换为完成系统功能而必须交换的信息。信息隐蔽的目的是提高模块的独立性,减少修改或维护时的影响面。或维护时的影响面。局部化就是把关系密切的软件元素物理地放得彼此靠近。其优点是可维护性、可靠性和可局部化就是把关系密切的软件元素物理地放得彼此靠近。其优点是可维护性、可靠性和可理解性好。理解性好。4.模块独立性模块独立性模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。模块独立性概

76、括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。模块独立性好的软件接口简单、容易开发,独立的模块也容易测试和维护。因此,模块独立性模块独立性好的软件接口简单、容易开发,独立的模块也容易测试和维护。因此,模块独立性是软件质量的关键。是软件质量的关键。88目录页4.3概要设计的原则第4章5.复用性设计复用性设计复用是指同一事物不做修改或稍加修改就可以多次重复使用。将复用思想用于软件开发称复用是指同一事物不做修改或稍加修改就可以多次重复使用。将复用思想用于软件开发称为软件复用,将软件的重用部分称为软构件。也就是说,在构造软件系统时不必从零做起,可为软件复用,将软件的重用部分称为软

77、构件。也就是说,在构造软件系统时不必从零做起,可通过直接使用或加以修改已有软构件来组装成新系统。通过直接使用或加以修改已有软构件来组装成新系统。软件复用可提高软件的生产率。由于软构件是经过反复使用验证的,自身具有较高的质量,软件复用可提高软件的生产率。由于软构件是经过反复使用验证的,自身具有较高的质量,因此由软构件组成的新系统也具有较高的质量。软件复用并不局限于软件代码,其范围也可扩因此由软构件组成的新系统也具有较高的质量。软件复用并不局限于软件代码,其范围也可扩展到软件开发各个阶段,包括需求模型和规格说明、设计模型、文档、测试用例等。展到软件开发各个阶段,包括需求模型和规格说明、设计模型、文

78、档、测试用例等。89目录页4.4模块的独立性第4章模块独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而与软件系统中其模块独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而与软件系统中其他模块的接口是简单的。模块独立性取决于模块的内部和外部特征。一般用耦合和内聚两个定他模块的接口是简单的。模块独立性取决于模块的内部和外部特征。一般用耦合和内聚两个定性的指标来度量。性的指标来度量。耦合是模块之间相互依赖的紧密程度的度量,内聚是一个模块内部各个元素之间彼此结合耦合是模块之间相互依赖的紧密程度的度量,内聚是一个模块内部各个元素之间彼此结合的紧密程度的度量。一个模块内部各个元素之间

79、的联系越紧密,则模块的内聚度就越高,相对的紧密程度的度量。一个模块内部各个元素之间的联系越紧密,则模块的内聚度就越高,相对地,它与其他模块之间的耦合就越低,模块的独立性就越强。一个优秀的软件设计,应尽量做地,它与其他模块之间的耦合就越低,模块的独立性就越强。一个优秀的软件设计,应尽量做到高内聚、低耦合,从而提高模块的独立性。到高内聚、低耦合,从而提高模块的独立性。90目录页4.4模块的独立性第4章耦合是模块之间相互连接的紧密程度的度量。耦合强弱取决于模块间接口的复杂程度、进耦合是模块之间相互连接的紧密程度的度量。耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。模块

80、之间的连接越紧密,联系越多,耦合性就越入或访问一个模块的点以及通过接口的数据。模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。通常希望一个软件系统具有较低的耦合性。高,而其模块独立性就越弱。通常希望一个软件系统具有较低的耦合性。4.4.1 耦合性(耦合性(Coupling)91目录页4.4模块的独立性第4章1.非直接耦合非直接耦合两个模块间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦两个模块间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。合度最弱,模块独立性最强。2.数据耦合数据耦合调用模块和被调用模块

81、之间只传递简单的数据调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。项参数。相当于高级语言中的值传递。4.4.1 耦合性(耦合性(Coupling)92目录页4.4模块的独立性第4章3.标记耦合标记耦合调用模块和被调用模块之间传递数据结构而不是简单数据。也称特征耦合。调用模块和被调用模块之间传递数据结构而不是简单数据。也称特征耦合。标记耦合的模块间传递的不是简单变量,而是像高级语言中的数组名、记录名和文件名等标记耦合的模块间传递的不是简单变量,而是像高级语言中的数组名、记录名和文件名等数据结构,这些名字即为标记,其实传递的是地址。数据结构,这些名字即为标记,其实传递的

82、是地址。4.4.1 耦合性(耦合性(Coupling)93目录页4.4模块的独立性第4章4.控制耦合控制耦合模块之间传递的不是数据信息,而是控制信息如标志、开关量,一个模块控制了另一模块模块之间传递的不是数据信息,而是控制信息如标志、开关量,一个模块控制了另一模块的功能。的功能。4.4.1 耦合性(耦合性(Coupling)94目录页4.4模块的独立性第4章5.外部耦合外部耦合一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合。6.公共耦合公共耦合若一组模块都访问同一全局

83、数据结构,则称之为公共耦合。公共数据环境可以是全局数据若一组模块都访问同一全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。结构、共享的通信区、内存的公共覆盖区等。如果模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松如果模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松散的公共耦合;如果模块既向公共数据环境输入数据又从公共数据环境取出数据,这属于较紧散的公共耦合;如果模块既向公共数据环境输入数据又从公共数据环境取出数据,这属于较紧密的公共耦合。密的公共耦合。4.4.1 耦合性(耦合性(Coupli

84、ng)95目录页4.4模块的独立性第4章7.内容耦合内容耦合一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。若在程序中出现下列情况之一,则说明两个模块之间发生了内容耦合:若在程序中出现下列情况之一,则说明两个模块之间发生了内容耦合:(1)一个模块直接访问另一个模块的内部数据)一个模块直接访问另一个模块的内部数据;(2)一个模块不通过正常入口而直接转入到另一个模块的内部)一个模块不通过正常入口而直接转入到另一个模块的内部;(3)两个模块有一部分代码重叠(该部分代码具有一定的独立功能)两个模块有一部分代码重叠(该部分代码具有一定的

85、独立功能);(4)一个模块有多个入口。)一个模块有多个入口。4.4.1 耦合性(耦合性(Coupling)96目录页4.4模块的独立性第4章一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只完成一个功能,模块设计的目标之一是尽可能高内聚。完成一个功能,模块设计的目标之一是尽可能高内聚。4.4.2 内聚性(内聚性(Cohesion)97目录页4.4模块的独立性第4章1.偶然内聚偶然内聚一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起。这种模块也称巧合一个模块内的各处理元素之间没有

86、任何联系,只是偶然地被凑到一起。这种模块也称巧合内聚,内聚程度最低。内聚,内聚程度最低。4.4.2 内聚性(内聚性(Cohesion)98目录页4.4模块的独立性第4章2.逻辑内聚逻辑内聚指模块内执行几个逻辑上相关的功能,通过参数确定该模块完成哪一个功能。指模块内执行几个逻辑上相关的功能,通过参数确定该模块完成哪一个功能。4.4.2 内聚性(内聚性(Cohesion)99目录页4.4模块的独立性第4章3.时间内聚时间内聚把需要同时或顺序执行的动作组合在一起形成的模块。把需要同时或顺序执行的动作组合在一起形成的模块。时间内聚模块中的功能元素只因时间因素关联在一起,各元素之间没有共用数据,而且一时

87、间内聚模块中的功能元素只因时间因素关联在一起,各元素之间没有共用数据,而且一般情况下各部分可以以任意次序执行。般情况下各部分可以以任意次序执行。4.过程内聚过程内聚如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。4.4.2 内聚性(内聚性(Cohesion)100目录页4.4模块的独立性第4章5.通信内聚通信内聚指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的输入数据或产生相同的输出结果。输入

88、数据或产生相同的输出结果。4.4.2 内聚性(内聚性(Cohesion)101目录页4.4模块的独立性第4章6.顺序内聚顺序内聚指一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前指一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前一个处理元素的输出是后一个处理元素的输入。一个处理元素的输出是后一个处理元素的输入。顺序内聚的内聚度比较高,但缺点是不如功能内聚易于维护。顺序内聚的内聚度比较高,但缺点是不如功能内聚易于维护。7.功能内聚功能内聚指模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的指模块内所有元素的各个组成

89、部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分。即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、功能,模块已不可再分。即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。缺一不可。4.4.2 内聚性(内聚性(Cohesion)102目录页4.4模块的独立性第4章1.模块功能的完善化模块功能的完善化2.消除重复功能,改善软件结构消除重复功能,改善软件结构3.模块规模应该适中模块规模应该适中4.模块的深度、宽度、扇出和扇入都应适当模块的深度、宽度、扇出和扇入都应适当5.模块的作用范围应该在控制范围之内模块的作用范围应该在控制范围之内6.力

90、争降低模块接口的复杂程度力争降低模块接口的复杂程度7.设计单入口、单出口的模块设计单入口、单出口的模块8.模块功能应该可以预测模块功能应该可以预测4.4.2 软件结构优化准则软件结构优化准则103目录页4.5软件结构设计的图形工具第4章层次图(层次图(Hierarchy)也称)也称H图,用于表示软件的层次结构,特别适合于在自顶向下设计时图,用于表示软件的层次结构,特别适合于在自顶向下设计时使用。使用。4.5.1 层次图层次图104目录页4.5软件结构设计的图形工具第4章IPO图是输入图是输入/处理处理/输出图(输出图(Input Process Output),其基本形式是三个方框,左边方框列

91、),其基本形式是三个方框,左边方框列出所有的输入数据,中间框列出主要的处理,右边框列出输出数据。出所有的输入数据,中间框列出主要的处理,右边框列出输出数据。4.5.2 IPO图图105目录页4.5软件结构设计的图形工具第4章模块结构图(模块结构图(Structure Chart,SC图)用于表示软件系统的层次分解关系、模块调用关系、图)用于表示软件系统的层次分解关系、模块调用关系、模块之间数据流和控制信息流的传递关系,是描述软件系统物理模型、进行概要设计的主要工模块之间数据流和控制信息流的传递关系,是描述软件系统物理模型、进行概要设计的主要工具,也是软件文档的一部分。具,也是软件文档的一部分。

92、4.5.3 结构图结构图106目录页4.6结构化的设计方法第4章结构化设计方法是面向数据流的设计方法,它以数据流图为基础,定义了将数据流图映射结构化设计方法是面向数据流的设计方法,它以数据流图为基础,定义了将数据流图映射为软件结构图(即为软件结构图(即DFDSC)的方法,而数据流的类型决定了映射的方法。数据流分为变换流和)的方法,而数据流的类型决定了映射的方法。数据流分为变换流和事务流两种,因此由数据流组成的数据流图也分为变换型数据流图和事务型数据流图两种类型。事务流两种,因此由数据流组成的数据流图也分为变换型数据流图和事务型数据流图两种类型。由变换型数据流图向结构图的映射称变换分析,由事务型

93、数据流图向结构图的映射称事务分析。由变换型数据流图向结构图的映射称变换分析,由事务型数据流图向结构图的映射称事务分析。107目录页4.6结构化的设计方法第4章1数据流图的类型数据流图的类型(1)变换流)变换流变换型数据流的特征是可以把它看成由输入、变换中心和输出三部分组成,这样的数据流变换型数据流的特征是可以把它看成由输入、变换中心和输出三部分组成,这样的数据流图称为变换型数据流图。如图图称为变换型数据流图。如图4-20所示。所示。108目录页4.6结构化的设计方法第4章(2)事务流)事务流事务型数据流的特征是可以把它看成具有在多种事务中选择执行某类事务的能力。这样的事务型数据流的特征是可以把

94、它看成具有在多种事务中选择执行某类事务的能力。这样的数据流图称为事务型数据流图。数据流图称为事务型数据流图。109目录页4.6结构化的设计方法第4章2.结构化设计过程结构化设计过程面向数据流的结构化方法的设计面向数据流的结构化方法的设计过程如图过程如图4-22所示。所示。110目录页4.6结构化的设计方法第4章(1)精化)精化DFD。(2)确定)确定DFD类型。类型。(3)把)把DFD映射到系统模块结构,设计模块结构的上层。映射到系统模块结构,设计模块结构的上层。(4)基于)基于DFD逐步分解高层模块,设计出下层模块。逐步分解高层模块,设计出下层模块。(5)根据模块独立性原理,精化模块结构。)

95、根据模块独立性原理,精化模块结构。(6)描述模块接口。)描述模块接口。111目录页4.6结构化的设计方法第4章两种映射方法都是先映射出初始软件结构图。两种映射方法都是先映射出初始软件结构图。112目录页4.6结构化的设计方法第4章3.变换分析变换分析变换分析是一系列设计步骤的总称,通过执行这些步骤,将具有变换流特点的数据流图按变换分析是一系列设计步骤的总称,通过执行这些步骤,将具有变换流特点的数据流图按预先确定的模式映射成软件结构。采用变换分析方法开发出的软件结构图,其一般方式为:预先确定的模式映射成软件结构。采用变换分析方法开发出的软件结构图,其一般方式为:“输入输入处理处理输出输出”。变换

96、分析方法的设计步骤如下:变换分析方法的设计步骤如下:第一步复查基本系统模型。以确定输入数据和输出数据是否与实际相符。第一步复查基本系统模型。以确定输入数据和输出数据是否与实际相符。第二步复查并精化数据流图。完成对需求分析阶段得出的数据流图的复查和精化。第二步复查并精化数据流图。完成对需求分析阶段得出的数据流图的复查和精化。第三步判断数据流图具有变换特性还是事务特性。根据数据流图中占优势的属性是事务的第三步判断数据流图具有变换特性还是事务特性。根据数据流图中占优势的属性是事务的还是变换的,来确定数据流的全局属性。还是变换的,来确定数据流的全局属性。第四步确定输入流和输出流的边界,从而将变换中心划

97、分出来。第四步确定输入流和输出流的边界,从而将变换中心划分出来。第五步完成第五步完成“第一级分解第一级分解”。分配控制的过程,划分顶层模块和从属模块。分配控制的过程,划分顶层模块和从属模块。第六步完成第六步完成“第二级分解第二级分解”。就是把数据流图中的每个处理映射成软件结构中一个适当的。就是把数据流图中的每个处理映射成软件结构中一个适当的模块。模块。第七步采用启发式设计规则和设计度量对得到的软件结构进行精化。第七步采用启发式设计规则和设计度量对得到的软件结构进行精化。113目录页4.6结构化的设计方法第4章4.事务分析事务分析事务分析的设计步骤和变换分析的设计步骤基本类似,主要差别在于数据流

98、图到软件结事务分析的设计步骤和变换分析的设计步骤基本类似,主要差别在于数据流图到软件结构的映射方法不同。在事务分析的设计中,由数据流图映射到软件结构时,从事务中心边界构的映射方法不同。在事务分析的设计中,由数据流图映射到软件结构时,从事务中心边界开始,把接收通路映射成一个模块,在发送通路设立一个控制模块,用以控制由不同发送通开始,把接收通路映射成一个模块,在发送通路设立一个控制模块,用以控制由不同发送通路映射成的分支模块。路映射成的分支模块。114目录页4.7概要设计文档与评审第4章软件设计规格说明书是软件设计阶段要完成的文档,作为设计任务的最终成果。概要软件设计规格说明书是软件设计阶段要完成

99、的文档,作为设计任务的最终成果。概要设计、详细设计、数据设计规格说明书可根据项目的大小分别编写或合并为一份设计规格说设计、详细设计、数据设计规格说明书可根据项目的大小分别编写或合并为一份设计规格说明书。我国国家标准明书。我国国家标准GB/T 8567|2006计算机软件文档编制规范计算机软件文档编制规范都给出了设计说明书的内都给出了设计说明书的内容框架,可以选择使用。本章容框架,可以选择使用。本章4.8节给出的节给出的“高校图书管理系统高校图书管理系统”软件概要设计说明书软件概要设计说明书可可供读者参考。供读者参考。4.7.1 概要设计说明书的编写内容概要设计说明书的编写内容115目录页4.7

100、概要设计文档与评审第4章设计评审就是对设计文档的评审。目的是为了尽早发现软件的欠缺并尽早纠正,因此设计评审就是对设计文档的评审。目的是为了尽早发现软件的欠缺并尽早纠正,因此评审对于项目的成功是绝对必要的。评审对于项目的成功是绝对必要的。(1)评审的指导原则)评审的指导原则概要设计评审和详细设计评审应分开进行,不可合并为一次评审;概要设计评审和详细设计评审应分开进行,不可合并为一次评审;概要设计评审应邀请用户代表和有关领域专家到会,详细设计评审则不需要;概要设计评审应邀请用户代表和有关领域专家到会,详细设计评审则不需要;评审是为了提前揭露错误,参加评审的设计人员应该欢迎别人提出批评和建议,不要评

101、审是为了提前揭露错误,参加评审的设计人员应该欢迎别人提出批评和建议,不要掩盖设计的缺陷。评审的对象是设计文档而不是设计者;掩盖设计的缺陷。评审的对象是设计文档而不是设计者;评审中提出的问题应详细记录,但不谋求当场解决;评审中提出的问题应详细记录,但不谋求当场解决;评审结束前应做出本次评审能否通过的结论。评审结束前应做出本次评审能否通过的结论。4.7.2 概要设计评审概要设计评审116目录页4.7概要设计文档与评审第4章(2)评审的主要内容)评审的主要内容概要设计评审应该把重点放在系统的总体结构、模块划分、内外接口等方面。如软件概要设计评审应该把重点放在系统的总体结构、模块划分、内外接口等方面。

102、如软件结构能否满足需求;结构形态是否合理;层次是否清晰;模块划分是否符合优化原则;人机结构能否满足需求;结构形态是否合理;层次是否清晰;模块划分是否符合优化原则;人机界面、内外部接口和出错处理是否合理等。界面、内外部接口和出错处理是否合理等。详细设计评审的重点应该放在各个模块的具体设计上。如模块的设计能否满足其功能详细设计评审的重点应该放在各个模块的具体设计上。如模块的设计能否满足其功能和性能要求;算法和数据结构是否合理;设计描述是否简单、清晰等。和性能要求;算法和数据结构是否合理;设计描述是否简单、清晰等。4.7.2 概要设计评审概要设计评审117目录页4.7概要设计文档与评审第4章(3)评

103、审的方式)评审的方式评审分为正式和非正式两种方式。评审分为正式和非正式两种方式。非正式评审参加人数少,且均为软件人员,带有同行讨论性质,不拘泥于时间和形式,非正式评审参加人数少,且均为软件人员,带有同行讨论性质,不拘泥于时间和形式,适宜详细设计评审。适宜详细设计评审。正式评审除软件开发人员外,还应邀请用户代表和有关领域专家参加。通常采用答辩正式评审除软件开发人员外,还应邀请用户代表和有关领域专家参加。通常采用答辩方式,与会者提前审阅文档资料,设计人员使用幻灯片等方式对设计方案详细说明之后,回方式,与会者提前审阅文档资料,设计人员使用幻灯片等方式对设计方案详细说明之后,回答与会者的问题并记录各种

104、重要的评审意见。正式评审是概要设计评审的常用方式。答与会者的问题并记录各种重要的评审意见。正式评审是概要设计评审的常用方式。4.7.2 概要设计评审概要设计评审118目录页4.8项目实践:“图书管理系统”概要设计第4章119目录页4.8项目实践:“图书管理系统”概要设计第4章功能模块与相应数据表之间的关系表程序实现的功能模块涉及的主要数据表审核读者读者信息表检查借书数量读者信息表、读者类型表检查图书图书信息表办理借书读者信息表、图书信息表、借阅信息表、借还日志表办理续借读者信息表、图书信息表、借阅信息表、借还日志表办理还书读者信息表、图书信息表、借阅信息表、罚款信息表、系统参数表、借还日志表办

105、理预借读者信息表、图书信息表、预借详情表、借还日志表120目录页详细设计第5章本章本章要点要点n理解详细设计的任务与原则;n掌握详细设计的表达工具;n学会书写软件详细设计文档。121目录页5.1详细设计的任务与原则第5章详细设计(又称为过程设计或模块设计),是编码的前导。其主要任务是确定每一个模块详细设计(又称为过程设计或模块设计),是编码的前导。其主要任务是确定每一个模块所使用的算法、块内数据结构和接口细节,用描述工具表达算法的过程,即对模块的具体实现所使用的算法、块内数据结构和接口细节,用描述工具表达算法的过程,即对模块的具体实现过程进行详细地描述。具体任务如下:过程进行详细地描述。具体任

106、务如下:(1)算法设计)算法设计(2)数据结构设计)数据结构设计(3)模块接口细节)模块接口细节(4)测试用例设计)测试用例设计(5)数据库物理设计)数据库物理设计(6)数据代码设计)数据代码设计(7)其他设计)其他设计(8)编写详细设计说明书并进行评审。)编写详细设计说明书并进行评审。5.1.1 详细设计的任务详细设计的任务122目录页5.1详细设计的任务与原则第5章进行详细设计时应遵循以下原则:进行详细设计时应遵循以下原则:(1)采用自顶向下、逐步求精的程序设计方法。)采用自顶向下、逐步求精的程序设计方法。在详细设计过程中,采用逐步求精的方法尅降低待处理问题的复杂度。在详细设计过程中,采用

107、逐步求精的方法尅降低待处理问题的复杂度。(2)使用三种基本控制结构完成程序设计。)使用三种基本控制结构完成程序设计。使用顺序、选择和循环三种基本控制结构构造程序,限制使用无条件跳转语句。使用顺序、选择和循环三种基本控制结构构造程序,限制使用无条件跳转语句。(3)设计人员组织结构采用)设计人员组织结构采用“外科医生外科医生助手助手”模式。模式。在这种组织结构中,外科医生和助手都应了解相关设计内容,但外科医生在设计中起主导在这种组织结构中,外科医生和助手都应了解相关设计内容,但外科医生在设计中起主导作用,是设计的技术负责人,助手只起技术支持作用。此种模式区别于传统的作用,是设计的技术负责人,助手只

108、起技术支持作用。此种模式区别于传统的“平等组合平等组合”模模式,使设计责任集中在少数人身上,避免了因观点不同而造成的设计策略和接口的差异。式,使设计责任集中在少数人身上,避免了因观点不同而造成的设计策略和接口的差异。5.1.2 详细设计的原则详细设计的原则123目录页5.2详细设计的工具第5章算法过程在理想的情况下是使用自然语言来描述,但由于自然语言存在多义性,在实际的算法过程在理想的情况下是使用自然语言来描述,但由于自然语言存在多义性,在实际的算法描述中,只能采用更加严谨的方式来精心表述。进行详细设计时常用三种工具:图形、表算法描述中,只能采用更加严谨的方式来精心表述。进行详细设计时常用三种

109、工具:图形、表格和语言。格和语言。图形工具:包括程序流程图、图形工具:包括程序流程图、N|S图、图、PAD图等。图等。表格工具:判定表。表格工具:判定表。语言工具:过程设计语言(语言工具:过程设计语言(PDL)。)。124目录页5.2详细设计的工具第5章1.程序流程图程序流程图程序流程图又叫程序框图,它是历史最悠久、使用最广泛的一种算法表示工具。程序流程图又叫程序框图,它是历史最悠久、使用最广泛的一种算法表示工具。125目录页5.2详细设计的工具第5章程序流程图的程序流程图的5种控制结构如图种控制结构如图5-2所示。所示。126目录页5.3用户界面设计第5章5.3.1 用户界面设计的重要性用户

110、界面设计的重要性5.3.2 用户界面设计考虑的问题用户界面设计考虑的问题5.3.3 用户界面设计的基本原则用户界面设计的基本原则5.3.4 用户界面设计指南用户界面设计指南127目录页5.4数据代码设计第5章1.代码设计的原则代码设计的原则2. 代码的种类代码的种类 顺序码、信息块码、分组码、助记码、缩写码、合成码顺序码、信息块码、分组码、助记码、缩写码、合成码128目录页5.5详细设计文档的编制及评审第5章1. 详细设计文档的编制详细设计文档的编制2. 详细设计的评审详细设计的评审 129目录页5.6项目实践:图书管理系统详细设计第5章“借书借阅借书借阅”、“图书归还图书归还”程序的层次结构

111、图程序的层次结构图 130目录页5.6项目实践:图书管理系统详细设计第5章“借书借阅借书借阅”模块功能描述模块功能描述 设计者设计日期审核者审核日期程序名称图书借阅标识符lendbook相关数据库表读者信息表, 图书信息表,借阅信息表,借还日志表输入读者编号、图书编号输出借书成功或失败信息程序处理说明1调用方法创建本窗体。2在“读者信息表”中查找输入的“读者编号”,如果找不到,或者“读者有效期截止日期”小于当前系统日期,则提示“无效读者或书证超期”,程序返回;3在“读者类型表”中查找“读者编号”对应的读者类型,获得“最多借书册数”数量;4在“读者信息表”中查找“读者编号”对应记录的“已借数量”

112、;5如果“已借数量”=“最多借书册数”,提示“超过借书数量”,程序返回。6调用“办理借书”模块,完成借书事务:在“借阅信息表”增加一条借阅记录,写入借阅信息;在“借还日志表”增加一条借阅记录,写入借阅日志信息;在“读者信息表”中把“已借数量”+1; 在“图书信息表”中把“馆内剩余”-1; 提示“借书成功”信息。131目录页5.6项目实践:图书管理系统详细设计第5章“借书借阅借书借阅”程序流程图程序流程图 创建本窗体连接数据库调用“检查借书数量”调用“检查图书”调用“审核读者”调用“办理借书”132目录页5.6项目实践:图书管理系统详细设计第5章“借书借阅借书借阅”模块程序接口模块程序接口 13

113、3目录页面向对象概念和Rose建模技术第6章本章本章要点要点n掌握面向对象的基本概念;n理解面向对象与面向过程的区别;n了解UML的各种图;n熟悉静态建模和动态建模的方法;n学会RationalRose软件的安装与配置方法;n掌握利用RationalRose建模的基本步骤。134目录页6.1面向对象方法概述第6章目前广泛使用的软件工程方法主要有结构化方法和面向对象的方法。目前广泛使用的软件工程方法主要有结构化方法和面向对象的方法。结构化方法是面向功能的,它从系统的功能入手,将系统分解为若干功能模块,通常使用结构化方法是面向功能的,它从系统的功能入手,将系统分解为若干功能模块,通常使用函数或过程

114、来实现所需功能,数据通常作为参数传递给函数或过程。用这种方式开发的软件可函数或过程来实现所需功能,数据通常作为参数传递给函数或过程。用这种方式开发的软件可重用性、可维护性都较差。尤其是当软件规模较大或软件需求模糊易变时,采用结构化方法开重用性、可维护性都较差。尤其是当软件规模较大或软件需求模糊易变时,采用结构化方法开发软件往往不能成功。为此,人们提出了面向对象的开发方法。发软件往往不能成功。为此,人们提出了面向对象的开发方法。面向对象方法可用下面的公式来描述:面向对象方法可用下面的公式来描述: 面向对象面向对象面向对象面向对象 = =对象对象对象对象 + +类类类类 + +继承继承继承继承 +

115、 +消息传递消息传递消息传递消息传递6.1.1 面向对象方法的特征面向对象方法的特征 135目录页6.1面向对象方法概述第6章面向对象方法的主要优点如下:面向对象方法的主要优点如下:1.与人类习惯的思维方法一致与人类习惯的思维方法一致2.系统的稳定性好系统的稳定性好3.可重用性好可重用性好4.较易于开发大型软件产品较易于开发大型软件产品5.可维护性好可维护性好6.1.1 面向对象方法的特征面向对象方法的特征 136目录页6.1面向对象方法概述第6章1.对象(对象(Object)在应用领域中有意义的、与所有解决的问题有关系的任何事物都可以作为对象。对象可以在应用领域中有意义的、与所有解决的问题有

116、关系的任何事物都可以作为对象。对象可以是具体的物体实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如,是具体的物体实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如,一名学生、一本图书等。一名学生、一本图书等。对象由一组属性和对这组属性进行操作的一组方法(服务)组成。对象由一组属性和对这组属性进行操作的一组方法(服务)组成。属性就是对象所包含的数据,它代表对象的状态,它在设计对象时确定,一般只能通过执属性就是对象所包含的数据,它代表对象的状态,它在设计对象时确定,一般只能通过执行对象的操作来改变,例如,学生的属性有姓名、年龄等。行对象的操作来改变,例如,

117、学生的属性有姓名、年龄等。操作(或称方法或服务)即对象所能执行的操作,也就是类中所定义的服务,它描述了对操作(或称方法或服务)即对象所能执行的操作,也就是类中所定义的服务,它描述了对象执行操作的算法,响应消息的方法。可以通过向对象发送消息来调用其方法。例如:象执行操作的算法,响应消息的方法。可以通过向对象发送消息来调用其方法。例如:“读者读者”类的服务有类的服务有“借书借书”、“还书还书”等。等。6.1.2 面向对象方法的基本概念面向对象方法的基本概念137目录页6.1面向对象方法概述第6章1.对象(对象(Object)6.1.2 面向对象方法的基本概念面向对象方法的基本概念138目录页6.1

118、面向对象方法概述第6章2.类(类(Class)和实例()和实例(Instance)类是具有相同属性和服务的一组对象的集合。类是关于对象的抽象描述,反映了该对象类类是具有相同属性和服务的一组对象的集合。类是关于对象的抽象描述,反映了该对象类型的所有对象的性质。型的所有对象的性质。一个对象则是其对应类的一个实例。一个对象则是其对应类的一个实例。类和对象的关系是:类是对象的抽象,类是对象的类和对象的关系是:类是对象的抽象,类是对象的“模板模板”,类用于创建对象;对象是类,类用于创建对象;对象是类的实例。的实例。例如:例如:“学生学生”是一个类,它描述了所有学生的性质。而一个具体的学生是一个类,它描述

119、了所有学生的性质。而一个具体的学生“张三张三”是类是类“学生学生”的一个实例。的一个实例。类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的操作。类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的操作。6.1.2 面向对象方法的基本概念面向对象方法的基本概念139目录页6.1面向对象方法概述第6章4封装(封装(Encapsulation)封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,而对象内部的实现细节封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,而对象内部的实现细节对用户是隐藏的。对用户是隐藏的。封装有两个含义,一个是指把对象的全部属性

120、和全部操作(即方法)结合起来,形成一个封装有两个含义,一个是指把对象的全部属性和全部操作(即方法)结合起来,形成一个不可分割的独立单位(即对象);另一个是指信息隐蔽,即尽可能隐蔽对象内部的行为实现细不可分割的独立单位(即对象);另一个是指信息隐蔽,即尽可能隐蔽对象内部的行为实现细节。节。类(或对象)是封装的基本单位。在类中定义的接收对方消息的方法称为类的接口。封装类(或对象)是封装的基本单位。在类中定义的接收对方消息的方法称为类的接口。封装使对象形成两个部分:接口部分和实现部分。接口部分是可见的,供外界通过消息来访问该对使对象形成两个部分:接口部分和实现部分。接口部分是可见的,供外界通过消息来

121、访问该对象,而实现部分不可见。象,而实现部分不可见。6.1.2 面向对象方法的基本概念面向对象方法的基本概念140目录页6.1面向对象方法概述第6章5继承性继承性(Inheritance)继承性是父类和子类之间共享数据和方法的机制,这是类之间的一种关系。继承性是父类和子类之间共享数据和方法的机制,这是类之间的一种关系。在设计一个新类时,可以在一个已经存在的类的基础上进行,只需考虑新类与已存在类所在设计一个新类时,可以在一个已经存在的类的基础上进行,只需考虑新类与已存在类所不同的部分,新类可以直接继承这个已经存在类的属性和方法,将其作为自己的内容,并可以不同的部分,新类可以直接继承这个已经存在类

122、的属性和方法,将其作为自己的内容,并可以在新类中定义自己的属性和方法。已经存在的类称为超类、基类或父类,新的类称为子类或派在新类中定义自己的属性和方法。已经存在的类称为超类、基类或父类,新的类称为子类或派生类。例如,新类生类。例如,新类B能使用类能使用类A中的属性和方法,则称类中的属性和方法,则称类A是类是类B的父类,类的父类,类B是类是类A的子类,也称的子类,也称类类B继承了类继承了类A。继承性有两种类型:一个子类只有唯一的一个父类,这种继承称为单继承;一个子类也可继承性有两种类型:一个子类只有唯一的一个父类,这种继承称为单继承;一个子类也可以有多个父类,它可以从多个父类中继承特性,这种继承

123、称为多继承。以有多个父类,它可以从多个父类中继承特性,这种继承称为多继承。6.1.2 面向对象方法的基本概念面向对象方法的基本概念141目录页6.1面向对象方法概述第6章6多态性(多态性(Polymorphism)对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行为,该现象称为多态性。为,该现象称为多态性。在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给

124、子类对象。可以发送给父类对象也可以发送给子类对象。6.1.2 面向对象方法的基本概念面向对象方法的基本概念142目录页6.1面向对象方法概述第6章7重载(重载(Overloading)有两种重载,函数重载和运算符重载。有两种重载,函数重载和运算符重载。函数重载是指在同一作用范围内的若干个参数特征不同的函数可以使用相同的函数名字。函数重载是指在同一作用范围内的若干个参数特征不同的函数可以使用相同的函数名字。运算符重载是指同一个运算符可以施加于不同类型的操作数上面。当然,当参数特征不同或被运算符重载是指同一个运算符可以施加于不同类型的操作数上面。当然,当参数特征不同或被操作数的类型不同时,实现函数

125、的算法或运算符的语义是不相同的。操作数的类型不同时,实现函数的算法或运算符的语义是不相同的。重载进一步提高了面向对象系统的灵活性和可读性。重载进一步提高了面向对象系统的灵活性和可读性。6.1.2 面向对象方法的基本概念面向对象方法的基本概念143目录页6.2统一建模语言(UML)第6章1.UML的发展历史的发展历史统一建模语言(统一建模语言(Unified Modeling Language,UML)是用一组专用符号描述软件模型的语言,)是用一组专用符号描述软件模型的语言,它是由世界著名的面向对象技术专家它是由世界著名的面向对象技术专家Grady Booch、Jim Rumbaugh和和Iva

126、r Jacobson发起,在著名发起,在著名的面向对象的的面向对象的Booch方法、对象模型技术(方法、对象模型技术(OMT)方法和面向对象的软件工程()方法和面向对象的软件工程(OOSE)方法的)方法的基础上,不断完善、发展的一种统一建模语言。基础上,不断完善、发展的一种统一建模语言。UML是面向对象分析与设计的一种标准表示。它不是一种可视化的程序设计语言,而是一是面向对象分析与设计的一种标准表示。它不是一种可视化的程序设计语言,而是一种可视化的建模语言,不涉及编程问题,与语言平台无关。当前广泛使用的是种可视化的建模语言,不涉及编程问题,与语言平台无关。当前广泛使用的是UML 2.0版本,版

127、本,UML已经成为一个事实上的工业标准,获得了业界的认同。已经成为一个事实上的工业标准,获得了业界的认同。6.2.1 UML概述概述144目录页6.2统一建模语言(UML)第6章6.2.1 UML概述概述145目录页6.2统一建模语言(UML)第6章2UML的主要特点的主要特点(1)统一了)统一了Booch、OMT和和OOSE等方法中的基本概念,是软件开发过程中各类人员交流等方法中的基本概念,是软件开发过程中各类人员交流和沟通的工具。和沟通的工具。(2)UML所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发

128、人员不必在开发过程的不同阶段进行概念和符号的转换。人员不必在开发过程的不同阶段进行概念和符号的转换。(3)UML所用的语言元素基本都是图形化的,便于理解和沟通,不但开发人员之间可以所用的语言元素基本都是图形化的,便于理解和沟通,不但开发人员之间可以用来交流,客户和开发人员之间也可以用它作为交流的工具。用来交流,客户和开发人员之间也可以用它作为交流的工具。(4)UML可应用于任何软件开发过程、任何语言和工具平台,它支持可应用于任何软件开发过程、任何语言和工具平台,它支持OOP中出现的高级概中出现的高级概念(如模板、线程、协作、框架、模式和组件等),并强调在软件开发中对架构、框架、模式念(如模板、

129、线程、协作、框架、模式和组件等),并强调在软件开发中对架构、框架、模式和组件等的重用。和组件等的重用。(5)UML概念明确,建模表示方法简洁明了,图形结构清晰,所以易于掌握和使用。概念明确,建模表示方法简洁明了,图形结构清晰,所以易于掌握和使用。6.2.1 UML概述概述146目录页6.2统一建模语言(UML)第6章3UML的应用领域的应用领域UML的主要目标是,以面向对象图的方式描述任何类型的系统,最常用于建立软件系统的的主要目标是,以面向对象图的方式描述任何类型的系统,最常用于建立软件系统的模型,也可以描述非软件领域的系统,如机械系统、企业机构、业务过程或信息系统等。模型,也可以描述非软件

130、领域的系统,如机械系统、企业机构、业务过程或信息系统等。UML可对任何具有静态结构和动态行为的系统进行建模。可对任何具有静态结构和动态行为的系统进行建模。此外,此外,UML适用于系统开发的不同阶段。适用于系统开发的不同阶段。(1)用户需求分析阶段:)用户需求分析阶段:(2)系统分析阶段:)系统分析阶段:(3)设计阶段:)设计阶段:(4)编程)编程(构造构造)阶段:阶段:(5)测试阶段:)测试阶段:6.2.1 UML概述概述147目录页6.2统一建模语言(UML)第6章1.UML的组成的组成 UMLUML由基本构造块、规则和公用机制三部分组成。由基本构造块、规则和公用机制三部分组成。 基本构造块

131、描述从领域问题、系统职责到未来系统中的事物和行为;基本构造块描述从领域问题、系统职责到未来系统中的事物和行为; 规则规定了这些构造块如何有机组成合法规则规定了这些构造块如何有机组成合法UMLUML的规则(如的规则(如UMLUML成员的名字、作用域和可成员的名字、作用域和可见性等);见性等); 公用机制是用于对不同公用机制是用于对不同UMLUML成员使用的共同的描绘方式(如规范说明、修饰、公共划分成员使用的共同的描绘方式(如规范说明、修饰、公共划分和扩展机制等)。和扩展机制等)。 UML UML的基本构造块包括三部分:事物(的基本构造块包括三部分:事物(ThingsThings)、关系()、关系

132、(RelationshipsRelationships)和图)和图(DiagramsDiagrams)。其中,事物是模型中最具有代表性的成分的抽象,是模型中的基本成员;关系)。其中,事物是模型中最具有代表性的成分的抽象,是模型中的基本成员;关系是将事物联系在一起的方式;图是很多有相互关系的事物的组。是将事物联系在一起的方式;图是很多有相互关系的事物的组。 UML UML的基本构造块如图的基本构造块如图6.26.2所示。所示。 6.2.2 UML的主要内容的主要内容148目录页6.2统一建模语言(UML)第6章6.2.2 UML的主要内容的主要内容图6-2 UML的基本构造块 149目录页6.2

133、统一建模语言(UML)第6章2.UML的事物的事物UML中的事物包含结构事物、行为事物、分组事物(或称组织事物)和注释事物(或称辅中的事物包含结构事物、行为事物、分组事物(或称组织事物)和注释事物(或称辅助事物)四种。助事物)四种。(1)结构事物)结构事物结构事物是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的结构事物是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的元素。共有七种。元素。共有七种。类类(Class)接口接口(Interface)协作协作(Collaboration)用例用例(Use Case)活动类活动类(Active Class)组

134、件组件(Component)节点节点(Node)6.2.2 UML的主要内容的主要内容150目录页6.2统一建模语言(UML)第6章(2)行为事物)行为事物交互交互(Interaction)是由一组对象之间在特定上下文中,为达到特定的目的而进行的一是由一组对象之间在特定上下文中,为达到特定的目的而进行的一系列消息交换而组成的动作。系列消息交换而组成的动作。状态机状态机(State Machine)由一系列对象的状态组成。由一系列对象的状态组成。(3)分组事物)分组事物分组事物是包分组事物是包(Package)可以把一个分组事物看作是一个可以把一个分组事物看作是一个“盒子盒子”,即包。结构事物、

135、,即包。结构事物、行为事物甚至其他分组事物都可以放进包内。包不像组件,组件只在运行时存在,包纯粹是概行为事物甚至其他分组事物都可以放进包内。包不像组件,组件只在运行时存在,包纯粹是概念上的,只在开发阶段存在。念上的,只在开发阶段存在。 (4)注释事物)注释事物注释事物是注释事物是UML模型的解释部分。模型的解释部分。6.2.2 UML的主要内容的主要内容151目录页6.2统一建模语言(UML)第6章6.2.2 UML的主要内容的主要内容152目录页6.2统一建模语言(UML)第6章3.UML的关系的关系常见的关系有关联、依赖、泛化、实现等常见的关系有关联、依赖、泛化、实现等4种,还有聚集(聚合

136、)和组合(复合)等关系。种,还有聚集(聚合)和组合(复合)等关系。(1)关联)关联表示一事物(如对象)通常要和其他事物(如对象)发生关联。表示一事物(如对象)通常要和其他事物(如对象)发生关联。(2)泛化)泛化表示一般与特殊的关系。如一个子类继承了其他更一般类的属性和操作。表示一般与特殊的关系。如一个子类继承了其他更一般类的属性和操作。(3)依赖)依赖表示一个事物以某种方式依赖于另一种事物。如一个类使用了另一个类。表示一个事物以某种方式依赖于另一种事物。如一个类使用了另一个类。(4)实现)实现表示类和接口之间的关系。表示类和接口之间的关系。(5)聚集)聚集是关联的一种,通常聚集对象由部分对象组

137、成。也就是整体与部分关联。是关联的一种,通常聚集对象由部分对象组成。也就是整体与部分关联。(6)组合)组合是一种特殊的聚集关系。在一个组合对象中,部分对象只能作为组合对象的是一种特殊的聚集关系。在一个组合对象中,部分对象只能作为组合对象的一部分与组合对象同时存在。一部分与组合对象同时存在。6.2.2 UML的主要内容的主要内容153目录页6.2统一建模语言(UML)第6章4.UML的图的图UML中的图与视图是有区别的。视图由多个图构成,从不同的目的或角度描述系统。图由中的图与视图是有区别的。视图由多个图构成,从不同的目的或角度描述系统。图由各种图片(模型元素符号)构成,用来描述视图的一个内容。

138、各种图片(模型元素符号)构成,用来描述视图的一个内容。UML中的图可以分为静态图和动态图两大类,也可以细分为用例图、静态图、交互图、行中的图可以分为静态图和动态图两大类,也可以细分为用例图、静态图、交互图、行为图和实现图五类、共十种图。其中:为图和实现图五类、共十种图。其中:用例图(用例图(Use Case Diagram)表示系统实现的功能;)表示系统实现的功能;静态图(静态图(Static Diagram)表示系统的静态结构;)表示系统的静态结构;交互图(交互图(Interactive Diagram)描述系统的对象之间的动态合作关系;)描述系统的对象之间的动态合作关系;行为图(行为图(B

139、ehavior Diagram)描述系统的动态行为和对象之间的交互关系;)描述系统的动态行为和对象之间的交互关系;实现图(实现图(Interactive Diagram)描述系统的物理实现。)描述系统的物理实现。6.2.2 UML的主要内容的主要内容154目录页6.2统一建模语言(UML)第6章1.用例图(用例图(Use Case Diagram)用例图描述外部参与者所理解的系统功能,它表示系统从外部想要实现的行为,而不关心用例图描述外部参与者所理解的系统功能,它表示系统从外部想要实现的行为,而不关心这些行为怎样具体实现。用例图用于需求分析阶段。用例图描述了一组用例、参与者以及它们这些行为怎样

140、具体实现。用例图用于需求分析阶段。用例图描述了一组用例、参与者以及它们之间的关系,用例图包括以下三方面内容:之间的关系,用例图包括以下三方面内容:(1)用例()用例(Use Case)。用例是系统的使用过程或要执行的动作序列,用来描述某个参与)。用例是系统的使用过程或要执行的动作序列,用来描述某个参与者使用系统所完成的功能。在图中用椭圆来表示。者使用系统所完成的功能。在图中用椭圆来表示。(2)参与者()参与者(Actor)。即角色,它是系统外部的一个实体(可以是任何的事物或人所扮)。即角色,它是系统外部的一个实体(可以是任何的事物或人所扮演的角色等)。在图中用一个小人图形表示。演的角色等)。在

141、图中用一个小人图形表示。(3)关联。表示角色与用例之间的驱动和反馈关系,也可以表示用例间的包含与扩展关)关联。表示角色与用例之间的驱动和反馈关系,也可以表示用例间的包含与扩展关系。在图中用线段或带箭头的线段表示。系。在图中用线段或带箭头的线段表示。6.2.3 静态建模静态建模 155目录页6.2统一建模语言(UML)第6章图图6-4和图和图6-5是用例图的示例。是用例图的示例。6.2.3 静态建模静态建模 图6-4 借还书用例图图6-5 图书管理系统中用例的包含与扩展关系156目录页6.2统一建模语言(UML)第6章2类图类图(Class Diagram)(1)类的表示)类的表示 类用如右图所

142、示的符号表示。类用如右图所示的符号表示。类图中有三部分,分别是类名、属性、操作。类图中有三部分,分别是类名、属性、操作。(2)类中属性和方法的可见性)类中属性和方法的可见性可见性指类中的属性和方法对类以外的元素是否可见。可见性有公有(可见性指类中的属性和方法对类以外的元素是否可见。可见性有公有(Public)、私有)、私有(Private)和受保护()和受保护(Protected)三种类型,分别用)三种类型,分别用“+、-、#”表示。表示。(3)类之间的关系)类之间的关系类之间的关系主要有关联、泛化(继承)、依赖和复合聚合、实现(细化)关系等,其中类之间的关系主要有关联、泛化(继承)、依赖和复

143、合聚合、实现(细化)关系等,其中关联又可以分为普通关联、角色关联、类关联、限制关联、多重关联等。关联又可以分为普通关联、角色关联、类关联、限制关联、多重关联等。6.2.3 静态建模静态建模 157目录页6.2统一建模语言(UML)第6章(4)类图的层次)类图的层次建立一个系统的类图,需要从系统的各个用例中识别类、类的属性和操作,并经过分析、建立一个系统的类图,需要从系统的各个用例中识别类、类的属性和操作,并经过分析、抽象后才能得到。一个系统可以有多个类图,单个类图仅表达了系统的一个方面,要在高层给抽象后才能得到。一个系统可以有多个类图,单个类图仅表达了系统的一个方面,要在高层给出类的主要职责,

144、在低层给出类的属性和操作。类图没有时间概念,可以说是概念数据模型出类的主要职责,在低层给出类的属性和操作。类图没有时间概念,可以说是概念数据模型(如(如E-R 图)的一种延伸,它不仅显示信息的结构,同时还描述系统的行为。类图可划分为以下图)的一种延伸,它不仅显示信息的结构,同时还描述系统的行为。类图可划分为以下三个层次。三个层次。概念层:在需求分析阶段使用概念层类图描述应用领域中的概念。概念层:在需求分析阶段使用概念层类图描述应用领域中的概念。说明层:在设计阶段使用说明层类图描述软件中类和类的接口部分,而不是描述软件的实说明层:在设计阶段使用说明层类图描述软件中类和类的接口部分,而不是描述软件

145、的实现部分。现部分。实现层:在实现阶段使用实现层类图描述软件系统中类的实现。实现层:在实现阶段使用实现层类图描述软件系统中类的实现。6.2.3 静态建模静态建模 158目录页6.2统一建模语言(UML)第6章3.对象图对象图(Object Diagram)对象图展示了一组对象和它们之间的关系。对象图是类图的实例,对象之间的连接是类之对象图展示了一组对象和它们之间的关系。对象图是类图的实例,对象之间的连接是类之间关联的实例。在间关联的实例。在UML中,对象图和类图一样采用矩形图表示,不过对象名称下方有下划线中,对象图和类图一样采用矩形图表示,不过对象名称下方有下划线(类名称下方没有下划线),通常

146、对象名采用:对象名:类名、:类名或对象名三种格式表示,(类名称下方没有下划线),通常对象名采用:对象名:类名、:类名或对象名三种格式表示,中间形式是尚未给对象命名,最后一种形式是省略了类名。图中间形式是尚未给对象命名,最后一种形式是省略了类名。图6-15就是对象图的一个例子。就是对象图的一个例子。6.2.3 静态建模静态建模 图图6-15 对象图对象图159目录页6.2统一建模语言(UML)第6章4.包图(包图(Package Diagrams)当在分析设计一个大型系统时,往往会出现上百个甚至更多的类,这样理解和修改该系统当在分析设计一个大型系统时,往往会出现上百个甚至更多的类,这样理解和修改

147、该系统就变得非常困难。如何有效地管理这些类,是分析人员首要解决的重要问题,其基本做法是将就变得非常困难。如何有效地管理这些类,是分析人员首要解决的重要问题,其基本做法是将许多类组合成一个更高层次的单位,形成高内聚、低耦合的类的集合,这种对元素进行分组的许多类组合成一个更高层次的单位,形成高内聚、低耦合的类的集合,这种对元素进行分组的通用机制在通用机制在UML中称为包。广义地讲,包的元素包括类、接口、组件、节点、协作、用例等,中称为包。广义地讲,包的元素包括类、接口、组件、节点、协作、用例等,还可以包括内嵌的其他子包,引入包可以降低系统的复杂性。还可以包括内嵌的其他子包,引入包可以降低系统的复杂

148、性。包图是具有一些共性的类组合在一起的图,它由包与包之间的联系构成,是维护和控制系包图是具有一些共性的类组合在一起的图,它由包与包之间的联系构成,是维护和控制系统总体结构的重要建模工具。统总体结构的重要建模工具。构成包的模型元素称为包的内容,通常我们可以把一个系统划分为不同的主题层或子系统,构成包的模型元素称为包的内容,通常我们可以把一个系统划分为不同的主题层或子系统,属于同一个主题层的元素放在一个包中,主题层之间的依赖关系表现为包的依赖关系。属于同一个主题层的元素放在一个包中,主题层之间的依赖关系表现为包的依赖关系。6.2.3 静态建模静态建模 160目录页6.2统一建模语言(UML)第6章

149、5.组件图(组件图(Component Diagram)组件图也称构件图,用于显示软件组件及它们之间的依赖关系。利用组件图可以对系统的组件图也称构件图,用于显示软件组件及它们之间的依赖关系。利用组件图可以对系统的静态实现视图建模。组件图用来表现编译、连接或执行时组件之间的依赖关系,用来反映代码静态实现视图建模。组件图用来表现编译、连接或执行时组件之间的依赖关系,用来反映代码的物理结构。的物理结构。组件(组件(Component)是定义了良好接口的物理实现单元,是系统中可替换的物理部件。一)是定义了良好接口的物理实现单元,是系统中可替换的物理部件。一般来说,软件组件就是一个实际文件,可以是源代码

150、、二进制文件或可执行文件等。般来说,软件组件就是一个实际文件,可以是源代码、二进制文件或可执行文件等。组件图中通常包含三个元素:组件、接口(组件图中通常包含三个元素:组件、接口(Interface)和依赖关系()和依赖关系(Dependency)。组件)。组件用一个左边带有两个小矩形的矩形符号表示,组件名放在大矩形内;组件可以通过其他组件的用一个左边带有两个小矩形的矩形符号表示,组件名放在大矩形内;组件可以通过其他组件的接口来使用其他组件中定义的操作,组件中的接口用一个小圆圈表示;组件之间的依赖关系用接口来使用其他组件中定义的操作,组件中的接口用一个小圆圈表示;组件之间的依赖关系用带箭头的虚线

151、表示。带箭头的虚线表示。 6.2.3 静态建模静态建模 161目录页6.2统一建模语言(UML)第6章6.配置图配置图(Deployment Diagram)配置图也称为部署图,用来描述系统中硬件和软件的物理架构。比如系统中包括的计算机配置图也称为部署图,用来描述系统中硬件和软件的物理架构。比如系统中包括的计算机和其他硬件设备,它们的位置以及它们是如何进行相互连接的,系统的程序和进程在哪一台计和其他硬件设备,它们的位置以及它们是如何进行相互连接的,系统的程序和进程在哪一台计算机上运行等。算机上运行等。在在UML中,配置图中通常包含三个元素:节点(中,配置图中通常包含三个元素:节点(Node)、

152、组件和连接(关系)。)、组件和连接(关系)。 其中,节点代表一个物理设备或者是一个运行在其上的软件系统。在实际的建模过程中,其中,节点代表一个物理设备或者是一个运行在其上的软件系统。在实际的建模过程中,可以把节点分为处理器和设备两种类型。可以把节点分为处理器和设备两种类型。6.2.3 静态建模静态建模 162目录页6.2统一建模语言(UML)第6章1.时序图(时序图(Sequence Diagram)时序图(也称顺序图)和协作图都是用来描述一组对象和它们之间如何进行消息传递的。时序图(也称顺序图)和协作图都是用来描述一组对象和它们之间如何进行消息传递的。其中时序图强调消息传递的时间顺序,而协作

153、图强调对象之间的交互关系。其中时序图强调消息传递的时间顺序,而协作图强调对象之间的交互关系。时序图描述按时间的先后顺序对象之间的交互动作过程。时序图由对象和消息等图符组成。时序图描述按时间的先后顺序对象之间的交互动作过程。时序图由对象和消息等图符组成。图书管理系统中的借书时序图中图图书管理系统中的借书时序图中图6.20所示所示。6.2.4 动态建模动态建模 163目录页6.2统一建模语言(UML)第6章1.时序图(时序图(Sequence Diagram)6.2.4 动态建模动态建模 图图6.20 图书管理系统中的借书时序图图书管理系统中的借书时序图164目录页6.2统一建模语言(UML)第6

154、章2.协作图协作图(Collaboration Diagram)协作图又称合作图,它和时序图一样,也是用于描述对象间的交互关系,但侧重点不同。协作图又称合作图,它和时序图一样,也是用于描述对象间的交互关系,但侧重点不同。时序图着重体现交互的时间顺序,而协作图着重体现交互对象间的静态连接关系,侧重说明哪时序图着重体现交互的时间顺序,而协作图着重体现交互对象间的静态连接关系,侧重说明哪些对象之间有消息传递。些对象之间有消息传递。在协作图中,需要从消息上所附编号获得交互时间次序。在在协作图中,需要从消息上所附编号获得交互时间次序。在UML中时序图和协作图的语义中时序图和协作图的语义是等价的,它们都是

155、交互图,可以相互转换,而不丢失任何信息,在是等价的,它们都是交互图,可以相互转换,而不丢失任何信息,在Rose建模工具中的操作方建模工具中的操作方法是按一下功能键法是按一下功能键F5,然后协调布置好各个对象及它们之间的交互关系即可。,然后协调布置好各个对象及它们之间的交互关系即可。6.2.4 动态建模动态建模 165目录页6.2统一建模语言(UML)第6章图书管理系统借书协作图如图图书管理系统借书协作图如图6-21所示。所示。6.2.4 动态建模动态建模 图6.21 图书管理系统借书协作图166目录页6.2统一建模语言(UML)第6章3状态图状态图(Statechart Diagram) 状态

156、图和活动图都属于行为图,主要用于分析、设计阶段描述对象的行为。状态图适于描状态图和活动图都属于行为图,主要用于分析、设计阶段描述对象的行为。状态图适于描述单个对象状态的变化情况,活动图适于描述一个工作过程、多个对象之间的合作。述单个对象状态的变化情况,活动图适于描述一个工作过程、多个对象之间的合作。状态图描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。状态图描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。其中状态是对象执行了一系列活动的结果。对象在事件的触发下,从一个状态变成另一个其中状态是对象执行了一系列活动的结果。对象在事件的触发下,从一

157、个状态变成另一个状态。状态。状态图有初态、终态和中间态三种状态。一个状态图只能有一个初态,而终态和中间态可状态图有初态、终态和中间态三种状态。一个状态图只能有一个初态,而终态和中间态可以有多个。以有多个。 在在UML中,初始状态用一个小的实心圆表示,最终状态用一个内部实心的两个同心圆表示,中,初始状态用一个小的实心圆表示,最终状态用一个内部实心的两个同心圆表示,中间状态用圆角矩形表示。中间状态用圆角矩形表示。6.2.4 动态建模动态建模 167目录页6.2统一建模语言(UML)第6章图书管理系统中图书的状态图如图图书管理系统中图书的状态图如图6-24所示。所示。6.2.4 动态建模动态建模 图

158、6.24 图书管理系统中图书的状态图168目录页6.2统一建模语言(UML)第6章4. 活动图活动图图书管理系统中图书管理员借还书活动图如图图书管理系统中图书管理员借还书活动图如图6-26所示。所示。6.2.4 动态建模动态建模 图6.26 图书管理员借还书活动图169目录页6.3RationalRose简介第6章6.3.1 Rational Rose的安装的安装170目录页6.3RationalRose简介第6章6.3.1 Rational Rose的安装的安装171目录页6.3RationalRose简介第6章6.3.1 Rational Rose的安装的安装172目录页6.3Ration

159、alRose简介第6章6.3.2 Rational Rose的启动的启动173目录页6.3RationalRose简介第6章6.3.3 Rational Rose的配置的配置 单击菜单栏中的单击菜单栏中的【Tools】|【Options】菜单项,可打开全局设置对话框,从而对菜单项,可打开全局设置对话框,从而对Rose进行进行设置。设置。(1)常规配置)常规配置在在Rose全局设置对话框中选择全局设置对话框中选择【General】选项卡,可以完成默认字体、默认颜色、布局等选项卡,可以完成默认字体、默认颜色、布局等常规选项设置。常规选项设置。注意,在建立模型前一定要事先设置好对象的字体、颜色等属性

160、,建模后再设置将不会有注意,在建立模型前一定要事先设置好对象的字体、颜色等属性,建模后再设置将不会有效。效。(2)其他配置)其他配置在在【Options】菜单中还可以完成改变图形元素、浏览器和对应语言等其他设置。菜单中还可以完成改变图形元素、浏览器和对应语言等其他设置。有关有关Rose更多的操作与应用知识请参照相关资料。更多的操作与应用知识请参照相关资料。174目录页6.3RationalRose简介第6章6.3.4 Rational Rose建模的基本过程建模的基本过程 (1)创建模型创建模型单击菜单栏中单击菜单栏中【File】|【New】菜单项,或者单击标准工具栏中的菜单项,或者单击标准工

161、具栏中的【Create New Model or File】按钮;弹出按钮;弹出“Create New Model”对话框,选择要使用的模板。如果暂时不需要任何模板,对话框,选择要使用的模板。如果暂时不需要任何模板,单击单击【Cancel】按钮。根据需要建立用户视图、逻辑视图、组件视图和部署视图。按钮。根据需要建立用户视图、逻辑视图、组件视图和部署视图。Rose所创建的模型文件的扩展名为所创建的模型文件的扩展名为.mdl。(2)保存模型保存模型单击菜单栏中单击菜单栏中【File】|【Save】选项,或者单击标准工具栏中的选项,或者单击标准工具栏中的【Save Model,File,or Scr

162、ipt】按钮。按钮。175目录页6.3RationalRose简介第6章6.3.4 Rational Rose建模的基本过程建模的基本过程 (3)发布模型发布模型单击菜单栏中的单击菜单栏中的【Tools】|【Web Publisher.】菜单项,弹出如图菜单项,弹出如图6-28所示所示对话框,在图中选择要发布到对话框,在图中选择要发布到Web页面上页面上的内容和的内容和HTML页面要保存的位置,单击页面要保存的位置,单击【Publish】按钮,按钮,Rose模型就发布到模型就发布到Web页面上,打开所保存的页面上,打开所保存的.html文件,文件,就可以看到就可以看到Rose模型,模型,176

163、目录页6.3RationalRose简介第6章6.3.4 Rational Rose建模的基本过程建模的基本过程 177目录页6.3RationalRose简介第6章6.3.4 Rational Rose建模的基本过程建模的基本过程 2.Rose建模的具体操作建模的具体操作下面介绍利用下面介绍利用Rose绘制用例图的具体操作方法:绘制用例图的具体操作方法:(1)启动)启动Rational Rose 2007后,单击后,单击【File】|【New】|在弹出的对话框中选择在弹出的对话框中选择【Cancel】命令,新建一个模型(默认名称是命令,新建一个模型(默认名称是untitled)。)。(2)在

164、左侧浏览器区域用鼠标右键单击用例视图()在左侧浏览器区域用鼠标右键单击用例视图(Use Case View)文件夹节点,然后选)文件夹节点,然后选择择【New】菜单菜单|【Use Case Diagram】选项,新建一个用例图,可根据需要重新命名用例图名称选项,新建一个用例图,可根据需要重新命名用例图名称如如book,如图,如图6-30所示。所示。(3)双击刚才建立的用例(如)双击刚才建立的用例(如book),然后利用),然后利用Rose界面中间的工具栏中的工具绘制用界面中间的工具栏中的工具绘制用例图。将鼠标左键指向工具栏中和图标会显示其信息。用例图中主要有角色(例图。将鼠标左键指向工具栏中和

165、图标会显示其信息。用例图中主要有角色(Actor)、用例)、用例(Use Case)等图符工具。)等图符工具。178目录页6.3RationalRose简介第6章6.3.4 Rational Rose建模的基本过程建模的基本过程 179目录页面向对象的分析与设计第7章本章本章要点要点n理解面向对象分析的主要任务和一般过程;n初步掌握对象模型的建立方法;n了解动态模型和功能模型的建立方法;n理解面向对象设计的基本模型及主要内容。180目录页面向对象的分析与设计第7章项目项目任务任务n学会利用面向对象思想对图书管理系统进行需求分析;n了解利用面向对象思想对图书管理系统进行软件设计的内容和过程。18

166、1目录页7.1面向对象分析第7章面向对象分析(面向对象分析(Object Oriented Analysis,OOA)是软件开发过程中的问题定义和需求分析)是软件开发过程中的问题定义和需求分析阶段,这一阶段最后得到的是对问题领域的清晰、精确的定义。阶段,这一阶段最后得到的是对问题领域的清晰、精确的定义。OOA的目标是完成对所需求解的目标是完成对所需求解问题的分析,确定目标系统所要做的工作,定义所有与待解决问题相关的类,并建立系统的模问题的分析,确定目标系统所要做的工作,定义所有与待解决问题相关的类,并建立系统的模型。型。OOA的核心思想是利用面向对象的概念和方法为软件需求建造模型,以使用户需求

167、逐步精的核心思想是利用面向对象的概念和方法为软件需求建造模型,以使用户需求逐步精确化、一致化、完全化。为了达到这一目标,必须完成以下任务:确化、一致化、完全化。为了达到这一目标,必须完成以下任务:(1)与用户进行充分沟通,全面理解和分析用户需求,明确所开发的软件系统的职责,)与用户进行充分沟通,全面理解和分析用户需求,明确所开发的软件系统的职责,形成文件并规范地加以表述;形成文件并规范地加以表述;(2)识别解决问题的对象集合及对象间的关系;)识别解决问题的对象集合及对象间的关系;(3)定义类(包括定义其属性和操作)并建立类间的层次关系;)定义类(包括定义其属性和操作)并建立类间的层次关系;(4

168、)通过建立模型来表示对象之间的关系及行为特性。)通过建立模型来表示对象之间的关系及行为特性。7.1.1 面向对象分析的目标和任务面向对象分析的目标和任务182目录页7.1面向对象分析第7章7.1.2 面向对象分析的过程面向对象分析的过程183目录页7.1面向对象分析第7章1.分析需求文档分析需求文档系统分析通常是从一个需求文档系统分析通常是从一个需求文档(或称需求陈述或称需求陈述)和用户一系列的讨论开始的。大多数需和用户一系列的讨论开始的。大多数需求陈述都是有二义性的、不完整的甚至不一致的。通过分析可以发现和改正需求文档中的歧求陈述都是有二义性的、不完整的甚至不一致的。通过分析可以发现和改正需

169、求文档中的歧义性、不一致性,剔除冗余的内容,挖掘潜在的内容,弥补不足,从而使需求文档更完整、义性、不一致性,剔除冗余的内容,挖掘潜在的内容,弥补不足,从而使需求文档更完整、更准确。分析过程中,系统分析员除了要反复多次地与用户讨论沟通外,还应调研、观察和更准确。分析过程中,系统分析员除了要反复多次地与用户讨论沟通外,还应调研、观察和了解现有的类似系统,从而快速地建立一个原型系统,通过在计算机上运行原型系统,使得了解现有的类似系统,从而快速地建立一个原型系统,通过在计算机上运行原型系统,使得分析员和用户尽快交流和相互理解,从而能更正确地、更完整地提取和确定用户的需求。分析员和用户尽快交流和相互理解

170、,从而能更正确地、更完整地提取和确定用户的需求。7.1.2 面向对象分析的过程面向对象分析的过程184目录页7.1面向对象分析第7章2.需求建模需求建模系统分析员根据所提取的用户需求,深入地理解用户需求,识别出问题域内的对象,并系统分析员根据所提取的用户需求,深入地理解用户需求,识别出问题域内的对象,并分析它们之间相互的关系,抽象出目标系统应该完成的任务,并用分析它们之间相互的关系,抽象出目标系统应该完成的任务,并用OOA模型准确地表示出来,模型准确地表示出来,即用面向对象观点建立对象模型、动态模型和功能模型。即用面向对象观点建立对象模型、动态模型和功能模型。OOA模型是模型是OOD的基础,它

171、应该准确、的基础,它应该准确、简洁地表示问题。通过建立模型,可以避免理解上的片面性,提高目标系统的正确性和可靠简洁地表示问题。通过建立模型,可以避免理解上的片面性,提高目标系统的正确性和可靠性,在此基础上,编写出面向对象的需求规格说明书。性,在此基础上,编写出面向对象的需求规格说明书。3.需求评审需求评审需求规格说明文档经用户、领域专家、系统分析员和系统设计人员以及其他有关人员评需求规格说明文档经用户、领域专家、系统分析员和系统设计人员以及其他有关人员评审、并进行反复修改后形成定稿,该文档将成为面向对象设计的依据。审、并进行反复修改后形成定稿,该文档将成为面向对象设计的依据。7.1.2 面向对

172、象分析的过程面向对象分析的过程185目录页7.1面向对象分析第7章面向对象建模是面向对象建模是OOA的关键。的关键。OOA的模型要表示出系统的数据、功能和行为三方面的基的模型要表示出系统的数据、功能和行为三方面的基本特征,因此通常需要建立三种模型,分别是对象模型、动态模型和功能模型。其中:本特征,因此通常需要建立三种模型,分别是对象模型、动态模型和功能模型。其中:(1)对象模型描述系统的数据结构,它是用来描述系统包含的对象及对象之间关系的模)对象模型描述系统的数据结构,它是用来描述系统包含的对象及对象之间关系的模型;型;(2)动态模型描述系统的控制结构,它是用来确定各个对象之间交互及整体的控制

173、结构)动态模型描述系统的控制结构,它是用来确定各个对象之间交互及整体的控制结构的模型;的模型;(3)功能模型描述系统的功能,它是用来描述系统要实现的功能的模型。)功能模型描述系统的功能,它是用来描述系统要实现的功能的模型。7.1.3 面向对象分析的三种模型面向对象分析的三种模型186目录页7.1面向对象分析第7章1.对象模型的五个层次对象模型的五个层次复杂问题复杂问题(大型系统大型系统)的对象模型由五个层次组成,即主题层、类对象层、结构层、属的对象模型由五个层次组成,即主题层、类对象层、结构层、属性层和服务层,如图性层和服务层,如图7-3所示。所示。 7.1.4 对象模型的层次对象模型的层次1

174、87目录页7.1面向对象分析第7章2.OOA的五项活动的五项活动OOA对象模型的五个层次对应着对象模型的五个层次对应着OOA过程中建立对象模型的五项活动。这五项活动是:过程中建立对象模型的五项活动。这五项活动是:确定类对象、识别结构、识别主题、定义属性、定义服务。确定类对象、识别结构、识别主题、定义属性、定义服务。需要说明的是,这五项工作完全没有必要顺序完成,也无需在彻底完成一项工作以后再需要说明的是,这五项工作完全没有必要顺序完成,也无需在彻底完成一项工作以后再开始另外一项工作,在分析过程中并不需要严格遵循自顶向下,逐步求精的原则。五项活动开始另外一项工作,在分析过程中并不需要严格遵循自顶向

175、下,逐步求精的原则。五项活动可以同时可以同时(并行并行)处理,也可以从较高抽象层转移到较低的具体层,然后再返回到较高抽象层继处理,也可以从较高抽象层转移到较低的具体层,然后再返回到较高抽象层继续处理。例如,当系统分析员在确定类对象时,想到了该类应该包含的一个服务,于是把续处理。例如,当系统分析员在确定类对象时,想到了该类应该包含的一个服务,于是把这个服务的名字写在服务层,然后又返回到类对象层,继续寻找另外的类对象。这个服务的名字写在服务层,然后又返回到类对象层,继续寻找另外的类对象。 7.1.4 对象模型的层次对象模型的层次188目录页7.1面向对象分析第7章3.OOA的主要流程的主要流程面向

176、对象分析大体上按照如图面向对象分析大体上按照如图7-4所示的顺序进行。所示的顺序进行。7.1.4 对象模型的层次对象模型的层次189目录页7.2建立对象模型第7章OOA的核心是确定问题域中相关的对象,找出这些对象是个重要而复杂的过程。一般采的核心是确定问题域中相关的对象,找出这些对象是个重要而复杂的过程。一般采用基于词汇分析的方法:从目标系统的描述开始,找出其中的名词作为候选对象类,此外,用基于词汇分析的方法:从目标系统的描述开始,找出其中的名词作为候选对象类,此外,还可找出其中的动词作为候选方法(即后面要介绍的服务),然后产生一个由对象(名词)还可找出其中的动词作为候选方法(即后面要介绍的服

177、务),然后产生一个由对象(名词)和方法(动词)构成的表格,作为词汇分析的初步结果,最后从中选出确定的真正的对象类。和方法(动词)构成的表格,作为词汇分析的初步结果,最后从中选出确定的真正的对象类。如图如图7-5所示。所示。7.2.1 确定对象和类确定对象和类190目录页7.2建立对象模型第7章采用系统词汇法确定对象类,并进行建模的具体做法如下:采用系统词汇法确定对象类,并进行建模的具体做法如下:(1)确定对象类)确定对象类(2)准备数据词典)准备数据词典(3)确定关联)确定关联(4)确定属性)确定属性(5)使用继承来细化对象类)使用继承来细化对象类(6)完善对象模型)完善对象模型7.2.1 确

178、定对象和类确定对象和类191目录页7.2建立对象模型第7章主题是一种关于模型的抽象机制,起一种控制作用。引入主题有助于分解大型项目以便主题是一种关于模型的抽象机制,起一种控制作用。引入主题有助于分解大型项目以便成立工作小组来承担不同的主题任务。主题有两种表示形式,如图成立工作小组来承担不同的主题任务。主题有两种表示形式,如图7-6所示。所示。7.2.3 确定主题确定主题 图7-6 主题的两种表示192目录页7.2建立对象模型第7章所谓服务是在接收到一条消息后所要进行的加工。定义服务时,首先定义行为,然后定所谓服务是在接收到一条消息后所要进行的加工。定义服务时,首先定义行为,然后定义实例的通信。

179、值得说明的是,确定服务和消息,只有在建立了动态模型和功能模型之后,义实例的通信。值得说明的是,确定服务和消息,只有在建立了动态模型和功能模型之后,才可能最后确定对象类的服务。本教材为保持案例的连续性,故将服务和消息在此介绍。才可能最后确定对象类的服务。本教材为保持案例的连续性,故将服务和消息在此介绍。确定一个类中的服务,主要取决于该类在问题中的实际作用以及求解过程中承担的处理确定一个类中的服务,主要取决于该类在问题中的实际作用以及求解过程中承担的处理责任,确定的原则如下:责任,确定的原则如下:(1)基本的属性操作服务。即类中应提供的访问、修改自身属性值的基本操作。这类操)基本的属性操作服务。即

180、类中应提供的访问、修改自身属性值的基本操作。这类操作属于类的内部操作,可不必在对象模型中显式表示。作属于类的内部操作,可不必在对象模型中显式表示。(2)事件的处理操作。动态模型中状态图描述了对象应接收的事件(消息),类和对象)事件的处理操作。动态模型中状态图描述了对象应接收的事件(消息),类和对象中必须提供处理相应消息的服务,这些服务用于修改对象的状态(属性值)并启动相应的服中必须提供处理相应消息的服务,这些服务用于修改对象的状态(属性值)并启动相应的服务。务。7.2.4 确定服务和消息确定服务和消息 193目录页7.2建立对象模型第7章(3)数据流图中处理框对应的操作。功能模型中的每个处理框

181、代表了系统应实现的部分)数据流图中处理框对应的操作。功能模型中的每个处理框代表了系统应实现的部分功能,而这些功能都与一个或几个对象中提供的服务相对应。因此,要仔细分析状态图和数功能,而这些功能都与一个或几个对象中提供的服务相对应。因此,要仔细分析状态图和数据流图,以便正确地确定对象应提供的服务。据流图,以便正确地确定对象应提供的服务。(4)利用继承机制优化服务集合,减少冗余服务。应尽量抽取相似的公共属性和服务,)利用继承机制优化服务集合,减少冗余服务。应尽量抽取相似的公共属性和服务,以建立这些相似类的新父类,并在类的不同层次中正确定义各个服务。以建立这些相似类的新父类,并在类的不同层次中正确定

182、义各个服务。7.2.4 确定服务和消息确定服务和消息 194目录页7.3建立动态模型第7章动态模型描述系统的动态行为,表现对象在系统运行期间不同时刻的动态交互。动态模型描述系统的动态行为,表现对象在系统运行期间不同时刻的动态交互。下列三个因素有关:下列三个因素有关:(1)状态。状态是对象在其生存周期中的某个特定阶段所具有的行为模式,它是对影响)状态。状态是对象在其生存周期中的某个特定阶段所具有的行为模式,它是对影响对象行为的属性值的一种抽象。状态规定了对象对输入事件的响应方式。对象对输入事件的对象行为的属性值的一种抽象。状态规定了对象对输入事件的响应方式。对象对输入事件的响应,既可以执行一个或

183、一系列动作,也可以是仅仅改变对象本身的状态。状态有持续性,响应,既可以执行一个或一系列动作,也可以是仅仅改变对象本身的状态。状态有持续性,占用一段时间间隔。占用一段时间间隔。(2)事件。事件是一个触发行为,是引起对象状态转换的控制信息,是引起对象从一种)事件。事件是一个触发行为,是引起对象状态转换的控制信息,是引起对象从一种状态转换到另一种状态的事情的抽象。事件没有持续的时间,是瞬间完成的。状态转换到另一种状态的事情的抽象。事件没有持续的时间,是瞬间完成的。(3)行为。行为也称服务,是指对象在某种状态下所做的一系列处理操作,行为是需要)行为。行为也称服务,是指对象在某种状态下所做的一系列处理操

184、作,行为是需要消耗时间的消耗时间的195目录页7.3建立动态模型第7章1.构建事件追踪图构建事件追踪图要建立一个事件追踪图,通常首先要编写要建立一个事件追踪图,通常首先要编写脚本。脚本是系统执行某个功能的一系列事件。脚本。脚本是系统执行某个功能的一系列事件。脚本通常起始于一个系统外部的输入事件,结束脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可以包括发生在于一个系统外部的输出事件,它可以包括发生在此期间内系统所有的内部事件。此期间内系统所有的内部事件。表7-1 使用移动手机通话的脚本196目录页7.3建立动态模型第7章图7-7 移动电话的事件追踪图197目录页7.4建

185、立功能模型第7章功能模型主要用来说明系统内部数据是如何传送和处理的,表示变化的系统的功能模型主要用来说明系统内部数据是如何传送和处理的,表示变化的系统的“功能功能”性质。功能模型描述了系统性质。功能模型描述了系统“做什么做什么”,它更直接、明确地反映了用户对目标系统的需求。,它更直接、明确地反映了用户对目标系统的需求。建立功能模型有助于软件开发人员更深入地理解整个问题域,改进和完善自己的设计。通常建立功能模型有助于软件开发人员更深入地理解整个问题域,改进和完善自己的设计。通常在建立对象模型和动态模型之后再建立功能模型。在建立对象模型和动态模型之后再建立功能模型。在在UML中,用用例图描述用例模

186、型,用例图包含系统、行为者、用例、用例之间的关系中,用用例图描述用例模型,用例图包含系统、行为者、用例、用例之间的关系等元素。其中:系统是一个提供用例的黑盒子,可用方框表示;行为者是与系统交互的角色等元素。其中:系统是一个提供用例的黑盒子,可用方框表示;行为者是与系统交互的角色或其他外部系统;用例是一个完整的功能,完成系统内部的计算及与行为者的交互,它对应或其他外部系统;用例是一个完整的功能,完成系统内部的计算及与行为者的交互,它对应于对象模型中的类所提供的服务;行为者与用例之间的关系用直线连接,表示两者之间有交于对象模型中的类所提供的服务;行为者与用例之间的关系用直线连接,表示两者之间有交换

187、信息,称为通信联系。换信息,称为通信联系。198目录页7.4建立功能模型第7章用数据流图建立功能模型的主要步骤如下:用数据流图建立功能模型的主要步骤如下:(1)确定输入和输出值;确定输入和输出值;(2)用数据流图表示功能的依赖性;用数据流图表示功能的依赖性;(3)具体描述每个功能;具体描述每个功能;(4)确定对象的约束;确定对象的约束;(5)确定功能优化的准则。确定功能优化的准则。功能模型中的数据流图往往形成一个层次结构。在这个层次结构中,一个数据流图中的功能模型中的数据流图往往形成一个层次结构。在这个层次结构中,一个数据流图中的过程(即处理)可以由下一层的数据流图作进一步说明。过程(即处理)

188、可以由下一层的数据流图作进一步说明。199目录页7.5面向对象设计第7章1.面向对象分析与面向对象设计的关系面向对象分析与面向对象设计的关系面向对象设计(面向对象设计(Object Oriented Design,OOD)是根据面向对象分析中确定的类和对象)是根据面向对象分析中确定的类和对象设计软件系统。从设计软件系统。从OOA到到OOD是一个逐步建立和扩充对象模型的过程。是一个逐步建立和扩充对象模型的过程。OOA是分析用户需求并建立问题域模型的过程,是解决系统是分析用户需求并建立问题域模型的过程,是解决系统“做什么做什么”问题的;问题的;OOD则则是根据是根据OOA得到的需求模型,建立求解域

189、模型的过程,是解决系统得到的需求模型,建立求解域模型的过程,是解决系统“怎么做怎么做”问题的。问题的。OOA主要是模拟问题域和系统任务,而主要是模拟问题域和系统任务,而OOD则是对则是对OOA的扩充,主要是增加各种组成部的扩充,主要是增加各种组成部分。具体来说,分。具体来说,OOA识别和定义类和对象。这些类和对象直接反映问题域和系统任务。而识别和定义类和对象。这些类和对象直接反映问题域和系统任务。而OOD识别和定义其他附加类和对象,它们反映需求的一种实现,当然,也可以交替进行这两识别和定义其他附加类和对象,它们反映需求的一种实现,当然,也可以交替进行这两个阶段的工作。从个阶段的工作。从OOA到

190、到OOD是一个逐渐扩充模型的过程,分析和设计活动是一个多次反复是一个逐渐扩充模型的过程,分析和设计活动是一个多次反复迭代的过程。迭代的过程。7.5.1 面向对象设计概述面向对象设计概述200目录页7.5面向对象设计第7章2.面向对象设计的基本模型面向对象设计的基本模型OOD是在是在OOA模型的基础上建立对象模型的过程,两个阶段同样是建立对象模型,但侧重模型的基础上建立对象模型的过程,两个阶段同样是建立对象模型,但侧重点不同,点不同,OOA建立问题域对象模型,而建立问题域对象模型,而OOD建立求解域的对象模型。因此建立求解域的对象模型。因此OOD模型同样也由主题、模型同样也由主题、类类&对象、结

191、构、属性和服务等五个层次组成,并且每个透明层在逻辑上都划分为四个子系统对象、结构、属性和服务等五个层次组成,并且每个透明层在逻辑上都划分为四个子系统: 问问题域子系统(题域子系统(PDC)、人机交互子)、人机交互子系统系统(HIC)、任务管理子系统、任务管理子系统(TMC)和数据和数据管理子系统管理子系统(DMC),具体面向对象设计的,具体面向对象设计的五个层次、四个组成部分构成的典型的面五个层次、四个组成部分构成的典型的面向对象设计模型如图向对象设计模型如图7-8所示。所示。7.5.1 面向对象设计概述面向对象设计概述图7-8 典型的面向对象设计模型201目录页7.5面向对象设计第7章3.面

192、向对象设计的主要工作面向对象设计的主要工作面向对象设计技术进行问题解决方案的设计工作的大致做法是,它将问题的解决方案表述面向对象设计技术进行问题解决方案的设计工作的大致做法是,它将问题的解决方案表述为:为:“类关联类关联”的形式,其中,类包括问题空间(域)类、用户界面类(即人机交互类)、任的形式,其中,类包括问题空间(域)类、用户界面类(即人机交互类)、任务管理类和数据管理类,是从设计的角度出发对问题解决方案中的对象的抽象和描述,关联则用务管理类和数据管理类,是从设计的角度出发对问题解决方案中的对象的抽象和描述,关联则用于描述这些类和类之间的关系。于描述这些类和类之间的关系。7.5.1 面向对

193、象设计概述面向对象设计概述图7-9 OOD的工作内容及步骤202目录页7.5面向对象设计第7章1面向对象设计的准则面向对象设计的准则在进行面向对象设计的过程中,应该遵循软件设计的基本原理,此外,还要考虑面向对象在进行面向对象设计的过程中,应该遵循软件设计的基本原理,此外,还要考虑面向对象的特点。面向对象设计准则主要包括模块化、抽象、信息隐藏、低耦合、高内聚和复用性几点。的特点。面向对象设计准则主要包括模块化、抽象、信息隐藏、低耦合、高内聚和复用性几点。具体内容如下:具体内容如下:(1)模块化)模块化(2)抽象)抽象(3)信息隐藏)信息隐藏(4)低耦合)低耦合(5)高内聚)高内聚(6)复用性)复

194、用性7.5.2 面向对象设计的准则和启发式规则面向对象设计的准则和启发式规则203目录页7.5面向对象设计第7章2面向对象设计的启发式规则面向对象设计的启发式规则(1)设计结果应该清晰易懂)设计结果应该清晰易懂(2)一般)一般/特殊结构的深度应适当特殊结构的深度应适当(3)设计简单的类)设计简单的类(4)使用简单的协议)使用简单的协议(5)设计简单的服务)设计简单的服务(6)最小设计变动)最小设计变动7.5.2 面向对象设计的准则和启发式规则面向对象设计的准则和启发式规则204目录页7.6系统设计第7章系统设计确定实现系统的策略和目标系统的高层结构设计。系统设计是要将系统分解为若系统设计确定实

195、现系统的策略和目标系统的高层结构设计。系统设计是要将系统分解为若干个子系统,子系统和子系统之间通过接口进行联系。系统设计的一般步骤如图干个子系统,子系统和子系统之间通过接口进行联系。系统设计的一般步骤如图7-10所示:所示:图7-10 系统设计的一般步骤205目录页7.6系统设计第7章1将系统分解为子系统将系统分解为子系统 (1)子系统之间的交互方式)子系统之间的交互方式在应用系统中,子系统之间的关系可分为客户在应用系统中,子系统之间的关系可分为客户/服务器(供应商)关系和同等伙伴(端对端)服务器(供应商)关系和同等伙伴(端对端)关系。关系。在客户在客户/服务器关系中,服务器关系中,“客户客户

196、”的子系统调用作为的子系统调用作为“服务器服务器”的子系统,的子系统,“服务器服务器”完完成某些服务工作并返回结果。每个子系统只承担一个角色,服务只是单向地从服务器流向客户端。成某些服务工作并返回结果。每个子系统只承担一个角色,服务只是单向地从服务器流向客户端。在同等伙伴关系中,每个子系统都可能调用其他子系统,因此每个子系统都必须了解其在同等伙伴关系中,每个子系统都可能调用其他子系统,因此每个子系统都必须了解其他子系统的接口,该方案比客户他子系统的接口,该方案比客户/服务器方案交互复杂,易发生设计错误。因此推荐尽量使用客服务器方案交互复杂,易发生设计错误。因此推荐尽量使用客户户/服务器关系服务

197、器关系206目录页7.6系统设计第7章(2)系统组织)系统组织通常,系统中子系统结构的组织有两种方式:水平层次组织和垂直块状组织。通常,系统中子系统结构的组织有两种方式:水平层次组织和垂直块状组织。层次组织层次组织层次组织是将子系统按层组织成为一个层次软件系统,每层是一个子系统。层次组织是将子系统按层组织成为一个层次软件系统,每层是一个子系统。块组织块组织 块组织将系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,块组织将系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务。每块提供一种类型的服务。207目录页7.6系统设计第7章

198、(3)设计系统的拓扑结构)设计系统的拓扑结构由子系统组成完整的系统时,典型的拓扑结构有管道型、树型、星型等。设计者应该采用由子系统组成完整的系统时,典型的拓扑结构有管道型、树型、星型等。设计者应该采用与问题结构相适应的、尽可能简单的拓扑结构,以减少子系统之间的交互数量。与问题结构相适应的、尽可能简单的拓扑结构,以减少子系统之间的交互数量。208目录页7.6系统设计第7章2.设计问题域类子系统设计问题域类子系统 问题域类是指那些直接从问题域类是指那些直接从OOA分析结果模型得到的类,它是让软件系统能够实现对应用问分析结果模型得到的类,它是让软件系统能够实现对应用问题求解的最基本的类,也是面向对象

199、软件系统的核心类。对问题域子系统的设计,即定义这些类题求解的最基本的类,也是面向对象软件系统的核心类。对问题域子系统的设计,即定义这些类或对象的细节。或对象的细节。虽然在虽然在OOA阶段已经标识和定义了系统的类与对象,以及它们之间的各种关系,但是随着阶段已经标识和定义了系统的类与对象,以及它们之间的各种关系,但是随着对需求理解的加深和对系统认识程度的逐步提高,开发人员还需要在对需求理解的加深和对系统认识程度的逐步提高,开发人员还需要在OOD阶段对阶段对OOA阶段得到的阶段得到的模型进行改进和增补,主要是对模型进行改进和增补,主要是对OOA模型增添、合并或分解类与对象、属性及服务,调整继承关模型

200、增添、合并或分解类与对象、属性及服务,调整继承关系等。系等。209目录页7.6系统设计第7章3.设计用户界面类子系统设计用户界面类子系统用户界面类是指那些为实现人机交互接口而设计的类,它是使软件系统能够接收用户的命用户界面类是指那些为实现人机交互接口而设计的类,它是使软件系统能够接收用户的命令,并能够为用户提供信息所需要的类,所以也叫人机交互类。该类用以确定人机交互的细节,令,并能够为用户提供信息所需要的类,所以也叫人机交互类。该类用以确定人机交互的细节,对图形用户界面(对图形用户界面(GUI),则包括指定窗口和报表的形式、设计命令层次等。),则包括指定窗口和报表的形式、设计命令层次等。尽管在

201、尽管在OOA过程中已经对用户界面方面进行了分析,但是在过程中已经对用户界面方面进行了分析,但是在OOD过程中仍需继续完成这项过程中仍需继续完成这项工作,必须具体设计确定交互作用的时间、交互的方式和交互的技术等。工作,必须具体设计确定交互作用的时间、交互的方式和交互的技术等。 210目录页7.6系统设计第7章4.设计任务管理类子系统设计任务管理类子系统 任务(任务(Task)是一个处理过程或进程,它可能包含不同类的多个操作的执行。而任务管理类)是一个处理过程或进程,它可能包含不同类的多个操作的执行。而任务管理类是指那些为实现对多操作并发执行的管理任务而设计的类,它是使软件系统能够同时处理多个并是

202、指那些为实现对多操作并发执行的管理任务而设计的类,它是使软件系统能够同时处理多个并发行为所需要的类。发行为所需要的类。当软件系统中有并发行为时,需要依据各个行为的协调和通信关系,划分各种任务,以简当软件系统中有并发行为时,需要依据各个行为的协调和通信关系,划分各种任务,以简化软件系统结构的设计及部分编码工作。设计任务管理子系统主要有以下工作:化软件系统结构的设计及部分编码工作。设计任务管理子系统主要有以下工作:(1)设计任务管理子系统)设计任务管理子系统(2)分析评审各个任务)分析评审各个任务(3)定义各个任务)定义各个任务 211目录页7.6系统设计第7章5.设计数据管理类子系统设计数据管理

203、类子系统数据管理类是指为实现对数据进行管理而设计的类,它是使软件系统能够对对象的属性值数据管理类是指为实现对数据进行管理而设计的类,它是使软件系统能够对对象的属性值进行存贮和检索所需要的类。设计数据管理类的目的是为了使得对对象属性值的管理独立于各种进行存贮和检索所需要的类。设计数据管理类的目的是为了使得对对象属性值的管理独立于各种不同的数据管理模式,包括对永久性数据的访问和管理。不同的数据管理模式,包括对永久性数据的访问和管理。数据管理子系统是系统存贮和检索对象的基本设施,它建立在某种数据存储管理模式数据管理子系统是系统存贮和检索对象的基本设施,它建立在某种数据存储管理模式(文件、文件、关系数

204、据库或面向对象数据库关系数据库或面向对象数据库)之上,而隔离了数据存储管理模式对对象存储或检索的影响。之上,而隔离了数据存储管理模式对对象存储或检索的影响。(1)选择数据存储管理模式)选择数据存储管理模式 (2)设计数据管理类的操作)设计数据管理类的操作(3)数据的存储管理)数据的存储管理212目录页7.7类&对象设计第7章OOA阶段中得到的对象模型,通常并没有描述类中的服务。阶段中得到的对象模型,通常并没有描述类中的服务。OOD阶段主要是扩充、完善和阶段主要是扩充、完善和细化对象模型的过程。类细化对象模型的过程。类&对象设计是低层设计,设计类中的服务、实现服务的算法是对象设计是低层设计,设计

205、类中的服务、实现服务的算法是OOD的重的重要任务,此外还要设计类的关联、接口形式以及进行设计的优化。要任务,此外还要设计类的关联、接口形式以及进行设计的优化。1.对象的设计描述对象的设计描述 2.设计类中的服务设计类中的服务3设计类的关联设计类的关联4.调整类的继承关系调整类的继承关系 5.优化设计优化设计 213目录页7.8项目实践:图书管理系统面向对象的分析与设计第7章图书管理系统顶层用例图如图图书管理系统顶层用例图如图7-14所示。所示。7.8.1 面向对象的分析面向对象的分析图图7-14 图书管理系统顶层用例图图书管理系统顶层用例图214目录页7.8项目实践:图书管理系统面向对象的分析

206、与设计第7章读者网上图书借阅用例图如图读者网上图书借阅用例图如图7-15所示。所示。7.8.1 面向对象的分析面向对象的分析图图7-15读者网上图书借阅用例图读者网上图书借阅用例图215目录页7.8项目实践:图书管理系统面向对象的分析与设计第7章图书管理员借还图书用例图如图图书管理员借还图书用例图如图7-16所示。所示。7.8.1 面向对象的分析面向对象的分析图图7-16图书管理员借还图书用例图图书管理员借还图书用例图 216目录页7.8项目实践:图书管理系统面向对象的分析与设计第7章系统管理员系统维护用例图如图系统管理员系统维护用例图如图7-17所示。所示。7.8.1 面向对象的分析面向对象

207、的分析图图7-17系统管理员系统维护用例图系统管理员系统维护用例图217目录页7.8项目实践:图书管理系统面向对象的分析与设计第7章读者网上图书借阅用例图如图读者网上图书借阅用例图如图7-15所示。所示。7.8.1 面向对象的分析面向对象的分析图图7-15读者网上图书借阅用例图读者网上图书借阅用例图218目录页7.8项目实践:图书管理系统面向对象的分析与设计第7章网上续借用例的活动图如图网上续借用例的活动图如图7-22所示。所示。7.8.2 面向对象的设计面向对象的设计图图7-22 网上续借用例的活动图网上续借用例的活动图219目录页7.8项目实践:图书管理系统面向对象的分析与设计第7章网上续

208、借模块的类图网上续借模块的类图如图如图7-23所示。所示。7.8.2 面向对象的设计面向对象的设计图图7-23 网上续借模块的类图网上续借模块的类图220目录页编码第八章本章本章要点要点n理解编码的目的与要求;n了解程序设计语言的发展与分类;n了解常见的程序设计语言;n了解程序设计语言的选择原则;n掌握良好的编码风格;n理解结构化程序设计方法;n了解面向对象的程序设计方法。221目录页8.1编码的目的与要求第8章编码(编码(coding)俗称编程序,其目的是使用选定的程序设计语言,把设计模型)俗称编程序,其目的是使用选定的程序设计语言,把设计模型“翻译翻译”为用该语言书写的源程序(或称源代码)

209、。源程序经过编译等环节,再为用该语言书写的源程序(或称源代码)。源程序经过编译等环节,再“转换转换”为可执行代为可执行代码。码。编码产生的源程序应该正确可靠、简明清晰,而且具有较高的效率。编码产生的源程序应该正确可靠、简明清晰,而且具有较高的效率。设计是编码的前导。程序的质量首先取决于设计的质量,但程序设计语言和编码风格也设计是编码的前导。程序的质量首先取决于设计的质量,但程序设计语言和编码风格也将对程序的可读性、可靠性、可测试性和可维护性产生重要影响。将对程序的可读性、可靠性、可测试性和可维护性产生重要影响。222目录页8.2程序设计语言第8章自自20世纪世纪60年代以来,世界上公布的程序设

210、计语言已经有上千种之多,但是只有很小一年代以来,世界上公布的程序设计语言已经有上千种之多,但是只有很小一部分得到了广泛的应用。按照软件工程的观点,语言的发展至今已经历了四代、三个阶段,部分得到了广泛的应用。按照软件工程的观点,语言的发展至今已经历了四代、三个阶段,如图如图8-1所示。所示。8.2.1 程序设计语言的发展与分类程序设计语言的发展与分类223目录页8.2程序设计语言第8章1第一代语言(机器语言)第一代语言(机器语言)自从有了计算机,就有了机器语言。机器语言由机器指令代码二进制自从有了计算机,就有了机器语言。机器语言由机器指令代码二进制0、1构成,不同构成,不同CPU的计算机有不同的

211、机器语言。用机器语言编写的程序占用内存少,执行效率高,其缺点是的计算机有不同的机器语言。用机器语言编写的程序占用内存少,执行效率高,其缺点是难编写、难修改、难于维护和移植,编程效率低。目前,这种语言已经被淘汰。难编写、难修改、难于维护和移植,编程效率低。目前,这种语言已经被淘汰。2第二代语言(汇编语言)第二代语言(汇编语言)汇编语言用助记符来代替机器语言中的二进制代码,比机器语言直观,容易理解。在执汇编语言用助记符来代替机器语言中的二进制代码,比机器语言直观,容易理解。在执行时必须由特定的翻译程序转化为机器语言才能由计算机执行。与机器语言一样,汇编语言行时必须由特定的翻译程序转化为机器语言才能

212、由计算机执行。与机器语言一样,汇编语言依赖于计算机硬件结构,也是面向机器的低级语言。其优点是易于实现系统接口,执行效率依赖于计算机硬件结构,也是面向机器的低级语言。其优点是易于实现系统接口,执行效率高。高。8.2.1 程序设计语言的发展与分类程序设计语言的发展与分类224目录页8.2程序设计语言第8章3第三代语言(高级语言)第三代语言(高级语言)高级语言是面向用户的、基本上独立于计算机种类和结构的语言。从语句结构上看,它高级语言是面向用户的、基本上独立于计算机种类和结构的语言。从语句结构上看,它比较接近人类的自然语言,所使用的运算符和运算表达式也与数学中的形式相似,因此也称比较接近人类的自然语

213、言,所使用的运算符和运算表达式也与数学中的形式相似,因此也称算法语言。和机器语言和汇编语言相比,高级语言不依赖于计算机硬件结构,易学易用、通算法语言。和机器语言和汇编语言相比,高级语言不依赖于计算机硬件结构,易学易用、通用性强、应用广泛。用性强、应用广泛。高级语言种类繁多,又可分为传统的基础语言、结构化语言和专用语言三类。高级语言种类繁多,又可分为传统的基础语言、结构化语言和专用语言三类。8.2.1 程序设计语言的发展与分类程序设计语言的发展与分类225目录页8.2程序设计语言第8章4第四代语言(简称第四代语言(简称4GL)4GL是非过程化语言,它是面向应用的语言。其主要特征有:是非过程化语言

214、,它是面向应用的语言。其主要特征有:(1)有可视化的、友好的用户界面。操作简单,使非计算机专业人员也能方便地使用它。)有可视化的、友好的用户界面。操作简单,使非计算机专业人员也能方便地使用它。(2)兼有过程性和非过程性双重特性。非过程性语言只需要告诉计算机)兼有过程性和非过程性双重特性。非过程性语言只需要告诉计算机“做什么做什么”,而不,而不必描述必描述“怎么做怎么做”,“怎么做怎么做”由计算机语言来实现。由计算机语言来实现。(3)有高效的程序代码。能缩短开发周期,并减少维护的代价。)有高效的程序代码。能缩短开发周期,并减少维护的代价。(4)有完备的数据库管理功能。)有完备的数据库管理功能。(

215、5)有应用程序生成器。提供一些常用的程序来完成文件的维护、屏幕管理、报表生成和)有应用程序生成器。提供一些常用的程序来完成文件的维护、屏幕管理、报表生成和查询等任务,从而有效地提高了软件生产率。查询等任务,从而有效地提高了软件生产率。8.2.1 程序设计语言的发展与分类程序设计语言的发展与分类226目录页8.2程序设计语言第8章1Visual Basic语言语言2.C语言语言3C+语言语言4Java语言语言5Delphi语言语言6C#语言语言8.2.2 常用程序设计语言常用程序设计语言227目录页8.2程序设计语言第8章D.A.Fisher说过:说过:“设计语言不是引起软件问题的原因,也不能用

216、它来解决软件问题。但是,设计语言不是引起软件问题的原因,也不能用它来解决软件问题。但是,由于语言在一切软件活动中所处的中心地位,它们能使现存的问题变得较易解决,或者更加严重。由于语言在一切软件活动中所处的中心地位,它们能使现存的问题变得较易解决,或者更加严重。”这段话言简意赅地揭示了语言在软件开发中的作用,因此,我们要重视在编码之前选好适当的这段话言简意赅地揭示了语言在软件开发中的作用,因此,我们要重视在编码之前选好适当的语言。语言选择合适,会使编码困难减少,程序测试量减少,并且可以得到易读、易维护的软件。语言。语言选择合适,会使编码困难减少,程序测试量减少,并且可以得到易读、易维护的软件。在

217、选择语言时要从问题入手,确定它的要求是什么,以及这些要求的相对重要性。由于一在选择语言时要从问题入手,确定它的要求是什么,以及这些要求的相对重要性。由于一种语言不可能同时满足它的各种需求,所以要对各种要求进行权衡,比较各种可用语言的使用程种语言不可能同时满足它的各种需求,所以要对各种要求进行权衡,比较各种可用语言的使用程度,最后选择较适合的语言。度,最后选择较适合的语言。8.2.3 程序设计语言的选择程序设计语言的选择228目录页8.2程序设计语言第8章一般情况下,程序设计语言的选择常从以下几方面考虑。一般情况下,程序设计语言的选择常从以下几方面考虑。(1)项目的应用领域。)项目的应用领域。(

218、2)用户的要求。)用户的要求。(3)软件开发工具。)软件开发工具。(4)算法和数据结构的复杂性。)算法和数据结构的复杂性。(5)软件开发人员的知识。)软件开发人员的知识。(6)系统的可移植性要求。)系统的可移植性要求。8.2.3 程序设计语言的选择程序设计语言的选择229目录页8.3程序设计风格第8章为了提高程序的可维护性,源程序(也称源代码)也需要实现为了提高程序的可维护性,源程序(也称源代码)也需要实现“文档化文档化”。即在源程序中。即在源程序中包含一些内部文档,以帮助阅读和理解。源程序文档化主要包括:标识符命名、内部注释以及程包含一些内部文档,以帮助阅读和理解。源程序文档化主要包括:标识

219、符命名、内部注释以及程序的视觉组织三个方面。序的视觉组织三个方面。1.标识符的命名标识符的命名标识符包括模块名、变量名、常量名、标号名、子程序(函数)名以及数据区名、缓冲区标识符包括模块名、变量名、常量名、标号名、子程序(函数)名以及数据区名、缓冲区名等。名等。2.程序代码的视觉组织程序代码的视觉组织在程序编写中应该注意代码的排版布局,以使代码更加清晰易读。可以在程序中利用空格、在程序编写中应该注意代码的排版布局,以使代码更加清晰易读。可以在程序中利用空格、空行、缩进等技巧提高程序代码的视觉效果。空行、缩进等技巧提高程序代码的视觉效果。8.3.1 源程序文档化源程序文档化 230目录页8.3程

220、序设计风格第8章3程序的注释程序的注释注释有助于理解代码,是程序员之间进行交流的有效途径,合理的注释有利于日后的软件注释有助于理解代码,是程序员之间进行交流的有效途径,合理的注释有利于日后的软件维护。注释可分为序言性注释和功能性注释两大类。维护。注释可分为序言性注释和功能性注释两大类。序言性注释通常置于每个程序或模块的开头部分,它是对程序或模块的整体说明。主要内序言性注释通常置于每个程序或模块的开头部分,它是对程序或模块的整体说明。主要内容有:模块的功能、模块的接口、重要的局部变量及开发历史(包括模块的设计者、评审者、评容有:模块的功能、模块的接口、重要的局部变量及开发历史(包括模块的设计者、

221、评审者、评审日期、修改日期及对修改的描述等)。审日期、修改日期及对修改的描述等)。功能性注释通常嵌在程序体内,主要描述程序段的功能。功能性注释通常嵌在程序体内,主要描述程序段的功能。8.3.1 源程序文档化源程序文档化 231目录页8.3程序设计风格第8章为了使程序中的数据说明更易于理解和维护,必须注意以下几点:为了使程序中的数据说明更易于理解和维护,必须注意以下几点:(1)显式地说明一切变量。)显式地说明一切变量。(2)数据说明的次序应该规范化,比如哪种数据类型的说明在前,哪种在后,以便于查找。)数据说明的次序应该规范化,比如哪种数据类型的说明在前,哪种在后,以便于查找。(3)当多个变量用一

222、条语句说明时,应当对这些变量按字母顺序排列。例如,将)当多个变量用一条语句说明时,应当对这些变量按字母顺序排列。例如,将int length,width,area,cost,price;写成:写成:int area,cost,length,price,width;(4)使用注释说明复杂数据结构。)使用注释说明复杂数据结构。8.3.2 数据说明数据说明232目录页8.3程序设计风格第8章语句构造要简单直接,清晰易读。以下是一些常用的规则:语句构造要简单直接,清晰易读。以下是一些常用的规则:(1)要简单清楚,直截了当地说明程序员的用意(参见例)要简单清楚,直截了当地说明程序员的用意(参见例8|4)

223、。)。(2)不要为了节省空间而在同一行中写多个语句。)不要为了节省空间而在同一行中写多个语句。(3)使用括号使逻辑表达式和算术表达式的运算次序直观清晰。)使用括号使逻辑表达式和算术表达式的运算次序直观清晰。(4)利用添加空格来清晰地表示语句的成分。)利用添加空格来清晰地表示语句的成分。(5)尽可能使用库函数,应使用函数或公共过程去代替具有独立功能的程序段。)尽可能使用库函数,应使用函数或公共过程去代替具有独立功能的程序段。(6)尽量不用或少用)尽量不用或少用goto语句,避免语句,避免goto语句不必要的转移和相互交叉。语句不必要的转移和相互交叉。(7)尽量不用或少用标准文本以外的语句,以利于

224、提高可移植性。)尽量不用或少用标准文本以外的语句,以利于提高可移植性。(8)对于多分支语句,应尽量把出现可能性大的分支放在前面,以节省运算时间。)对于多分支语句,应尽量把出现可能性大的分支放在前面,以节省运算时间。8.3.3 语句构造语句构造 233目录页8.3程序设计风格第8章(9)每个循环要有终止条件,不要出现死循环,更要避免出现不可能被执行的循环。)每个循环要有终止条件,不要出现死循环,更要避免出现不可能被执行的循环。(10)避免使用过于复杂的条件判定。)避免使用过于复杂的条件判定。(11)避免使用测试条件)避免使用测试条件“非非”。如要使用。如要使用if(ch=0)取代取代if(!(c

225、h0)。(12)避免过多的循环嵌套和条件嵌套,嵌套深度不要超过三层。)避免过多的循环嵌套和条件嵌套,嵌套深度不要超过三层。(13)避免使用临时变量而使可读性下降(参见例)避免使用临时变量而使可读性下降(参见例8|5)。)。(14)避免使用空的)避免使用空的else语句和语句和ifthenif 语句。语句。(15)避免使用)避免使用else goto和和else return结构。结构。(16)使与判定相联系的动作尽可能地紧跟着判定。)使与判定相联系的动作尽可能地紧跟着判定。(17)用逻辑表达式代替分支嵌套(参见例)用逻辑表达式代替分支嵌套(参见例8|6)。)。8.3.3 语句构造语句构造 23

226、4目录页8.3程序设计风格第8章(18)对递归定义的数据结构尽量使用递归过程。)对递归定义的数据结构尽量使用递归过程。(19)确保所有变量在使用前都进行初始化。)确保所有变量在使用前都进行初始化。(20)不要修补不好的程序,要重新编写。也不要一味追求代码的复用,要重新组织。)不要修补不好的程序,要重新编写。也不要一味追求代码的复用,要重新组织。(21)不要进行浮点数相等的比较,因为两个浮点数难于精确相等(参见例)不要进行浮点数相等的比较,因为两个浮点数难于精确相等(参见例8|7)。)。8.3.3 语句构造语句构造 235目录页8.3程序设计风格第8章设计输入设计输入/输出界面的原则是友好、简洁

227、、统一,符合用户的日常工作习惯。在编写输入和输出界面的原则是友好、简洁、统一,符合用户的日常工作习惯。在编写输入和输出程序时要考虑以下原则:输出程序时要考虑以下原则:(1)检验输入数据的合法性、有效性。)检验输入数据的合法性、有效性。(2)批量输入数据时,使用数据输入结束标志,而不是要求用户预先输入数据个数。)批量输入数据时,使用数据输入结束标志,而不是要求用户预先输入数据个数。(3)检查输入项的重要组合的合理性。)检查输入项的重要组合的合理性。(4)输入格式要简单,输入格式要一致。)输入格式要简单,输入格式要一致。(5)提示输入的请求,并简要地说明可用的选择或边界值。)提示输入的请求,并简要

228、地说明可用的选择或边界值。(6)输入数据时应允许默认值。)输入数据时应允许默认值。(7)输出信息中不要有文字错误,要保证输出结果的正确性。)输出信息中不要有文字错误,要保证输出结果的正确性。(8)输出数据表格化、图形化。)输出数据表格化、图形化。(9)给所有的输出数据加标志。)给所有的输出数据加标志。8.3.4 输入与输出输入与输出 236目录页8.3程序设计风格第8章程序的效率是指程序的执行速度及程序所需占用内存的存储空间。提高效率的原则如下:程序的效率是指程序的执行速度及程序所需占用内存的存储空间。提高效率的原则如下:(1)效率是一个性能要求,应当在需求分析阶段确定效率方面的要求。效率是一

229、个性能要求,应当在需求分析阶段确定效率方面的要求。(2)效率是靠好的设计来提高的。效率是靠好的设计来提高的。 (3)程序的效率与程序的简单性相关。程序的效率与程序的简单性相关。(4)除非对效率有特殊要求,否则程序编写的原则是除非对效率有特殊要求,否则程序编写的原则是“清晰第一、效率第二清晰第一、效率第二”。不要为了追。不要为了追求效率而丧失了清晰性。求效率而丧失了清晰性。8.3.5 效率效率 237目录页8.4结构化程序设计第8章所谓结构化程序设计,一种较为流行的定义是:所谓结构化程序设计,一种较为流行的定义是:“如果一个程序的代码块仅仅通过顺序、如果一个程序的代码块仅仅通过顺序、选择和循环这

230、三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的程序是结构化的”。结构化程序设计通常采用自顶向下、逐步求精的设计方法,这种方法符合抽象和分解的原结构化程序设计通常采用自顶向下、逐步求精的设计方法,这种方法符合抽象和分解的原则,是人们解决复杂问题常用的方法。采用这种先整体后局部、先抽象后具体的步骤开发的软件则,是人们解决复杂问题常用的方法。采用这种先整体后局部、先抽象后具体的步骤开发的软件一般都具有较清晰的层次结构。结构化程序设计方法能提高程序的可读性、可维护性和可验证性,一

231、般都具有较清晰的层次结构。结构化程序设计方法能提高程序的可读性、可维护性和可验证性,从而提高软件的生产率。从而提高软件的生产率。238目录页8.4结构化程序设计第8章(1)尽量使用语言提供的基本控制结构,即顺序、选择和循环结构。)尽量使用语言提供的基本控制结构,即顺序、选择和循环结构。(2)选用的控制结构只准许有一个入口和一个出口。)选用的控制结构只准许有一个入口和一个出口。(3)将程序语句组织成容易识别的块,每块只有一个入口和一个出口。)将程序语句组织成容易识别的块,每块只有一个入口和一个出口。(4)复杂结构应该用基本控制结构进行组合或嵌套来实现。)复杂结构应该用基本控制结构进行组合或嵌套来

232、实现。(5)对于语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系)对于语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中前后一致。统中前后一致。(6)严格控制)严格控制goto语句,仅在两种情况下才可使用。一是用非结构化的程序设计语言去实语句,仅在两种情况下才可使用。一是用非结构化的程序设计语言去实现一个结构化的构造时;二是在某种可以改善而不是损害程序可读性的情况下。现一个结构化的构造时;二是在某种可以改善而不是损害程序可读性的情况下。8.4.1 结构化程序设计的原则结构化程序设计的原则239目录页8.4结构化程序设计第8章在总体设计阶段,已经采用

233、自顶向下、逐步细化的方法把一个复杂问题的解法分解和细化在总体设计阶段,已经采用自顶向下、逐步细化的方法把一个复杂问题的解法分解和细化成了一个由许多模块组成的层次结构的软件系统。在详细设计和编码阶段,还应当采取这种方法,成了一个由许多模块组成的层次结构的软件系统。在详细设计和编码阶段,还应当采取这种方法,把一个模块的功能逐步分解、细化为一系列具体的步骤,进而编制出用某种程序设计语言书写的把一个模块的功能逐步分解、细化为一系列具体的步骤,进而编制出用某种程序设计语言书写的程序。程序。自顶向下、逐步求精方法的优点如下:自顶向下、逐步求精方法的优点如下:(1)符合人们解决复杂问题的普遍规律,可提高软件

234、开发的成功率和生产效率。)符合人们解决复杂问题的普遍规律,可提高软件开发的成功率和生产效率。(2)用先全局后局部、先整体后细节、先抽象后具体的逐步求精过程开发出来的程序具有)用先全局后局部、先整体后细节、先抽象后具体的逐步求精过程开发出来的程序具有清晰的层次结构,程序易读、易理解。清晰的层次结构,程序易读、易理解。8.4.2 自顶向下,逐步求精自顶向下,逐步求精240目录页8.4结构化程序设计第8章(3)程序自顶向下、逐步细化,分解成一个树形结构,同一层上各结点的细化工作相互独)程序自顶向下、逐步细化,分解成一个树形结构,同一层上各结点的细化工作相互独立。立。(4)程序清晰和模块化,使得在修改

235、和重新设计一个软件时,可重用的代码量最大。)程序清晰和模块化,使得在修改和重新设计一个软件时,可重用的代码量最大。(5)每一步工作仅在上层结点的基础上做少量设计扩展,便于检查。)每一步工作仅在上层结点的基础上做少量设计扩展,便于检查。(6)有利于设计的分工与协作。)有利于设计的分工与协作。8.4.2 自顶向下,逐步求精自顶向下,逐步求精241目录页8.5面向对象的程序设计第8章1选择面向对象语言的原则选择面向对象语言的原则采用面向对象方法开发软件的基本目的和主要优点是通过复用提高软件的生产率。因此,采用面向对象方法开发软件的基本目的和主要优点是通过复用提高软件的生产率。因此,应该优先选用能够最

236、完善、最准确地表达问题域语义的面向对象语言。目前,面向对象语言有两应该优先选用能够最完善、最准确地表达问题域语义的面向对象语言。目前,面向对象语言有两类,一类是纯面向对象语言,其特点是组成语言的所有元素都是对象,例如类,一类是纯面向对象语言,其特点是组成语言的所有元素都是对象,例如Smalltalk和和Eiffel语言;语言;另一类是混合型面向对象语言,如另一类是混合型面向对象语言,如C+、VB、Java、C#等语言,它们既有面向过程的特性,又引等语言,它们既有面向过程的特性,又引入了面向对象的机制。在选择面向对象编程语言时应重点考虑以下因素:入了面向对象的机制。在选择面向对象编程语言时应重点

237、考虑以下因素:(1)语言的发展前景)语言的发展前景(2)可重用性)可重用性(3)类库和开发环境)类库和开发环境(4)其他因素)其他因素242目录页8.5面向对象的程序设计第8章2面向对象程序设计的步骤面向对象程序设计的步骤在面向对象的分析和设计阶段完成之后,即进入了面向对象的编码和实现阶段。在开发过在面向对象的分析和设计阶段完成之后,即进入了面向对象的编码和实现阶段。在开发过程中,类的实现是核心问题。在用面向对象风格设计的系统中,所有的数据都被封装在类的实例程中,类的实现是核心问题。在用面向对象风格设计的系统中,所有的数据都被封装在类的实例中,而整个程序则被封装在一个更高级的类中。在使用已有类

238、和构件的面向对象系统中,可以花中,而整个程序则被封装在一个更高级的类中。在使用已有类和构件的面向对象系统中,可以花费少量时间和工作量来实现软件。只要增加类的实例,开发少量的新类和实现各个对象之间互相费少量时间和工作量来实现软件。只要增加类的实例,开发少量的新类和实现各个对象之间互相通信的操作,就能建立需要的软件。通信的操作,就能建立需要的软件。面向对象程序设计的步骤如下:面向对象程序设计的步骤如下:(1)建立软件系统的动态模型)建立软件系统的动态模型(2)建立软件系统的静态模型)建立软件系统的静态模型(3)实现)实现243目录页软件测试第九章本章本章要点要点n掌握软件测试的目标与原则;n理解软

239、件测试方法;n掌握等价类划分法、边界值分析法、错误推测法等黑盒法测试用例的设计;n熟悉逻辑覆盖法等白盒法测试用例的设计;n理解软件测试的过程;n了解软件测试工具;n了解软件调试概念;n了解面向对象软件测试的特点。244目录页9.1软件测试概述第9章软件测试的目的是为了发现软件产品中存在的软件缺陷,进而保证软件产品的质量。软软件测试的目的是为了发现软件产品中存在的软件缺陷,进而保证软件产品的质量。软件测试是软件开发过程中的一个重要阶段,是软件产品正式投入运行前,对软件需求分析、件测试是软件开发过程中的一个重要阶段,是软件产品正式投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量

240、保证的关键步骤。软件测试的结果也是分析软设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试的结果也是分析软件可靠性的重要依据。件可靠性的重要依据。测试阶段的根本目标是以最少的人力、物力和时间,尽可能多地发现并排除软件中潜在测试阶段的根本目标是以最少的人力、物力和时间,尽可能多地发现并排除软件中潜在的错误,最终把一个高质量的软件系统交给用户使用。的错误,最终把一个高质量的软件系统交给用户使用。9.1.1 软件测试的目标软件测试的目标245目录页9.1软件测试概述第9章在软件测试中,应注意以下指导原则:在软件测试中,应注意以下指导原则:(1)所有测试都应追溯到需求。)所有测试都应追溯

241、到需求。(2)坚持)坚持“尽早地和不断地进行软件测试尽早地和不断地进行软件测试”。(3)测试用例应由输入数据和预期的输出结果两部分组成。)测试用例应由输入数据和预期的输出结果两部分组成。(4)程序员应避免测试自己的程序。)程序员应避免测试自己的程序。(5)在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。)在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。(6)充分注意测试中的群集现象。)充分注意测试中的群集现象。(7)严格执行测试计划,排除测试的随意性。)严格执行测试计划,排除测试的随意性。(8)应当对每个测试结果做全面检查。)应当对每个测试结果做全面检查。(9)在测试程

242、序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做)在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事。的事。(10)应长期保留所有测试用例。)应长期保留所有测试用例。9.1.2 软件测试的原则软件测试的原则 246目录页9.1软件测试概述第9章软件测试时需要三类测试信息流,如图软件测试时需要三类测试信息流,如图9-1所示。所示。9.1.3 软件测试的信息流软件测试的信息流 247目录页9.2软件测试方法第9章软件测试方法很多,按照测试过程是否执行程序来分,一般分为静态测试方法和动态测软件测试方法很多,按照测试过程是否执行程序来分,一般分为静态测试方法和

243、动态测试方法。动态测试方法又根据测试用例的设计方法不同,分为黑盒测试和白盒测试两类。测试方法。动态测试方法又根据测试用例的设计方法不同,分为黑盒测试和白盒测试两类。测试方法的分类如图试方法的分类如图9-2所示。所示。248目录页9.2软件测试方法第9章静态测试包括代码检查、静态结构分析、代码质量度量等,是指不在计算机上执行被测静态测试包括代码检查、静态结构分析、代码质量度量等,是指不在计算机上执行被测试软件,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态测试可以由试软件,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态测试可以由人工进行,充分发挥人的逻辑思维优势,

244、也可以借助软件工具自动进行。经验表明,人工测人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。经验表明,人工测试能有效发现试能有效发现30%70%的逻辑设计错误和编码错误。的逻辑设计错误和编码错误。(1)人工测试:是指不依靠计算机而靠人工审查程序或评审软件。人工审查程序的重点)人工测试:是指不依靠计算机而靠人工审查程序或评审软件。人工审查程序的重点是对编码质量的检查,而软件审查除了审查编码还要对各阶段的软件产品(各种文档)进行是对编码质量的检查,而软件审查除了审查编码还要对各阶段的软件产品(各种文档)进行复查。人工检测可以发现计算机不易发现的错误,特别是软件总体设计和详细设计阶段

245、的错复查。人工检测可以发现计算机不易发现的错误,特别是软件总体设计和详细设计阶段的错误。误。(2)计算机辅助静态分析:指不需要执行所测试的程序,而只是通过扫描程序正文,对)计算机辅助静态分析:指不需要执行所测试的程序,而只是通过扫描程序正文,对程序的数据流和控制流等信息进行分析,找出系统的缺陷,得出测试报告。程序的数据流和控制流等信息进行分析,找出系统的缺陷,得出测试报告。9.2.1 静态测试静态测试 249目录页9.2软件测试方法第9章动态测试是真正运行被测程序,在执行过程中,通过输入有效的测试用例,对输入与输动态测试是真正运行被测程序,在执行过程中,通过输入有效的测试用例,对输入与输出的对

246、应关系进行分析,以达到检测的目的。通常意义上的测试大多是指动态测试。设计高出的对应关系进行分析,以达到检测的目的。通常意义上的测试大多是指动态测试。设计高效、合理的测试用例是动态测试的关键。同测试任何产品一样,动态测试一般有黑盒测试法效、合理的测试用例是动态测试的关键。同测试任何产品一样,动态测试一般有黑盒测试法与白盒测试法两种,前者是测试产品的功能,后者是测试产品的内部结构和处理过程。与白盒测试法两种,前者是测试产品的功能,后者是测试产品的内部结构和处理过程。9.2.2 动态测试动态测试 250目录页9.2软件测试方法第9章1黑盒测试法黑盒测试法黑盒法又称功能测试或数据驱动测试,该方法把被测

247、试对象看成一个不透明的黑盒法又称功能测试或数据驱动测试,该方法把被测试对象看成一个不透明的“黑盒子黑盒子”,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口(界面)处进行测试,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口(界面)处进行测试,依据需求说明书,检查程序是否满足功能要求,是否能很好地接收数据,并产生正确的输出。依据需求说明书,检查程序是否满足功能要求,是否能很好地接收数据,并产生正确的输出。通过黑盒测试主要发现以下错误:通过黑盒测试主要发现以下错误:(1)是否有不正确或遗漏了的功能。)是否有不正确或遗漏了的功能。(2)界面是否有错,能否正确地接受输入数据,能否

248、产生正确的输出信息。)界面是否有错,能否正确地接受输入数据,能否产生正确的输出信息。(3)是否有数据结构或外部数据库访问错误。)是否有数据结构或外部数据库访问错误。(4)性能是否满足要求。)性能是否满足要求。(5)是否有初始化或终止性错误。)是否有初始化或终止性错误。9.2.2 动态测试动态测试 251目录页9.3测试用例的设计第9章常用的黑盒测试技术有等价类划分、边界值分析、错误推测法、因果图等。常用的黑盒测试技术有等价类划分、边界值分析、错误推测法、因果图等。1.等价类划分法等价类划分法(1)等价类划分法的基本思想等价类划分法的基本思想把所有可能的输入或输出数据(有效的和无效的)划分成若干

249、个等价的子集,称为等价把所有可能的输入或输出数据(有效的和无效的)划分成若干个等价的子集,称为等价类,使得每个子集中的一个典型值在测试中的作用与这一子集中所有其他值的作用相同,可类,使得每个子集中的一个典型值在测试中的作用与这一子集中所有其他值的作用相同,可从每个子集中选取一组数据来测试程序,这种方法称等价类划分法。从每个子集中选取一组数据来测试程序,这种方法称等价类划分法。等价类可分为有效等价类和无效等价类两种。前者主要用来检验程序是否实现了规格说等价类可分为有效等价类和无效等价类两种。前者主要用来检验程序是否实现了规格说明中的功能;后者主要用来检验程序否做了规格说明以外的事情。明中的功能;

250、后者主要用来检验程序否做了规格说明以外的事情。9.3.1 黑盒技术黑盒技术252目录页9.3测试用例的设计第9章(2)等价类划分的一般规则等价类划分的一般规则 划分等价类需要一定的经验,下面几条启发式规则有助于等价类的划分划分等价类需要一定的经验,下面几条启发式规则有助于等价类的划分:如果输入条件是一个布尔量,则可定义一个有效等价类和一个无效等价类。如果输入条件是一个布尔量,则可定义一个有效等价类和一个无效等价类。如果输入条件规定了确切的取值范围,可定义一个有效等价类和两个无效等价类。如果输入条件规定了确切的取值范围,可定义一个有效等价类和两个无效等价类。如果规定了输入数据的个数,则可定义一个

251、有效等价类和两个无效等价类。如果规定了输入数据的个数,则可定义一个有效等价类和两个无效等价类。 如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类是一个有效等价类,并有一个无效等价类 (所有不允许的输入值的集合所有不允许的输入值的集合)。如果规定了输入数据必须遵循的规则,可确定一个有效等价类(符合规则)和若干个如果规定了输入数据必须遵循的规则,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则无效等价类(从不同角度违反规则)。如已划分的等价类

252、各元素在程序中的处理方式不同,则应将此等价类进一步划分成更如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。小的等价类。如果处理对象是表格,则应使用空表、只含如果处理对象是表格,则应使用空表、只含1项的表,包含多项的表。项的表,包含多项的表。9.3.1 黑盒技术黑盒技术253目录页9.3测试用例的设计第9章(3)用等价类划分法设计测试用例的步骤)用等价类划分法设计测试用例的步骤划分等价类,形成等价类表,为每一等价类规定一个唯一的编号;划分等价类,形成等价类表,为每一等价类规定一个唯一的编号;根据等价类选取相应的测试用例。根据等价类选取相应的测试用例。设计一个

253、新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被覆盖。直到所有有效等价类均被覆盖。设计一个新的测试用例,使其覆盖一个而且只覆盖一个尚未覆盖的无效等价类,重复这设计一个新的测试用例,使其覆盖一个而且只覆盖一个尚未覆盖的无效等价类,重复这一步骤,直到所有无效等价类均被覆盖。一步骤,直到所有无效等价类均被覆盖。注意:通常程序发现一类错误后就不再检查是否还有其他错误,因此,应该使每个测试注意:通常程序发现一类错误后就不再检查是否还有其他错误,因此,应该使每个测试方案只覆盖一个无效的等价

254、类。方案只覆盖一个无效的等价类。9.3.1 黑盒技术黑盒技术254目录页9.3测试用例的设计第9章2.边界值分析法边界值分析法边界值分析是一种补充等价类划分法的测试用例设计技术。边界值分析就是测试边界线边界值分析是一种补充等价类划分法的测试用例设计技术。边界值分析就是测试边界线数据。使用边界值分析法设计测试用例时,应考虑选取正好等于、刚刚大于和刚刚小于边界数据。使用边界值分析法设计测试用例时,应考虑选取正好等于、刚刚大于和刚刚小于边界的值作为测试数据,这样发现程序中错误的概率较大。的值作为测试数据,这样发现程序中错误的概率较大。3.错误推测法错误推测法错误推测法是根据经验来设计测试用例以找出可

255、能存在但尚未发现的错误的方法。错误推测法是根据经验来设计测试用例以找出可能存在但尚未发现的错误的方法。错误推测法的基本思想是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,错误推测法的基本思想是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据这些情况选择测试用例。根据这些情况选择测试用例。9.3.1 黑盒技术黑盒技术255目录页9.3测试用例的设计第9章4.因果图法因果图法因果图法用于检查程序输入条件的各种组合情况。等价类划分法和边界值分析法都侧重因果图法用于检查程序输入条件的各种组合情况。等价类划分法和边界值分析法都侧重考虑输入数据,而因果图法主要考虑输入数据之间的联系。

256、该方法能够生成没有重复的且发考虑输入数据,而因果图法主要考虑输入数据之间的联系。该方法能够生成没有重复的且发现错误能力强的测试用例,而且对输入输出数据同时进行分析。现错误能力强的测试用例,而且对输入输出数据同时进行分析。9.3.1 黑盒技术黑盒技术256目录页9.3测试用例的设计第9章9.3.2 白盒技术白盒技术257目录页9.3测试用例的设计第9章前面介绍的软件测试方法,各有所长。每种方法都能设计出一组有用的测试用例,用这前面介绍的软件测试方法,各有所长。每种方法都能设计出一组有用的测试用例,用这组用例可能容易发现某种类型的错误,但可能不易发现另一种类型的错误。组用例可能容易发现某种类型的错

257、误,但可能不易发现另一种类型的错误。因此,对软件系统进行实际测试时,应该联合使用各种测试方法,形成综合策略。通常因此,对软件系统进行实际测试时,应该联合使用各种测试方法,形成综合策略。通常是先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。具体方法如下:是先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。具体方法如下:(1)在任何情况下都应该使用边界值分析方法。)在任何情况下都应该使用边界值分析方法。(2)用等价类划分法补充测试用例。)用等价类划分法补充测试用例。(3)用错误推测法补充测试用例。)用错误推测法补充测试用例。(4)对照程序逻辑,检查已经设计出的测试用例

258、的逻辑覆盖程度,如果没有达到所要求)对照程序逻辑,检查已经设计出的测试用例的逻辑覆盖程度,如果没有达到所要求的覆盖标准,则应当再补充一些测试用例。的覆盖标准,则应当再补充一些测试用例。(5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。9.3.3 综合测试策略综合测试策略 258目录页9.3测试用例的设计第9章下面给出一个三角形分类程序的测试方案的设计。程序的功能是,读入三个整数值代表下面给出一个三角形分类程序的测试方案的设计。程序的功能是,读入三个整数值代表三角形的三条边的长度,程序判断这三个值能

259、否构成三角形,如果能够,则输出三角形是等三角形的三条边的长度,程序判断这三个值能否构成三角形,如果能够,则输出三角形是等边、等腰或任意三角形的分类信息。边、等腰或任意三角形的分类信息。综合使用边界值分析、等价类划分和错误推测等技术为此程序设计测试用例。综合使用边界值分析、等价类划分和错误推测等技术为此程序设计测试用例。第一步:确定测试策略。因为在本例中对被测程序已有明确的要求,即:判断能否构成第一步:确定测试策略。因为在本例中对被测程序已有明确的要求,即:判断能否构成三角形,如能构成,则再判断能构成等边、等腰或任意三角形哪一种。因此,可首先运用黑三角形,如能构成,则再判断能构成等边、等腰或任意

260、三角形哪一种。因此,可首先运用黑盒测试法设计测试用例,然后再用白盒测试法验证其完整性,必要时再补充测试用例。盒测试法设计测试用例,然后再用白盒测试法验证其完整性,必要时再补充测试用例。第二步:在黑盒测试中首先要用等价类划分法划分输入等价类,然后用边值分析法和错第二步:在黑盒测试中首先要用等价类划分法划分输入等价类,然后用边值分析法和错误推测法作补充。误推测法作补充。 9.3.4 测试实例分析测试实例分析259目录页9.4软件测试步骤第9章与软件的开发过程类似,测试必须分步骤进行。对于大型的软件系统,测试基本上由单与软件的开发过程类似,测试必须分步骤进行。对于大型的软件系统,测试基本上由单元测试

261、、集成测试、确认测试和系统测试四个步骤组成,如图元测试、集成测试、确认测试和系统测试四个步骤组成,如图9-4所示。所示。260目录页9.4软件测试步骤第9章单元测试又称模块测试,主要是检查每个程序模块是否正确实现了规定的功能。单元测试又称模块测试,主要是检查每个程序模块是否正确实现了规定的功能。集成测试又称组装测试,主要检查概要设计中模块接口设计问题。集成测试又称组装测试,主要检查概要设计中模块接口设计问题。确认测试主要检查已实现的软件是否满足需求说明书中确定的各种需求。确认测试主要检查已实现的软件是否满足需求说明书中确定的各种需求。系统测试是综合检验软件与整个计算机系统的测试。系统测试是综合

262、检验软件与整个计算机系统的测试。测试的每个过程都可以采用灵活的测试方法和测试策略,通常在单元测试中采用白盒测测试的每个过程都可以采用灵活的测试方法和测试策略,通常在单元测试中采用白盒测试方法,而在其他测试中主要采用黑盒测试方法。试方法,而在其他测试中主要采用黑盒测试方法。261目录页9.4软件测试步骤第9章单元测试是对软件设计的最小单位单元测试是对软件设计的最小单位程序模块的测试,也是对程序模块进行正确性检程序模块的测试,也是对程序模块进行正确性检验的测试,其目的在于发现各模块内部可能存在的各种差错。通常单元测试可以放在编码阶验的测试,其目的在于发现各模块内部可能存在的各种差错。通常单元测试可

263、以放在编码阶段,程序员在编写完成一个模块且无编译错误后就可以进行,主要是检查模块是否实现了详段,程序员在编写完成一个模块且无编译错误后就可以进行,主要是检查模块是否实现了详细设计说明书规定的模块功能和算法。细设计说明书规定的模块功能和算法。单元测试需要从程序的内部结构出发设计测试用例,通常采用白盒测试方法,以路径覆单元测试需要从程序的内部结构出发设计测试用例,通常采用白盒测试方法,以路径覆盖为最佳测试准则。多个模块可以并行独立地进行单元测试。盖为最佳测试准则。多个模块可以并行独立地进行单元测试。9.4.1 单元测试单元测试 262目录页9.4软件测试步骤第9章1单元测试的内容单元测试的内容单元

264、测试的内容主要有以下五方面:单元测试的内容主要有以下五方面:(1)模块接口测试)模块接口测试(2)局部数据结构测试)局部数据结构测试(3)重要路径测试)重要路径测试(4)错误处理测试)错误处理测试(5)边界测试)边界测试9.4.1 单元测试单元测试 263目录页9.4软件测试步骤第9章2单元测试的步骤单元测试的步骤(1)配置测试环境)配置测试环境(2)编写测试数据)编写测试数据(3)进行多个单元的并行测试)进行多个单元的并行测试9.4.1 单元测试单元测试 264目录页9.4软件测试步骤第9章集成测试也称组装测试或联调,是在单元测试的基础上,将所有模块按照软件设计要求集成测试也称组装测试或联调

265、,是在单元测试的基础上,将所有模块按照软件设计要求组装成系统并进行测试的过程。组装测试主要通过检查模块间的结构和通信发现软件设计阶组装成系统并进行测试的过程。组装测试主要通过检查模块间的结构和通信发现软件设计阶段产生的错误,通常采用黑盒测试方法。在组装测试过程中,需要考虑如下几个问题:段产生的错误,通常采用黑盒测试方法。在组装测试过程中,需要考虑如下几个问题:(1)数据穿越模块接口是否会丢失。)数据穿越模块接口是否会丢失。(2)一个模块的功能是否会对另一个模块的功能产生不利的影响。)一个模块的功能是否会对另一个模块的功能产生不利的影响。(3)各个子功能组合起来,能否达到预期要求的父功能。)各个

266、子功能组合起来,能否达到预期要求的父功能。(4)全局数据结构是否有问题。)全局数据结构是否有问题。(5)单个模块的误差累积起来,是否会放大,以至于达到不能接受的程度。)单个模块的误差累积起来,是否会放大,以至于达到不能接受的程度。9.4.2 集成测试集成测试 265目录页9.4软件测试步骤第9章把多个模块组装成系统,通常有两种方式:非渐增式组装和渐增式组装。把多个模块组装成系统,通常有两种方式:非渐增式组装和渐增式组装。1非渐增式组装方式非渐增式组装方式也称整体拼装。即将单元测试后的模块按照系统总体结构图一次性集成起来,然后进行也称整体拼装。即将单元测试后的模块按照系统总体结构图一次性集成起来

267、,然后进行全程序测试。其优点是效率高,缺点是发现错误难以诊断定位,所以又称全程序测试。其优点是效率高,缺点是发现错误难以诊断定位,所以又称“莽撞测试莽撞测试”,只,只适宜小规模的系统。适宜小规模的系统。2渐增式组装方式渐增式组装方式也称增殖式方式。从一个模块开始,测试一次添加一个模块,边组装边测试,以发现与也称增殖式方式。从一个模块开始,测试一次添加一个模块,边组装边测试,以发现与接口相联系的问题,直至所有模块全部集成到程序中。该方式适合于大规模的系统。接口相联系的问题,直至所有模块全部集成到程序中。该方式适合于大规模的系统。渐增式组装方式有两种:自顶向下组装和自底向上组装。渐增式组装方式有两

268、种:自顶向下组装和自底向上组装。9.4.2 集成测试集成测试 266目录页9.4软件测试步骤第9章确认测试也称有效性测试,目的是确认组装完毕的软件是否满足软件需求规格说明书的确认测试也称有效性测试,目的是确认组装完毕的软件是否满足软件需求规格说明书的要求。典型的确认测试通常包括有效性测试和软件配置审查等内容,测试结束后,软件就要要求。典型的确认测试通常包括有效性测试和软件配置审查等内容,测试结束后,软件就要交付验收了。交付验收了。1.有效性测试有效性测试2.软件配置审查软件配置审查3.测试测试测试测试4.验收测试验收测试9.4.3 确认测试确认测试 267目录页9.4软件测试步骤第9章系统测试

269、是把已经经过确认的软件纳入实际运行环境中,与其他系统成分组合在一起进系统测试是把已经经过确认的软件纳入实际运行环境中,与其他系统成分组合在一起进行测试。其目的是检查软件能否与系统的其余部分协调运行,并且实现软件需求规格说明书行测试。其目的是检查软件能否与系统的其余部分协调运行,并且实现软件需求规格说明书的要求。系统测试是验收测试的一部分,应由用户单位组织实施。软件开发单位应该为系统的要求。系统测试是验收测试的一部分,应由用户单位组织实施。软件开发单位应该为系统测试创造良好的条件,负责回答和解决测试中可能发现的一切质量问题。常见的系统测试主测试创造良好的条件,负责回答和解决测试中可能发现的一切质

270、量问题。常见的系统测试主要有以下几方面。要有以下几方面。(1)恢复测试:主要检查系统的容错能力。当系统出现错误时,能否在指定时间间隔内)恢复测试:主要检查系统的容错能力。当系统出现错误时,能否在指定时间间隔内修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统能否修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统能否尽快恢复。尽快恢复。9.4.4 系统测试系统测试 268目录页9.4软件测试步骤第9章(2)安全测试:主要检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非)安全测试:主要检查系统对非法侵入的防范能力。安全测试期间,测试人员

271、假扮非法入侵者,采用各种办法试图突破防线,检验系统预防机制的漏洞。法入侵者,采用各种办法试图突破防线,检验系统预防机制的漏洞。(3)强度测试:主要检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的)强度测试:主要检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。如运行一些超过正常输入量或需要最大存储空间的测试用例。资源配置下运行。如运行一些超过正常输入量或需要最大存储空间的测试用例。(4)性能测试:主要检查软件在集成的系统中的运行性能。它对实时系统和嵌入式系统)性能测试:主要检查软件在集成的系统中的运行性能。它对实时系统和嵌入式系统尤为重要。性能测试常与强度测试

272、相结合进行。经常需要其他软硬件的配套支持。尤为重要。性能测试常与强度测试相结合进行。经常需要其他软硬件的配套支持。9.4.4 系统测试系统测试 269目录页9.5软件测试工具简介第9章测试工具即测试软件,就是可以替代部分人工测试工作的高效测试手段,既可以显著减测试工具即测试软件,就是可以替代部分人工测试工作的高效测试手段,既可以显著减少测试开销,也能够保证测试的有效性。但到目前为止,完全自动化的测试软件还没有实现,少测试开销,也能够保证测试的有效性。但到目前为止,完全自动化的测试软件还没有实现,自动化测试只是针对大部分的测试工作。市场上有独立的软件测试工具,也有集成多个功能自动化测试只是针对大

273、部分的测试工作。市场上有独立的软件测试工具,也有集成多个功能的自动测试工具集。下面简要的自动测试工具集。下面简要介绍一些自动测试工具。介绍一些自动测试工具。1静态分析程序静态分析程序2动态分析程序动态分析程序3断言处理程序断言处理程序4测试数据生成程序测试数据生成程序5文件比较程序文件比较程序6性能测试工具性能测试工具270目录页9.6调试第9章软件测试的目的是尽可能多地发现程序中的错误,而调试则是指成功的测试之后才开始软件测试的目的是尽可能多地发现程序中的错误,而调试则是指成功的测试之后才开始的工作。调试的目的是根据测试时发现的错误,找出错误的原因和具体位置,并改正错误,的工作。调试的目的是

274、根据测试时发现的错误,找出错误的原因和具体位置,并改正错误,因此,调试也称为纠错或排错。测试与调试的不同如表因此,调试也称为纠错或排错。测试与调试的不同如表9-8所示。所示。9.6.1 调试的目的和步骤调试的目的和步骤 271目录页9.6调试第9章调试是技巧性很强的工作,调试的关键在于推断程序内部的错误位置及原因。调试工作调试是技巧性很强的工作,调试的关键在于推断程序内部的错误位置及原因。调试工作的困难与人的心理因素和技术因素都有关系,而心理因素的影响常常高于技术手段而占主导的困难与人的心理因素和技术因素都有关系,而心理因素的影响常常高于技术手段而占主导地位。常用的调试策略有:地位。常用的调试

275、策略有:1.强行排错强行排错2.回溯法回溯法3.归纳法归纳法4.演绎法演绎法9.6.2 调试策略调试策略 272目录页9.6调试第9章由于调试工作有查错和排错两项任务,因此调试原则也分成两组:由于调试工作有查错和排错两项任务,因此调试原则也分成两组:1查错原则查错原则(1)注重用头脑去分析思考与错误征兆有关的信息。)注重用头脑去分析思考与错误征兆有关的信息。(2)避免用试探法,最多只能把它当作最后手段。)避免用试探法,最多只能把它当作最后手段。(3)调试工具不能代替人的思考,只能把它当作辅助手段来使用。)调试工具不能代替人的思考,只能把它当作辅助手段来使用。(4)避开死胡同。)避开死胡同。9.

276、6.3 调试原则调试原则 273目录页9.6调试第9章2排错原则排错原则(1)注意错误的群集现象,在错误近邻检查。)注意错误的群集现象,在错误近邻检查。(2)采用回归测试,避免因修改引起的新错误。)采用回归测试,避免因修改引起的新错误。(3)不能只修改错误的表现,要找到错误的本质并修改。)不能只修改错误的表现,要找到错误的本质并修改。(4)要修改源代码,而不要修改目标代码。)要修改源代码,而不要修改目标代码。9.6.3 调试原则调试原则 274目录页9.7面向对象软件测试简述第9章面向对象的测试模型是一种在整个软件开发过程中不断测试的测试模型,它使开发阶段面向对象的测试模型是一种在整个软件开发

277、过程中不断测试的测试模型,它使开发阶段的测试与编码完成后的单元测试、集成测试、确认测试和系统测试成为一个整体。测试模型的测试与编码完成后的单元测试、集成测试、确认测试和系统测试成为一个整体。测试模型如图如图9-9所示。所示。9.7.1 面向对象的测试模型面向对象的测试模型 275目录页9.7面向对象软件测试简述第9章面向对象的测试模型是一种在整个软件开发过程中不断测试的测试模型,它使开发阶段面向对象的测试模型是一种在整个软件开发过程中不断测试的测试模型,它使开发阶段的测试与编码完成后的单元测试、集成测试、确认测试和系统测试成为一个整体。测试模型的测试与编码完成后的单元测试、集成测试、确认测试和

278、系统测试成为一个整体。测试模型如图如图9-9所示。所示。9.7.1 面向对象的测试模型面向对象的测试模型 276目录页9.7面向对象软件测试简述第9章1.面向对象分析测试(面向对象分析测试(OOA测试)测试)对面向对象分析的测试应从以下五个方面考虑:对面向对象分析的测试应从以下五个方面考虑:(1)对认定的对象的测试。)对认定的对象的测试。(2)对认定的结构的测试。)对认定的结构的测试。(3)对认定的主题的测试。)对认定的主题的测试。(4)对定义的属性和实例关联的测试。)对定义的属性和实例关联的测试。(5)对定义的服务和消息关联的测试。)对定义的服务和消息关联的测试。9.7.1 面向对象的测试模

279、型面向对象的测试模型 277目录页9.7面向对象软件测试简述第9章2.面向对象设计测试(面向对象设计测试(OOD测试)测试)对面向对象设计的测试应从以下三方面考虑:对面向对象设计的测试应从以下三方面考虑:(1)对认定的类的测试。)对认定的类的测试。(2)对构造的类层次结构的测试。)对构造的类层次结构的测试。(3)对类库的支持的测试。)对类库的支持的测试。3.面向对象编程的测试(面向对象编程的测试(OOP测试)测试)(1)数据成员是否满足封装的要求。)数据成员是否满足封装的要求。(2)类是否实现了所要求的功能。)类是否实现了所要求的功能。9.7.1 面向对象的测试模型面向对象的测试模型 278目

280、录页9.7面向对象软件测试简述第9章1面向对象的单元测试面向对象的单元测试面向对象的单元测试是进行面向对象集成测试的基础。面向对象的单元测试以类或对象面向对象的单元测试是进行面向对象集成测试的基础。面向对象的单元测试以类或对象为单位。由于类包含一组不同的操作,并且某些特殊的操作可能被多个类共享,因此,单元为单位。由于类包含一组不同的操作,并且某些特殊的操作可能被多个类共享,因此,单元测试不能孤立地测试某个操作,而是将操作作为类的一部分来测试。测试不能孤立地测试某个操作,而是将操作作为类的一部分来测试。2面向对象的集成测试面向对象的集成测试因为在面向对象的软件中没有层次的控制结构,并且构成类的成

281、分彼此之间存在着直接因为在面向对象的软件中没有层次的控制结构,并且构成类的成分彼此之间存在着直接或间接的交互作用,所以,传统意义上的自顶向下和自底向上的集成策略将不再适用。或间接的交互作用,所以,传统意义上的自顶向下和自底向上的集成策略将不再适用。9.7.2 面向对象的测试策略面向对象的测试策略279目录页9.7面向对象软件测试简述第9章3面向对象的确认测试面向对象的确认测试在确认测试层次,不需要再考虑类的实现和交互的具体细节,只要验证交互过程及功能,在确认测试层次,不需要再考虑类的实现和交互的具体细节,只要验证交互过程及功能,包括提供的用户界面,用户可见的操作,软件的反应和输出的结果等情况,

282、其中测试用例的包括提供的用户界面,用户可见的操作,软件的反应和输出的结果等情况,其中测试用例的选择主要是依据动态模型和系统的脚本描述。选择主要是依据动态模型和系统的脚本描述。4面向对象的系统测试面向对象的系统测试面向对象的系统测试要以面向对象需求分析的结果为依据,应该参考面向对象的系统测试要以面向对象需求分析的结果为依据,应该参考OOA分析的结果,分析的结果,对需求分析中描述的对象模型、交互模型等各种分析模型进行检验。对需求分析中描述的对象模型、交互模型等各种分析模型进行检验。9.7.2 面向对象的测试策略面向对象的测试策略280目录页9.7面向对象软件测试简述第9章传统意义的软件测试用例的设

283、计是从软件的传统意义的软件测试用例的设计是从软件的IPO视图或各个模块的算法细节得出的,而面视图或各个模块的算法细节得出的,而面向对象软件的测试用例更关注于设计适当的操作序列以检查类的状态,目前,还处于研究和向对象软件的测试用例更关注于设计适当的操作序列以检查类的状态,目前,还处于研究和发展阶段。通常,黑盒测试也适用于面向对象的软件测试。测试用例设计的要点如下:发展阶段。通常,黑盒测试也适用于面向对象的软件测试。测试用例设计的要点如下:(1)每个测试用例都要有一个唯一的标识,并与被测试的一个或几个类相关联。)每个测试用例都要有一个唯一的标识,并与被测试的一个或几个类相关联。(2)每个测试用例都

284、要陈述测试目的。)每个测试用例都要陈述测试目的。(3)对每个测试用例都要有相应的测试步骤,包括被测试对象的特定状态、所使用的消)对每个测试用例都要有相应的测试步骤,包括被测试对象的特定状态、所使用的消息和操作、可能产生的错误及测试需要的外部环境等。息和操作、可能产生的错误及测试需要的外部环境等。9.7.3 面向对象的测试用例设计面向对象的测试用例设计281目录页软件维护第十章本章本章要点要点n理解软件维护的类型和特点;n掌握软件维护的一般过程;n理解软件的可维护性及提高可维护性的方法;n理解软件维护的副作用;n了解软件的再生工程。282目录页10.1软件维护的类型与策略第10章软件维护是指已完

285、成开发工作,并交付用户使用以后,对软件产品所进行的一些软件工软件维护是指已完成开发工作,并交付用户使用以后,对软件产品所进行的一些软件工程活动。软件维护是软件生存周期中时间最长的阶段,也是花费精力和费用最多的阶段。程活动。软件维护是软件生存周期中时间最长的阶段,也是花费精力和费用最多的阶段。实践表明,在开发阶段结束后,在软件运行过程中仍然有必要对软件进行变动,主要原实践表明,在开发阶段结束后,在软件运行过程中仍然有必要对软件进行变动,主要原因如下:因如下:(1)改正在运行中新发现的错误和设计上的缺陷,这些错误和缺陷在开发后期的测试阶)改正在运行中新发现的错误和设计上的缺陷,这些错误和缺陷在开发

286、后期的测试阶段未被发现。段未被发现。(2)改进设计,以便增强软件的功能,提高软件的性能。)改进设计,以便增强软件的功能,提高软件的性能。(3)要求已运行的软件能适应特定的硬件、软件、外部设备和通信设备等的工作环境,)要求已运行的软件能适应特定的硬件、软件、外部设备和通信设备等的工作环境,或者要求适应已变动的数据或文件等。或者要求适应已变动的数据或文件等。(4)为使已运行的软件与其他相关的软件有良好的接口,以利于协同工作。)为使已运行的软件与其他相关的软件有良好的接口,以利于协同工作。(5)为扩充软件的应用范围。)为扩充软件的应用范围。10.1.1 软件维护工作的必要性软件维护工作的必要性283

287、目录页10.1软件维护的类型与策略第10章1改正性维护改正性维护改正性维护是改正在系统开发阶段已发生的而系统测试阶段尚未发现的错误。改正性维护是改正在系统开发阶段已发生的而系统测试阶段尚未发现的错误。2适应性维护适应性维护为适应软件运行环境的变化而进行的维护称适应性维护。为适应软件运行环境的变化而进行的维护称适应性维护。3完善性维护完善性维护为扩充软件的功能或用户提出的新需为扩充软件的功能或用户提出的新需求而进行的维护称完善性维护。求而进行的维护称完善性维护。4预防性维护预防性维护为改进软件效率、可靠性、可维修性为改进软件效率、可靠性、可维修性而进行的维护称预防性维护。而进行的维护称预防性维护

288、。10.1.2 软件维护的类型软件维护的类型284目录页10.1软件维护的类型与策略第10章1改正性维护改正性维护使用新技术可产生更可靠的代码,从而大大提高软件的可靠性,并减少改正性维护的需使用新技术可产生更可靠的代码,从而大大提高软件的可靠性,并减少改正性维护的需要。这些新技术包括:要。这些新技术包括:数据库管理系统;数据库管理系统;软件开发环境;软件开发环境;程序自动生成系统;程序自动生成系统;高级(第四代)语言。高级(第四代)语言。10.1.3 软件维护的策略软件维护的策略285目录页10.1软件维护的类型与策略第10章2适应性维护适应性维护这一类维护不可避免,但可以控制。这一类维护不可

289、避免,但可以控制。(1)在配置管理时,把硬件、操作系统和其他相关环境因素的可能变化考虑在内,可以)在配置管理时,把硬件、操作系统和其他相关环境因素的可能变化考虑在内,可以减少某些适应性维护的工作量。减少某些适应性维护的工作量。(2)把与硬件、操作系统以及其他外围设备有关的程序归结到特定的程序模块中,可把)把与硬件、操作系统以及其他外围设备有关的程序归结到特定的程序模块中,可把因环境变化而必须修改的程序局部于某些程序模块中。因环境变化而必须修改的程序局部于某些程序模块中。(3)使用内部程序列表、外部文件以及处理的例行程序包,为维护时修改程序提供方便。)使用内部程序列表、外部文件以及处理的例行程序

290、包,为维护时修改程序提供方便。(4)使用面向对象技术,增强软件系统的稳定性,并使之易于修改和移植。)使用面向对象技术,增强软件系统的稳定性,并使之易于修改和移植。10.1.3 软件维护的策略软件维护的策略286目录页10.1软件维护的类型与策略第10章3完善性维护完善性维护利用前两类维护中列举的方法,也可以减少这一类维护。特别是使用数据库管理系统、利用前两类维护中列举的方法,也可以减少这一类维护。特别是使用数据库管理系统、程序生成器、应用软件包等可以减少维护工作量。程序生成器、应用软件包等可以减少维护工作量。此外,建立软件系统的原型并在开发实际系统之前提供给用户,用户通过运行原型,进此外,建立

291、软件系统的原型并在开发实际系统之前提供给用户,用户通过运行原型,进一步完善他们的功能要求,可以减少以后完善性维护的需要。一步完善他们的功能要求,可以减少以后完善性维护的需要。10.1.3 软件维护的策略软件维护的策略287目录页10.2软件维护的特点第10章1非结构化维护和结构化维护非结构化维护和结构化维护软件的开发过程对软件的维护有较大影响。如果不采用软件工程方法开发软件,则软件软件的开发过程对软件的维护有较大影响。如果不采用软件工程方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是非结构化维护。如果采用软件工程方法开发软只有程序而无文档,维护工作非常困难,这是非结构化维护。如果采

292、用软件工程方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是结构化维护。件,则各阶段都有相应的文档,容易进行维护工作,这是结构化维护。(1)非结构化维护)非结构化维护因为只有源程序,没有文档或文档很少,维护活动只能从阅读、理解和分析源程序代码因为只有源程序,没有文档或文档很少,维护活动只能从阅读、理解和分析源程序代码开始,而这是相当困难的。开始,而这是相当困难的。(2)结构化维护)结构化维护运用软件工程思想开发的软件具有各个阶段的文档,这对于理解、掌握软件功能、性能、运用软件工程思想开发的软件具有各个阶段的文档,这对于理解、掌握软件功能、性能、软件结构、数据结构、系统接口和设计约束有

293、很大作用。软件结构、数据结构、系统接口和设计约束有很大作用。288目录页10.2软件维护的特点第10章2软件维护的困难性软件维护的困难性软件维护的困难性主要是由于软件需求分析和开发方法的缺陷造成的。在软件生存周期软件维护的困难性主要是由于软件需求分析和开发方法的缺陷造成的。在软件生存周期中的前两个时期没有采用严格而科学的管理和规划,必然会引起软件运行时的维护困难。这中的前两个时期没有采用严格而科学的管理和规划,必然会引起软件运行时的维护困难。这种困难表现在如下几方面:种困难表现在如下几方面:(1)难以读懂他人的程序。)难以读懂他人的程序。(2)无文档或文档不一致。无文档或文档不一致。(3)软件

294、开发和软件维护在人员和时间上的差异)软件开发和软件维护在人员和时间上的差异(4)维护工作毫无吸引力,缺乏成就感。)维护工作毫无吸引力,缺乏成就感。(5)难以追踪软件的建立过程。)难以追踪软件的建立过程。(6)通过多种版本的发行,难以追踪软件版本的演化过程。)通过多种版本的发行,难以追踪软件版本的演化过程。(7)软件在设计时未考虑修改需要。)软件在设计时未考虑修改需要。289目录页10.3软件维护的过程与组织第10章1维护机构维护机构维护机构通常以维护小组形式出维护机构通常以维护小组形式出现。维护小组分为临时维护小组和长期现。维护小组分为临时维护小组和长期维护小组。临时维护小组是非正式机构,维护

295、小组。临时维护小组是非正式机构,它执行一些特殊的或临时的维护任务;它执行一些特殊的或临时的维护任务;对于长期运行的复杂系统一般需要一个对于长期运行的复杂系统一般需要一个长期稳定的维护小组。但除了较大的软长期稳定的维护小组。但除了较大的软件开发公司外,通常在软件维护方面,件开发公司外,通常在软件维护方面,并不需要建立一个正式的组织机构。维并不需要建立一个正式的组织机构。维护工作往往是在没有计划的情况下进行护工作往往是在没有计划的情况下进行的。的。290目录页10.3软件维护的过程与组织第10章维护机构中的人员与职责如下:维护机构中的人员与职责如下:(1)维护负责人。)维护负责人。(2)维护管理员

296、。)维护管理员。(3)系统监督员。)系统监督员。(4)配置管理员。)配置管理员。(5)维护人员。)维护人员。291目录页10.3软件维护的过程与组织第10章2制定维护文档制定维护文档所有软件维护申请都应按规定的方式提出。软件维护组织通常提供维护申请报告所有软件维护申请都应按规定的方式提出。软件维护组织通常提供维护申请报告(Maintenance Request Report, MRR)或称软件问题报告,由申请维护的用户填写。如果发)或称软件问题报告,由申请维护的用户填写。如果发现了软件的错误,用户必须完整地说明产生错误的情况,包括输入数据、错误清单以及其他现了软件的错误,用户必须完整地说明产生

297、错误的情况,包括输入数据、错误清单以及其他有关材料。如果维护申请属于适应性维护或完善性维护,用户必须提出一份简要的维护规格有关材料。如果维护申请属于适应性维护或完善性维护,用户必须提出一份简要的维护规格说明书,列出所有希望的修改。维护申请报告将由维护管理员和系统监督员来研究处理。说明书,列出所有希望的修改。维护申请报告将由维护管理员和系统监督员来研究处理。292目录页10.3软件维护的过程与组织第10章3.维护流程维护流程293目录页10.3软件维护的过程与组织第10章4维护记录维护记录在维护阶段需要记录一些与维护有关的信息,这些信息可作为估计维护有效程度,确在维护阶段需要记录一些与维护有关的

298、信息,这些信息可作为估计维护有效程度,确定软件产品的质量,估算维护费用等工作的原始依据。定软件产品的质量,估算维护费用等工作的原始依据。5维护评价维护评价根据维护文档记录,可以对维护工作做一些度量。根据维护文档记录,可以对维护工作做一些度量。294目录页10.4软件的可维护性第10章1可理解性可理解性指维护人员通过阅读程序代码和相关文档,了解程序的结构、功能及其如何运行的难指维护人员通过阅读程序代码和相关文档,了解程序的结构、功能及其如何运行的难易程度。易程度。2可测试性可测试性表明预建立的测试准则对软件可进行测试的程度。表明预建立的测试准则对软件可进行测试的程度。3可修改性可修改性指软件容易

299、修改,而不至于产生副作用的程度。指软件容易修改,而不至于产生副作用的程度。4可移植性可移植性指一个软件系统从一个计算机环境移植到另一个计算机环境的容易程度。指一个软件系统从一个计算机环境移植到另一个计算机环境的容易程度。10.4.1 决定软件可维护性的因素决定软件可维护性的因素 295目录页10.4软件的可维护性第10章1明确软件的质量目标和优先级明确软件的质量目标和优先级如果要程序满足可维护性的七种特性的全部要求,那是不现实的。因为,有些特性是如果要程序满足可维护性的七种特性的全部要求,那是不现实的。因为,有些特性是相互促进的,而有些特性则是相互矛盾的。相互促进的,而有些特性则是相互矛盾的。

300、每一种质量特性的相对重要性不但因维护类型而不同,而且因程序的用途和计算环境每一种质量特性的相对重要性不但因维护类型而不同,而且因程序的用途和计算环境而不同。因此,在提出质量目标的同时还必须规定它们的优先级,这样有助于提高软件的质而不同。因此,在提出质量目标的同时还必须规定它们的优先级,这样有助于提高软件的质量,减少软件生存周期的费用。量,减少软件生存周期的费用。2使用先进的软件开发技术和工具使用先进的软件开发技术和工具为了改善软件可维护性,应及时学习并尽量使用能提高软件质量的技术和工具。例如,为了改善软件可维护性,应及时学习并尽量使用能提高软件质量的技术和工具。例如,模块化技术、结构化程序设计

301、技术、面向对象等先进的软件开发技术。模块化技术、结构化程序设计技术、面向对象等先进的软件开发技术。10.4.2 提高软件可维护性的方法提高软件可维护性的方法 296目录页10.4软件的可维护性第10章3质量保证审查质量保证审查要提高软件可维护性,必须要进行质量保证审查。质量保证审查可分为四种类型。要提高软件可维护性,必须要进行质量保证审查。质量保证审查可分为四种类型。(1)在检查点检查。)在检查点检查。(2)验收检查。)验收检查。(3)周期性维护检查。)周期性维护检查。(4)对软件包检查。)对软件包检查。10.4.2 提高软件可维护性的方法提高软件可维护性的方法 297目录页10.4软件的可维

302、护性第10章4选择可维护的程序设计语言选择可维护的程序设计语言编码所使用的程序设计语言对软件的可维护性影响很大。低级语言很难理解,因此也编码所使用的程序设计语言对软件的可维护性影响很大。低级语言很难理解,因此也很难维护。高级语言比低级语言容易理解,有更好的可维护性。某些高级语言可能比另一些很难维护。高级语言比低级语言容易理解,有更好的可维护性。某些高级语言可能比另一些更容易理解。尤其是第四代语言更容易理解,更容易编程,因此更容易维护。更容易理解。尤其是第四代语言更容易理解,更容易编程,因此更容易维护。5改进程序的文档改进程序的文档程序文档对提高程序的可理解性有着重要作用。规范、完整、一致的文档

303、是建立可维程序文档对提高程序的可理解性有着重要作用。规范、完整、一致的文档是建立可维护性的基本条件。在软件生存周期的每个阶段的技术复审和管理复审中,都应对文档进行检护性的基本条件。在软件生存周期的每个阶段的技术复审和管理复审中,都应对文档进行检查,对可维护性进行复审。查,对可维护性进行复审。10.4.2 提高软件可维护性的方法提高软件可维护性的方法 298目录页10.5软件维护的副作用第10章1代码副作用代码副作用最危险的副作用是修改软件源程序而产生的。在修改源代码时,最容易引入下列错误:最危险的副作用是修改软件源程序而产生的。在修改源代码时,最容易引入下列错误:(1)删除或修改子程序、语句标

304、号()删除或修改子程序、语句标号(LABEL)和标识符。)和标识符。(2)改变程序的执行效率。)改变程序的执行效率。(3)改变程序代码的时序关系、改变占用存储的大小。)改变程序代码的时序关系、改变占用存储的大小。(4)修改逻辑运算符。)修改逻辑运算符。(5)修改文件的打开或关闭操作。)修改文件的打开或关闭操作。(6)由设计变动引起的代码修改。)由设计变动引起的代码修改。(7)为边界条件的逻辑测试而做出的修改。)为边界条件的逻辑测试而做出的修改。299目录页10.5软件维护的副作用第10章2数据副作用数据副作用在修改数据结构时,有可能造成软件设计与数据结构的不匹配,因而导致软件错误。在修改数据结

305、构时,有可能造成软件设计与数据结构的不匹配,因而导致软件错误。数据副作用是指修改软件信息结构导致的不良后果,主要有以下几种:数据副作用是指修改软件信息结构导致的不良后果,主要有以下几种:(1)局部变量或全局变量的重新定义,记录或文件格式的重新定义。)局部变量或全局变量的重新定义,记录或文件格式的重新定义。(2)增加或减少一个数组或其他复杂数据结构的大小。)增加或减少一个数组或其他复杂数据结构的大小。(3)修改全局或公共数据。)修改全局或公共数据。(4)重新初始化控制标志或指针。)重新初始化控制标志或指针。(5)重新排列输入)重新排列输入/输出或函数(子程序)的参数。输出或函数(子程序)的参数。

306、300目录页10.5软件维护的副作用第10章3文档副作用文档副作用在软件维护过程中应统一考虑整个软件配置,必须对相关技术文档进行相应修改,不在软件维护过程中应统一考虑整个软件配置,必须对相关技术文档进行相应修改,不仅仅是源代码。否则会导致文档与程序不匹配,使文档不能反映软件当前的状态,这比没有仅仅是源代码。否则会导致文档与程序不匹配,使文档不能反映软件当前的状态,这比没有文档更麻烦。文档更麻烦。一次维护完成后,在再次交付软件之前应仔细复审整个软件配置,以减少文档副作用。一次维护完成后,在再次交付软件之前应仔细复审整个软件配置,以减少文档副作用。事实上,某些维护申请的提出只是由于用户文档不够清楚

307、。这时,只需对文档维护即可,并事实上,某些维护申请的提出只是由于用户文档不够清楚。这时,只需对文档维护即可,并不需要修改软件设计或源程序。不需要修改软件设计或源程序。为了控制因修改而引起的副作用,要做到:按模块把修改分组;自顶向下的安排被修为了控制因修改而引起的副作用,要做到:按模块把修改分组;自顶向下的安排被修改模块的顺序;每次只修改一个模块;对每个修改了的模块,在安排修改下一个模块前,要改模块的顺序;每次只修改一个模块;对每个修改了的模块,在安排修改下一个模块前,要确定这个修改的副作用,可使用交叉引用表、存储映像表、执行流程跟踪等。确定这个修改的副作用,可使用交叉引用表、存储映像表、执行流

308、程跟踪等。301目录页10.6软件逆向工程与再生工程第10章逆向工程与再生工程是目前预防性维护采用的主要技术。逆向工程与再生工程是目前预防性维护采用的主要技术。逆向工程术语源于硬件制造业,相互竞争的公司为了了解对方设计和制造工艺的机密,逆向工程术语源于硬件制造业,相互竞争的公司为了了解对方设计和制造工艺的机密,在得不到设计和制造说明书的情况下,通过拆卸实物获取信息。软件的逆向工程也基本相似,在得不到设计和制造说明书的情况下,通过拆卸实物获取信息。软件的逆向工程也基本相似,不过通常不过通常“解剖解剖”的不仅是竞争对手的程序,而且还包括本公司多年前的产品,此时得不到的不仅是竞争对手的程序,而且还包

309、括本公司多年前的产品,此时得不到设计设计“机密机密”的主要障碍是缺乏文档。因此,所谓软件的逆向工程就是对已有的程序,寻求的主要障碍是缺乏文档。因此,所谓软件的逆向工程就是对已有的程序,寻求比源代码更高级的抽象表达形式。一般认为,凡是在软件生存周期内,将软件某种形式的描比源代码更高级的抽象表达形式。一般认为,凡是在软件生存周期内,将软件某种形式的描述转换为更抽象形式的活动都可称为逆向工程。与之相关的概念是重构、设计恢复和再生工述转换为更抽象形式的活动都可称为逆向工程。与之相关的概念是重构、设计恢复和再生工程。程。302目录页10.6软件逆向工程与再生工程第10章重构,指在同一抽象级别上转换系统描

310、述形式。重构,指在同一抽象级别上转换系统描述形式。设计恢复,指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计设计恢复,指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息。的信息。再生工程,也称修复和改造工程,它是在逆向工程所获信息的基础上修改或再生已有再生工程,也称修复和改造工程,它是在逆向工程所获信息的基础上修改或再生已有的系统,产生系统的一个新版本。的系统,产生系统的一个新版本。303目录页软件项目管理第十一章本章本章要点要点n掌握软件项目管理的内容;n理解常见的软件组织形式和人员配备原则;n了解软件开发成本的估算方法和进度管理方法;n理解软件的质量特性

311、及保证质量的措施;n了解软件配置管理的内容;n了解软件工程标准化知识;n掌握软件文档的作用及分类。304目录页11.1软件项目管理概述第11章软件项目管理的职能包括:软件项目管理的职能包括:(1)制订计划:规定要完成的任务和要求,安排资源、人员和进度等。)制订计划:规定要完成的任务和要求,安排资源、人员和进度等。(2)建立组织:建立分工明确的为实施计划的责任制机构,以保证任务的完成。)建立组织:建立分工明确的为实施计划的责任制机构,以保证任务的完成。(3)配备人员:根据任务要求,任用各种层次的技术人员和管理人员。)配备人员:根据任务要求,任用各种层次的技术人员和管理人员。(4)协调或追踪与指导

312、:跟踪项目的进展情况,协调、指导、鼓励和动员各种人员完成)协调或追踪与指导:跟踪项目的进展情况,协调、指导、鼓励和动员各种人员完成所分配的任务。所分配的任务。(5)控制或检验:对照计划和标准,监督和检验项目实施的情况。)控制或检验:对照计划和标准,监督和检验项目实施的情况。11.1.1 软件项目管理的职责软件项目管理的职责 305目录页11.1软件项目管理概述第11章1启动软件项目启动软件项目在制定项目计划前,应首先明确项目的目标、考虑候选的解决方案、清楚技术和管理上在制定项目计划前,应首先明确项目的目标、考虑候选的解决方案、清楚技术和管理上的要求等。项目的目标标明了项目的目的,但并不涉及如何

313、达到目的。候选的解决方案使管的要求等。项目的目标标明了项目的目的,但并不涉及如何达到目的。候选的解决方案使管理人员能够从中选择最好的方案,从而确定合理、精确的成本估算,进行实际可行的任务分理人员能够从中选择最好的方案,从而确定合理、精确的成本估算,进行实际可行的任务分解以及可管理的进度安排。解以及可管理的进度安排。项目启动前,应成立项目组,召开项目启动会议,进行组内交流,深刻理解项目目标,项目启动前,应成立项目组,召开项目启动会议,进行组内交流,深刻理解项目目标,对组织形式、管理方式和方针取得一致认识,明确岗位职责等。对组织形式、管理方式和方针取得一致认识,明确岗位职责等。11.1.2 软件项

314、目管理的过程软件项目管理的过程 306目录页11.1软件项目管理概述第11章2制定项目计划制定项目计划项目计划是用来指导组织、实施、协调和控制软件开发的重要文件,其主要作用是:项目计划是用来指导组织、实施、协调和控制软件开发的重要文件,其主要作用是:(1)可激励和鼓舞团队的士气。)可激励和鼓舞团队的士气。(2)可以使项目成员有明确的分工及工作目标。)可以使项目成员有明确的分工及工作目标。(3)可促进项目组相关人员之间的沟通与交流。)可促进项目组相关人员之间的沟通与交流。(4)可作为项目过程控制和工作考核的基准。)可作为项目过程控制和工作考核的基准。(5)可作为解决用户和开发团队间冲突的依据。)

315、可作为解决用户和开发团队间冲突的依据。11.1.2 软件项目管理的过程软件项目管理的过程 307目录页11.1软件项目管理概述第11章制定项目计划的主要工作是:制定项目计划的主要工作是:(1)确定详细的项目实施范围。)确定详细的项目实施范围。(2)定义递交的工作成果。)定义递交的工作成果。(3)评估实施过程中的主要风险。)评估实施过程中的主要风险。(4)制定项目实施的时间计划。)制定项目实施的时间计划。(5)制定成本和预算计划。)制定成本和预算计划。(6)制定人力资源计划等。)制定人力资源计划等。11.1.2 软件项目管理的过程软件项目管理的过程 308目录页11.1软件项目管理概述第11章3

316、计划的追踪和控制计划的追踪和控制建立了进度安排后,就可以开始进行追踪和控制活动。项目管理人员负责在整个过程中建立了进度安排后,就可以开始进行追踪和控制活动。项目管理人员负责在整个过程中监督过程的实施,提供过程进展的内部报告,并按合同规定向需求方提供外部报告。项目管监督过程的实施,提供过程进展的内部报告,并按合同规定向需求方提供外部报告。项目管理人员可对资源重新定向,对任务重新安排,或者与需求方协商后修改交付日期以及调整已理人员可对资源重新定向,对任务重新安排,或者与需求方协商后修改交付日期以及调整已经暴露的问题。经暴露的问题。4评审和评价计划的完成程度评审和评价计划的完成程度项目管理人员需要对

317、项目进行评审,对计划的完成程度进行评价。同时还要对计划和项项目管理人员需要对项目进行评审,对计划的完成程度进行评价。同时还要对计划和项目进行检查,使之在变更或完成后保持完整性和一致性。目进行检查,使之在变更或完成后保持完整性和一致性。5编写管理文档编写管理文档如果软件开发工作完成,项目管理人员应从完整性方面检查项目完成的结果和记录,并如果软件开发工作完成,项目管理人员应从完整性方面检查项目完成的结果和记录,并把这些记录编写成文档保存。把这些记录编写成文档保存。11.1.2 软件项目管理的过程软件项目管理的过程 309目录页11.2软件项目管理概述第11章(1)早落实责任。)早落实责任。在软件项

318、目每项工作的开始,要尽早指定专人负责,使其有权进行管理,并对任务的完在软件项目每项工作的开始,要尽早指定专人负责,使其有权进行管理,并对任务的完成全面负责。成全面负责。(2)减少接口。)减少接口。在软件开发过程中,人与人之间的交流和联系是必不可少的,即存在着通信路径。一个在软件开发过程中,人与人之间的交流和联系是必不可少的,即存在着通信路径。一个组织的生产效率随着完成任务中存在的通信路径数目增加而降低。要有合理的人员分工、好组织的生产效率随着完成任务中存在的通信路径数目增加而降低。要有合理的人员分工、好的组织结构、有效的通信,这对于提高开发效率非常重要。的组织结构、有效的通信,这对于提高开发效

319、率非常重要。(3)责权均衡。)责权均衡。明确每个开发人员的权利和责任,开发人员的责任不应该大于其拥有的权利。明确每个开发人员的权利和责任,开发人员的责任不应该大于其拥有的权利。11.2.1 建立项目组织的原则建立项目组织的原则310目录页11.2软件项目管理概述第11章1.按项目划分的形式按项目划分的形式把软件开发人员按项目或课题组成小组,小组成员自始至终参加所承担项目或课题的各把软件开发人员按项目或课题组成小组,小组成员自始至终参加所承担项目或课题的各项任务。项任务。2.按职能划分的形式按职能划分的形式把软件开发人员按任务的工作阶段划分成若干个专业小组,每个小组承担其中的一个阶把软件开发人员

320、按任务的工作阶段划分成若干个专业小组,每个小组承担其中的一个阶段任务,每个小组可同时承担多个项目。段任务,每个小组可同时承担多个项目。3.矩阵型形式矩阵型形式这种模式实际上是以上两种模式的结合。一方面,按工作性质成立一些专门组,如开发这种模式实际上是以上两种模式的结合。一方面,按工作性质成立一些专门组,如开发组、业务组、测试组等;另一方面,每个项目有负责人,每个人属于某个项目组,参加该项组、业务组、测试组等;另一方面,每个项目有负责人,每个人属于某个项目组,参加该项目的工作。目的工作。11.2.2 项目组织结构的形式项目组织结构的形式 311目录页11.2软件项目管理概述第11章(1)主程序员

321、制小组。该小组的核心有三个人。主程序员、辅助程序员和程序管理员。)主程序员制小组。该小组的核心有三个人。主程序员、辅助程序员和程序管理员。主程序员由经验丰富、能力较强的高级程序员担任,全面负责系统的设计、编码、测试和安主程序员由经验丰富、能力较强的高级程序员担任,全面负责系统的设计、编码、测试和安装工作;辅助程序员协助主程序员工作;程序管理员负责保管和维护所有的软件文档资料,装工作;辅助程序员协助主程序员工作;程序管理员负责保管和维护所有的软件文档资料,帮助收集软件的数据,并在研究、分析和评价文档资料的准备方面进行协助工作。帮助收集软件的数据,并在研究、分析和评价文档资料的准备方面进行协助工作

322、。(2)民主制程序员小组。在民主制小组中,组内成员之间可以平等地交换意见。工作目)民主制程序员小组。在民主制小组中,组内成员之间可以平等地交换意见。工作目标的制定及决定的提出都由全体成员参加。这种组织形式强调发挥小组每个成员的积极性,标的制定及决定的提出都由全体成员参加。这种组织形式强调发挥小组每个成员的积极性,适合于研制时间长、开发难度大的项目。适合于研制时间长、开发难度大的项目。(3)层次式小组。)层次式小组。这种组织中,组内人员分为三级。组长负责全组工作,直接领导这种组织中,组内人员分为三级。组长负责全组工作,直接领导23名高级程序员,每名高级程序员,每位高级程序员管理若干名程序员。这种

323、组织比较适合于层次结构的课题。位高级程序员管理若干名程序员。这种组织比较适合于层次结构的课题。11.2.3 程序设计小组的形式程序设计小组的形式 312目录页11.2软件项目管理概述第11章1项目开发各阶段所需人员项目开发各阶段所需人员软件开发人员一般分为项目负责人、系统分析员、高级程序员、程序员、初级程序员、软件开发人员一般分为项目负责人、系统分析员、高级程序员、程序员、初级程序员、资料员和其他辅助人员。其中系统分析员和高级程序员是高级技术人员;后面几种是低级技资料员和其他辅助人员。其中系统分析员和高级程序员是高级技术人员;后面几种是低级技术人员。根据项目规模的大小,有的人可能身兼数职,但要

324、明确职责。术人员。根据项目规模的大小,有的人可能身兼数职,但要明确职责。软件开发人员要少而精,担任不同职责的人,要求具备的能力也不同。项目负责人需要软件开发人员要少而精,担任不同职责的人,要求具备的能力也不同。项目负责人需要具有组织能力、判断能力和对重大问题做出决策的能力;系统分析员需要有概括能力、分析具有组织能力、判断能力和对重大问题做出决策的能力;系统分析员需要有概括能力、分析能力和社交活动能力;能力和社交活动能力;程序员需要有熟练的编程能力。程序员需要有熟练的编程能力。11.2.4 人员配备人员配备313目录页11.2软件项目管理概述第11章2配备人员的原则配备人员的原则配备软件人员时,

325、应注意以下三个主要原则配备软件人员时,应注意以下三个主要原则:重质量重质量:软件项目是技术性很强的工作,任用少量有实践经验、有能力的人员去完成软件项目是技术性很强的工作,任用少量有实践经验、有能力的人员去完成关键性的任务,常常要比任用较多的经验不足的人员更有效。关键性的任务,常常要比任用较多的经验不足的人员更有效。重培训重培训:花力气培养所需的技术人员和管理人员是有效解决人员问题的好方法。花力气培养所需的技术人员和管理人员是有效解决人员问题的好方法。双阶梯提升双阶梯提升:人员的提升应分别按技术职务和管理职务进行,不能混在一起。人员的提升应分别按技术职务和管理职务进行,不能混在一起。11.2.4

326、 人员配备人员配备314目录页11.2软件项目管理概述第11章3项目经理人员的能力要求项目经理人员的能力要求软件项目经理人员是工作的组织者,其管理能力的强弱是项目成败的关键。除一般的管软件项目经理人员是工作的组织者,其管理能力的强弱是项目成败的关键。除一般的管理能力要求外,他还应具有以下能力理能力要求外,他还应具有以下能力:总结和表达能力。能够对用户提出的非技术性要求加以整理提炼,以技术说明书形式总结和表达能力。能够对用户提出的非技术性要求加以整理提炼,以技术说明书形式转告给分析员和测试员。转告给分析员和测试员。综合问题的能力。能够把表面上似乎无关的要求集中在一起,归结为综合问题的能力。能够把

327、表面上似乎无关的要求集中在一起,归结为“需要什么需要什么”和和“要解决什么要解决什么”,具有解决综合问题的能力。,具有解决综合问题的能力。沟通能力。要懂得心理学。能说服用户放弃一些不切实际的要求,以保证合理的要求沟通能力。要懂得心理学。能说服用户放弃一些不切实际的要求,以保证合理的要求得以满足。得以满足。11.2.4 人员配备人员配备315目录页11.3软件开发成本估算第11章软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价,不包括原材料和软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价,不包括原材料和能源的消耗,主要是人的劳动消耗。软件产品不存在重复制造过程,软件开发

328、成本是以一次能源的消耗,主要是人的劳动消耗。软件产品不存在重复制造过程,软件开发成本是以一次性开发过程所花费的代价来计算的。因此,软件开发成本的估算,应该以整个软件开发过程性开发过程所花费的代价来计算的。因此,软件开发成本的估算,应该以整个软件开发过程所花费的代价作为依据。所花费的代价作为依据。软件具有可见性差、定量化难等特殊性,尤其对于一个大型的软件项目,由于项目的复软件具有可见性差、定量化难等特殊性,尤其对于一个大型的软件项目,由于项目的复杂性,很难在项目完成前准确地估算出开发软件所需要的工作量和费用。杂性,很难在项目完成前准确地估算出开发软件所需要的工作量和费用。对于一个大型的软件项目,

329、需要进行一系列的估算处理。成本估计不是精确的科学,因对于一个大型的软件项目,需要进行一系列的估算处理。成本估计不是精确的科学,因此应该使用几种不同的估计技术以便相互校验。此应该使用几种不同的估计技术以便相互校验。316目录页11.3软件开发成本估算第11章常用的成本估算策略有以下四种:常用的成本估算策略有以下四种:(1)参考已经完成的类似项目,估计待开发项目的工作量和成本。)参考已经完成的类似项目,估计待开发项目的工作量和成本。(2)将大的项目分解成若干个小项目,分别对每个子项目的工作量和成本进行估算,再)将大的项目分解成若干个小项目,分别对每个子项目的工作量和成本进行估算,再估算整个项目的工

330、作量和成本。估算整个项目的工作量和成本。(3)根据软件生存周期,分别估算出软件开发各阶段的工作量和成本,然后再把这些工)根据软件生存周期,分别估算出软件开发各阶段的工作量和成本,然后再把这些工作量和成本汇总,估算出整个项目的工作量和成本。作量和成本汇总,估算出整个项目的工作量和成本。(4)根据实验或历史数据给出软件项目工作量或成本的经验估算公式。)根据实验或历史数据给出软件项目工作量或成本的经验估算公式。317目录页11.4软件进度管理第11章1.任务分配、人力资源分配、时间分配要与工程进度相协调任务分配、人力资源分配、时间分配要与工程进度相协调2.任务分解与并行化任务分解与并行化3.工作量分

331、布。工作量分布。11.4.1 进度安排中应考虑的问题进度安排中应考虑的问题318目录页11.4软件进度管理第11章1甘特图法甘特图法甘特图,又称横道图,这种方法基于作业排序的目的,是各项任务与时间的对照表。甘甘特图,又称横道图,这种方法基于作业排序的目的,是各项任务与时间的对照表。甘特图是先把任务分解成子任务。再用水平线表示任务的工作阶段,线段的起点和终点分别表特图是先把任务分解成子任务。再用水平线表示任务的工作阶段,线段的起点和终点分别表示任务的起始时间和结束时间,线段的长度表示完成任务所需的时间。示任务的起始时间和结束时间,线段的长度表示完成任务所需的时间。甘特图的优点是直观简明,易于绘制

332、,它标明了各任务的计划进度和当前进度,能动态甘特图的优点是直观简明,易于绘制,它标明了各任务的计划进度和当前进度,能动态反映软件开发的进展情况。其缺点是不能显式地描绘各项任务彼此间的依赖关系,进度计划反映软件开发的进展情况。其缺点是不能显式地描绘各项任务彼此间的依赖关系,进度计划中的关键阶段不明确,难于判断哪些部分应当是主攻和主控对象、计划中有潜力的部分及潜中的关键阶段不明确,难于判断哪些部分应当是主攻和主控对象、计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。力的大小不明确,往往造成潜力的浪费。11.4.2 进度安排方法进度安排方法 319目录页11.4软件进度管理第11章2工程网

333、络图法工程网络图法为了克服甘特图的缺点,可以用具有时间标志的网状图来表示各任务的分解情况,以及为了克服甘特图的缺点,可以用具有时间标志的网状图来表示各任务的分解情况,以及各个子任务之间在进度上的逻辑依赖关系,即工程网络图。各个子任务之间在进度上的逻辑依赖关系,即工程网络图。工程网络图是用圆圈表示事件(一项作业的开始或结束),用箭头表示作业。一个圆圈工程网络图是用圆圈表示事件(一项作业的开始或结束),用箭头表示作业。一个圆圈表示一个开发阶段,圆圈内是阶段符号,圆圈上方是该阶段的最早开始表示一个开发阶段,圆圈内是阶段符号,圆圈上方是该阶段的最早开始/结束时间,圆圈下方结束时间,圆圈下方是该阶段的最

334、迟开始是该阶段的最迟开始/结束时间;箭头表示各个软件开发阶段的依赖关系。结束时间;箭头表示各个软件开发阶段的依赖关系。11.4.2 进度安排方法进度安排方法 320目录页11.4软件进度管理第11章(1)使用)使用Gantt图描述图描述11.4.2 进度安排方法进度安排方法 321目录页11.4软件进度管理第11章(2)使用工程化网络图描述)使用工程化网络图描述11.4.2 进度安排方法进度安排方法 322目录页11.5软件质量保证第11章保证软件产品的质量是软件产品生产过程的关键。在这里,软件产品的质量是指软件系保证软件产品的质量是软件产品生产过程的关键。在这里,软件产品的质量是指软件系统满

335、足用户需要或期望的程度。统满足用户需要或期望的程度。软件质量可分解成六个要素,这六个要素是软件的基本特征:软件质量可分解成六个要素,这六个要素是软件的基本特征:(1)功能性:)功能性:(2)可靠性:)可靠性:(3)易使用性:)易使用性:(4)效率:)效率:(5)可维护性:)可维护性:(6)可移植性:)可移植性:11.5.1 软件质量管理软件质量管理 323目录页11.5软件质量保证第11章CMM是软件过程能力成熟度模型(是软件过程能力成熟度模型(Capacity Maturity Model)的简称。对于软件企业而)的简称。对于软件企业而言,言,CMM既是一把当前软件过程完善程度的尺子,也是软

336、件开发机构改进软件过程的指南。既是一把当前软件过程完善程度的尺子,也是软件开发机构改进软件过程的指南。CMM的核心是对软件开发和维护的全过程进行监控和研究,使其科学化、标准化、能够合理的核心是对软件开发和维护的全过程进行监控和研究,使其科学化、标准化、能够合理地实现预定目标。地实现预定目标。CMM是是20世纪世纪80年代最重要的软件工程发展之一,目前已经在许多国家和地区得到了广年代最重要的软件工程发展之一,目前已经在许多国家和地区得到了广泛应用,并成为衡量软件公司软件开发管理水平的重要参考因素和软件过程改进的工业标准。泛应用,并成为衡量软件公司软件开发管理水平的重要参考因素和软件过程改进的工业

337、标准。CMM定义了软件过程成熟度的五个级别,它们描述了过程能力,即通过一系列软件过程定义了软件过程成熟度的五个级别,它们描述了过程能力,即通过一系列软件过程的标准所能实现预期结果的程度。的标准所能实现预期结果的程度。11.5.2 CMM模型模型 324目录页11.6软件配置管理第11章1软件配置管理的定义软件配置管理的定义软件配置管理(软件配置管理(Software Configure Management,SCM)用于整个软件工程过程,其任)用于整个软件工程过程,其任务是标识和确定系统中的配置项,在系统整个生存期内控制这些配置项的发布和变更,记录务是标识和确定系统中的配置项,在系统整个生存期

338、内控制这些配置项的发布和变更,记录并报告配置的状态和变更要求,验证配置项的完整性和正确性。总之,并报告配置的状态和变更要求,验证配置项的完整性和正确性。总之,SCM活动的目标是为了:活动的目标是为了:标识变更;标识变更;控制变更;控制变更;确保变更正确地实现;确保变更正确地实现;向其他有关人员报告变更。向其他有关人员报告变更。325目录页11.6软件配置管理第11章2软件配置管理的主要任务软件配置管理的主要任务(1)标识配置项)标识配置项配置项(配置项(Software Configure Item,SCI)简单地说就是受)简单地说就是受SCM控制和管理的工作产品单元,控制和管理的工作产品单元

339、,在配置管理过程中作为单个实体对待,是配置管理的对象。按照在配置管理过程中作为单个实体对待,是配置管理的对象。按照ISO 9000的说明,的说明,SCI包括:包括:与合同、过程、计划和产品有关的文档和数据;与合同、过程、计划和产品有关的文档和数据;源代码、目标代码和可执行代码;源代码、目标代码和可执行代码;相关产品,包括软件工具、库内的可复用软件、外购软件及用户提供的软件。随着软件工程相关产品,包括软件工具、库内的可复用软件、外购软件及用户提供的软件。随着软件工程过程的进展,过程的进展,SCI的数量会不断增多。的数量会不断增多。326目录页11.6软件配置管理第11章(2)进行配置控制)进行配

340、置控制这是配置管理的关键。包括存取控制、版本控制、变更控制和产品发布控制等。这是配置管理的关键。包括存取控制、版本控制、变更控制和产品发布控制等。存取控制通过配置管理中的存取控制通过配置管理中的“软件开发库软件开发库”、“软件基线库软件基线库”、“软件产品库软件产品库”来实来实现,每个库对应着不同级别的操作权限,为团队成员授予不同的访问权利。现,每个库对应着不同级别的操作权限,为团队成员授予不同的访问权利。版本控制往往使用自动的版本控制工具来实现,如版本控制往往使用自动的版本控制工具来实现,如SVN。变更控制。是应对软件开发过程中各种变化的机制,可以通过建立控制点和报告与审变更控制。是应对软件

341、开发过程中各种变化的机制,可以通过建立控制点和报告与审查制度来实现。查制度来实现。产品发布控制面向最终发布版本的软件产品,旨在保证提交给用户的软件产品版本是产品发布控制面向最终发布版本的软件产品,旨在保证提交给用户的软件产品版本是完整、正确和一致的。完整、正确和一致的。327目录页11.6软件配置管理第11章(3)记录配置状态)记录配置状态配置状态报告记录了软件开发过程中每一次配置变更的详细信息。对每一项变更要记录配置状态报告记录了软件开发过程中每一次配置变更的详细信息。对每一项变更要记录发生了什么?为什么发生?何时发生的?是谁做的?会有什么影响等。记录配置状态的目的发生了什么?为什么发生?何

342、时发生的?是谁做的?会有什么影响等。记录配置状态的目的是使配置管理的过程具有可追踪性。是使配置管理的过程具有可追踪性。(4)执行配置审计)执行配置审计配置审计的目的就是要证实整个软件生存期中各项产品在技术上和管理上的完整性,确配置审计的目的就是要证实整个软件生存期中各项产品在技术上和管理上的完整性,确保所有文档的内容变动不超出当初确定的软件要求范围,使得软件配置具有良好的可跟踪性,保所有文档的内容变动不超出当初确定的软件要求范围,使得软件配置具有良好的可跟踪性,保证软件工作产品的一致性和完整性,从而保证最终软件版本产品发布的正确性。保证软件工作产品的一致性和完整性,从而保证最终软件版本产品发布

343、的正确性。328目录页11.6软件配置管理第11章3软件配置管理工具软件配置管理工具配置管理工具可以分为三个级别:配置管理工具可以分为三个级别:第一个级别:版本控制工具,是入门级的工具,如第一个级别:版本控制工具,是入门级的工具,如CVS、Visual Source Safe。第二个级别:项目级配置管理工具,适合管理中小型项目,在版本控制的基础上增加了第二个级别:项目级配置管理工具,适合管理中小型项目,在版本控制的基础上增加了变更控制、状态统计功能,如变更控制、状态统计功能,如ClearCase、PVCS。第三个级别:企业级配置管理工具,在实现传统意义的配置管理的基础上又具有比较强第三个级别:

344、企业级配置管理工具,在实现传统意义的配置管理的基础上又具有比较强的过程管理功能,如的过程管理功能,如AllFusion Harvest。 329目录页11.7软件工程标准与文档管理第11章1软件工程标准化的定义软件工程标准化的定义软件工程标准化就是对软件生存周期内的所有开发、维护和管理工作都逐步建立起标准。软件工程标准化就是对软件生存周期内的所有开发、维护和管理工作都逐步建立起标准。软件工程标准化会给软件开发工作带来以下好处:软件工程标准化会给软件开发工作带来以下好处:(1)提高软件的可靠性、可维护性和可移植性,从而提高软件产品的质量。)提高软件的可靠性、可维护性和可移植性,从而提高软件产品的

345、质量。(2)提高软件的生产率,提高软件人员的技术水平。)提高软件的生产率,提高软件人员的技术水平。(3)改善软件开发人员之间的通信效率、减少差错。)改善软件开发人员之间的通信效率、减少差错。(4)有利于软件工程的管理。)有利于软件工程的管理。(5)有利于降低软件成本、缩短软件开发周期,降低运行与维护成本。)有利于降低软件成本、缩短软件开发周期,降低运行与维护成本。11.7.1 软件工程标准软件工程标准 330目录页11.7软件工程标准与文档管理第11章2软件工程标准的分类软件工程标准的分类软件工程标准的类型是多方面的,我国国家标准软件工程标准的类型是多方面的,我国国家标准GB/T 15538|

346、1995软件工程标准分类软件工程标准分类法法给出了软件工程标准的分类,包括:给出了软件工程标准的分类,包括:(1)过程标准(如方法、技术、度量等)过程标准(如方法、技术、度量等)它同开发一个产品或从事一项服务的一系它同开发一个产品或从事一项服务的一系列活动或操作有关。列活动或操作有关。(2)产品标准(如需求、设计、部件、描述及计划报告等)产品标准(如需求、设计、部件、描述及计划报告等)它涉及事务的格式或内它涉及事务的格式或内容。容。(3)行业标准(如职业认证、特许及课程等)行业标准(如职业认证、特许及课程等)它涉及软件工程行业的所有方面。它涉及软件工程行业的所有方面。(4)记号标准(如术语、表

347、示法及语言等)记号标准(如术语、表示法及语言等)它论述了在软件工程行业范围内,以唯它论述了在软件工程行业范围内,以唯一的一种方式进行交流的方法。一的一种方式进行交流的方法。11.7.1 软件工程标准软件工程标准 331目录页11.7软件工程标准与文档管理第11章3软件工程标准的层次软件工程标准的层次根据软件工程标准的制定机构与适用范围,软件工程标准可分为国际标准、国家标准、根据软件工程标准的制定机构与适用范围,软件工程标准可分为国际标准、国家标准、行业标准、企业(机构)规范以及项目(课题)规范五个层次。行业标准、企业(机构)规范以及项目(课题)规范五个层次。(1)国际标准)国际标准国际标准是由

348、国际标准化组织国际标准是由国际标准化组织ISO(International Standards Organization)、国际电工委)、国际电工委员会员会IEC(International Electro|technical Commission)以及由)以及由ISO公布的其他国际组织(其中,公布的其他国际组织(其中,ISO、IEC是两个最大的国际标准化组织)制定的标准。国际标准在世界范围内使用,各国可以是两个最大的国际标准化组织)制定的标准。国际标准在世界范围内使用,各国可以自愿采用,不强制使用。到目前为止,自愿采用,不强制使用。到目前为止,ISO和和IEC共发布国际标准共发布国际标准1万

349、多个。万多个。11.7.1 软件工程标准软件工程标准 332目录页11.7软件工程标准与文档管理第11章(2)国家标准)国家标准国家标准是由政府或国家级的机构制定或批准的、适用于全国范围的标准,是一个国家国家标准是由政府或国家级的机构制定或批准的、适用于全国范围的标准,是一个国家标准体系的主体和基础,国内各级标准必须服从、不得与之相抵触。标准体系的主体和基础,国内各级标准必须服从、不得与之相抵触。(3)行业标准)行业标准行业标准是由行业机构、学术团体或国防机构制定,并适用于某个业务领域的标准。行业标准是由行业机构、学术团体或国防机构制定,并适用于某个业务领域的标准。(4)企业规范)企业规范企业

350、规范由企业或公司批准、发布的适用于本单位的规范。企业规范由企业或公司批准、发布的适用于本单位的规范。(5)项目规范)项目规范项目规范由某一项目组织制定,且为该项任务专用的软件工程规范。项目规范由某一项目组织制定,且为该项任务专用的软件工程规范。11.7.1 软件工程标准软件工程标准 333目录页11.7软件工程标准与文档管理第11章1软件文档的作用软件文档的作用软件文档也是软件产品的一部分,没有文档的软件不能称其为软件。软件文档也是软件产品的一部分,没有文档的软件不能称其为软件。软件文档在软件开发人员、软件管理人员、软件维护人员、用户以及计算机之间起着重软件文档在软件开发人员、软件管理人员、软

351、件维护人员、用户以及计算机之间起着重要的桥梁作用。开发人员通过软件文档交流设计思想和设计软件;管理人员通过文档了解软要的桥梁作用。开发人员通过软件文档交流设计思想和设计软件;管理人员通过文档了解软件开发项目安排、进度、资源使用和成果等;维护人员通过文档对项目进行维护;用户通过件开发项目安排、进度、资源使用和成果等;维护人员通过文档对项目进行维护;用户通过文档掌握软件的使用和操作。文档掌握软件的使用和操作。规范、齐全、有效的软件文档会使软件开发活动更科学、规范,更有成效。缺乏必要的规范、齐全、有效的软件文档会使软件开发活动更科学、规范,更有成效。缺乏必要的文档资料或者文档资料不合格,必然给软件开

352、发和维护带来许多严重的困难。文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难。 11.7.2 软件文档的编写软件文档的编写 334目录页11.7软件工程标准与文档管理第11章2软件文档的类型软件文档的类型按照文档产生和使用的范围,软件文档大致可分为三类:按照文档产生和使用的范围,软件文档大致可分为三类:(1)开发文档:这类文档在软件开发过程中,作为软件开发人员前一阶段工作成果的体)开发文档:这类文档在软件开发过程中,作为软件开发人员前一阶段工作成果的体现和后一阶段工作的依据。现和后一阶段工作的依据。(2)管理文档:这类文档是在软件开发过程中,由软件开发人员制定的需提交的一些工

353、)管理文档:这类文档是在软件开发过程中,由软件开发人员制定的需提交的一些工作计划或工作报告。管理人员能够通过这些文档了解软件开发项目的安排、进度、资源使用作计划或工作报告。管理人员能够通过这些文档了解软件开发项目的安排、进度、资源使用和成果等。和成果等。(3)用户文档:这类文档是软件开发人员为用户准备的有关该软件使用、操作、维护的)用户文档:这类文档是软件开发人员为用户准备的有关该软件使用、操作、维护的资料。资料。11.7.2 软件文档的编写软件文档的编写 335目录页11.7软件工程标准与文档管理第11章3.文档的编写要求文档的编写要求(1)针对性:文档编制前应分清读者对象。按不同的类型、不

354、同层次的读者,决定怎样)针对性:文档编制前应分清读者对象。按不同的类型、不同层次的读者,决定怎样适应他们的需要。适应他们的需要。(2)精确性。文档的行文应当十分确切,不能出现多义性的描述。同一项目几个文档的)精确性。文档的行文应当十分确切,不能出现多义性的描述。同一项目几个文档的内容应当是协调一致的,没有矛盾的。内容应当是协调一致的,没有矛盾的。(3)清晰性:文档编写应力求简明,如有可能,配以适当的图表,以增强其清晰性。)清晰性:文档编写应力求简明,如有可能,配以适当的图表,以增强其清晰性。(4)完整性:任何一个文档都应当是完整的、独立的,应该自成体系。)完整性:任何一个文档都应当是完整的、独立的,应该自成体系。(5)灵活性:各种不同软件项目,其规模和复杂程度有着许多实际差别,不能一律看待。)灵活性:各种不同软件项目,其规模和复杂程度有着许多实际差别,不能一律看待。(6)可追溯性:由于各开发阶段编制的文档与各阶段完成的工作有着紧密的关系,前后)可追溯性:由于各开发阶段编制的文档与各阶段完成的工作有着紧密的关系,前后两个阶段生成的文档,随着开发工作的逐步扩展,具有一定的继承关系。两个阶段生成的文档,随着开发工作的逐步扩展,具有一定的继承关系。11.7.2 软件文档的编写软件文档的编写 谢谢观看

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

最新文档


当前位置:首页 > 生活休闲 > 网络生活

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