软件工程课件PPT 1544页

  • 4.72 MB
  • 2022-04-29 14:22:40 发布

软件工程课件PPT

  • 1544页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'什么是软件什么是软件软件的分类软件的分类软件的发展软件的发展软件生存期软件生存期软件工程软件工程软件工程的目的和要求软件工程的目的和要求 什么是软件?什么是软件?n软件软件是计算机系统中与硬件相互依是计算机系统中与硬件相互依存的另一部分,存的另一部分,它是包括程序,数它是包括程序,数据及其相关文档的完整集合。据及其相关文档的完整集合。n程序程序是按事先设计的功能和性能要是按事先设计的功能和性能要求执行的指令序列求执行的指令序列n数据数据是使程序能正常操纵信息的数是使程序能正常操纵信息的数据结构据结构n文档文档是与程序开发,维护和使用有是与程序开发,维护和使用有关的图文材料关的图文材料 软件的特点软件的特点n软件是一种软件是一种逻辑实体逻辑实体,而不是具体,而不是具体的物理实体。因而它具有抽象性的物理实体。因而它具有抽象性n软件的生产与硬件不同,在它的开软件的生产与硬件不同,在它的开发过程中发过程中没有明显的制造过程没有明显的制造过程n在软件的运行和使用期间,在软件的运行和使用期间,没有硬没有硬件那样的机械磨损,老化问题件那样的机械磨损,老化问题 n软件的开发和运行常受到计算机系软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同统的限制,对计算机系统有着不同程度的依赖性程度的依赖性n软件的开发至今软件的开发至今尚未完全摆脱手工尚未完全摆脱手工艺的开发方式艺的开发方式n软件本身是复杂的软件本身是复杂的F实际问题的复杂性实际问题的复杂性F程序逻辑结构的复杂性程序逻辑结构的复杂性n软件成本相当昂贵软件成本相当昂贵n相当多的软件工作涉及到社会因素相当多的软件工作涉及到社会因素 软件的分类软件的分类n按软件的功能进行划分:按软件的功能进行划分:u系统软件系统软件F操作系统操作系统F数据库管理系统数据库管理系统F设备驱动程序设备驱动程序F通信处理程序等通信处理程序等 u支撑软件支撑软件F文本编辑程序文本编辑程序F文件格式化程序文件格式化程序F磁盘向磁带向数据传输的程序磁盘向磁带向数据传输的程序F程序库系统程序库系统F支持需求分析、设计、实现、支持需求分析、设计、实现、测试和支持管理的软件测试和支持管理的软件 u应用软件应用软件F商业数据处理软件商业数据处理软件F工程与科学计算软件工程与科学计算软件F计算机辅助设计/制造软件计算机辅助设计/制造软件F系统仿真软件系统仿真软件F智能产品嵌入软件智能产品嵌入软件F医疗、制药软件医疗、制药软件F事务管理、办公自动化软件事务管理、办公自动化软件F计算机辅助教学软件计算机辅助教学软件 n按软件规模进行划分:按软件规模进行划分:类别类别参加人员数参加人员数研制期限研制期限源程序行数源程序行数微型微型1111~~44周周0.50.5kk小型小型1111~~66月月11kk~~2k2k中型中型22~~5511~~22年年55kk~~50k50k大型大型55~~202022~~33年年5050kk~~100k100k甚大型甚大型100100~~1000410004~~55年年11M(=1000k)M(=1000k)极大型极大型20002000~~5000550005~~1010年年11MM~~10M10M n按软件工作方式划分:按软件工作方式划分:u实时处理软件实时处理软件u分时软件分时软件u交互式软件交互式软件u批处理软件批处理软件n按软件服务对象的范围划分:按软件服务对象的范围划分:u项目软件项目软件u产品软件产品软件 n按使用的频度进行划分:按使用的频度进行划分:u一次使用一次使用u频繁使用频繁使用n按软件失效的影响进行划分:按软件失效的影响进行划分:u高可靠性软件高可靠性软件u一般可靠性软件一般可靠性软件 软件发展阶段软件发展阶段n程序设计阶段程序设计阶段——5050至至6060年代年代n程序系统阶段程序系统阶段——6060至至7070年代年代n软件工程阶段软件工程阶段——7070年代以后年代以后 软件工程过程软件工程过程n软件规格说明:软件规格说明:规定软件的功能及规定软件的功能及其运行的限制其运行的限制n软件开发:软件开发:产生满足规格说明的软产生满足规格说明的软件件n软件确认:软件确认:确认软件能够完成客户确认软件能够完成客户提出的要求提出的要求n软件演进:软件演进:为满足客户的变更要为满足客户的变更要求,软件必须在使用的过程中演进求,软件必须在使用的过程中演进 软件工程过程的特性软件工程过程的特性n易理解性易理解性n可靠性可靠性n可见性可见性n健壮性健壮性n可支持性可支持性n可维护性可维护性n可接受性可接受性n速度速度 软件生存期软件生存期lifecyclelifecyclen软件有一个孕育、诞生、成长、成软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即熟、衰亡的生存过程。这个过程即为计算机软件的生存期为计算机软件的生存期n软件生存期的六个步骤,即软件生存期的六个步骤,即制定计制定计划划、、需求分析需求分析、、设计设计、、程序编码程序编码、、测试测试及及运行维护运行维护 瀑布模型瀑布模型 制定计划制定计划n确定要开发软件系统的确定要开发软件系统的总目标总目标n给出给出功能功能、、性能性能、、可靠性可靠性以及以及接口接口等方面的要求等方面的要求n完成该软件任务的完成该软件任务的可行性研究可行性研究n估计可利用的估计可利用的资源资源((硬件,软件,人硬件,软件,人力等力等))、、成本成本、、效益效益、、开发进度开发进度n制定出完成开发任务的制定出完成开发任务的实施计划实施计划,,连同可行性研究报告,提交管理部连同可行性研究报告,提交管理部门审查门审查 需求分析和定义需求分析和定义n对用户提出的要求进行对用户提出的要求进行分析分析并给出并给出详细的定义详细的定义n编写编写软件需求说明书软件需求说明书或或系统功能说系统功能说明书明书及及初步的系统用户手册初步的系统用户手册n提交管理机构提交管理机构评审评审 软件设计软件设计n概要设计概要设计——把各项需求转换成把各项需求转换成软件软件的体系结构的体系结构。结构中每一组成部分。结构中每一组成部分都是意义明确的模块,每个模块都都是意义明确的模块,每个模块都和某些需求相对应和某些需求相对应n详细设计详细设计——对每个模块要完成的工对每个模块要完成的工作进行具体的描述,为源程序编写作进行具体的描述,为源程序编写打下基础打下基础n编写编写设计说明书设计说明书,提交,提交评审评审。。 程序编写程序编写n把软件设计转换成计算机可以接受把软件设计转换成计算机可以接受的程序代码的程序代码,即写成以某一种特定,即写成以某一种特定程序设计语言表示的程序设计语言表示的““源程序清单源程序清单””n写出的程序应当是结构良好、清晰写出的程序应当是结构良好、清晰易读的,且与设计相一致的易读的,且与设计相一致的 软件测试软件测试n单元测试单元测试,查找各模块在功能和结,查找各模块在功能和结构上存在的问题并加以纠正构上存在的问题并加以纠正n组装测试组装测试,将已测试过的模块按一,将已测试过的模块按一定顺序组装起来定顺序组装起来n按规定的各项需求,逐项进行按规定的各项需求,逐项进行有效有效性测试性测试,决定已开发的软件是否合,决定已开发的软件是否合格,能否交付用户使用格,能否交付用户使用 运行/维护运行/维护n改正性维护改正性维护运行中发现了软件中运行中发现了软件中的错误需要修正的错误需要修正n适应性维护适应性维护为了适应变化了的软为了适应变化了的软件工作环境,需做适当变更件工作环境,需做适当变更n完善性维护完善性维护为了增强软件的功能为了增强软件的功能需做变更需做变更 软件生存期模型软件生存期模型n软件生存期模型是跨越整个生存期软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架全部过程、活动和任务的结构框架F瀑布模型瀑布模型F演化模型演化模型F螺旋模型螺旋模型F喷泉模型喷泉模型F智能模型智能模型 演化模型演化模型n由于在项目开发的初始阶段人们对软由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次出现返工再开发在所难免。做两次n第一次只是试验开发,其目标只是在第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求于探索可行性,弄清软件需求n第二次则在此基础上获得较为满意的第二次则在此基础上获得较为满意的软件产品软件产品 螺旋模型螺旋模型n螺旋模型沿着螺线旋转,在四个象螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:限上分别表达四个方面的活动,即:n制定计划制定计划────确定软件目标,选定实确定软件目标,选定实施方案,弄清项目开发的限制施方案,弄清项目开发的限制n风险分析风险分析────分析所选方案,考虑如分析所选方案,考虑如何识别和消除风险何识别和消除风险n实施工程实施工程────实施软件开发实施软件开发n客户评估客户评估────评价开发工作,提出修评价开发工作,提出修正建议正建议 喷泉模型喷泉模型n迭代迭代F重复重复F演进演进n无间隙无间隙F各阶段间无明显界限各阶段间无明显界限 软件工程的定义软件工程的定义nBoehmBoehm::运用现代科学技术知识来设计运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料护这些程序所必需的相关文件资料nIEEEIEEE::软件工程是开发、运行、维护软件工程是开发、运行、维护和修复软件的系统方法和修复软件的系统方法nFritzBauerFritzBauer::建立并使用完善的工程化建立并使用完善的工程化原则,以较经济的手段获得能在实际机原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法器上有效运行的可靠软件的一系列方法 软件工程三要素:软件工程三要素:方法、工具和过程方法、工具和过程n软件工程方法为软件开发提供了软件工程方法为软件开发提供了““如何做如何做””的技术的技术n软件工具为软件工程方法提供了自软件工具为软件工程方法提供了自动的或半自动的软件支撑环境动的或半自动的软件支撑环境 n软件工程过程定义了软件工程过程定义了::u方法使用的顺序方法使用的顺序u要求交付的文档资料要求交付的文档资料u为保证质量和适应变化所需要的为保证质量和适应变化所需要的管理管理u软件开发各个阶段完成的里程碑软件开发各个阶段完成的里程碑 软件工程项目的基本目标软件工程项目的基本目标n付出较低的开发成本付出较低的开发成本n达到要求的软件功能达到要求的软件功能n取得较好的软件性能取得较好的软件性能n开发的软件易于移植开发的软件易于移植n需要较低的维护费用需要较低的维护费用n能按时完成开发工作,及时交付使用能按时完成开发工作,及时交付使用 n基于计算机的系统基于计算机的系统n系统工程系统工程n系统分析系统分析n可行性分析可行性分析 基于计算机的系统基于计算机的系统n某些元素的一个集合或排列某些元素的一个集合或排列n这些元素被组织起来以实现某种这些元素被组织起来以实现某种方法,过程或借助处理信息进行方法,过程或借助处理信息进行控制。控制。 基于计算机系统的系统元素基于计算机系统的系统元素 系统元素系统元素n软件软件——计算机程序、数据结构、计算机程序、数据结构、相关文档相关文档n硬件硬件——电子计算设备(如电子计算设备(如CPUCPU,,存储器)和外部机电设备(如传感存储器)和外部机电设备(如传感器、马达等)器、马达等)n人人——硬件和软件的用户硬件和软件的用户 n数据库数据库——一个大型的有组织的信一个大型的有组织的信息集合息集合n文档文档——手册、表格和其它用以描手册、表格和其它用以描述系统使用和操作的信息述系统使用和操作的信息n过程过程——定义每一种系统元素的特定义每一种系统元素的特定使用步骤,或系统驻留的过程性定使用步骤,或系统驻留的过程性环境环境 系统的层次结构系统的层次结构n基于计算机的系统本身可以成为一基于计算机的系统本身可以成为一个个更大的基于计算机系统中的一个更大的基于计算机系统中的一个元素元素,并称为那个更大系统的,并称为那个更大系统的宏元宏元素素。。 工厂自动化工厂自动化系统系统 计算机系统工程计算机系统工程n计算机系统工程是一个问题求解活计算机系统工程是一个问题求解活动,目的是动,目的是揭示揭示、、分析所期望的功分析所期望的功能能,,并把它们分配到各个单独的系并把它们分配到各个单独的系统元素中去统元素中去。。 系统工程师的任务系统工程师的任务n与用户合作确认与用户合作确认用户的目标和约用户的目标和约束束n导出导出功能功能、、性能性能、、接口接口、、设计约设计约束束和和信息结构信息结构的表示的表示n将它们分配到每一个系统元素中将它们分配到每一个系统元素中 硬件和硬件工程硬件和硬件工程n计算机系统工程师计算机系统工程师选择硬件元件的选择硬件元件的某种组合某种组合以以构成基于计算机系统的构成基于计算机系统的硬件元素硬件元素n硬件工程过程可以分为三个阶段硬件工程过程可以分为三个阶段F计划和定义阶段计划和定义阶段F设计和样机实现阶段设计和样机实现阶段F生产、销售和售后服务阶段生产、销售和售后服务阶段 软件与软件工程软件与软件工程n为实现要求的功能和性能,必须制为实现要求的功能和性能,必须制作或获取一系列软件部件作或获取一系列软件部件n软件元素分为两类软件元素分为两类u应用软件应用软件用来实现信息处理的用来实现信息处理的功能功能u系统软件系统软件完成使应用软件能与完成使应用软件能与其它系统元素交互的控制功能其它系统元素交互的控制功能 人类工程人类工程n是应用从心理学和方法论导出的知是应用从心理学和方法论导出的知识来确定和设计高质量识来确定和设计高质量HCIHCI的多学的多学科活动科活动n人类工程过程包括以下步骤人类工程过程包括以下步骤((11))活动分析活动分析────环境交互及划环境交互及划分任务分任务,,进行任务分析进行任务分析((22))语义分析和设计语义分析和设计────动作精动作精确定义,确定义,““对话对话””设计设计 (3)(3)语法和词法设计语法和词法设计────各个动作各个动作和命令的形式,硬件与软件实现和命令的形式,硬件与软件实现(4)(4)用户环境设计用户环境设计────将硬件、软将硬件、软件和其它系统生成元素组合起来形件和其它系统生成元素组合起来形成用户环境成用户环境(5)(5)原型原型────从人的角度出发来评从人的角度出发来评价价HCIHCI 数据库和数据库工程数据库和数据库工程n数据库工程(包括数据库工程(包括数据库分析数据库分析、、设设计计和和实现实现))n对于使用数据库的系统,对于使用数据库的系统,信息仓库信息仓库往往是所有功能的核心往往是所有功能的核心n数据库工程的应用是在数据库的信数据库工程的应用是在数据库的信息域定义完成之后息域定义完成之后 n系统工程师的作用是系统工程师的作用是u定义数据库中包含的信息定义数据库中包含的信息u处理查询的类型处理查询的类型u数据存取的方式数据存取的方式u数据库的容量等数据库的容量等n数据分析和设计是基本的软件工程活数据分析和设计是基本的软件工程活动动 系统分析的目标系统分析的目标n识别用户要求识别用户要求n评价系统的可行性评价系统的可行性n进行经济分析和技术分析进行经济分析和技术分析n把功能分配给硬件、软件、人、数把功能分配给硬件、软件、人、数据库和其它系统元素据库和其它系统元素n建立成本和进度限制建立成本和进度限制n生成系统规格说明,形成所有后续生成系统规格说明,形成所有后续工程的基础工程的基础 需求识别需求识别n系统分析过程的第一步就是系统分析过程的第一步就是识别用识别用户要求户要求n分析员必须考虑以下问题:分析员必须考虑以下问题:u功能功能和和性能性能u可靠性可靠性和和质量质量u总的系统目标总的系统目标 u成本成本与与进度限制进度限制u制造需求制造需求u市场与竞争情况市场与竞争情况u有效的技术有效的技术u将来可能的扩充将来可能的扩充 系统分析的任务系统分析的任务n识别希望的功能和性能范围识别希望的功能和性能范围n确定系统的功能、性能、约束和确定系统的功能、性能、约束和接口接口n将功能赋予一个或多个系统元素将功能赋予一个或多个系统元素(即软件、硬件、人等)(即软件、硬件、人等)n提出一些候选方案并做评价提出一些候选方案并做评价 对同一功能,可以分配不同的系统对同一功能,可以分配不同的系统元素元素为选取最有效的分配方案,使用一为选取最有效的分配方案,使用一组权衡准则进行评价组权衡准则进行评价u项目考虑项目考虑u人员问题人员问题u商业考虑商业考虑u环境界面环境界面u技术分析技术分析u法律考虑法律考虑u生产评估生产评估 11、项目考虑、项目考虑n在预估的成本与进度范围内所在预估的成本与进度范围内所选的系统配置能否实现?选的系统配置能否实现?n与成本与进度估算相关的风险与成本与进度估算相关的风险有哪些?有哪些? 22、商业考虑、商业考虑n所选的系统配置是最可能有效所选的系统配置是最可能有效益的解决方案吗?益的解决方案吗?n能否成功地占领市场?能否成功地占领市场?n最终的报偿是否能表明所冒的最终的报偿是否能表明所冒的开发风险是值得的?开发风险是值得的? 33、技术分析、技术分析n是否具备开发所有系统元素的是否具备开发所有系统元素的技术实力?技术实力?n能否确保功能和性能得到满能否确保功能和性能得到满足?足?n能否对这种系统配置进行充分能否对这种系统配置进行充分的维护?的维护?n是否具备技术资源?是否具备技术资源?n与技术相关的风险有哪些?与技术相关的风险有哪些? 44、生产评估、生产评估n生产工具与设备是否有效?生产工具与设备是否有效?n必需的过程是否短缺?必需的过程是否短缺?n是否充分地实施了质量保证?是否充分地实施了质量保证? 55、人员问题、人员问题n开发人员是否得到培训?开发人员是否得到培训?n是否存在政治问题?是否存在政治问题?n用户是否了解这个系统将要做用户是否了解这个系统将要做什么?什么? 66、环境界面、环境界面n所提交的系统配置与系统的外所提交的系统配置与系统的外部环境的接口是否合适?部环境的接口是否合适?n机器与机器、人与机器之间的机器与机器、人与机器之间的通信是否以智能方式处理?通信是否以智能方式处理? 77、法律考虑、法律考虑n这种配置是否会引入违法的责这种配置是否会引入违法的责任风险?任风险?n对责任问题是否给予了足够的对责任问题是否给予了足够的保护?保护?n是否存在潜在的破坏问题?是否存在潜在的破坏问题? 可行性研究可行性研究n问题识别问题识别n信息分析信息分析n市场调查市场调查n动态分析动态分析n分析准备分析准备n确立系统方确立系统方案,作出各案,作出各n环境分析环境分析种估算种估算n物理分析物理分析n模型评审模型评审n功能分析功能分析 问题的初步认识问题的初步认识n了解系统应解决的问题,这些了解系统应解决的问题,这些问题使如何提出的问题使如何提出的n设想这些问题如何解决才能满设想这些问题如何解决才能满足要求足要求n了解问题的结构了解问题的结构 市场调查市场调查n了解市场对待开发软件的需求了解市场对待开发软件的需求情况情况n调查市场上已有的类似软件系调查市场上已有的类似软件系统的功能、性能、价格情况统的功能、性能、价格情况 分析准备分析准备n确立分析计划确立分析计划n规定由谁参加分析作业,任务规定由谁参加分析作业,任务分配分配n对参加分析的人员进行必要的对参加分析的人员进行必要的培训培训 环境分析环境分析明确系统的目的和限制条件明确系统的目的和限制条件n使用单位的状况、经营方针和组织使用单位的状况、经营方针和组织机构机构n使用单位的计算机利用情况使用单位的计算机利用情况n相关的硬件、软件及其它接口部分相关的硬件、软件及其它接口部分n用户的操作环境及操作要求用户的操作环境及操作要求n习惯、法律、制度上对软件的制约习惯、法律、制度上对软件的制约n开发能具备的技术条件和设备条件开发能具备的技术条件和设备条件 物理分析物理分析n了解实际业务活动状况,特别了解实际业务活动状况,特别对一些活动要点进行分析对一些活动要点进行分析n明确在这些要点之间什么东西明确在这些要点之间什么东西在流动,如何进行流动在流动,如何进行流动n对物理流量进行分析对物理流量进行分析n对其模型化,得到实际业务系对其模型化,得到实际业务系统(当前系统)的物理模型统(当前系统)的物理模型 功能分析功能分析n决定系统应具备的功能决定系统应具备的功能((工作域工作域))n分析功能的结构:功能展开和分析功能的结构:功能展开和功能分配功能分配n分析各功能之间的关系,整理分析各功能之间的关系,整理它们之间传递的信息它们之间传递的信息n利用数据流图,描述信息在系利用数据流图,描述信息在系统流动与处理的情况统流动与处理的情况 信息分析信息分析n调查系统的输入、输出、保存调查系统的输入、输出、保存信息信息n明确信息的结构及各信息之间明确信息的结构及各信息之间的关系的关系n调查各信息的信息量调查各信息的信息量n调查各种报表和文件的格式调查各种报表和文件的格式n建立粗略的数据词典,定义系建立粗略的数据词典,定义系统中使用的数据统中使用的数据 动态分析动态分析n系统内每一部分有几种状态系统内每一部分有几种状态n各种状态转换的条件各种状态转换的条件n同步产生的条件与同步后状态的同步产生的条件与同步后状态的变化变化 确立系统方案,进行各种估算确立系统方案,进行各种估算n粗略地估算成本粗略地估算成本n估算可能取得的效益估算可能取得的效益n提出可能需要的资源,包括人提出可能需要的资源,包括人员、硬件、软件等员、硬件、软件等n提出大概的进度安排提出大概的进度安排 模型评审模型评审n将目标系统的逻辑模型提出管将目标系统的逻辑模型提出管理部分与用户进行评审理部分与用户进行评审n复查问题定义、工程规模和系复查问题定义、工程规模和系统目标统目标 软件需求分析的任务和过程软件需求分析的任务和过程结构化分析方法结构化分析方法原型化方法原型化方法动态分析方法动态分析方法数据及数据库需求数据及数据库需求 软件需求分析的任务软件需求分析的任务n深入描述软件的功能和性能深入描述软件的功能和性能n确定软件设计的约束和软件同确定软件设计的约束和软件同其它系统元素的接口细节其它系统元素的接口细节n定义软件的其它有效性需求定义软件的其它有效性需求 n需求分析研究的对象是软件项目的需求分析研究的对象是软件项目的用户要求用户要求n准确地表达被接受的用户要求准确地表达被接受的用户要求n确定被开发软件系统的系统元素确定被开发软件系统的系统元素n将功能和信息结构分配到这些系统将功能和信息结构分配到这些系统元素中元素中 n需求分析的任务需求分析的任务就是借助于当前系就是借助于当前系统的逻辑模型导出目标系统的逻辑统的逻辑模型导出目标系统的逻辑模型,解决目标系统的模型,解决目标系统的““做什么做什么””的的问题。问题。 n通常软件开发项目是要实现目标系通常软件开发项目是要实现目标系统的物理模型统的物理模型n目标系统的具体物理模型是由它的目标系统的具体物理模型是由它的逻辑模型经实例化,即具体到某个逻辑模型经实例化,即具体到某个业务领域而得到的业务领域而得到的 需求分析的过程需求分析的过程(1)(1)问题识别问题识别从系统的角度来理解软件并评审软从系统的角度来理解软件并评审软件范围是否恰当件范围是否恰当确定对目标系统的综合要求,即软确定对目标系统的综合要求,即软件的需求件的需求提出这些需求实现条件,以及需求提出这些需求实现条件,以及需求应达到的标准应达到的标准 软件的需求包括:软件的需求包括:n功能需求功能需求n资源使用需求资源使用需求n性能需求性能需求n成本消耗需求成本消耗需求n环境需求环境需求n开发进度需求开发进度需求n可靠性需求可靠性需求n预先估计以后预先估计以后系统可能达到系统可能达到n安全保密要求安全保密要求的目标的目标n用户界面需求用户界面需求 问题识别的另一项工作是建立分析所问题识别的另一项工作是建立分析所需要的通信途径,以保证能顺利地对需要的通信途径,以保证能顺利地对问题进行分析。问题进行分析。 (2)(2)分析与综合分析与综合从从信息流信息流和和信息结构信息结构出发,出发,逐步细逐步细化所有的软件功能化所有的软件功能,找出,找出系统各元系统各元素之间的联系素之间的联系、、接口特性接口特性和和设计上设计上的约束的约束,分析它们是否满足功能要,分析它们是否满足功能要求,是否合理。剔除其不合理的部求,是否合理。剔除其不合理的部分,增加其需要部分。最终综合成分,增加其需要部分。最终综合成系统的解决方案,给出系统的解决方案,给出目标系统的目标系统的详细逻辑模型详细逻辑模型。。 常用的分析方法常用的分析方法n面向数据流面向数据流的结构化分析方法的结构化分析方法((SA)SA)n面向数据结构面向数据结构的的JacksonJackson方法方法((JSD)JSD)n面向数据结构面向数据结构的结构化数据系统开的结构化数据系统开发方法发方法((DSSD)DSSD)n面向对象面向对象的分析方法的分析方法((OOA)OOA)等等 (3)(3)编制需求分析阶段的文档编制需求分析阶段的文档软件需求说明书软件需求说明书数据要求说明书数据要求说明书初步的用户手册初步的用户手册修改、完善与确定软件开发实施计修改、完善与确定软件开发实施计划划 (4)(4)需求分析评审需求分析评审系统定义的目标是否与用户的要求一系统定义的目标是否与用户的要求一致致;;系统需求分析阶段提供的文档资料是系统需求分析阶段提供的文档资料是否齐全否齐全;;文档中的所有描述是否完整、清晰、文档中的所有描述是否完整、清晰、准确反映用户要求准确反映用户要求;;与所有其它系统成分的重要接口是否与所有其它系统成分的重要接口是否都已经描述都已经描述; 被开发项目的数据流与数据结构是被开发项目的数据流与数据结构是否足够,确定否足够,确定;;所有图表是否清楚,在不补充说明所有图表是否清楚,在不补充说明时能否理解时能否理解;;主要功能是否已包括在规定的软件主要功能是否已包括在规定的软件范围之内,是否都已充分说明范围之内,是否都已充分说明;;设计的约束条件或限制条件是否符设计的约束条件或限制条件是否符合实际合实际;;开发的技术风险是什么开发的技术风险是什么;; 是否考虑过软件需求的其它方案是否考虑过软件需求的其它方案;;是否考虑过将来可能会提出的软件需是否考虑过将来可能会提出的软件需求求;;是否详细制定了检验标准,它们能否是否详细制定了检验标准,它们能否对系统定义是否成功进行确认对系统定义是否成功进行确认;; 需求分析流程需求分析流程 软件需求分析的原则软件需求分析的原则n需要能够表达和理解问题的信息域需要能够表达和理解问题的信息域和和功能域功能域n要能以层次化的方式对问题进行要能以层次化的方式对问题进行分分解解和不断和不断细化细化n要给出系统的要给出系统的逻辑视图逻辑视图和和物理视图物理视图 软件需求规格说明的原则软件需求规格说明的原则从现实中分离功能,即描述要从现实中分离功能,即描述要““做什做什么么””而不是而不是““怎样实现怎样实现””要求使用要求使用面向处理面向处理的规格说明语言的规格说明语言(或称系统定义语言)(或称系统定义语言)如果被开发软件只是一个大系统中如果被开发软件只是一个大系统中的一个元素,那么整个大系统也包的一个元素,那么整个大系统也包括在规格说明的描述之中括在规格说明的描述之中 规格说明必须包括系统运行环境规格说明必须包括系统运行环境规格说明必须是一个认识模型规格说明必须是一个认识模型规格说明必须是可操作的规格说明必须是可操作的规格说明必须容许不完备性并允许规格说明必须容许不完备性并允许扩充扩充规格说明必须局部化和松散耦合规格说明必须局部化和松散耦合 软件需求方法软件需求方法n需求分析方法由对软件问题的需求分析方法由对软件问题的信息信息域域和和功能域功能域的系统分析过程及其表的系统分析过程及其表示方法组成示方法组成n大多数的需求分析方法是由大多数的需求分析方法是由信息驱信息驱动动的的n信息域具有三种属性信息域具有三种属性::信息流信息流、、信信息内容息内容和和信息结构信息结构。。 结构化分析方法结构化分析方法n面向数据流进行需求分析的方法面向数据流进行需求分析的方法n结构化分析方法适合于数据处理类结构化分析方法适合于数据处理类型软件的需求分析型软件的需求分析n具体来说,结构化分析方法就是用具体来说,结构化分析方法就是用抽象模型抽象模型的概念,按照软件内部的概念,按照软件内部数数据传递据传递、、变换变换的关系,的关系,自顶向下逐自顶向下逐层分解层分解,直到找到满足功能要求的,直到找到满足功能要求的所有可实现的软件为止所有可实现的软件为止 n结构化分析方法使用工具:结构化分析方法使用工具:u数据流图数据流图u数据词典数据词典u结构化英语结构化英语u判定表与判定树判定表与判定树 数据流图数据流图n数据流图中的主要图形元素数据流图中的主要图形元素数据加工数据加工((数据变换数据变换))数据源点或终点数据源点或终点((外部实体外部实体))数据流数据流数据存储文件数据存储文件 描述银行取款过程的数据流图描述银行取款过程的数据流图 数据流与数据加工之间的关系数据流与数据加工之间的关系 数据流图的层次结构数据流图的层次结构n为了表达数据处理过程的数据加工为了表达数据处理过程的数据加工情况,需要采用情况,需要采用层次结构层次结构的数据流的数据流图。按照系统的层次结构进行图。按照系统的层次结构进行逐步逐步分解分解,并以分层的数据流图反映这,并以分层的数据流图反映这种结构关系,能清楚地表达和容易种结构关系,能清楚地表达和容易理解整个系统理解整个系统 分层的数据流图分层的数据流图 在多层数据流图中,在多层数据流图中,顶层流图顶层流图仅包仅包含含一个加工一个加工,它代表被开发系统。,它代表被开发系统。它的输入流是该系统的输入数据,它的输入流是该系统的输入数据,输出流是系统所输出数据输出流是系统所输出数据底层流图底层流图是指其是指其加工不需再做分解加工不需再做分解的数据流图,它处在最底层的数据流图,它处在最底层中间层流图中间层流图则表示则表示对其上层父图的对其上层父图的细化细化。它的每一加工可能继续细。它的每一加工可能继续细化,形成子图。化,形成子图。 结构化分析方法步骤示例结构化分析方法步骤示例商店业务处理系统商店业务处理系统 这个数据流图只是一个高层的系统逻这个数据流图只是一个高层的系统逻辑模型,它反映了目标系统要实现的辑模型,它反映了目标系统要实现的功能功能数据流图绘制步骤数据流图绘制步骤首先确定系统的输入和输出首先确定系统的输入和输出根据商店业务,画出顶层数据流根据商店业务,画出顶层数据流图,以反映最主要业务处理流程图,以反映最主要业务处理流程 经过分析,商店业务处理的经过分析,商店业务处理的主要主要功能功能应当有应当有销售销售、、采购采购、、会计会计三三大项。大项。主要数据流输入的源点主要数据流输入的源点和和输出终点输出终点是是顾客顾客和和供应商供应商。。然后从输入端开始,根据商店业然后从输入端开始,根据商店业务工作流程,画出数据流流经的务工作流程,画出数据流流经的各加工框,逐步画到输出端,得各加工框,逐步画到输出端,得到第一层数据流图到第一层数据流图 第一层数据流图第一层数据流图 加细每一个加工框加细每一个加工框销售细化销售细化 采购细化采购细化 检查和修改数据流图的原则检查和修改数据流图的原则n数据流图上所有图形符号数据流图上所有图形符号只限于只限于前前述四种基本图形元素述四种基本图形元素n数据流图的数据流图的主图必须包括前述四种主图必须包括前述四种基本元素基本元素,缺一不可,缺一不可n数据流图的主图上的数据流必须封数据流图的主图上的数据流必须封闭在外部实体之间闭在外部实体之间n每个加工每个加工至少有一个输入数据流和至少有一个输入数据流和一个输出数据流一个输出数据流 n在数据流图中,需在数据流图中,需按层给加工框编按层给加工框编号号。编号表明该加工所处层次及上。编号表明该加工所处层次及上下层的亲子关系下层的亲子关系n规定任何一个数据流子图必须与它规定任何一个数据流子图必须与它上一层的一个加工对应,两者的输上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。入数据流和输出数据流必须一致。此即此即父图与子图的平衡父图与子图的平衡n可以在数据流图中加入物质流,帮可以在数据流图中加入物质流,帮助用户理解数据流图助用户理解数据流图 n图上每个元素都必须有名字图上每个元素都必须有名字n数据流图中不可夹带控制流数据流图中不可夹带控制流n初画时可以忽略琐碎的细节,以集中初画时可以忽略琐碎的细节,以集中精力于主要数据流精力于主要数据流 数据词典数据词典n数据词典与数据流图配合,能清楚地数据词典与数据流图配合,能清楚地表达数据处理的要求表达数据处理的要求n词条描述词条描述————对于在数据流图中每对于在数据流图中每一个被命名的图形元素,均加以定一个被命名的图形元素,均加以定义,其内容有义,其内容有::名字名字,,别名或编别名或编号号,,分类分类,,描述描述,,定义定义,,位置位置,,其其它它,,等等 ((11)数据流词条描述)数据流词条描述n数据流名:数据流名:n说明:简要介绍作用即它产生的原因说明:简要介绍作用即它产生的原因和结果和结果n数据流来源:来自何方数据流来源:来自何方n数据流去向:去向何处数据流去向:去向何处n数据流组成:数据结构数据流组成:数据结构n数据量流通量:数据量,流通量数据量流通量:数据量,流通量 ((22)数据元素词条描述)数据元素词条描述n数据元素名:数据元素名:n类型:数字(离散值,连续值),类型:数字(离散值,连续值),文字(编码类型)文字(编码类型)n长度:长度:n取值范围:取值范围:n相关的数据元素及数据结构:相关的数据元素及数据结构: ((33)数据文件词条描述)数据文件词条描述n数据文件名:数据文件名:n简述:存放的是什么数据简述:存放的是什么数据n输入数据:输入数据:n输出数据:输出数据:n数据文件组成:数据结构数据文件组成:数据结构n存储方式:顺序,直接,关键码存储方式:顺序,直接,关键码n存取频率:存取频率: ((44)加工逻辑词条描述)加工逻辑词条描述n加工名:加工名:n加工编号:反映该加工的层次加工编号:反映该加工的层次n简要描述:加工逻辑及功能简述简要描述:加工逻辑及功能简述n输入数据流:输入数据流:n输出数据流:输出数据流:n加工逻辑:简述加工程序,加工顺加工逻辑:简述加工程序,加工顺序序 ((55)源点及汇)源点及汇((终终))点词条描述点词条描述n名称:外部实体名名称:外部实体名n简要描述:什么外部实体简要描述:什么外部实体n有关数据流:有关数据流:n数目:数目: 数据结构的描述数据结构的描述符符号号含含义义举举例例==被定义为被定义为++与与xx==aa++bb[...,...][...,...]或或[...|...][...|...]或或xx=[=[aa,,bb]],,xx=[=[aa||bb]]{...}{...}或或m{...}nm{...}n重复重复xx={={aa}},,xx==33{{aa}}88(...)(...)可选可选xx=(=(aa))““......””基本数据元素基本数据元素xx==““aa””....连结符连结符xx=1..9=1..9 存折格式存折格式 存折=户名+所号+帐号+开户日+性质存折=户名+所号+帐号+开户日+性质++((印密印密))++1{1{存取行存取行}50}50户名=户名=2{2{字母字母}24}24所号=所号=““001001””....““999999””帐号=帐号=““0000000100000001””....““9999999999999999””开户日=年+月+日开户日=年+月+日性质=性质=““11””....““66””注:注:““11””表示普通户,表示普通户,““55””表示工资户等表示工资户等印密=印密=““00””注:印密在存折上不显示注:印密在存折上不显示存取行=日期+(摘要)+支出+存入+存取行=日期+(摘要)+支出+存入+余额+操作+复核余额+操作+复核 基本加工逻辑说明基本加工逻辑说明对数据流图的每一个基本加工,必对数据流图的每一个基本加工,必须有一个基本加工逻辑说明须有一个基本加工逻辑说明基本加工逻辑说明必须描述基本加基本加工逻辑说明必须描述基本加工工如何把输入数据流变换为输出数如何把输入数据流变换为输出数据流的加工规则据流的加工规则n加工逻辑说明必须描述实现加工的加工逻辑说明必须描述实现加工的策略而不是实现加工的细节策略而不是实现加工的细节n加工逻辑说明中包含的信息应是充加工逻辑说明中包含的信息应是充足的,完备的,有用的,无冗余的足的,完备的,有用的,无冗余的 用于写加工逻辑说明的工具用于写加工逻辑说明的工具结构化英语结构化英语判定表判定表判定树判定树 ((11)结构化英语)结构化英语n结构化英语的词汇表由结构化英语的词汇表由u英语命令动词英语命令动词u数据词典中定义的名字数据词典中定义的名字u有限的自定义词有限的自定义词u逻辑关系词逻辑关系词IF_THEN_ELSEIF_THEN_ELSE、、CASE_OFCASE_OF、、WHILE_DOWHILE_DO、、REPEAT_UNTILREPEAT_UNTIL等组成。等组成。 n是一种介于自然语言和形式化语言是一种介于自然语言和形式化语言之间的语言之间的语言n语言的语言的正文用基本控制结构进行分正文用基本控制结构进行分割割,加工中的,加工中的操作用自然语言短语操作用自然语言短语来表示来表示n其基本控制结构有三种:其基本控制结构有三种:u简单陈述句结构简单陈述句结构:避免复合语:避免复合语句;句;u重复结构重复结构::whilewhile__dodo或或repeatrepeat__untiluntil结构。结构。u判定结构判定结构::if_then_elseif_then_else或或case_ofcase_of结构;结构; 商店业务处理系统中商店业务处理系统中““检查发货单检查发货单””ifif发货单金额超过发货单金额超过$500$500thenthenifif欠款超过了欠款超过了6060天天thenthen在偿还欠款前不予批准在偿还欠款前不予批准elseelse((欠款未超期)欠款未超期)发批准书,发货单发批准书,发货单elseelse((发货单金额未超过发货单金额未超过$500$500))ifif欠款超过欠款超过6060天天thenthen发批准书,发货单及赊欠报告发批准书,发货单及赊欠报告elseelse((欠款未超期)欠款未超期)发批准书,发货单发批准书,发货单 ((22)判定表)判定表n如果数据流图的加工需要依赖于如果数据流图的加工需要依赖于多多个逻辑条件的取值个逻辑条件的取值,使用判定表来,使用判定表来描述比较合适描述比较合适 以以““检查发货单检查发货单””为例为例 ((33)判定树)判定树n判定树也是用来表达加工逻辑的一判定树也是用来表达加工逻辑的一种工具。有时侯它比判定表更直观。种工具。有时侯它比判定表更直观。欠款欠款>60>60天天不发出批准书不发出批准书检检金额金额>$500>$500欠款欠款6060天天发出批准书、发出批准书、查查发货单发货单发发欠款欠款>60>60天天发出批准书、发出批准书、货货单单金额金额$500$500发货单及赊欠报告发货单及赊欠报告欠款欠款6060天天发出批准书、发出批准书、发货单发货单 原型化方法原型化方法n在开发初期,要想得到一个完整准在开发初期,要想得到一个完整准确的规格说明不是一件容易的事。确的规格说明不是一件容易的事。特别是对一些大型的软件项目。特别是对一些大型的软件项目。n用户往往对系统只有一个模糊的想用户往往对系统只有一个模糊的想法,很难完全准确地表达对系统的法,很难完全准确地表达对系统的全面要求。全面要求。n软件开发者对于所要解决的应用问软件开发者对于所要解决的应用问题认识更是模糊不清题认识更是模糊不清 n随着开发工作向前推进,用户可能随着开发工作向前推进,用户可能会产生新的要求,或因环境变化,会产生新的要求,或因环境变化,要求系统也能随之变化;开发者又要求系统也能随之变化;开发者又可能在设计与实现的过程中遇到些可能在设计与实现的过程中遇到些没有预料到的实际困难,需要以改没有预料到的实际困难,需要以改变需求来解脱困境。变需求来解脱困境。n因此规格说明难以完善、需求的变因此规格说明难以完善、需求的变更、以及通信中的模糊和误解,都更、以及通信中的模糊和误解,都会成为软件开发顺利推进的障碍。会成为软件开发顺利推进的障碍。n为解决这些问题,逐渐形成了软件为解决这些问题,逐渐形成了软件系统的快速原型的概念。系统的快速原型的概念。 软件原型的分类软件原型的分类n在软件开发中,原型是软件的一个在软件开发中,原型是软件的一个早期可运行的版本,它反映最终系早期可运行的版本,它反映最终系统的部分重要特性。统的部分重要特性。u探索型:探索型:目的是要弄清对目标系目的是要弄清对目标系统的要求,确定所希望的特性,统的要求,确定所希望的特性,并探讨多种方案的可行性。并探讨多种方案的可行性。 u实验型:实验型:这种原型用于大规模开这种原型用于大规模开发和实现之前,考核方案是否合发和实现之前,考核方案是否合适,规格说明是否可靠。适,规格说明是否可靠。u进化型:进化型:这种原型的目的不在于这种原型的目的不在于改进规格说明,而是将系统建造改进规格说明,而是将系统建造得易于变化,在改进原型的过程得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。中,逐步将原型进化成最终系统。 原型使用策略原型使用策略u废弃策略废弃策略u追加策略追加策略 建立快速原型,进行系统的分析建立快速原型,进行系统的分析和构造的好处:和构造的好处:u增进软件者和用户对系统服务需增进软件者和用户对系统服务需求的理解,使比较含糊的具有不确求的理解,使比较含糊的具有不确定性的软件需求(主要是功能)明定性的软件需求(主要是功能)明确化。确化。u软件原型化方法提供了一种有力软件原型化方法提供了一种有力的学习手段的学习手段。。 u使用原型化方法,可以容易地确使用原型化方法,可以容易地确定系统的性能,确认各项主要系定系统的性能,确认各项主要系统服务的可应用性,确认系统设统服务的可应用性,确认系统设计的可行性,确认系统作为产品计的可行性,确认系统作为产品的结果。的结果。u软件原型的最终版本,有的可以软件原型的最终版本,有的可以原封不动地成为产品,有的略加原封不动地成为产品,有的略加修改就可以成为最终系统的一个修改就可以成为最终系统的一个组成部分,这样有利于建成最终组成部分,这样有利于建成最终系统。系统。 原型开发技术原型开发技术n可执行规格说明可执行规格说明n基于脚本基于脚本((scenario)scenario)的设计的设计n自动程序设计自动程序设计n专用语言专用语言n可复用可复用((reusable)reusable)的软件的软件n简化假设简化假设 可执行规格说明可执行规格说明n可执行规格说明是用于需求规格说可执行规格说明是用于需求规格说明的一种自动化技术。使用这种方明的一种自动化技术。使用这种方法,人们可以直接观察他们用语言法,人们可以直接观察他们用语言规定的任何系统性行为。包括规定的任何系统性行为。包括F代数规格说明代数规格说明F有限状态模型有限状态模型F可执行的数据流图可执行的数据流图 ((11))代数规格说明代数规格说明n代数规格说明使用集合、定义于这代数规格说明使用集合、定义于这些集合上的函数和定义于这些函数些集合上的函数和定义于这些函数上的方程来描述对象。规格说明的上的方程来描述对象。规格说明的操作语义用这些方程表示。操作语义用这些方程表示。 举例:定义一个无界的栈及其操作举例:定义一个无界的栈及其操作NEW_STACKNEW_STACK::→→StackStackPUSHPUSH::StackStack,,ElementElement→→StackStackPOPPOP::StackStack→→(Element|Undefined)(Element|Undefined)POP(NEW_STACK())POP(NEW_STACK())==UndefinedUndefinedPOP(PUSH(POP(PUSH(stkstk,,elemelem))))==elemelem其中,前三行定义了操作的语法,后其中,前三行定义了操作的语法,后两行把它们的语义定义为一些方程。两行把它们的语义定义为一些方程。 ((22))有限状态模型有限状态模型nparnasparnas提出的使用最广泛的一种提出的使用最广泛的一种可执行规格说明形式。从一个初可执行规格说明形式。从一个初始状态开始始状态开始接收输入接收输入,到,到产生输产生输出出,,状态状态在在推移变化推移变化。施加在状。施加在状态元素上的约束确定了有效状态态元素上的约束确定了有效状态的推移。的推移。 举例:建立用户/程序对话举例:建立用户/程序对话 ((33))可执行的数据流图可执行的数据流图n数据流图是基于结构化开发方法的数据流图是基于结构化开发方法的结构化规格说明结构化规格说明n用一种可执行的语言程序代替定义用一种可执行的语言程序代替定义处理逻辑的结构化英语,数据流图处理逻辑的结构化英语,数据流图就成为由可执行语言程序模块组成就成为由可执行语言程序模块组成的网络,在一定环境或工具的支持的网络,在一定环境或工具的支持下就可成为一个可以执行的原型系下就可成为一个可以执行的原型系统。统。 基于脚本的设计基于脚本的设计n脚本是指用户界面的原型。一个脚脚本是指用户界面的原型。一个脚本用以模拟在系统运行期间用户经本用以模拟在系统运行期间用户经历的事件。它提供了输入历的事件。它提供了输入──处理处理──输出的屏幕格式和有关对话的模型。输出的屏幕格式和有关对话的模型。因此,软件开发者能够给用户显示因此,软件开发者能够给用户显示系统的逼真的视图,使用户得以判系统的逼真的视图,使用户得以判断是否符合他的意图。断是否符合他的意图。 n可在任一脚本中使用一套可复用的可在任一脚本中使用一套可复用的软件模块,以表达某一方面的要求。软件模块,以表达某一方面的要求。n可使用一种原型语言来描述原型系可使用一种原型语言来描述原型系统。原型开发过程中用这种语言来统。原型开发过程中用这种语言来定义屏幕、数据项、及其相关的操定义屏幕、数据项、及其相关的操作。从系统的外部描述开始,开发作。从系统的外部描述开始,开发与数据库的接口、错误处理和恢复与数据库的接口、错误处理和恢复过程等系统的与外部视图一致的细过程等系统的与外部视图一致的细节。节。 自动程序设计自动程序设计n自动程序设计是指在程序自动生成自动程序设计是指在程序自动生成环境的支持下,利用计算机实现软环境的支持下,利用计算机实现软件的开发。它可以自动地或半自动件的开发。它可以自动地或半自动地把用户的非过程式问题规格说明地把用户的非过程式问题规格说明转换为某种高级语言程序:转换为某种高级语言程序:u演绎综合手段:演绎综合手段:基于数学推理的构造式证明。基于数学推理的构造式证明。 u程序变换手段:程序变换手段:将一程序转换成另一功能等价将一程序转换成另一功能等价的程序,并保持其正确性不变。的程序,并保持其正确性不变。u实例推广手段:实例推广手段:从实例特征出发,将它推广为从实例特征出发,将它推广为待编程序的特征,最后得到程待编程序的特征,最后得到程序。序。u过程化手段:过程化手段:研究甚高级语言的编译和知识研究甚高级语言的编译和知识的过程化。的过程化。 专用语言专用语言n专用语言是应用领域的模型化语专用语言是应用领域的模型化语言。在原型开发中使用专用语言。在原型开发中使用专用语言,可方便用户和软件开发者在言,可方便用户和软件开发者在计划中的系统特性方面的交流。计划中的系统特性方面的交流。 软件复用技术软件复用技术n利用可复用的模块,做出适当的组利用可复用的模块,做出适当的组合,就可得到快速构造的原型系统。合,就可得到快速构造的原型系统。n为了快速地构造原型,这些模块首为了快速地构造原型,这些模块首先必须有简单而清晰的界面;其次先必须有简单而清晰的界面;其次它们应当尽量不依赖其它的模块或它们应当尽量不依赖其它的模块或数据结构;第三,它们应具有一些数据结构;第三,它们应具有一些通用的功能。通用的功能。 简化假设简化假设n简化假设是在开发过程中使设计者简化假设是在开发过程中使设计者迅速得到一个简化的系统所做的假迅速得到一个简化的系统所做的假设。尽管这些假设可能实际上并不设。尽管这些假设可能实际上并不能成立,但它们在原型开发过程中能成立,但它们在原型开发过程中可以使开发者的注意力集中在一些可以使开发者的注意力集中在一些主要的方面。主要的方面。 n在修改一个文件时,可以假设这个在修改一个文件时,可以假设这个文件确实存在文件确实存在n在存取文件时,待存取的记录总是在存取文件时,待存取的记录总是存在存在n一旦计划中的系统满足用户所有的一旦计划中的系统满足用户所有的要求,就可以撤消这些假设,并追要求,就可以撤消这些假设,并追加一些细节。加一些细节。 系统动态分析系统动态分析n系统的需求规格说明通常是用自然系统的需求规格说明通常是用自然语言来叙述的,但是用自然语言描语言来叙述的,但是用自然语言描述往往会出现歧义性。述往往会出现歧义性。n为了直观地分析系统的动作,从特为了直观地分析系统的动作,从特定的视点出发描述系统的行为,需定的视点出发描述系统的行为,需要采用动态分析的方法。要采用动态分析的方法。 最常用的动态分析方法最常用的动态分析方法n状态迁移图状态迁移图n时序图时序图nPetriPetri网网 状态迁移图状态迁移图n状态迁移图是描述系统的状态如何状态迁移图是描述系统的状态如何相应外部的信号进行推移的一种图相应外部的信号进行推移的一种图形表示。形表示。u圆圈圆圈““○○””表示可得到的系统表示可得到的系统状态状态u箭头箭头““→→””表示从一种状态向另一表示从一种状态向另一种状态的种状态的迁移迁移。。 例如例如,,当有多个申请占用当有多个申请占用CPUCPU运行的运行的进程时进程时,,有关有关CPUCPU分配的进程的状分配的进程的状态迁移。态迁移。 n可得到的状态=就绪,运行,等待可得到的状态=就绪,运行,等待n生成的事件=生成的事件=t1t1,,t2t2,,t3t3,,t4t4t1t1──中断事件中断事件t2t2──中断已处理中断已处理t3t3──分配分配CPUCPUt4t4──用完用完CPUCPU时间时间 状态迁移图的优点状态迁移图的优点n状态之间的关系能够直观地捕捉到状态之间的关系能够直观地捕捉到n由于状态迁移图的单纯性,能够机由于状态迁移图的单纯性,能够机械地分析许多情况,可很容易地建械地分析许多情况,可很容易地建立分析工具立分析工具 时序图时序图n在系统分析中,用在系统分析中,用时序图时序图于对比在于对比在系统中处理事件的时序和相应的处系统中处理事件的时序和相应的处理时间。在右图中理时间。在右图中,,对对于于事件事件e,e,功功能能11~功能~功能33的处理时间的处理时间总计为总计为((T1T1++T2T2++T3T3))其中功能间其中功能间切换时间切换时间00。。 n采用扩充时序图可采用扩充时序图可表示进程间的通信表示进程间的通信流流,,用于分析几个用于分析几个事件的交错现事件的交错现象。,象。,C1C1与与C2C2,,R1R1与与R2R2是交错的。是交错的。因此,可以做如下因此,可以做如下分析:分析:““必须设计必须设计HOST1HOST1在等待在等待C1C1的回答的回答成成R1R1期间要能接期间要能接收从收从HOST2HOST2发出的命令发出的命令C2C2。。”” PetriPetri网网nPetriPetri网已广泛地应用于硬件与软件网已广泛地应用于硬件与软件系统的开发中,它适用于描述与分系统的开发中,它适用于描述与分析相互独立、协同操作的处理系析相互独立、协同操作的处理系统,也就是并发执行的处理系统。统,也就是并发执行的处理系统。 nPetriPetri网简称网简称PNGPNG((PetriPetriNetNetGraphGraph)),,它有两种结点:它有两种结点:位置位置((placeplace))::符号为符号为““○○””,它用,它用来表示系统的来表示系统的状态状态。。转移转移((transitiontransitionAD*))::符号为符号为““””,,它用来表示系统中的它用来表示系统中的事件事件。。图中的有向边表示图中的有向边表示对转移的输对转移的输入入,或,或由转移的输出由转移的输出 n标记标记,或称,或称令牌令牌((tokentoken)),,是表明系统是表明系统当前处于什么状态的标志当前处于什么状态的标志 处理两个进程的同步问题处理两个进程的同步问题 数据及数据库需求数据及数据库需求n在数据词典中,强调对数据存储结在数据词典中,强调对数据存储结构的逻辑设计,并用数据结构表达构的逻辑设计,并用数据结构表达数据项之间的逻辑关系。数据项之间的逻辑关系。n但任何一个软件系统都可能有成千但任何一个软件系统都可能有成千上万个数据项,仅仅描述这些数据上万个数据项,仅仅描述这些数据项是不够的,更重要的是如何把它项是不够的,更重要的是如何把它们以最优的方式组织起来,以满足们以最优的方式组织起来,以满足系统对数据的要求。系统对数据的要求。 有关数据库的基本概念有关数据库的基本概念n在软件系统中需要处理的数据是现在软件系统中需要处理的数据是现实世界中存在的事物及其联系的反实世界中存在的事物及其联系的反映。映。n人们通常将与数据处理有关的的领人们通常将与数据处理有关的的领域分为三个世界:域分为三个世界:u现实世界现实世界u信息世界信息世界u数据世界数据世界 n现实世界现实世界是存在于人们头脑之外的是存在于人们头脑之外的客观世界,现实世界中的事物可分客观世界,现实世界中的事物可分成成对象对象和和性质性质两大类。两大类。n对象对象可以是人、是物,还可以是实可以是人、是物,还可以是实际的东西或概念的东西,例如,大际的东西或概念的东西,例如,大学、城市等。对象还可以指事物与学、城市等。对象还可以指事物与事物间的联系。事物间的联系。n性质性质则是指事物的性质或特征。则是指事物的性质或特征。 n信息世界信息世界也叫做观念世界,是现实也叫做观念世界,是现实世界在人们头脑中的反映。世界在人们头脑中的反映。n客观世界中的事物在信息世界中叫客观世界中的事物在信息世界中叫做做实体实体,,反映事物之间联系的叫做反映事物之间联系的叫做实体模型实体模型。。n实体是由若干属性的属性值组成实体是由若干属性的属性值组成。。属性属性是实体某一方面的特征,相应是实体某一方面的特征,相应于事物的性质。例如,一个学生实于事物的性质。例如,一个学生实体是如下的一个体是如下的一个55元组:元组:(951149,(951149,袁秋慧袁秋慧,,女女,19,,19,软件软件)) n55元组中每一元素是学生的某一属性元组中每一元素是学生的某一属性的属性值。他们对应的属性集合是:的属性值。他们对应的属性集合是:((学号学号,,姓名姓名,,性别性别,,年龄年龄,,专业专业))n这些属性集合表征了这些属性集合表征了““学生学生””实体的实体的类型,叫做类型,叫做实体型实体型。同一类型的实。同一类型的实体的集合叫做体的集合叫做实体集实体集。。n数据世界数据世界则是信息世界中信息的数则是信息世界中信息的数据化,现实世界中的事物及其联系据化,现实世界中的事物及其联系在数据世界中用数据模型描述。在数据世界中用数据模型描述。 n描述每一实体的数据称为描述每一实体的数据称为记录记录,,描描述属性的数据叫做述属性的数据叫做数据项数据项或或字段字段。。n与实体集相对应的称为与实体集相对应的称为文件文件。。n例如,学生文件就由多个记录组例如,学生文件就由多个记录组成,这些记录放在一起构成一个二成,这些记录放在一起构成一个二维表。表中每一横排叫做一个记录维表。表中每一横排叫做一个记录或元组,每一纵列叫做一个属性。或元组,每一纵列叫做一个属性。 n记录由记录由数据项数据项组成组成,正如实体由若,正如实体由若干属性的属性值组成一样。干属性的属性值组成一样。n一般数据项沿用属性名。用做属性一般数据项沿用属性名。用做属性名时表示观念信息,用做数据项名名时表示观念信息,用做数据项名时表示数据信息。每个数据项包括时表示数据信息。每个数据项包括两个特征:即两个特征:即数据类型数据类型和和数据长度数据长度。。n若干同类型的记录构成若干同类型的记录构成文件文件。。n为了对文件中的记录有效组织和存为了对文件中的记录有效组织和存取,通常指定一个数据项进行区取,通常指定一个数据项进行区别,这个数据项叫做关键字。别,这个数据项叫做关键字。 EE--RR方法方法((EntityEntity--RelationshipRelationshipApproach)Approach)和实体模型和实体模型n在需求分析阶段进行数据库逻辑设在需求分析阶段进行数据库逻辑设计过程中,计过程中,使用使用EE--RR图,可定义一图,可定义一个实体模型个实体模型。。n实体模型是现实世界的纯表示实体模型是现实世界的纯表示,它,它不涉及数据世界的数据结构、存取不涉及数据世界的数据结构、存取路径、存取效率等问题。因此,它路径、存取效率等问题。因此,它可以转换成数据库中的数据模型可以转换成数据库中的数据模型。。 n数据可以按相应数据模型进行组织。数据可以按相应数据模型进行组织。nEE--RR图中表示实体联系的符号如下:图中表示实体联系的符号如下: n在在EE--RR图中,每个图中,每个方框方框表示表示实体型实体型或或属性属性,方框之间的,方框之间的连线连线表示表示实体实体之间之间,或,或实体与属性之间的联系实体与属性之间的联系。。出现在连线上的短竖线可以看成是出现在连线上的短竖线可以看成是““11””,而圆圈隐含表示,而圆圈隐含表示““00””。。n例如,在教学管理中,一个教师可例如,在教学管理中,一个教师可以教授零门、一门或多门课程,每以教授零门、一门或多门课程,每位学生也需要学习几门课程。因位学生也需要学习几门课程。因此,教学管理中涉及的对象(实体此,教学管理中涉及的对象(实体型)有型)有学生学生、、教师教师和和课程课程。。 n用用EE--RR图描述它们之间的联系,得图描述它们之间的联系,得下图。其中,学生与课程是多对多下图。其中,学生与课程是多对多的联系,而教师与课程的联系是零、的联系,而教师与课程的联系是零、一对多。一对多。 n进一步,要确定属性。例如,进一步,要确定属性。例如,n学生具有学生具有学号学号、、姓名姓名、、性别性别、、年龄年龄、、专业专业(其它略)等属性;(其它略)等属性;n课程具有课程具有课程号课程号、、课程名课程名、、学分学分、、学时数学时数等属性;等属性;n教师具有教师具有职工号职工号、、姓名姓名、、年龄年龄、、职职称称等属性。等属性。n此外,学生通过学号、分数与课程此外,学生通过学号、分数与课程发生联系。如此可得教学实体模型。发生联系。如此可得教学实体模型。 教学实体模型教学实体模型 数据结构的规范化数据结构的规范化n信息域分析需要确定信息域分析需要确定数据的内容数据的内容,,每个数据项要用表格列出,最后组每个数据项要用表格列出,最后组织成文件的逻辑结构,即面向应用织成文件的逻辑结构,即面向应用而不是面向存储的结构。而不是面向存储的结构。n为了便于数据库的设计,常常要对为了便于数据库的设计,常常要对这种结构做一些简化,其中最常见这种结构做一些简化,其中最常见的一种方法就是规范化技术。的一种方法就是规范化技术。 n““规范化规范化””将将数据的逻辑结构数据的逻辑结构归结为归结为满足一定条件的满足一定条件的二维表二维表(关系)。(关系)。¶表格中每个信息项必须是一个不可表格中每个信息项必须是一个不可分割的数据项,不可是组项。分割的数据项,不可是组项。·表格中每一列表格中每一列((列表示属性列表示属性))中所有中所有信息项必须是同一类型,各列的名信息项必须是同一类型,各列的名字字((属性名属性名))互异,列的次序任意。互异,列的次序任意。¸表格中各行表格中各行((行表示元组行表示元组))互不相互不相同,行的次序任意。同,行的次序任意。 n不满足上述要求的二维表或关系,不满足上述要求的二维表或关系,叫做非规范化关系。对于非规范化叫做非规范化关系。对于非规范化的关系,必须将它规范化,即利用的关系,必须将它规范化,即利用更单纯、更规则的关系来代替原来更单纯、更规则的关系来代替原来的关系。的关系。n规范化的目的是:规范化的目的是:u消除数据冗余消除数据冗余,即消除表格中数,即消除表格中数据的重复;据的重复;u消除多义性消除多义性,使关系中的属性含,使关系中的属性含义清楚、单一;义清楚、单一; n使关系的使关系的““概念概念””单一化单一化,让每个数,让每个数据项只是一个简单的数或字符串,据项只是一个简单的数或字符串,而不是一个组项或重复组;而不是一个组项或重复组;n方便操作方便操作。使数据的插入、删除与。使数据的插入、删除与修改操作可行并方便;修改操作可行并方便;n使关系模式更灵活使关系模式更灵活,易于实现接近,易于实现接近自然语言的查询方式。自然语言的查询方式。 用教学管理例说明如何规范化用教学管理例说明如何规范化n有三个实体型,即有三个实体型,即课程课程、、学生学生和和教教师师,用三个关系保存它们的信息:,用三个关系保存它们的信息:学生学生((学号学号,姓名,性别,年,姓名,性别,年龄,专业,籍贯龄,专业,籍贯))教师教师((职工号职工号,姓名,年龄,职,姓名,年龄,职称,工资级别,工资称,工资级别,工资))课程课程((课程号课程号,课程名,学分,,课程名,学分,学时,课程类型学时,课程类型)) n为表示实体型之间的联系,又建立为表示实体型之间的联系,又建立两个关系:两个关系:选课选课((学号,课程号学号,课程号,听课出勤,听课出勤率,作业完成率,分数率,作业完成率,分数))教课教课((职工号,课程号职工号,课程号))n这五个关系,组成了这五个关系,组成了数据库的模型数据库的模型。。n在每个关系中,属性名下加下划线)在每个关系中,属性名下加下划线)指明指明关键字关键字。并规定关键字能唯一。并规定关键字能唯一地标识一个元组。地标识一个元组。 n关系规范化的程度,通常按属性间关系规范化的程度,通常按属性间的依赖程度来区分,并以范式的依赖程度来区分,并以范式NFNF(NormalForm)(NormalForm)来表达。常用的范来表达。常用的范式分为第一范式(式分为第一范式(11NFNF)、)、第二范第二范式(式(22NFNF))和第三范式(和第三范式(33NFNF)。)。n设设RR是是一个关系一个关系,,XX和和YY是是RR中的中的两个属性两个属性。若对于X的任一个值,。若对于X的任一个值,Y仅有一个值与之对应,则称R的Y仅有一个值与之对应,则称R的属性Y函数依赖于属性X。属性Y函数依赖于属性X。例如,例如, 教师教师((职工号职工号,,姓名姓名,,年龄年龄,,))n其中,属性其中,属性““姓名姓名””,,““年龄年龄””等都函等都函数依赖于属性数依赖于属性““职工号职工号””。属性X可。属性X可以是复合属性,如:以是复合属性,如:选课选课((学号学号,,课程号课程号,,听课出勤率听课出勤率,,)) n如果如果属性Y函数依赖于复合属性属性Y函数依赖于复合属性XX,而,而不与X的任何真子集函数依不与X的任何真子集函数依赖赖,则称,则称属性Y完全函数依赖于复属性Y完全函数依赖于复合属性X合属性X。。n例如在例如在““选课选课””关系中,属性关系中,属性““听课听课出勤率出勤率””、、““作业完成率作业完成率””和和““分数分数””等表示某个学生学习某门课程时的等表示某个学生学习某门课程时的学习情况。只有同时指定学习情况。只有同时指定““学号学号””和和““课程号课程号””,才能准确地说明是哪位,才能准确地说明是哪位学生学习哪门课程时的学习情况。学生学习哪门课程时的学习情况。 n因此,因此,““分数分数””等属性完全函数依赖等属性完全函数依赖于于““学号学号,,课程号课程号””。。n判断规范化程度的条件是:判断规范化程度的条件是:¶关系中所有属性都是关系中所有属性都是““单纯域单纯域””,即,即不出现不出现““表中有表表中有表””·非主属性完全函数依赖于关键字非主属性完全函数依赖于关键字¸非主属性相互独立,即任何非主属非主属性相互独立,即任何非主属性间不存在函数依赖。性间不存在函数依赖。n如果一个关系连如果一个关系连条件条件都不满足,都不满足,则这个关系是非规范化的。则这个关系是非规范化的。 n如果一个关系仅满足如果一个关系仅满足条件条件,则这,则这个关系满足个关系满足第一范式第一范式(1(1NF)NF)。。n如果一个关系满足如果一个关系满足条件条件、、,但,但不满足不满足,则这个关系满足,则这个关系满足第二范第二范式式(2(2NF)NF)。。n如果一个关系同时满足如果一个关系同时满足条件条件、、和和,则这个关系表满足,则这个关系表满足第三范式第三范式(3(3NF)NF)。。n当数据模型达到当数据模型达到33NFNF,,一般情况下一般情况下就能满足数据库应用的需要。就能满足数据库应用的需要。 数据库分析的过程数据库分析的过程在需求分析阶段进行数据库分析的流程在需求分析阶段进行数据库分析的流程 n为开发一个系统所使用的数据库,为开发一个系统所使用的数据库,在开始分析数据库的需求前,分析在开始分析数据库的需求前,分析员必须员必须了解该系统的总目标和范围了解该系统的总目标和范围。。然后然后建立一个完整并高度细化的信建立一个完整并高度细化的信息模型息模型。。n此信息模型应包括一个此信息模型应包括一个综合的数据综合的数据词典词典,定义所有在开发数据库时用,定义所有在开发数据库时用到的数据项。到的数据项。n接着数据库分析定义数据库的接着数据库分析定义数据库的逻辑逻辑特性特性和和物理特性物理特性。。 n以信息模型和系统规格说明为指以信息模型和系统规格说明为指导,定义数据库的导,定义数据库的逻辑数据结构逻辑数据结构。。n这种逻辑结构必须适应这种逻辑结构必须适应数据存取数据存取、、修改修改、、关联性关联性及其它相关需求。及其它相关需求。n一旦逻辑数据结构建立起来,就可一旦逻辑数据结构建立起来,就可以研制数据库的以研制数据库的物理结构物理结构。。n物理数据库结构定义物理数据库结构定义文件结构文件结构、、记记录格式录格式、、与硬件相关的处理方式与硬件相关的处理方式以以及及数据库管理系统的特性数据库管理系统的特性。。 n最后,要最后,要对模式和物理特性进行完对模式和物理特性进行完全的评审全的评审。。n在数据库分析过程中所考虑的在数据库分析过程中所考虑的因素因素间存在着复杂的相互联系间存在着复杂的相互联系。。改变其改变其中的任何一个因素都会(潜在地)中的任何一个因素都会(潜在地)影响其它的因素影响其它的因素。所以必须在各个。所以必须在各个因素之间进行折衷。因素之间进行折衷。n这种折衷包括这种折衷包括专用性专用性和和通用性通用性的折的折衷,衷,信息关联程度信息关联程度、、扩充潜力扩充潜力及及操操作特性作特性等方面的折衷。等方面的折衷。 n考虑考虑信息关联程度信息关联程度和和扩充潜力扩充潜力(包(包括括信息规模信息规模和和信息内容信息内容两方面)主两方面)主要要基于需求分析和设计阶段分派给基于需求分析和设计阶段分派给数据库的专用性程度数据库的专用性程度。。n专用的数据库要为系统特定的信息专用的数据库要为系统特定的信息需求服务需求服务,因此信息结构要设计得,因此信息结构要设计得能适应要求的关联性和预计的扩充。能适应要求的关联性和预计的扩充。n通用的数据库可以适应更为广泛的通用的数据库可以适应更为广泛的各种信息需求各种信息需求,但是为了获得通用,但是为了获得通用性要付出代价。性要付出代价。 n操作特性根据折衷的结果而定。数据操作特性根据折衷的结果而定。数据库的结构、规模和逻辑设计都会对它库的结构、规模和逻辑设计都会对它的物理组织、硬件、存取方式以及性的物理组织、硬件、存取方式以及性能产生重要的影响。能产生重要的影响。 n软件设计的目标和任务软件设计的目标和任务n软件设计基础软件设计基础n模块独立性模块独立性n结构化设计方法结构化设计方法n数据设计和文件设计数据设计和文件设计n过程设计过程设计 软件设计的目标和任务软件设计的目标和任务n根据用信息域表示的软件需求,以根据用信息域表示的软件需求,以及功能和性能需求,进行及功能和性能需求,进行数据设计数据设计系统结构设计系统结构设计过程设计。过程设计。 n数据设计数据设计侧重于数据结构的定义。侧重于数据结构的定义。n系统结构设计系统结构设计定义软件系统各主定义软件系统各主要成份之间的关系。要成份之间的关系。n过程设计过程设计则是把结构成份转换成则是把结构成份转换成软件的过程性描述。在编码步软件的过程性描述。在编码步骤,根据这种过程性描述,生成骤,根据这种过程性描述,生成源程序代码,然后通过测试最终源程序代码,然后通过测试最终得到完整有效的软件。得到完整有效的软件。 开发阶段的信息流开发阶段的信息流信息域需求设计系统结构设计数据设计功能与性过程设计编码能需求程序模块测试组装好的有效的软件 n软件设计是后续开发步骤及软件维软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只护工作的基础。如果没有设计,只能建立一个不稳定的系统结构能建立一个不稳定的系统结构 软件设计任务软件设计任务n从工程管理的角度来看,软件设计从工程管理的角度来看,软件设计分两步完成。分两步完成。u概要设计概要设计,将软件需求转化为数,将软件需求转化为数据结构和软件的系统结构。据结构和软件的系统结构。u详细设计详细设计,即过程设计。通过对,即过程设计。通过对结构表示进行细化,得到软件的结构表示进行细化,得到软件的详细的数据结构和算法。详细的数据结构和算法。 软件设计过程软件设计过程1.1.制定规范制定规范n在进入软件开发阶段之初,首先应在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成同遵守的标准,以便协调组内各成员的工作。包括员的工作。包括:: u阅读和理解软件需求说明书,确阅读和理解软件需求说明书,确认用户要求能否实现,明确实现认用户要求能否实现,明确实现的条件,从而确定设计的目标,的条件,从而确定设计的目标,以及它们的优先顺序以及它们的优先顺序u根据目标确定最合适的设计方法根据目标确定最合适的设计方法u规定设计文档的编制标准规定设计文档的编制标准u规定编码的信息形式,与硬件,规定编码的信息形式,与硬件,操作系统的接口规约,命名规则操作系统的接口规约,命名规则 2.2.软件系统结构的总体设计软件系统结构的总体设计n基于功能层次结构建立系统。基于功能层次结构建立系统。u采用某种设计方法,将系统按功采用某种设计方法,将系统按功能能划分成模块的层次结构划分成模块的层次结构u确定每个确定每个模块的功能模块的功能u建立与已确定的建立与已确定的软件需求的对应软件需求的对应关系关系u确定模块间的确定模块间的调用关系调用关系u确定模块间的确定模块间的接口接口u评估模块评估模块划分的质量划分的质量 3.3.处理方式设计处理方式设计n确定为实现系统的功能需求所必需确定为实现系统的功能需求所必需的的算法算法,评估算法的性能,评估算法的性能n确定为满足系统的性能需求所必需确定为满足系统的性能需求所必需的算法和模块间的控制方式的算法和模块间的控制方式u周转时间周转时间u响应时间响应时间u吞吐量吞吐量u精度精度n确定外部信号的接收发送形式确定外部信号的接收发送形式 4.4.数据结构设计数据结构设计n确定软件涉及的文件系统的结构以确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数及数据库的模式、子模式,进行数据完整性和安全性的设计据完整性和安全性的设计n确定输入,输出文件的详细的数据确定输入,输出文件的详细的数据结构结构n结合算法设计,确定算法所必需的结合算法设计,确定算法所必需的逻辑数据结构及其操作逻辑数据结构及其操作n确定对逻辑数据结构所必需的那些确定对逻辑数据结构所必需的那些操作的程序模块操作的程序模块((软件包软件包)) n限制和确定各个数据设计决策的影限制和确定各个数据设计决策的影响范围响范围n若需要与操作系统或调度程序接口若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其所必须的控制表等数据时,确定其详细的数据结构和使用规则详细的数据结构和使用规则n数据的保护性设计数据的保护性设计u防卫性设计防卫性设计:在软件设计中就插:在软件设计中就插入自动检错,报错和纠错的功能入自动检错,报错和纠错的功能 n一致性设计一致性设计::u保证软件运行过程中所使用的数保证软件运行过程中所使用的数据的类型和取值范围不变据的类型和取值范围不变u在并发处理过程中使用封锁和解在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏除封锁机制保持数据不被破坏n冗余性设计冗余性设计:针对同一问题,由两:针对同一问题,由两个开发者采用不同的程序设计风格个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技检错系统予以纠正,或使用表决技术决定一个正确结果。术决定一个正确结果。 5.5.可靠性设计可靠性设计n可靠性设计也叫做质量设计可靠性设计也叫做质量设计n在运行过程中,为了适应环境的变在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软量指标,考虑相应措施,以使得软件易于修改和易于维护。件易于修改和易于维护。 6.6.编写概要设计阶段的文档编写概要设计阶段的文档n概要设计阶段完成时应编写以下概要设计阶段完成时应编写以下文档:文档:u概要设计说明书概要设计说明书u数据库设计说明书数据库设计说明书u用户手册用户手册u制定初步的测试计划制定初步的测试计划 7.7.概要设计评审概要设计评审n可追溯性可追溯性:确认该设计是否复盖了:确认该设计是否复盖了所有已确定的软件需求,软件每一所有已确定的软件需求,软件每一成份是否可追溯到某一项需求成份是否可追溯到某一项需求n接口接口:确认该软件的内部接口与外:确认该软件的内部接口与外部接口是否已经明确定义。模块是部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内块作用范围是否在其控制范围之内n风险风险:确认该设计在现有技术条件:确认该设计在现有技术条件下和预算范围内是否能按时实现下和预算范围内是否能按时实现 n实用性实用性:确认该设计对于需求的解:确认该设计对于需求的解决方案是否实用决方案是否实用n技术清晰度技术清晰度:确认该设计是否以一:确认该设计是否以一种易于翻译成代码的形式表达种易于翻译成代码的形式表达n可维护性可维护性:确认该设计是否考虑了:确认该设计是否考虑了方便未来的维护方便未来的维护n质量质量:确认该设计是否表现出良好:确认该设计是否表现出良好的质量特征的质量特征 n各种选择方案各种选择方案:看是否考虑过其:看是否考虑过其它方案,比较各种选择方案的标它方案,比较各种选择方案的标准是什么准是什么n限制限制:评估对该软件的限制是否:评估对该软件的限制是否现实,是否与需求一致现实,是否与需求一致n其它具体问题其它具体问题:对于文档、可测:对于文档、可测试性、设计过程试性、设计过程....等进行评估等进行评估 详细设计详细设计n在详细设计过程中,需要完成的在详细设计过程中,需要完成的工作是:工作是:u确定软件各个组成部分内的算确定软件各个组成部分内的算法以及各部分的内部数据组织法以及各部分的内部数据组织u选定某种过程的表达形式来描选定某种过程的表达形式来描述各种算法。述各种算法。u进行详细设计的评审进行详细设计的评审 软件设计基础软件设计基础n自顶向下,逐步细化自顶向下,逐步细化n软件结构软件结构n程序结构程序结构n结构图结构图n模块化模块化n抽象化抽象化n信息隐蔽信息隐蔽 自顶向下,逐步细化自顶向下,逐步细化n将软件的体系结构按自顶向下方将软件的体系结构按自顶向下方式,对各个层次的过程细节和数式,对各个层次的过程细节和数据细节逐层细化,直到用程序设据细节逐层细化,直到用程序设计语言的语句能够实现为止,从计语言的语句能够实现为止,从而最后确立整个的体系结构。而最后确立整个的体系结构。 软件结构软件结构n软件结构包括两部分。软件结构包括两部分。程序的模块程序的模块结构结构和和数据的结构数据的结构n软件的体系结构通过一个划分过程软件的体系结构通过一个划分过程来完成来完成。该划分过程从需求分析确。该划分过程从需求分析确立的目标系统的模型出发,对整个立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个个或几个软件成份加以解决,整个问题就解决了问题就解决了 程序结构程序结构n程序结构表明了程序各个部件程序结构表明了程序各个部件((模块模块))的组织情况,是软件的过程表示。的组织情况,是软件的过程表示。 结构图结构图n结构图反映程序中模块之间的层次结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模表示模块、模块间的调用关系和模块间信息的传递块间信息的传递 ①①模块:模块用矩形框表示,并用模模块:模块用矩形框表示,并用模块的名字标记它。块的名字标记它。 ②②模块的调用关系和接口:模块之间模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块用单向箭头联结,箭头从调用模块指向被调用模块。指向被调用模块。 ③③模块间的信息传递:当一个模块模块间的信息传递:当一个模块调用另一个模块时,调用模块把数调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的用模块在执行过程中又把它产生的数据或控制信息回送给调用模块数据或控制信息回送给调用模块 ④④在模块在模块AA的箭头尾部标以一个菱的箭头尾部标以一个菱形符号,表示模块形符号,表示模块AA有条件地调用有条件地调用另一个模块另一个模块BB。。当一个在调用箭头当一个在调用箭头尾部标以一个弧形符号,表示模块尾部标以一个弧形符号,表示模块AA反复调用模块反复调用模块CC和模块和模块DD。。 程序的系统结构图程序的系统结构图 模块化模块化n软件系统的模块化是指整个软件被软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。组装起来以满足整个问题的需求。n把问题/子问题的分解与软件开发把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单软件系统划分成易于理解的比较单纯的模块结构。纯的模块结构。 抽象化抽象化n软件系统进行模块设计时,可有不软件系统进行模块设计时,可有不同的抽象层次。同的抽象层次。n在最高的抽象层次上,可以使用问在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题题所处环境的语言概括地描述问题的解法。的解法。n在较低的抽象层次上,则采用过程在较低的抽象层次上,则采用过程化的方法。化的方法。 (1)(1)过程的抽象过程的抽象在软件工程中,从系统定义到实现,在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。方法的抽象化过程的一次细化。在软件需求分析阶段,用在软件需求分析阶段,用““问题所问题所处环境的为大家所熟悉的术语处环境的为大家所熟悉的术语””来描来描述软件的解决方法。述软件的解决方法。在从概要设计到详细设计的过程在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。源程序时到达最低抽象层次。 例例::开发一个开发一个CADCAD软件的三层抽象软件的三层抽象n抽象层次抽象层次ⅠⅠ..用问题所处环境的术用问题所处环境的术语来描述这个软件语来描述这个软件::该软件包括一个计算机绘图界面,该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这有的剖面图和辅助视图都可以用这个个CADCAD软件实现软件实现…………。。 n抽象层次抽象层次ⅡⅡ..任务需求的描述。任务需求的描述。CADSOFTWARETASKSuserinteractiontask;2-Ddrawingcreationtask;graphicsdisplaytask;drawingfilemanagementtask;end.在这个抽象层次上,未给出在这个抽象层次上,未给出““怎样怎样做做””的信息,不能直接实现。的信息,不能直接实现。 n抽象层次抽象层次ⅢⅢ..程序过程表示。以程序过程表示。以2-2-DD((二维二维))绘图生成任务为例绘图生成任务为例::PROCEDURE:2-DdrawingcreationREPEATUNTIL(drawingcreationtaskterminates)DOWHILE(digitizerinteractionoccurs)digitizerinterfacetask;DETERMINEdrawingrequestCASE;line:linedrawingtask;rectangle:rectangledrawingtask;circle:circledrawingtask;…… (2)(2)数据抽象数据抽象在不同层次上描述数据对象的细在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。节,定义与该数据对象相关的操作。例如,在例如,在CADCAD软件中,定义一个叫软件中,定义一个叫做做drawingdrawing的数据对象。可将的数据对象。可将drawingdrawing规定为一个抽象数据类规定为一个抽象数据类型,定义它的内部细节为型,定义它的内部细节为:: TYPEdrawingISSTRUCTURETYPEdrawingISSTRUCTUREDEFINDDEFINDnumberISSTRINGLENGTH(12);numberISSTRINGLENGTH(12);geometryDEFINDgeometryDEFIND…………notesISSTRINGLENGTH(256);notesISSTRINGLENGTH(256);BOMBOMDEFINDDEFINDENDdrawingTYPE;ENDdrawingTYPE; n数据抽象数据抽象drawingdrawing本身由另外一些数据本身由另外一些数据抽象,如抽象,如geometrygeometry、、BOMBOM(billof(billofmaterials)materials)构成构成n定义定义drawingdrawing的抽象数据类型之后,可的抽象数据类型之后,可引用它来定义其它数据对象,而不必涉引用它来定义其它数据对象,而不必涉及及drawingdrawing的内部细节的内部细节n例如,定义例如,定义::blue-printISINSTANCEOFdrawing;或或schematicISINSTANCEOFdrawing; 信息隐蔽信息隐蔽n由由parnasparnas方法提倡的方法提倡的信息隐蔽信息隐蔽是是指,指,每个模块的实现细节对于其它每个模块的实现细节对于其它模块来说是隐蔽的。模块来说是隐蔽的。也就是说,模也就是说,模块中所包含的信息(包括数据和过块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的程)不允许其它不需要这些信息的模块使用。模块使用。 模块的独立性模块的独立性n模块(模块(ModuleModule))““模块模块””,又称,又称““组件组件””。它一般具有。它一般具有如下三个基本属性如下三个基本属性::u功能功能:描述该模块实现什么功能:描述该模块实现什么功能u逻辑逻辑:描述模块内部怎么做:描述模块内部怎么做u状态状态:该模块使用时的环境和条:该模块使用时的环境和条件件 n在描述一个模块时,还必须按模块在描述一个模块时,还必须按模块的的外部特性外部特性与与内部特性内部特性分别描述分别描述n模块的模块的外部特性外部特性u模块的模块名、参数表、其中的模块的模块名、参数表、其中的输入参数和输出参数,以及给程序输入参数和输出参数,以及给程序以至整个系统造成的影响以至整个系统造成的影响n模块的模块的内部特性内部特性u完成其功能的程序代码和仅供该完成其功能的程序代码和仅供该模块内部使用的数据模块内部使用的数据 n模块独立性模块独立性u模块独立性模块独立性,,是指软件系统中每个是指软件系统中每个模块只涉及软件要求的具体的子功模块只涉及软件要求的具体的子功能能,,而和软件系统中其它的模块的而和软件系统中其它的模块的接口是简单的接口是简单的u例如例如,,若一个模块只具有单一的功若一个模块只具有单一的功能且与其它模块没有太多的联系能且与其它模块没有太多的联系,,则称此模块具有模块独立性则称此模块具有模块独立性u一般采用两个准则度量模块独立一般采用两个准则度量模块独立性。即模块间性。即模块间耦合耦合和模块和模块内聚内聚 u耦合耦合是模块之间的互相连接的紧是模块之间的互相连接的紧密程度的度量。密程度的度量。u内聚内聚是模块功能强度是模块功能强度((一个模块内一个模块内部各个元素彼此结合的紧密程度部各个元素彼此结合的紧密程度))的度量。的度量。u模块独立性比较强的模块应是模块独立性比较强的模块应是高高内聚低耦合内聚低耦合的模块。的模块。 模块间的耦合模块间的耦合 非直接耦合非直接耦合((NondirectNondirectCoupling)Coupling)两个模块之间没有直接关系,它们之两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和间的联系完全是通过主模块的控制和调用来实现的。调用来实现的。非直接耦合的非直接耦合的模块独立性最模块独立性最强。强。 数据耦合数据耦合((DataCoupling)DataCoupling)一个模块访问另一个模块时,彼此一个模块访问另一个模块时,彼此之间是通过之间是通过简单数据参数简单数据参数((不是控不是控制参数、公共数据结构或外部变量制参数、公共数据结构或外部变量))来交换输入、输出信息的。来交换输入、输出信息的。标记耦合标记耦合((StampCoupling)StampCoupling)一组模块通过参数表传递一组模块通过参数表传递记录信记录信息息,就是标记耦合。这个记录是某,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单一数据结构的子结构,而不是简单变量。变量。 控制耦合控制耦合((ControlCoupling)ControlCoupling)如果一个模如果一个模块通过传送开块通过传送开关、标志、名关、标志、名字等控制信息,字等控制信息,明显地控制选明显地控制选择另一模块的择另一模块的功能,就是控功能,就是控制耦合。制耦合。 外部耦合(外部耦合(ExternalCouplingExternalCoupling))一组模块都访问一组模块都访问同一全局简单变量同一全局简单变量而而不是同一全局数据结构,而且不是通不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则过参数表传递该全局变量的信息,则称之为外部耦合。称之为外部耦合。公共耦合(公共耦合(CommonCouplingCommonCoupling))若一组模块都访问若一组模块都访问同一个公共数据环同一个公共数据环境境,则它们之间的耦合就称为公共耦,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆结构、共享的通信区、内存的公共覆盖区等。盖区等。 n公共耦合的复杂程度随耦合模块的个公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。情况。松散公共耦合和紧密公共耦合。 内容耦合内容耦合((ContentCoupling)ContentCoupling)如果发生下列情形,两个模块之间如果发生下列情形,两个模块之间就发生了内容耦合就发生了内容耦合(1)(1)一个模块直接访问另一个模一个模块直接访问另一个模块的内部数据块的内部数据;;(2)(2)一个模块不通过正常入口转一个模块不通过正常入口转到另一模块内部到另一模块内部;;(3)(3)两个模块有一部分程序代码两个模块有一部分程序代码重迭重迭((只可能出现在汇编语言中只可能出现在汇编语言中););(4)(4)一个模块有多个入口。一个模块有多个入口。 c模块内聚模块内聚 功能内聚功能内聚((FunctionalCohesion)FunctionalCohesion)一个模块中各个部分都是一个模块中各个部分都是完成某一完成某一具体功能具体功能必不可少的组成部分,或必不可少的组成部分,或者说该模块中所有部分都是为了完者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为联系,不可分割的。则称该模块为功能内聚模块。功能内聚模块。 信息内聚信息内聚((InformationalCohesion)InformationalCohesion)这种模块这种模块完成多个功能完成多个功能,,各个功能各个功能都在同一数据结构上操作都在同一数据结构上操作,每一项,每一项功能有一个唯一的入口点。这个模功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚号表),因此,它是一个信息内聚的模块。的模块。 n信息内聚模块可以看成是多个功能信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的设备隐蔽在一个模块内,不为别的模块所知晓。模块所知晓。 通信内聚通信内聚((CommunicationCohesion)CommunicationCohesion)如果一个模块内各功能部分都使用如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数块。通常,通信内聚模块是通过数据流图来定义的。据流图来定义的。 过程内聚过程内聚((ProceduralCohesionProceduralCohesion))使用流程图做为工具设计程序时,使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模计算部分分成三个模块,这三个模块都是过程内聚模块。块都是过程内聚模块。 时间内聚时间内聚((ClassicalCohesionClassicalCohesion))时间内聚又称为经典内聚。这种模时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。行。例如初始化模块和终止模块。 逻辑内聚(逻辑内聚(LogicalCohesionLogicalCohesion))这种模块把几种这种模块把几种相关的功能组合相关的功能组合在一起,每次被在一起,每次被调用时,由传送调用时,由传送给模块的判定参给模块的判定参数来确定该模块数来确定该模块应执行哪一种功应执行哪一种功能。能。 巧合内聚(巧合内聚(CoincidentalCohesionCoincidentalCohesion))巧合内聚巧合内聚((偶然内聚偶然内聚))。当模块内各。当模块内各部分之间没有联系,或者即使有联部分之间没有联系,或者即使有联系,这种联系,这种联系也很松散,系也很松散,则称这种模则称这种模块为巧合内块为巧合内聚模块,它聚模块,它是内聚程度是内聚程度最低的模块。最低的模块。 结构化设计方法结构化设计方法n首先研究、分析和审查数据流图。首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及流加工的过程,对于发现的问题及时解决。时解决。n然后根据数据流图决定问题的类型。然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:数据处理问题典型的类型有两种:变换型变换型和和事务型事务型。针对两种不同的。针对两种不同的类型分别进行分析处理。类型分别进行分析处理。 n由数据流图推导出系统的初始结构由数据流图推导出系统的初始结构图。图。n利用一些启发式原则来改进系统的利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的初始结构图,直到得到符合要求的结构图为止。结构图为止。n修改和补充数据词典。修改和补充数据词典。n制定测试计划。制定测试计划。 在系统结构图中的模块在系统结构图中的模块n传入模块传入模块──从下属模块取得数从下属模块取得数据,经过某些处理,再将其传送给据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻上级模块。它传送的数据流叫做逻辑输入数据流。辑输入数据流。n传出模块传出模块──从上级模块获得数从上级模块获得数据,进行某些处理,再将其传送给据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻下属模块。它传送的数据流叫做逻辑输出数据流。辑输出数据流。 n变换模块变换模块──它从上级模块取得数它从上级模块取得数据,进行特定的处理,转换成其它据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工形式,再传送回上级模块。它加工的数据流叫做变换数据流。的数据流叫做变换数据流。n协调模块协调模块──对所有下属模块进行对所有下属模块进行协调和管理的模块。协调和管理的模块。 变换型系统结构图变换型系统结构图n变换型数据处理问题的工作过程大变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数致分为三步,即取得数据,变换数据和给出数据。据和给出数据。n相应于取得数据、变换数据、给出相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、数据,变换型系统结构图由输入、中心变换和输出等三部分组成。中心变换和输出等三部分组成。 事务型系统结构图事务型系统结构图n它接受一项事务,根据事务处理的它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的特点和性质,选择分派一个适当的处理单元,然后给出结果。处理单元,然后给出结果。n在事务型系统结构图中,事务中心在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。模块又可能调用若干个细节模块。 变换分析变换分析n变换分析方法由以下四步组成:变换分析方法由以下四步组成:u重画数据流图;重画数据流图;u区分有效区分有效((逻辑逻辑))输入、有效输入、有效((逻辑逻辑))输出和中心变换部分;输出和中心变换部分;u进行一级分解,设计上层模块;进行一级分解,设计上层模块;u进行二级分解,设计输入、输出进行二级分解,设计输入、输出和中心变换部分的中、下层模块。和中心变换部分的中、下层模块。 ①①在选择模块设计的在选择模块设计的次序次序时,必须时,必须对一个模块的对一个模块的全部直接下属模块全部直接下属模块都都设计完成设计完成之后,才之后,才能转向另能转向另一个模块一个模块的下层模的下层模块的设计。块的设计。 ②②在设计下层模块时,应考虑模块的在设计下层模块时,应考虑模块的耦合耦合和和内聚内聚问题,以提高初始结构图问题,以提高初始结构图的质量。的质量。③③使用使用““黑箱黑箱””技术技术::在设计当前模块在设计当前模块时,时,先把这个模块的所有下层模块定先把这个模块的所有下层模块定义成义成““黑箱黑箱””,在设计中利用它们时,,在设计中利用它们时,暂时不考虑其内部结构和实现。在这暂时不考虑其内部结构和实现。在这一步定义好的一步定义好的““黑箱黑箱””,在下一步就可,在下一步就可以对它们进行设计和加工。这样,又以对它们进行设计和加工。这样,又会导致更多的会导致更多的““黑箱黑箱””。最后,全部。最后,全部““黑箱黑箱””的内容和结构应完全被确定。的内容和结构应完全被确定。 ④④在模块划分时,一个模块的直接下在模块划分时,一个模块的直接下属模块一般在属模块一般在55个个左右。如果直接下左右。如果直接下属模块超过属模块超过1010个,可设立中间层次。个,可设立中间层次。⑤⑤如果出现了以下情况,就停止模块如果出现了以下情况,就停止模块的功能分解:的功能分解:当模块不能再细分为明显的子任务当模块不能再细分为明显的子任务时;时;当分解成用户提供的模块或程序库当分解成用户提供的模块或程序库的子程序时;的子程序时;当模块的界面是输入/输出设备传当模块的界面是输入/输出设备传送的信息时;送的信息时;当模块不宜再分解得过小时。当模块不宜再分解得过小时。 事务分析事务分析n在很多软件应用中,存在某种作业在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。的功能。这种数据流就叫做事务。n与变换分析一样,事务分析也是从与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。步分解,建立系统到结构图。 事务分析过程事务分析过程①①识别事务源识别事务源利用数据流图和数据词典,从问题利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工还必须区别系统的输入、中心加工和输出中产生的事务。和输出中产生的事务。 ②②规定适当的事务型结构规定适当的事务型结构在确定了该数据流图具有事务型特在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立征之后,根据模块划分理论,建立适当的事务型结构。适当的事务型结构。③③识别各种事务和它们定义的操作。识别各种事务和它们定义的操作。从问题定义和需求分析中找出的事从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细于系统内部产生的事务,必须仔细地定义它们的操作。地定义它们的操作。 ④④注意利用公用模块注意利用公用模块在事务分析的过程中,如果不同事在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的务的一些中间模块可由具有类似的语法和语义的若干个低层模块组语法和语义的若干个低层模块组成,则可以把这些低层模块构造成成,则可以把这些低层模块构造成公用模块。公用模块。⑤⑤对每一事务,或对联系密切的一对每一事务,或对联系密切的一组事务,建立一个事务处理模块;组事务,建立一个事务处理模块;如果发现在系统中有类似的事务,如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。可以把它们组成一个事务处理模块。 ⑥⑥对事务处理模块规定它们全部的下对事务处理模块规定它们全部的下层操作模块层操作模块⑦⑦对操作模块规定它们的全部细节模对操作模块规定它们的全部细节模块块变换分析是软件系统结构设计的主变换分析是软件系统结构设计的主要方法。要方法。一般,一个大型的软件系一般,一个大型的软件系统是变换型结构和事务型结构的混统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变合结构。所以,我们通常利用以变换分析为主,事务分析为辅的方式换分析为主,事务分析为辅的方式进行软件结构设计。进行软件结构设计。 软件模块结构的改进软件模块结构的改进n模块功能的完善化模块功能的完善化一个完整的模块应当有以下几部分:一个完整的模块应当有以下几部分:①①执行规定的功能的部分;执行规定的功能的部分;②②出错处理的部分。当模块不能出错处理的部分。当模块不能完成规定的功能时,必须回送出错完成规定的功能时,必须回送出错标志,出现例外情况的原因。标志,出现例外情况的原因。③③如果需要返回数据给它的调用如果需要返回数据给它的调用者,在完成数据加工或结束时,者,在完成数据加工或结束时,应当给它的调用者返回一个状态码。应当给它的调用者返回一个状态码。 n消除重复功能,改善软件结构消除重复功能,改善软件结构①①完全相似完全相似:在结构上完全相似,:在结构上完全相似,可能只是在数据类型上不一致。此可能只是在数据类型上不一致。此时可以采取完全合并的方法。时可以采取完全合并的方法。②②局部相似局部相似:找出其相同部分,分:找出其相同部分,分离出去,重新定义成一个独立的下离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块一层模块。还可以与它的上级模块合并。合并。 n模块的作用范围应在控制范围之内模块的作用范围应在控制范围之内u模块的模块的控制范围控制范围包括它本身及其包括它本身及其所有的从属模块。所有的从属模块。u模块的模块的作用范围作用范围是指模块内一个是指模块内一个判定的作用范围,凡是受这个判判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定影响的所有模块都属于这个判定的作用范围。定的作用范围。u如果一个判定的作用范围包含在如果一个判定的作用范围包含在这个判定所在模块的控制范围之这个判定所在模块的控制范围之内,则这种结构是简单的,否内,则这种结构是简单的,否则,它的结构是不简单的。则,它的结构是不简单的。 n尽可能减少高扇出结构,随着深度尽可能减少高扇出结构,随着深度增大扇入增大扇入。如果一个模块的扇出数过大,就意如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增控制过多的下属模块。应当适当增加中间层次的控制模块。加中间层次的控制模块。 n避免或减少使用病态联接避免或减少使用病态联接应限制使用如下三种病态联接:应限制使用如下三种病态联接:①①直接病态联接直接病态联接即模块即模块AA直接从模直接从模块块BB内部取出某些数据,或者把某内部取出某些数据,或者把某些数据直接送到模块些数据直接送到模块BB内部。内部。 ②②公共数据域病态联接公共数据域病态联接模块模块AA和模和模块块BB通过公共数据域,直接传送或通过公共数据域,直接传送或接受数据,而不是通过它们的上级接受数据,而不是通过它们的上级模块。这种方式将使得模块间的耦模块。这种方式将使得模块间的耦合程度剧增。它不仅影响模块A和合程度剧增。它不仅影响模块A和模块B,而且影响与公共数据域有模块B,而且影响与公共数据域有关联的所有模块。关联的所有模块。 ③③通信模块联接通信模块联接即模块即模块AA和模块和模块BB通过通信模块通过通信模块TABLEITTABLEIT传送数据。传送数据。从表面看,这不是病态联接,因从表面看,这不是病态联接,因为模块A和模块为模块A和模块BB都未涉及通信模都未涉及通信模块块TABLEITTABLEIT的内部。然而,它的内部。然而,它们之间的通信(即数据传送)没们之间的通信(即数据传送)没有通过它们的上级模块。从这个有通过它们的上级模块。从这个意义上讲,这种联接是病态的。意义上讲,这种联接是病态的。 n模块的大小要适中模块的大小要适中模块的大小,可以用模块中所含语模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常大小限制在一定的范围之内。通常规定其语句行数在规定其语句行数在5050~~100100左右,左右,保持在一页纸之内,最多不超过保持在一页纸之内,最多不超过500500行。行。 n设计功能可预测的模块,但要避免设计功能可预测的模块,但要避免过分受限制的模块过分受限制的模块u一个功能可预测的模块,不论内一个功能可预测的模块,不论内部处理细节如何,但对部处理细节如何,但对相同的输入相同的输入数据数据,总能产生,总能产生同样的结果同样的结果。但。但是,如果模块内部蕴藏有一些特殊是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模可能是不可预测的。对于这种模块,如果调用者不小心使用,其结块,如果调用者不小心使用,其结果将不可预测。果将不可预测。 u如果一个模块的局部数据结构的如果一个模块的局部数据结构的大小、控制流的选择或者与外界大小、控制流的选择或者与外界((人、硬软件人、硬软件))的接口模式被限制的接口模式被限制死了,则很难适应用户新的要求死了,则很难适应用户新的要求或环境的变更。或环境的变更。u为了能够适应将来的变更,软件为了能够适应将来的变更,软件模块中局部数据结构的大小应当模块中局部数据结构的大小应当是可控制的,控制流的选择对于是可控制的,控制流的选择对于调用者来说,应当是可预测的。调用者来说,应当是可预测的。而与外界的接口应当是灵活的。而与外界的接口应当是灵活的。 n软件包应满足设计约束和可移植性软件包应满足设计约束和可移植性为了使得软件包可以在某些特定的为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要提出了一些设计约束和可移植的要求。例如,设计约束有时要求一个求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加频率、调用间隔等等特性,重新加以组织。以组织。 设计的后处理设计的后处理n为每一个模块写一份处理说明为每一个模块写一份处理说明n为每一个模块提供一份接口说明为每一个模块提供一份接口说明n确定全局数据结构和局部数据结构确定全局数据结构和局部数据结构n指出所有的设计约束和限制指出所有的设计约束和限制n进行概要设计的评审进行概要设计的评审n进行设计的优化进行设计的优化((如果需要和可能如果需要和可能的话的话)) 数据设计及文件设计数据设计及文件设计n数据设计的原则数据设计的原则n文件设计文件设计 数据设计的原则数据设计的原则nR.S.PressmanR.S.Pressman数据设计的过程数据设计的过程u为在需求分析阶段所确定的数据为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一结构进行算法分析,以便选择一个最有效的结构;设计对于这种个最有效的结构;设计对于这种逻辑数据结构的一组操作,以实逻辑数据结构的一组操作,以实现各种所期望的运算。现各种所期望的运算。 u确定对逻辑数据结构所必需的那确定对逻辑数据结构所必需的那些操作的程序模块些操作的程序模块((软件包软件包)),以,以便限制或确定各个数据设计决策便限制或确定各个数据设计决策的影响范围。的影响范围。nPressmanPressman提出了一组原则,用来定提出了一组原则,用来定义和设计数据。实际上,在进行需义和设计数据。实际上,在进行需求分析时往往就开始了数据设计。求分析时往往就开始了数据设计。 1.1.用于软件的系统化方法也适用于数用于软件的系统化方法也适用于数据据。。在导出、评审和定义软件的需在导出、评审和定义软件的需求和软件系统结构时,必须定义和求和软件系统结构时,必须定义和评审其中所用到的数据流、数据对评审其中所用到的数据流、数据对象及数据结构的表示。应当考虑几象及数据结构的表示。应当考虑几种不同的数据组织方案,还应当分种不同的数据组织方案,还应当分析数据设计给软件设计带来的影响。析数据设计给软件设计带来的影响。 2.2.确定所有的数据结构和在每种数据确定所有的数据结构和在每种数据结构上施加的操作结构上施加的操作。。设计有效的数设计有效的数据结构,必须考虑到要对该数据结据结构,必须考虑到要对该数据结构进行的各种操作。构进行的各种操作。3.3.应当建立一个数据词典并用它来定应当建立一个数据词典并用它来定义数据和软件的设计义数据和软件的设计。。数据词典清数据词典清楚地说明了各个数据之间的关系和楚地说明了各个数据之间的关系和对数据结构内各个数据元素的约束。对数据结构内各个数据元素的约束。 4.4.低层数据设计的决策应推迟到设计低层数据设计的决策应推迟到设计过程的后期进行过程的后期进行。。在进行需求分析在进行需求分析时确定的总体数据组织,应在概要时确定的总体数据组织,应在概要设计阶段加以细化,在详细设计阶设计阶段加以细化,在详细设计阶段才规定具体的细节。段才规定具体的细节。5.5.数据结构的表示只限于那些必须直数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才接使用该数据结构内数据的模块才能知道能知道。。此原则就是信息隐蔽和与此原则就是信息隐蔽和与此相关的耦合性原则。此相关的耦合性原则。 6.6.应当建立一个存放有效数据结构及应当建立一个存放有效数据结构及相关操作的库相关操作的库。。数据结构应当设计数据结构应当设计成为可复用的。建立一个存有各种成为可复用的。建立一个存有各种可复用的数据结构模型的部件库。可复用的数据结构模型的部件库。7.7.软件设计和程序设计语言应当支持软件设计和程序设计语言应当支持抽象数据类型的定义和实现抽象数据类型的定义和实现。。以上原则适用于软件工程的定义阶以上原则适用于软件工程的定义阶段和开发阶段。段和开发阶段。““清晰的信息定义清晰的信息定义是软件开发成功的关键是软件开发成功的关键””。。 文件设计文件设计文件设计的过程,主要分两个阶段。文件设计的过程,主要分两个阶段。第一个阶段是文件的逻辑设计,主第一个阶段是文件的逻辑设计,主要在概要设计阶段实施。要在概要设计阶段实施。 (1)(1)整理必须的数据元素:整理必须的数据元素:在软件设计中所使用的数据,有长在软件设计中所使用的数据,有长期的,有短期的,还有临时的。它期的,有短期的,还有临时的。它们都可以存放在文件中,在需要时们都可以存放在文件中,在需要时对它们进行访问。因此首先必须整对它们进行访问。因此首先必须整理应存储的数据元素,给它们一个理应存储的数据元素,给它们一个易于理解的名字,指明其类型和位易于理解的名字,指明其类型和位数,以及其内容涵义。数,以及其内容涵义。 (2)(2)分析数据间的关系:分析数据间的关系:分析在业务处理中哪些数据元素是分析在业务处理中哪些数据元素是同时使用的。把同时使用次数多的同时使用的。把同时使用次数多的数据元素归纳成一个文件进行管理。数据元素归纳成一个文件进行管理。分析数据元素的内容,研究数据元分析数据元素的内容,研究数据元素与数据元素之间的逻辑关系,根素与数据元素之间的逻辑关系,根据分析,弄清数据元素的含义及其据分析,弄清数据元素的含义及其属性。属性。 (3)(3)确定文件的逻辑设计:确定文件的逻辑设计:根据数据关联性分析,明确哪些数根据数据关联性分析,明确哪些数据元素应当归于一组进行管理,把据元素应当归于一组进行管理,把应当归于一组的数据元素进行统一应当归于一组的数据元素进行统一布局,产生文件的逻辑设计。应用布局,产生文件的逻辑设计。应用关系模型设计文件的逻辑结构时,关系模型设计文件的逻辑结构时,必须使其达到第三范式必须使其达到第三范式(3(3NF)NF),,以减以减少数据的冗余,提高存取的效率。少数据的冗余,提高存取的效率。 顾客文件顾客文件商品文件商品文件X:英文字母+数字;K:汉字;N:数字 第二个阶段是文件的物理设计,主第二个阶段是文件的物理设计,主要在软件的详细设计阶段实施要在软件的详细设计阶段实施(4)(4)理解文件的特性:理解文件的特性:对于文件的逻辑规格说明,研究从对于文件的逻辑规格说明,研究从业务处理的观点来看所要求的一些业务处理的观点来看所要求的一些特性,包括文件的使用率、追加率特性,包括文件的使用率、追加率和删除率,以及保护和保密等。考和删除率,以及保护和保密等。考虑需要采用什么文件组织形式。虑需要采用什么文件组织形式。 (5)(5)确定文件的组织方式确定文件的组织方式一般要根据文件的特性,来确定文一般要根据文件的特性,来确定文件的组织方式。件的组织方式。顺序文件顺序文件::连续文件连续文件串联文件。串联文件。直接存取文件直接存取文件::无关键字直接存取文件无关键字直接存取文件带关键字直接存取文件带关键字直接存取文件桶式直接存取文件。桶式直接存取文件。 索引顺序文件索引顺序文件::其基本数据记录按顺序文件组其基本数据记录按顺序文件组织,记录排列顺序必须按关键织,记录排列顺序必须按关键字值字值升序或降序安排,且具有升序或降序安排,且具有索引部索引部分,也按同一关键字进分,也按同一关键字进行索引。行索引。分区文件分区文件::这类文件主要用于存放程序。这类文件主要用于存放程序。它由若干称为成员的顺序组织它由若干称为成员的顺序组织的记的记录组和索引组成。录组和索引组成。 虚拟存储文件虚拟存储文件::这是基于操作系统的请求页式这是基于操作系统的请求页式存储管理功能而建立的索引顺存储管理功能而建立的索引顺序文序文件。件。倒排文件倒排文件::按候选属性建立索引表。按候选属性建立索引表。 (6)(6)确定文件的存储介质确定文件的存储介质;;(7)(7)确定文件的记录格式确定文件的记录格式;;确定文件记录中各数据项以及确定文件记录中各数据项以及它们在记录中的物理安排。它们在记录中的物理安排。记录的长度:记录的长度:设计记录的长设计记录的长度要确保能满足需要,还要考虑使度要确保能满足需要,还要考虑使用设备的制约和效率,尽可能与读用设备的制约和效率,尽可能与读写单位匹配,并尽可能减少处理过写单位匹配,并尽可能减少处理过程中内外存的交换次数。程中内外存的交换次数。 数据项的顺序:数据项的顺序:对于可变长对于可变长记录,应在记录的开头记入长度信记录,应在记录的开头记入长度信息;对于关键字项,应尽量按级别息;对于关键字项,应尽量按级别高低,顺序配置;联系较密切的数高低,顺序配置;联系较密切的数据项,应归纳在一起进行配置。据项,应归纳在一起进行配置。数据项的属性:数据项的属性:属性相同的属性相同的数据项,应尽量归纳在一起配置;数据项,应尽量归纳在一起配置;数据项应按双字长,全字长,半字数据项应按双字长,全字长,半字长和字节的属性,顺序配置。长和字节的属性,顺序配置。 预留空间:预留空间:考虑到将来可能的考虑到将来可能的变更或扩充,应当预先留一些空闲变更或扩充,应当预先留一些空闲空间。不必统一地预留,可在有可空间。不必统一地预留,可在有可能变更或扩充的项旁边,在相邻接能变更或扩充的项旁边,在相邻接处预留。处预留。(8)(8)估算存取时间和存储容量。估算存取时间和存储容量。 过程设计过程设计n从软件开发的工程化观点来看,在从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细分析,设计出全部必要的过程细节,并给予清晰的表达。这就是过节,并给予清晰的表达。这就是过程设计的任务。程设计的任务。 n在过程设计阶段,要决定各个模块在过程设计阶段,要决定各个模块的实现算法,并精确地表达这些算的实现算法,并精确地表达这些算法。表达过程规格说明的工具叫做法。表达过程规格说明的工具叫做详细设计工具,它可以分为以下三详细设计工具,它可以分为以下三类类::图形工具图形工具表格工具表格工具语言工具语言工具 程序流程图程序流程图n程序流程图也称为程序框图,程序程序流程图也称为程序框图,程序流程图使用流程图使用五种基本控制结构五种基本控制结构是是:: 示例示例 程序流程图的标准符号程序流程图的标准符号 循环的标准符号循环的标准符号注解的使用注解的使用 多出口判断多出口判断 NN--SS图图nNN--SS图也叫做盒图。五种基本控制图也叫做盒图。五种基本控制结构由五种图形构件表示。结构由五种图形构件表示。 示例示例 NN--SS图的嵌套定义形式图的嵌套定义形式 问题分析图问题分析图((PAD)PAD)nPADPAD也设置了五种基本控制结构的也设置了五种基本控制结构的图式,并允许递归使用。图式,并允许递归使用。 PADPAD描述的示例描述的示例 对应于增量型循环结构对应于增量型循环结构forforii:=:=nn1to1tonn2step2stepnn3do3do在在PADPAD中有相应的循环控制结构中有相应的循环控制结构PADPAD的扩充控制结构的扩充控制结构 判定表判定表n判定表用于表示程序的判定表用于表示程序的静态逻辑静态逻辑n在判定表中的条件部分给出所有在判定表中的条件部分给出所有的的两分支判断两分支判断的列表,动作部分的列表,动作部分给出给出相应的处理相应的处理n要求将程序流程图中的多分支判要求将程序流程图中的多分支判断都改成两分支判断断都改成两分支判断 无多分支判断结构无多分支判断结构 建立判定表的步骤建立判定表的步骤n列出与一个具体过程列出与一个具体过程((或模块或模块))有关有关的所有处理。的所有处理。n列出过程执行期间的所有条件列出过程执行期间的所有条件((或或所有判断所有判断))。。n将特定条件取值组合与特定的处理将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取相匹配,消去不可能发生的条件取值组合。值组合。n将右部每一纵列规定为一个处理规将右部每一纵列规定为一个处理规则,即对于某一条件取值组合将有则,即对于某一条件取值组合将有什么动作。什么动作。 PDLPDL(ProgramDesignLanguage)(ProgramDesignLanguage)nPDLPDL是一种用于描述功能模块的是一种用于描述功能模块的算算法设计法设计和和加工细节加工细节的语言。称为设的语言。称为设计程序用语言。它是一种伪码。计程序用语言。它是一种伪码。n伪码的语法规则分为伪码的语法规则分为““外语法外语法””和和““内内语法语法””。。nPDLPDL具有严格的具有严格的关键字外语法关键字外语法,用,用于定义控制结构和数据结构,同时于定义控制结构和数据结构,同时它的它的表示实际操作和条件的内语法表示实际操作和条件的内语法可使用自然语言的词汇。可使用自然语言的词汇。 示例示例::拼词检查程序拼词检查程序PROCEDUREspellcheckISBEGINsplitdocumentintosinglewordsloodupwordsindictionarydisplaywordswhicharenotindictionarycreateanewdictionaryENDspellcheck PDLPDL的特点的特点n提供全部结构化控制结构、数据说提供全部结构化控制结构、数据说明和模块特征。能对明和模块特征。能对PDLPDL正文进行正文进行结构分割,使之变得易于理解。结构分割,使之变得易于理解。n为了区别关键字,规定关键字一律为了区别关键字,规定关键字一律大写,其它单词一律小写。或者规大写,其它单词一律小写。或者规定关键字加下划线,或者规定它们定关键字加下划线,或者规定它们为黑体字。为黑体字。 n内语法使用自然语言来描述处理特内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的人们可把主要精力放在描述算法的逻辑上。逻辑上。n有数据说明机制,包括简单的有数据说明机制,包括简单的((如标如标量和数组量和数组))与复杂的与复杂的((如链表和层次如链表和层次结构结构))的数据结构。的数据结构。n有子程序定义与调用机制,用以表有子程序定义与调用机制,用以表达各种方式的接口说明。达各种方式的接口说明。 使用使用PDLPDL语言,逐步求精:语言,逐步求精:PROCEDUREspellcheckBEGIN--*splitdocumentintosinglewordsLOOPgetnextwordaddwordtowordlistinsortorderEXITWHENallwordsprocessedENDLOOP--*lookupwordsindictionaryLOOPgetwordfromwordlist IFwordnotindictionaryTHEN--*displaywordsnotindictionarydisplaywordpromptonuserterminalIFuserresponsesayswordOKTHENaddwordtogoodwordlistELSEaddwordtobadwordlistENDIFENDIFEXITWHENallwordsprocessedENDLOOP --*createanewwordsdictionarydictionary:=mergedictionaryandgoodwordlistENDspellcheck n用户界面应具备的特性用户界面应具备的特性n用户界面设计的任务分析用户界面设计的任务分析n用户界面任务和工作设计用户界面任务和工作设计n界面设计的基本类型界面设计的基本类型n数据输入界面设计数据输入界面设计n数据显示界面设计数据显示界面设计n控制界面的设计控制界面的设计 用户界面应具备的特性用户界面应具备的特性n可使用性可使用性u使用的使用的简单性简单性u用户界面中的用户界面中的术语标准化术语标准化和和一致一致性性u拥有拥有HELPHELP帮助帮助功能功能u快速的快速的系统响应系统响应和低的和低的系统成本系统成本u用户界面应具有用户界面应具有容错能力容错能力 n灵活性灵活性u算法的可隐可显性算法的可隐可显性u用户可以根据需要制定和修改界面方用户可以根据需要制定和修改界面方式式u能够按照用户的希望和需要,提供不能够按照用户的希望和需要,提供不同详细程度的系统响应信息同详细程度的系统响应信息u与其它软件系统应有标准的界面与其它软件系统应有标准的界面为使用户界面具有一定的灵活性,需要为使用户界面具有一定的灵活性,需要付出代价,而且有可能降低软件系统的付出代价,而且有可能降低软件系统的运行效率。运行效率。 n复杂性和可靠性复杂性和可靠性u用户界面的规模和组织的复杂程度就用户界面的规模和组织的复杂程度就是界面的复杂性。是界面的复杂性。u在完成预定功能的前提下,应使用户在完成预定功能的前提下,应使用户界面越简单越好。但不是把所有功能界面越简单越好。但不是把所有功能和界面安排成线性序列就一定简单。和界面安排成线性序列就一定简单。u用户界面的可靠性是指无故障使用的用户界面的可靠性是指无故障使用的间隔时间。间隔时间。u用户界面应能保证用户正确、可靠地用户界面应能保证用户正确、可靠地使用系统,保证有关程序和数据的安使用系统,保证有关程序和数据的安全性。全性。 用户界面设计的任务分析用户界面设计的任务分析n这一部分工作应与软件系统的需求这一部分工作应与软件系统的需求分析分析同步进行同步进行。它主要包括。它主要包括用户特性分析用户特性分析用户工作分析用户工作分析记录有关系统的概念和术语记录有关系统的概念和术语确定界面类型确定界面类型等等44个步骤。个步骤。 用户特性分析用户特性分析n用户界面是适应人的需要而建立用户界面是适应人的需要而建立的,因此,首先要弄清将要使用这的,因此,首先要弄清将要使用这个界面的用户类型。个界面的用户类型。n用户特性分析的目的是要详细了解用户特性分析的目的是要详细了解所有用户的技能和经验,以便能够所有用户的技能和经验,以便能够预测用户对不同界面设计会做出什预测用户对不同界面设计会做出什么反应,这样在更改界面时,就能么反应,这样在更改界面时,就能做出正确的判断。做出正确的判断。 1.1.用户类型用户类型外行型外行型初学型初学型熟练型熟练型专家型专家型用户的类型并不是一成不变的。因用户的类型并不是一成不变的。因此,要做用户特性测量,以帮助设此,要做用户特性测量,以帮助设计者选择适合于大多数用户使用的计者选择适合于大多数用户使用的界面类型和支持级别。界面类型和支持级别。 2.2.用户特性度量用户特性度量n用户特性的度量与用户使用模式及用户特性的度量与用户使用模式及观测到的用户群体能力有关。观测到的用户群体能力有关。u用户使用的频度用户使用的频度::即系统是否经即系统是否经常使用。常使用。u用户是否能够自由选用界面:用户是否能够自由选用界面:所所有的界面都应当是良好的。有的界面都应当是良好的。u用户对计算机的熟悉程度:用户对计算机的熟悉程度:对计对计算机的熟悉程度决定了要使用户算机的熟悉程度决定了要使用户达到熟练程度需要多少训练。达到熟练程度需要多少训练。 u用户知识:用户知识:有些用户已有相当多有些用户已有相当多的计算机编程和操作的知识。他的计算机编程和操作的知识。他们需要一种灵活的可编程的或命们需要一种灵活的可编程的或命令语言的界面。令语言的界面。u用户思维能力:用户思维能力:这是对用户的综这是对用户的综合知识和智力的衡量。合知识和智力的衡量。u用户的生理能力和技能:用户的生理能力和技能:主要指主要指人的视觉、听觉、认知及记忆等人的视觉、听觉、认知及记忆等方面的特点。因此,应该在这一方面的特点。因此,应该在这一方面去收集信息。方面去收集信息。 n用户群体的度量可以用用户群体的度量可以用打分打分的办法的办法来简单地度量。来简单地度量。u平均值平均值反映了用户群体的平均特反映了用户群体的平均特性。性。u标准偏差标准偏差反映了用户群体的差异反映了用户群体的差异大小,主要用于判断用户界面对大小,主要用于判断用户界面对不同类型的用户的适应范围。不同类型的用户的适应范围。 一个图书馆的计算机借阅系统一个图书馆的计算机借阅系统n由于图书馆的馆员将每天使用这个由于图书馆的馆员将每天使用这个系统,因此他们系统,因此他们使用系统的频度很使用系统的频度很高高。他们。他们以前几乎没有人使用过计以前几乎没有人使用过计算机算机,也没有人有自动化图书馆借,也没有人有自动化图书馆借阅系统和计算机系统的知识。他们阅系统和计算机系统的知识。他们的的绝大多数的智力水平在中等以上绝大多数的智力水平在中等以上。。 用户特性表用户特性表 用户工作分析用户工作分析n用户工作分析,也称为任务分析。用户工作分析,也称为任务分析。它是它是系统内部活动的分解系统内部活动的分解。。n用户工作分析与需求分析中结构化用户工作分析与需求分析中结构化分析的方法类似,采用分析的方法类似,采用自顶向下自顶向下,,逐步进行逐步进行功能分解功能分解。。n与常规的功能分解不同的是,所有与常规的功能分解不同的是,所有的系统任务,包括与人相关的活的系统任务,包括与人相关的活动,都要考虑在内。动,都要考虑在内。 n系统的功能分解,可以用数据流图系统的功能分解,可以用数据流图和数据词典描述。和数据词典描述。n任务可以由一组动作构成,它们规任务可以由一组动作构成,它们规定了为实现这个任务所必须的一系定了为实现这个任务所必须的一系列活动。列活动。n任务的细节可以使用结构化语言来任务的细节可以使用结构化语言来表达。它描述了动作完成的序列及表达。它描述了动作完成的序列及在完成动作时的所有例外情况。在完成动作时的所有例外情况。 n根据以上分析得到的度量表明,应根据以上分析得到的度量表明,应当当选择一种不太复杂的对话界面选择一种不太复杂的对话界面。。n例如,下面是图书馆中借阅图书的例如,下面是图书馆中借阅图书的活动描述。活动描述。TASK:loanbooksDOWHILEborrowersrequestreader_IDcheckreader_ID IFreader_IDinvalidpasstomembership_checkELSEcontinueENDIFDOWHILEbook_requestsenterbook_markonborrower_slipwritereader_IDonborrower_slipstampbookwithreturn_dateremovebook_in_library_tagENDWHILEENDWHILE 用户模型和观点用户模型和观点建立用户的思维模型,是为了帮助建建立用户的思维模型,是为了帮助建立设计者界面模型。立设计者界面模型。理论认知模型理论认知模型用户知识模型用户知识模型用户特性模型用户特性模型用户任务模型用户任务模型用户观点用户观点 ((11)理论认知模型)理论认知模型n由心理学家建立的模型,目的是要了由心理学家建立的模型,目的是要了解人的思维过程。解人的思维过程。n例如,典型的问题解决模型例如,典型的问题解决模型GOMSGOMS(GoalsOperatorMethodsSelection)(GoalsOperatorMethodsSelection)就是就是把把一组目标和子目标一组目标和子目标概括在一个问题空间概括在一个问题空间内,把内,把目标分解成为子目标网络目标分解成为子目标网络,每一个,每一个子目标都有与之相关的测试,通过使用某子目标都有与之相关的测试,通过使用某种方法搜索这个网络,在每一个结点上测种方法搜索这个网络,在每一个结点上测试事先做出的假设。试事先做出的假设。 ((22)用户知识模型)用户知识模型n这种模型描述了一定范畴内的知识这种模型描述了一定范畴内的知识以及类型之间的联系。以及类型之间的联系。n模型借助各个用户的知识来建立,模型借助各个用户的知识来建立,用遍历知识网络的方法来评价用户用遍历知识网络的方法来评价用户如何学习。如何学习。 ((33)用户特性模型)用户特性模型n这些模型主要依据在这些模型主要依据在用户特性分析用户特性分析所描述的技能和能力对用户进行分所描述的技能和能力对用户进行分类,它们也被称为类,它们也被称为用户外观用户外观。。 ((44)用户任务模型)用户任务模型n这种模型根据用户要求中提出的任这种模型根据用户要求中提出的任务的务的功能功能和和操作次序操作次序,构想该任务,构想该任务的概念。的概念。n通过它,可以了解用户知道多少有通过它,可以了解用户知道多少有关系统操作的知识,用户期望系统关系统操作的知识,用户期望系统应当如何工作等等。应当如何工作等等。n一个界面如果与用户预想的实现和一个界面如果与用户预想的实现和操作方式一致,它就容易为用户接操作方式一致,它就容易为用户接受。受。 ((55)用户观点)用户观点n指系统结构的用户模型。是用户描指系统结构的用户模型。是用户描述和设想现行系统结构的方法。述和设想现行系统结构的方法。n它可以用图形化的方式表示,也可它可以用图形化的方式表示,也可以用语言方式表示。以用语言方式表示。 任务模型任务模型n任务模型包括任务模型包括静态静态的和的和动态动态的两种。的两种。n系统的系统的静态模型静态模型就是对象就是对象——关系模关系模型,用于展现界面的结构设计;型,用于展现界面的结构设计;n系统的系统的动态模型动态模型是对系统操作或与是对系统操作或与会话设计有关的对象的动态行为的会话设计有关的对象的动态行为的描述。描述。n模型由一些结构组成,既要依据静模型由一些结构组成,既要依据静态的对象与其关系,又要依据活动态的对象与其关系,又要依据活动的过程顺序。的过程顺序。 n例例,,在一个图书馆中,可以将系统视在一个图书馆中,可以将系统视为为书籍书籍。这些书籍依次放在。这些书籍依次放在按照主按照主题分区排列题分区排列的书架上,它们可用一的书架上,它们可用一个层次结构表示。图书馆的其它部个层次结构表示。图书馆的其它部分,如流通台、后备书库、公共书分,如流通台、后备书库、公共书库、将要上架的书等,它们在空间库、将要上架的书等,它们在空间中可看成一个网络。中可看成一个网络。n用户可使用用户可使用对书籍进行分类对书籍进行分类的(逻的(逻辑)术语与辑)术语与布局和书籍流通布局和书籍流通的(物的(物理)术语来描述一个图书馆,组织理)术语来描述一个图书馆,组织他们关于现行系统的知识。他们关于现行系统的知识。 n用户模型还可以分为用户模型还可以分为设计者的用户设计者的用户模型模型和和用户期望的用户模型用户期望的用户模型。。n前者是设计者认为的用户对系统的前者是设计者认为的用户对系统的期望。期望。n后者是用户对系统的期望。后者是用户对系统的期望。n必须使它们一致起来。必须使它们一致起来。 用户界面任务和工作设计用户界面任务和工作设计n任务和工作设计的目的在于创造用任务和工作设计的目的在于创造用户的工作环境。户的工作环境。n通常,任务应组织得多样化一些,通常,任务应组织得多样化一些,要与人的能力相适应。既不能完全要与人的能力相适应。既不能完全由非常复杂的步骤组成,也不能太由非常复杂的步骤组成,也不能太过简单而使操作者感到厌烦。过简单而使操作者感到厌烦。 任务分配任务分配n在每个任务中,动作要分配给计算在每个任务中,动作要分配给计算机、用户或者二者。机、用户或者二者。n一般地,用户承担一般地,用户承担需要创造需要创造、、判断判断和探索和探索的任务,而计算机承担的任务,而计算机承担重复重复检查检查、、计算和数据处理计算和数据处理的任务。的任务。n数据录入数据录入、、数据恢复和决策支持数据恢复和决策支持是是混合任务。这些混合的任务需要通混合任务。这些混合的任务需要通过人和计算机交互来共同完成。过人和计算机交互来共同完成。 n任务分配产生两个网络。一个是任务分配产生两个网络。一个是人人的任务的任务网络,一个是网络,一个是计算机的任务计算机的任务网络。网络。n人的任务人的任务网络说明网络说明如何安装如何安装、、操作操作和使用系统和使用系统,它最后将形成操作过,它最后将形成操作过程和用户手册的基础程和用户手册的基础n计算机的任务计算机的任务网络则描述网络则描述计算机应计算机应担负的工作担负的工作。。n这两种网络都可以用数据流图来设这两种网络都可以用数据流图来设计。计。 任务分配步骤任务分配步骤n检查数据流图,标出哪些是单独由检查数据流图,标出哪些是单独由计算机完成的任务、哪些是单独由计算机完成的任务、哪些是单独由人完成的任务、哪些是由两者共同人完成的任务、哪些是由两者共同完成的任务。完成的任务。n对于共同完成的任务,将任务的每对于共同完成的任务,将任务的每一个动作分配给计算机或人。一个动作分配给计算机或人。n构成新的计算机的任务网络和人的构成新的计算机的任务网络和人的任务网络。任务网络。n再进一步细化计算机与人的协同动再进一步细化计算机与人的协同动作,以确定人和计算机如何交互。作,以确定人和计算机如何交互。 n一个任务可以划分成一些子任务,一个任务可以划分成一些子任务,按照某种顺序执行这些子任务,实按照某种顺序执行这些子任务,实现任务所要达到的目标,因此现任务所要达到的目标,因此需要需要做出结构性的任务序列做出结构性的任务序列。。n但许多事务处理任务是非结构性但许多事务处理任务是非结构性的,图书馆的馆长会以一个不可预的,图书馆的馆长会以一个不可预测的顺序来召集一个碰头会、查询测的顺序来召集一个碰头会、查询馆内各种业务情况。在这种情况馆内各种业务情况。在这种情况下,不存在一个人的任务网络,而下,不存在一个人的任务网络,而仅仅是一些仅仅是一些用户需要个别完成的互用户需要个别完成的互不联系的任务不联系的任务。。 工作方式和工作设计工作方式和工作设计n工作设计的目的是使工作设计的目的是使任务需求与操任务需求与操作员的能力相匹配作员的能力相匹配。。n在界面设计中关于人的因素特性的在界面设计中关于人的因素特性的简单的度量如下:简单的度量如下:u复杂性复杂性推理、判断和决策的难度推理、判断和决策的难度u专心程度专心程度对细节的注意力对细节的注意力u责任心责任心任务在总系统中的重要性任务在总系统中的重要性u变化性变化性在以上某一度量中的变化在以上某一度量中的变化性性 工作方式工作方式(1)(1)由一个人单独完成一个系统的目标由一个人单独完成一个系统的目标。。例如例如,,在商店业务处理系统中,检在商店业务处理系统中,检查顾客订单的任务中查顾客订单的任务中,,所做的工作所做的工作将是:数据输入、顾客赊欠清理、将是:数据输入、顾客赊欠清理、错误分辨和赊欠查询。错误分辨和赊欠查询。(2)(2)任务进展跟踪任务进展跟踪。确定命令在系统中。确定命令在系统中什么地方执行、确定关键延迟的命什么地方执行、确定关键延迟的命令、调查拖延的原因、提出解决的令、调查拖延的原因、提出解决的建议等。建议等。 n在做工作设计时,应该检查任务流程在做工作设计时,应该检查任务流程以确认不会出现任务过载。以确认不会出现任务过载。u如果同时有多个任务需要用户给予如果同时有多个任务需要用户给予注意,往往由于注意,往往由于命令的时间冲突命令的时间冲突而而使用户陷入困境,结果出现任务过使用户陷入困境,结果出现任务过载。载。u即使任务流程计划的很好,但由于即使任务流程计划的很好,但由于错误和一些意料之外的事情发生,错误和一些意料之外的事情发生,如果错误处理过程计划的不完全、如果错误处理过程计划的不完全、无条理无条理,也会出现任务过载。,也会出现任务过载。 n导致任务过载的原因,最常见的是导致任务过载的原因,最常见的是出现工作负荷的高峰。因此要计划出现工作负荷的高峰。因此要计划工作负荷使之均衡,并给出错误处工作负荷使之均衡,并给出错误处理的时间。理的时间。 界面设计的基本类型界面设计的基本类型界面设计类型界面设计类型n在选用界面形式的时侯,应当考虑每种类型在选用界面形式的时侯,应当考虑每种类型的优点和限制。从以下几个方面来考察,进的优点和限制。从以下几个方面来考察,进行抉择:行抉择:u使用的难易程度使用的难易程度:对于没有经验的用户,:对于没有经验的用户,该界面使用的难度有多大。该界面使用的难度有多大。u学习的难易程度学习的难易程度:学习该界面的命令和功:学习该界面的命令和功能的难度有多大。能的难度有多大。 u操作速度操作速度:在完成一个指定操作时,该界:在完成一个指定操作时,该界面在操作步骤、击键和反应时间等方面效面在操作步骤、击键和反应时间等方面效率有多高。率有多高。u复杂程度复杂程度:该界面提供了什么功能、:该界面提供了什么功能、能能否用新的方式组合这些功能以增强界面的否用新的方式组合这些功能以增强界面的功能。功能。u控制控制:人机交互时,是由计算机还是由人:人机交互时,是由计算机还是由人发起和控制对话。发起和控制对话。u开发的难易程度开发的难易程度:该界面设计是否有难度、:该界面设计是否有难度、开发工作量有多大。开发工作量有多大。 通常,一个界面的设计使用了一种以上的设通常,一个界面的设计使用了一种以上的设计类型,每种类型与一个或一组任务相匹配。计类型,每种类型与一个或一组任务相匹配。n菜单菜单((menu)menu)界面的设计界面的设计菜单是由系统预先设置好的,显示于屏幕上菜单是由系统预先设置好的,显示于屏幕上的一组或几组可供用户选用的命令。这种菜的一组或几组可供用户选用的命令。这种菜单命令无需用户通过键盘打入,而是由系统单命令无需用户通过键盘打入,而是由系统将那些在一定环境下所需用的操作命令将那些在一定环境下所需用的操作命令((菜单菜单命令命令)),全部或部分地显示在屏幕上,供用户,全部或部分地显示在屏幕上,供用户挑选。挑选。u按照显示的形象或样式来分类按照显示的形象或样式来分类 F正文菜单正文菜单正文菜单实质上是系统命令本身或者是正文菜单实质上是系统命令本身或者是其简写形式。在一个菜单中包含许多菜其简写形式。在一个菜单中包含许多菜单项,可以象节目单那样,按某种约单项,可以象节目单那样,按某种约定,定,在屏幕上成行或成列地排好。在屏幕上成行或成列地排好。简单的正文菜单的设置与选取方式:简单的正文菜单的设置与选取方式:①①首字符匹配方式首字符匹配方式②②序号匹配方式序号匹配方式③③亮条匹配方式亮条匹配方式 序号匹配方式序号匹配方式 F图标菜单图标菜单图标菜单,简称图标,是安置在一个小图标菜单,简称图标,是安置在一个小方框之中的一幅象形的或表意的图画。方框之中的一幅象形的或表意的图画。图标菜单项在功能上与正文菜单项没有图标菜单项在功能上与正文菜单项没有什么差别,只不过图标更形象、更直观。什么差别,只不过图标更形象、更直观。F正文和图标混合的菜单正文和图标混合的菜单这种菜单基本上还是正文式的。从屏幕这种菜单基本上还是正文式的。从屏幕上看,它还是由字符串构成。只不过在上看,它还是由字符串构成。只不过在字符串的前端或末端缀有图标。字符串的前端或末端缀有图标。 u按屏幕位置和操作风格来分类按屏幕位置和操作风格来分类ÀÀ固定位置菜单固定位置菜单固定位置菜单每次总是在屏幕的相对固固定位置菜单每次总是在屏幕的相对固定的位置出现。定的位置出现。通常软件系统的功能划分多为树型结通常软件系统的功能划分多为树型结构,要求系统的控制结构也应是树型结构,要求系统的控制结构也应是树型结构。固定位置菜单可以很方便地实现一构。固定位置菜单可以很方便地实现一种三层结构的菜单机制。种三层结构的菜单机制。00层层──主菜单主菜单:定位于屏幕中心或占:定位于屏幕中心或占领整个屏幕,菜单项的内容是所属各个领整个屏幕,菜单项的内容是所属各个子系统的名称。子系统的名称。 11层层──子系统层子系统层::这一层菜单在水这一层菜单在水平方向排成一行,安放于屏幕的上沿或平方向排成一行,安放于屏幕的上沿或下沿。菜单项的内容是所属各操作类的下沿。菜单项的内容是所属各操作类的名称。当控制进入下一层次时,这一层名称。当控制进入下一层次时,这一层菜单并不消失,仍然留在原来的位置上。菜单并不消失,仍然留在原来的位置上。22层层──当用户挑选了某一个操作类当用户挑选了某一个操作类时,屏幕上将按垂直方向显示这组操作时,屏幕上将按垂直方向显示这组操作类的名称。这一层菜单项的内容与应用类的名称。这一层菜单项的内容与应用系统的具体某项操作有关。系统的具体某项操作有关。采用固定位置菜单对系统加以控制,其突采用固定位置菜单对系统加以控制,其突出的优点是层次清晰。出的优点是层次清晰。 ÁÁ浮动位置菜单浮动位置菜单浮动位置菜单浮动位置菜单((弹出式菜单弹出式菜单))。其主要特点。其主要特点是:仅当系统需要时,它才被瞬时显示是:仅当系统需要时,它才被瞬时显示出来供用户选用,完成使命后它立即从出来供用户选用,完成使命后它立即从屏幕上消失。它的显示位置可以根据用屏幕上消失。它的显示位置可以根据用户的操作或根据当时的操作环境来决定。户的操作或根据当时的操作环境来决定。弹出式菜单与用户当时正在执行的操作弹出式菜单与用户当时正在执行的操作密切相关。但是使用弹出式菜单,由于密切相关。但是使用弹出式菜单,由于菜单的瞬时性,用户不清楚自己当前究菜单的瞬时性,用户不清楚自己当前究竟处在系统的什么位置,看不到自己处竟处在系统的什么位置,看不到自己处于那一层次。于那一层次。 ÂÂ下拉式菜单下拉式菜单下拉式菜单将固定位置菜单与浮动位置菜下拉式菜单将固定位置菜单与浮动位置菜单揉和在一起。其结构分为两层:第一层单揉和在一起。其结构分为两层:第一层是各个父菜单项的名字,它们排成一行,是各个父菜单项的名字,它们排成一行,放置在屏幕上沿的一个菜单带区中。第二放置在屏幕上沿的一个菜单带区中。第二层是各个父菜单项的子菜单项,它们分别层是各个父菜单项的子菜单项,它们分别隶属于所对应的父菜单项。子菜单项平时隶属于所对应的父菜单项。子菜单项平时是是““藏藏””在屏幕后面的,仅仅当其父菜单项在屏幕后面的,仅仅当其父菜单项被选上时,才紧挨在其父菜单项的下方立被选上时,才紧挨在其父菜单项的下方立即显示出来,以供用户进一步选用。选完即显示出来,以供用户进一步选用。选完之后它们又立即消失。之后它们又立即消失。 下拉式菜单只能描述系统的两个层次的控下拉式菜单只能描述系统的两个层次的控制结构,但是一般的系统的控制结构不只制结构,但是一般的系统的控制结构不只两层,解决办法有两个:两层,解决办法有两个:对于小系统或系统中的一个小范围,可对于小系统或系统中的一个小范围,可使用弹出式菜单。这种办法比较实用,系使用弹出式菜单。这种办法比较实用,系统开销也比较小。统开销也比较小。如果系统相当大,应将原系统分为若如果系统相当大,应将原系统分为若干子系统,子系统还可以再分解下去。对干子系统,子系统还可以再分解下去。对于各个子系统之间的接口控制,可以通过于各个子系统之间的接口控制,可以通过窗口来实现,而在各个子系统内部,仍可窗口来实现,而在各个子系统内部,仍可以使用下拉式菜单来进行界面管理。以使用下拉式菜单来进行界面管理。 ÃÃ嵌入式菜单嵌入式菜单嵌入式菜单通常并不显式地成行成列地嵌入式菜单通常并不显式地成行成列地出现在屏幕上,而是混在应用之中。也出现在屏幕上,而是混在应用之中。也可以说嵌入式菜单项本身就是它所在应可以说嵌入式菜单项本身就是它所在应用中的一部分内容。必要时可以用粗体用中的一部分内容。必要时可以用粗体字或字母高亮度显示等方式加以突出。字或字母高亮度显示等方式加以突出。n图像图像所谓图像,就是屏幕上一个矩形区域内包所谓图像,就是屏幕上一个矩形区域内包含的象素所构成的一个画面。含的象素所构成的一个画面。在用户界面中,加入丰富多彩的画面,将在用户界面中,加入丰富多彩的画面,将能够更形象地为用户提供有用的信息而达到能够更形象地为用户提供有用的信息而达到可视化的目的。可视化的目的。 u图像的隐蔽和再现图像的隐蔽和再现实用系统中常常频繁地要求把屏幕上的某实用系统中常常频繁地要求把屏幕上的某一块矩形区域内的图像隐蔽起来,然后在一块矩形区域内的图像隐蔽起来,然后在以后的适当时间,令其重新显现。以后的适当时间,令其重新显现。例如,下拉式菜单和弹出式菜单在显示例如,下拉式菜单和弹出式菜单在显示时,就需要预先把将要被遮盖的区域中的时,就需要预先把将要被遮盖的区域中的原先的屏幕图像隐藏起来,而当选取菜单原先的屏幕图像隐藏起来,而当选取菜单项的工作完成之后,又需要把原来隐藏的项的工作完成之后,又需要把原来隐藏的那些图形再现出来。为此,需要设置两个那些图形再现出来。为此,需要设置两个专门用来保存屏幕上用户工作区图像的内专门用来保存屏幕上用户工作区图像的内存缓冲区。存缓冲区。在执行这一类图像操作时,用于图像缓冲在执行这一类图像操作时,用于图像缓冲区的内存开销较大。区的内存开销较大。 u屏幕的滚动屏幕的滚动通常,用于人机交互活动的物理屏幕仅能通常,用于人机交互活动的物理屏幕仅能容纳用户需要显示的内容中的一部分内容纳用户需要显示的内容中的一部分内容,因此,用户必须通过屏幕滚动或其它容,因此,用户必须通过屏幕滚动或其它措施才能看到全部内容。措施才能看到全部内容。屏幕滚动可以将用户的显示内容在物理屏屏幕滚动可以将用户的显示内容在物理屏幕上做平行移动,因此需要为此功能设置幕上做平行移动,因此需要为此功能设置一个内存缓冲区。一个内存缓冲区。u图案的显示图案的显示在人机对话过程中使用图案显示,可以大在人机对话过程中使用图案显示,可以大大提高应用系统的视觉效果。连续地显示大提高应用系统的视觉效果。连续地显示预先准备好的某动作过程中的一连串相接预先准备好的某动作过程中的一连串相接的瞬间图案,就构成为动画。的瞬间图案,就构成为动画。 n对话对话对话对话((对话框对话框))是系统在必要时显示于屏幕上是系统在必要时显示于屏幕上一个矩形区域内的图形和正文信息。通过对一个矩形区域内的图形和正文信息。通过对话,实现用户和系统之间的通信。话,实现用户和系统之间的通信。通常,对话是一种辅助手段,它也可以用来通常,对话是一种辅助手段,它也可以用来在系统的执行过程中,给出某种警告或提示在系统的执行过程中,给出某种警告或提示信息。对话在屏幕上的出现方式与弹出式菜信息。对话在屏幕上的出现方式与弹出式菜单类似,即瞬时弹出。与弹出式菜单不同的单类似,即瞬时弹出。与弹出式菜单不同的是,对话框在屏幕上显示的位置是由系统所是,对话框在屏幕上显示的位置是由系统所设置的。设置的。有三种对话形式。有三种对话形式。 ÀÀ必须回答式必须回答式必须回答式的对话在屏幕上出现时,用户必必须回答式的对话在屏幕上出现时,用户必须给予回答,否则系统不再做任何其他工作。须给予回答,否则系统不再做任何其他工作。ÁÁ无需回答式无需回答式这类对话在屏幕上的出现,仅仅是为了告诉用这类对话在屏幕上的出现,仅仅是为了告诉用户一些参考信息,不需要用户回答。因此,用户一些参考信息,不需要用户回答。因此,用户可以不理睬它,继续做原来的工作。户可以不理睬它,继续做原来的工作。 ÂÂ警告式警告式这类对话主要用于系统报错或者警告。警告这类对话主要用于系统报错或者警告。警告式的对话,根据警告的内容,可以是必须回式的对话,根据警告的内容,可以是必须回答式的对话,也可以是无需回答式的对话,答式的对话,也可以是无需回答式的对话,同时给出一些必要的警告信息。同时给出一些必要的警告信息。例如,在删除一个文件时,键入了删除文件例如,在删除一个文件时,键入了删除文件命令后,为了确保不致误删不该删除的文命令后,为了确保不致误删不该删除的文件,屏幕上将出现一个警告式的对话框:件,屏幕上将出现一个警告式的对话框: n问题描述语言问题描述语言POLPOL(ProblemOrientedLanguage)(ProblemOrientedLanguage)n任务层:任务层:分析用户需求,对软件全部功能和分析用户需求,对软件全部功能和性能进行分解,确定目标和子目标。性能进行分解,确定目标和子目标。n语义层:语义层:确定系统面对的对象以及基于这些确定系统面对的对象以及基于这些对象之上的操作,建立问题解决的算法。对象之上的操作,建立问题解决的算法。n语法层:语法层:将语义层的操作细化为由各种命令、将语义层的操作细化为由各种命令、用户操作、上下文关系和状态变量组成的语用户操作、上下文关系和状态变量组成的语言,描述用户和计算机如何按照文法交互。言,描述用户和计算机如何按照文法交互。n交互层:交互层:根据诸如击键、设备驱动、显示等根据诸如击键、设备驱动、显示等具体操作来定义用户操作命令和可供用户选具体操作来定义用户操作命令和可供用户选择的处理过程。择的处理过程。 任务层任务层n一个任务可以自顶向下分解成由子任务构一个任务可以自顶向下分解成由子任务构成的树形结构,每个任务和它们的动作用成的树形结构,每个任务和它们的动作用带有注释和约束的结构化格式来描述。带有注释和约束的结构化格式来描述。n各个任务涉及的对象叫做实体,而动作即各个任务涉及的对象叫做实体,而动作即是施加于其上的。是施加于其上的。n自顶向下的分解要一直做到实体和任务结自顶向下的分解要一直做到实体和任务结构的详细设想完成为止。构的详细设想完成为止。 语义层语义层nPOLPOL描述概念实体和实现任务所需的运算。描述概念实体和实现任务所需的运算。n概念实体可以是抽象的概念,例如某种联概念实体可以是抽象的概念,例如某种联系,也可以是具体的对象,例如某个消息。系,也可以是具体的对象,例如某个消息。n系统本身由实体的集合组成,而操作只是系统本身由实体的集合组成,而操作只是与某个对象相联系。与某个对象相联系。n在语义层中还要给出为了完成任务所需的在语义层中还要给出为了完成任务所需的方法或过程,它们是一个程序段,说明任方法或过程,它们是一个程序段,说明任务的处理过程,涉及到某些实体和操作。务的处理过程,涉及到某些实体和操作。 语法层语法层n将操作和方法定义成命令。这些命令是由用将操作和方法定义成命令。这些命令是由用户来使用的。户来使用的。n命令由语义操作建立,并具有上下文关系。命令由语义操作建立,并具有上下文关系。通过上下文关系,利用显示、命令或状态变通过上下文关系,利用显示、命令或状态变量,就可以描述整个系统。量,就可以描述整个系统。n在语法层,系统实体细化为更具体的对象,在语法层,系统实体细化为更具体的对象,对应于屏幕显示,对象的描述将更加细致。对应于屏幕显示,对象的描述将更加细致。包括行文的布局、屏幕的显示区域、目录结包括行文的布局、屏幕的显示区域、目录结构等等。构等等。 交互层交互层nPOLPOL的文法有的文法有终极符终极符((自定义的不能再分的自定义的不能再分的))和由终极符组成的和由终极符组成的非终极符非终极符。终极符为。终极符为WW──WhenWhen((时态规格说明原语时态规格说明原语))PP──PromptPrompt((原始系统动作:提示原始系统动作:提示))RR──ResponseResponse((原始系统动作:响应原始系统动作:响应))AA──ActionAction((原始用户动作:击键原始用户动作:击键))这些终极符可组成非终级符结构。这些终极符可组成非终级符结构。n对于每一个命令操作,可将提示、响应和状对于每一个命令操作,可将提示、响应和状态的执行序列用树形结构来描述。态的执行序列用树形结构来描述。 D=“××的命令”B=“××的主体”S=“××的规格说明” n窗口窗口((window)window)u窗口是指屏幕上的一个矩形区域,在图形窗口是指屏幕上的一个矩形区域,在图形学中叫做视图区(学中叫做视图区(viewportviewport)。)。u用户可以通过窗口显示、观察其工作领域用户可以通过窗口显示、观察其工作领域内的全部或一部分内容,并可以对所显示内的全部或一部分内容,并可以对所显示的内容进行各种系统预先规定好的正文和的内容进行各种系统预先规定好的正文和图形操作。图形操作。u由于物理条件的限制,窗口面积的大小一由于物理条件的限制,窗口面积的大小一般都不能满足用户要求,在窗口显示的内般都不能满足用户要求,在窗口显示的内容只占用户空间的一部分。容只占用户空间的一部分。 n在用户界面,为了能够通过窗口看到整个用在用户界面,为了能够通过窗口看到整个用户空间的全貌,一个简单的办法就是让窗口户空间的全貌,一个简单的办法就是让窗口在用户空间滚动,即所谓屏幕滚动。在用户空间滚动,即所谓屏幕滚动。n事实上,窗口本身并不属于用户空间,它仅事实上,窗口本身并不属于用户空间,它仅仅是用于观察、组织用户空间的内容,并对仅是用于观察、组织用户空间的内容,并对其进行操作的用户接口工具。其进行操作的用户接口工具。n习惯上把窗口视为虚拟屏幕,相对地,显示习惯上把窗口视为虚拟屏幕,相对地,显示器屏幕就称为物理屏幕。采用滚动技术,通器屏幕就称为物理屏幕。采用滚动技术,通过窗口能够看到的用户空间,比物理屏幕显过窗口能够看到的用户空间,比物理屏幕显示的内容要多得多;而另一方面,在同一物示的内容要多得多;而另一方面,在同一物理屏幕上又可以设置多个窗口,各个窗口可理屏幕上又可以设置多个窗口,各个窗口可以由不同的系统或系统成分分别使用。以由不同的系统或系统成分分别使用。 数据输入界面设计数据输入界面设计数据输入是指所有供计算机处理的数据的输入。数据输入是指所有供计算机处理的数据的输入。数据输入界面是系统的一个重要组成部分,它数据输入界面是系统的一个重要组成部分,它常占用户的极大部分使用时间。常占用户的极大部分使用时间。数据输入的规则数据输入的规则n数据输入界面的目标是尽量简化用户的工数据输入界面的目标是尽量简化用户的工作,并尽可能地减少输入的出错率。为此,作,并尽可能地减少输入的出错率。为此,在设计时要考虑尽可能减少用户的记忆负在设计时要考虑尽可能减少用户的记忆负担,使界面具有预见性和一致性,防止用户担,使界面具有预见性和一致性,防止用户输入出错,以及尽可能增加数据自动输入。输入出错,以及尽可能增加数据自动输入。 n在软件设计的范围,可以通过以下方法来减在软件设计的范围,可以通过以下方法来减少用户输入的工作量。少用户输入的工作量。¶¶对共同的输入内容设置默认值(缺省值)。对共同的输入内容设置默认值(缺省值)。··使用代码和缩写。使用代码和缩写。¸¸动填入已输入过的内容或需要重复输入的动填入已输入过的内容或需要重复输入的内容。内容。¹¹如果输入内容是来自一个有限的备选集,如果输入内容是来自一个有限的备选集,可以采用列表选择或指点方式。可以采用列表选择或指点方式。n数据输入屏幕应当设计成尽量与输入格式相数据输入屏幕应当设计成尽量与输入格式相匹配。如果没有输入格式,或旧的输入格式匹配。如果没有输入格式,或旧的输入格式设计得不好,就应当设计新的屏幕格式。设计得不好,就应当设计新的屏幕格式。 n数据内容应当根据它们的使用频率,或它们数据内容应当根据它们的使用频率,或它们的重要性,或它们的输入次序进行组织。数的重要性,或它们的输入次序进行组织。数据输入对话设计的一般规则。据输入对话设计的一般规则。¶¶明确的输入:明确的输入:只有当用户按下输入的确认只有当用户按下输入的确认键时,才确认输入。这有助于在输入过程键时,才确认输入。这有助于在输入过程中一旦出现错误能及时纠错。中一旦出现错误能及时纠错。··明确的动作:明确的动作:在表格项之间自动地跳跃/在表格项之间自动地跳跃/转换并不总是可取的,尤其是对于不熟练转换并不总是可取的,尤其是对于不熟练的用户,往往会被搞得无所适从,要使用的用户,往往会被搞得无所适从,要使用TABTAB键或回车键控制在表格项间的移动。键或回车键控制在表格项间的移动。 ¸¸明确的取消:明确的取消:如果用户中断了一个输入序如果用户中断了一个输入序列,已经输入的数据不要马上丢弃。这样列,已经输入的数据不要马上丢弃。这样才能对一个也许是错误的取消动作进行重才能对一个也许是错误的取消动作进行重新思考。新思考。¹¹确认删除:确认删除:为避免错误的删除动作可能造为避免错误的删除动作可能造成的损失,在键入删除命令后,必须进行成的损失,在键入删除命令后,必须进行确认,然后才执行删除操作。例如,可以确认,然后才执行删除操作。例如,可以用用DeleteyousureDeleteyousure?[Y?[Y//N]N]来确认。来确认。ºº提供反馈:提供反馈:若一个屏幕上可容纳若干输入若一个屏幕上可容纳若干输入内容,可将用户先前输入的内容仍保留在内容,可将用户先前输入的内容仍保留在屏幕上,以便用户能够随时察看,明确下屏幕上,以便用户能够随时察看,明确下一步应做的操作。一步应做的操作。 »»允许编辑:允许编辑:在一个文件输入过程中或输入在一个文件输入过程中或输入完成后,允许用户对其编辑,以修改他们完成后,允许用户对其编辑,以修改他们正在输入的数据或修改他们以前输入的数正在输入的数据或修改他们以前输入的数据。应采纳一种前后一致的编辑方式。据。应采纳一种前后一致的编辑方式。¼¼提供复原提供复原((Undo)Undo)::应允许用户恢复输入应允许用户恢复输入以前的状态。这在编辑和修改错误的操作以前的状态。这在编辑和修改错误的操作经常用到。经常用到。½½自动格式化:自动格式化:用户可以采用自由格式进用户可以采用自由格式进行输入。例如,用行输入。例如,用COBOLCOBOL语言时,用语言时,用7979而不是而不是00790079去适应格式去适应格式PIC9PIC9((44))的要求。的要求。输入对空格应不敏感。输入对空格应不敏感。 ¾¾提示输入的范围:应当显示有效回答的集提示输入的范围:应当显示有效回答的集合及其范围。例如,显示合及其范围。例如,显示““在在11~~1010之间输之间输入打折扣量入打折扣量””。。输入表格设计输入表格设计n数据表格设计是对较复杂的数据录入时使用数据表格设计是对较复杂的数据录入时使用得最广泛的一种对话类型。得最广泛的一种对话类型。n这种方法是在屏幕上显示一张表格,类似于这种方法是在屏幕上显示一张表格,类似于用户熟悉的填表格式,以供用户向计算机内用户熟悉的填表格式,以供用户向计算机内输入数据。输入数据。 n在这种输入数据表格中,对于每一种输入信在这种输入数据表格中,对于每一种输入信息,都有一个表格项,并带有一个表格项息,都有一个表格项,并带有一个表格项头,以提示输入信息的内容及位置。由用户头,以提示输入信息的内容及位置。由用户使用移位键或者特殊定义的功能键控制屏幕使用移位键或者特殊定义的功能键控制屏幕上的光标,在各个表格项上定位以及数据的上的光标,在各个表格项上定位以及数据的输入。用户键入数据之后,还可以以相同的输入。用户键入数据之后,还可以以相同的屏幕格式显示、修改这些数据。屏幕格式显示、修改这些数据。n数据表格的优点是它的视觉布局用户比较熟数据表格的优点是它的视觉布局用户比较熟悉,而且全部信息都可以显示在屏幕上,只悉,而且全部信息都可以显示在屏幕上,只要表格设计得好,操作步骤非常简便。要表格设计得好,操作步骤非常简便。 数据表格设计的规则数据表格设计的规则ÀÀ数据验证数据验证数据输入很容易出错。出错的原因可能是忽数据输入很容易出错。出错的原因可能是忽略了某一项,或在某一项的输入中键入了不略了某一项,或在某一项的输入中键入了不正确的数据,或是数字或字符敲错。数据验正确的数据,或是数字或字符敲错。数据验证是要检查是否所有必需的项目都已填充,证是要检查是否所有必需的项目都已填充,数据输入是否正确,是否合理。数据输入是否正确,是否合理。出错验证可能得到以下三种结果:出错验证可能得到以下三种结果:¶¶致命错误:致命错误:引起处理混乱的错误。此时,引起处理混乱的错误。此时,用户要么重新输入一个正确的数据,要么用户要么重新输入一个正确的数据,要么退出输入,不允许其它做法。退出输入,不允许其它做法。 ··警告:警告:由很不可信的数据引起的错误。此由很不可信的数据引起的错误。此时应停止处理并提请用户重新输入数据。时应停止处理并提请用户重新输入数据。¸¸建议:建议:由不大可信的数据引起的错误。此由不大可信的数据引起的错误。此时,处理不必停止,但要发出一个警告信时,处理不必停止,但要发出一个警告信息,使得用户或是立即停止检查,或是在息,使得用户或是立即停止检查,或是在处理结束时进行检查。处理结束时进行检查。ÁÁ屏幕设计屏幕设计通常把屏幕划分为数据输入、命令与出错处通常把屏幕划分为数据输入、命令与出错处理三个区域。理三个区域。在屏幕设计时,应注意以下几点:在屏幕设计时,应注意以下几点:¶¶应用不同的底色来区别各个区域。应用不同的底色来区别各个区域。 ··数据输入区内各个输入项应左侧对齐。在数据输入区内各个输入项应左侧对齐。在空间允许时,最好一行仅对应一个输入。空间允许时,最好一行仅对应一个输入。¸¸当回答中包含的字符数已知时,数据输入当回答中包含的字符数已知时,数据输入区应设置有相应格式的回答区域。区应设置有相应格式的回答区域。¹¹如果输入中有量的单位时,单位应在输入如果输入中有量的单位时,单位应在输入项中的左边指定。项中的左边指定。ºº标题、命令、重要的提示和填充指令应是标题、命令、重要的提示和填充指令应是简练、准确的。应使用为用户易于理解的简练、准确的。应使用为用户易于理解的词汇。词汇。 ÂÂ报信报信u报信对于通知用户出错的类型,为用户提报信对于通知用户出错的类型,为用户提供控制输入顺序和修改错误是很重要的。供控制输入顺序和修改错误是很重要的。u在报信时所用的行文应当用词准确、简明、在报信时所用的行文应当用词准确、简明、完备。完备。u出错信息的提示应当报告错误出在何处,出错信息的提示应当报告错误出在何处,是什么错误,为什么错了,以及要修改错是什么错误,为什么错了,以及要修改错误应当采取什么措施。误应当采取什么措施。 u提示信息不应使用专业术语,应当使用提示信息不应使用专业术语,应当使用肯定方式和主动语态。例如,用肯定方式和主动语态。例如,用““做做…”…”来来表达,不要用表达,不要用““不做不做…”…”来表达;用主动语来表达;用主动语态态““按任意键继续按任意键继续…”…”,,而不要用被动语而不要用被动语态态““通过按通过按BreakBreak键此段可被终止键此段可被终止””。。ÃÃ数据输入对话控制数据输入对话控制u数据输入的对话控制是为了防止错误发数据输入的对话控制是为了防止错误发生,生,u如果一旦发生了错误,它应为用户提供简如果一旦发生了错误,它应为用户提供简单有效的改错方法。单有效的改错方法。u数据输入对话则应当精心设计以便编辑和数据输入对话则应当精心设计以便编辑和改错。改错。 u在对话序列中应设置若干断点,以休息在对话序列中应设置若干断点,以休息和复位点来提高注意力。断点的设置要和复位点来提高注意力。断点的设置要考虑到信息块及屏幕布局。考虑到信息块及屏幕布局。ÄÄ对于比较复杂的控制命令序列,如果采用对于比较复杂的控制命令序列,如果采用语法制导编辑技术,提供各类的语法模语法制导编辑技术,提供各类的语法模板,用户可以不必记忆许多繁琐的语法公板,用户可以不必记忆许多繁琐的语法公式,关键字和标识符,只要按语法结构选式,关键字和标识符,只要按语法结构选择控制结构就可以了。在这种情况下,择控制结构就可以了。在这种情况下,各各种语法模板也可以看作是一些数据表格,种语法模板也可以看作是一些数据表格,用户在模板的提示下,键入需要的参数,用户在模板的提示下,键入需要的参数,使得这个复杂的命令序列得以顺利执行。使得这个复杂的命令序列得以顺利执行。 其它数据输入的方法其它数据输入的方法n它们分为两类,一类是用菜单或关键词进行它们分为两类,一类是用菜单或关键词进行软件设计,另一类是用硬件方法来自动完成软件设计,另一类是用硬件方法来自动完成全部或部分数据输入任务。全部或部分数据输入任务。¶¶菜单选择输入菜单选择输入如果数据从一个确定的可供选择的清单中选如果数据从一个确定的可供选择的清单中选取输入,则可用菜单方式。方法很简单,取输入,则可用菜单方式。方法很简单,把把所有的选择项都显示在屏幕上,用户只需输所有的选择项都显示在屏幕上,用户只需输入代表各项的数字代码,就可选择一个或几入代表各项的数字代码,就可选择一个或几个数据个数据,较复杂的选择方式是使用光笔或鼠,较复杂的选择方式是使用光笔或鼠标器对文字菜单或图标进行选择。标器对文字菜单或图标进行选择。 进行菜单项显示设计时,应按照执行逻辑将进行菜单项显示设计时,应按照执行逻辑将内容组织在一起,以便引导用户找到所需要内容组织在一起,以便引导用户找到所需要的内容。的内容。··关键词数据输入关键词数据输入关键词数据输入比菜单选择数据输入更快速、关键词数据输入比菜单选择数据输入更快速、更有效。并可以以不同的顺序输入,允许更更有效。并可以以不同的顺序输入,允许更复杂的文件输入。例如,在绘图系统中,利复杂的文件输入。例如,在绘图系统中,利用用关键词关键词lineline、、brokbrok、、rectrect和和circcirc作为画直线作为画直线、、折线折线、、矩形和圆的助记符,进行识别和操作。矩形和圆的助记符,进行识别和操作。 ¸¸光学标记/识别光学标记/识别((OMR)OMR)光学标记/识别在表格中使用。用户在表格光学标记/识别在表格中使用。用户在表格的一个区域中打标记的一个区域中打标记□□或或■■,然后让表格通,然后让表格通过一个光敏读入设备,其中用暗标记过一个光敏读入设备,其中用暗标记■■表示表示““是是””,用亮标记,用亮标记□□(即未标记过)表示(即未标记过)表示““否否””。。¹¹光学字符识别光学字符识别((OCR)OCR)OCROCR系统可让计算机通过模式比较来识别一系统可让计算机通过模式比较来识别一些具有不同字体和大小的印刷体。首先它让些具有不同字体和大小的印刷体。首先它让字符识别系统熟悉铅字字体的特征。经过若字符识别系统熟悉铅字字体的特征。经过若干次尝试,使计算机系统了解这种字体的规干次尝试,使计算机系统了解这种字体的规则,并将这些规则记忆到模式匹配算法中。则,并将这些规则记忆到模式匹配算法中。 ºº磁性墨水字符识别磁性墨水字符识别((MICR)MICR)MICRMICR字体就是在银行支票上的帐号和分类字体就是在银行支票上的帐号和分类号所使用的字符。号所使用的字符。»»条形码条形码((BarCode)BarCode)条形码由许多粗细不等的竖线组成的标签,条形码由许多粗细不等的竖线组成的标签,这些竖线条在特定位置上出现或不出现就表这些竖线条在特定位置上出现或不出现就表示某个特定的数据。条形码的代码由一个特示某个特定的数据。条形码的代码由一个特殊的光敏装置或条形码读入器读入,读入器殊的光敏装置或条形码读入器读入,读入器在横穿过条形码时挑选出暗带,并根据暗带在横穿过条形码时挑选出暗带,并根据暗带在位置在位置xx,,xx+1+1等处是否出现而将条形码序列等处是否出现而将条形码序列翻译成数据,计算机将条形码与检查相比较翻译成数据,计算机将条形码与检查相比较以计算出商品的号码或数值以计算出商品的号码或数值。 ¼¼声音数据输入声音数据输入声音数据输入有许多很明显的优点。它输入声音数据输入有许多很明显的优点。它输入速度很快,可用于不宜使用纸张及不能使用速度很快,可用于不宜使用纸张及不能使用键盘的场合。这种方式不需要书写,只需用键盘的场合。这种方式不需要书写,只需用户使用自己的声音器官发声即可。户使用自己的声音器官发声即可。声音数据声音数据的输入包括了语音和自然语言对话的所有问的输入包括了语音和自然语言对话的所有问题。题。在目前的技术条件下,在限定在目前的技术条件下,在限定200200~~80008000个词汇量的的范围内,进行有限的单个关键个词汇量的的范围内,进行有限的单个关键词的输入是可能的。现在已经有一种声控打词的输入是可能的。现在已经有一种声控打字机,它拥有的词汇量达到字机,它拥有的词汇量达到80008000,已能满足,已能满足人们日常会话所使用用语的词汇量。人们日常会话所使用用语的词汇量。 数据显示界面设计数据显示界面设计数据显示界面包括屏幕查询、文件浏览、图形数据显示界面包括屏幕查询、文件浏览、图形显示和报告。显示和报告。数据显示的规则数据显示的规则n进行数据输出显示设计,应当了解数据显示进行数据输出显示设计,应当了解数据显示的要求,解决应该显示哪些数据,屏幕上一的要求,解决应该显示哪些数据,屏幕上一次显示多少信息的问题。显示的信息对于用次显示多少信息的问题。显示的信息对于用户任务来说应当是适当的,不要过于拥挤。户任务来说应当是适当的,不要过于拥挤。n选择显示内容,应当考虑以下准则。选择显示内容,应当考虑以下准则。¶¶只显示必需的数据。与用户需求无直接关只显示必需的数据。与用户需求无直接关系的一律省略。系的一律省略。 ··在一起使用的数据应显示在一起。在一起使用的数据应显示在一起。¸¸显示出的数据应与用户执行的任务有关。显示出的数据应与用户执行的任务有关。¹¹每一屏数据的数量,包括标题,栏题等每一屏数据的数量,包括标题,栏题等等,不应超过整个屏幕面积的等,不应超过整个屏幕面积的3030%。%。n利用这些规则,并根据用户要求,下一步应利用这些规则,并根据用户要求,下一步应当将数据分组,然后将每组数据按一定的结当将数据分组,然后将每组数据按一定的结构形式来安排,总的目的是使得用户感到使构形式来安排,总的目的是使得用户感到使用方便。用方便。n显示设计要使得相关的数据成组地出现,并显示设计要使得相关的数据成组地出现,并由用户与系统的会话来控制。由用户与系统的会话来控制。n可根据屏幕的大小,使每帧屏幕包含若干个可根据屏幕的大小,使每帧屏幕包含若干个子区域,让每个子区域显示不同的信息。子区域,让每个子区域显示不同的信息。 n进行屏幕布局时,还需要考虑其它一些规则。进行屏幕布局时,还需要考虑其它一些规则。¶¶应尽量少使用代码和缩写,不应让读者去应尽量少使用代码和缩写,不应让读者去翻译或猜测这些代码或缩写。翻译或猜测这些代码或缩写。··如果安排了若干个显示画面,最好建立一如果安排了若干个显示画面,最好建立一个统一的格式。个统一的格式。¸¸提供明了的标题、栏题以及其它提示信息。提供明了的标题、栏题以及其它提示信息。帮助用户浏览各种显示画面。帮助用户浏览各种显示画面。¹¹遵循用户的习惯。采用在分析过程中得到遵循用户的习惯。采用在分析过程中得到的用户模型,并保留用户使用的术语。的用户模型,并保留用户使用的术语。ºº采用颜色、字符大小、下划线或不同的字采用颜色、字符大小、下划线或不同的字体等方式来强化重要数据。体等方式来强化重要数据。 n设计了数据的显示结构之后,根据是图形显设计了数据的显示结构之后,根据是图形显示还是字符显示,进一步考虑细节设计。示还是字符显示,进一步考虑细节设计。字符数据的显示字符数据的显示n字符数据的画面显示主要是屏幕布置和数据字符数据的画面显示主要是屏幕布置和数据内容安排格式,以便于用户查找和阅读的问内容安排格式,以便于用户查找和阅读的问题。题。¶纯正文的显示纯正文的显示英文正文中应避免连续使用大写字母,大英文正文中应避免连续使用大写字母,大写字母应使用印刷体,且一般为强调而使写字母应使用印刷体,且一般为强调而使用。英文正文应当是左边顶格,右边可以用。英文正文应当是左边顶格,右边可以参差不齐。如果要求左、右两边都顶格,参差不齐。如果要求左、右两边都顶格,参差不齐的间隔容易分散视力。参差不齐的间隔容易分散视力。 ··列表和表格列表和表格数据列表应当竖排而不应横排,因为这样数据列表应当竖排而不应横排,因为这样有助于计算总和。栏题应当安排在数据列有助于计算总和。栏题应当安排在数据列之上。之上。姓名数学成绩英语成绩物理成绩化学成绩卢晓波91838894浦柯玖90919587张超回94869289显示不应是一个固定的格式。一般来说,显示不应是一个固定的格式。一般来说,显示的内容应由用户控制。显示的内容应由用户控制。 ¸¸控制显示控制显示用户应当拥有一种获得不同显示画面的灵用户应当拥有一种获得不同显示画面的灵活的手段。活的手段。数据显示对话应允许用户在无数据显示对话应允许用户在无需进入数据检索状态下就能实现换屏和上需进入数据检索状态下就能实现换屏和上下滚动显示。下滚动显示。在换屏控制显示时,前一次在换屏控制显示时,前一次显示的部分内容应显示在新显示画面的顶显示的部分内容应显示在新显示画面的顶部或底部,以使用户感到连贯。在画面滚部或底部,以使用户感到连贯。在画面滚动显示时,其速度应由用户控制,使得不动显示时,其速度应由用户控制,使得不感兴趣的内容快速跳过而感兴趣的内容缓感兴趣的内容快速跳过而感兴趣的内容缓慢通过,以便查看。慢通过,以便查看。 图形显示图形显示n由于图形从数据集合中概括出某些特性并且由于图形从数据集合中概括出某些特性并且具有具有““直观直观””的优点,因此对于识别和分析处的优点,因此对于识别和分析处理结果更有效。为了做好图形显示,必须仔理结果更有效。为了做好图形显示,必须仔细地选择图形类型和进行布局设计。细地选择图形类型和进行布局设计。¶¶图形类型与数据集分类图形类型与数据集分类在一定程度上,在一定程度上,图形类型的选择是有限图形类型的选择是有限的,因为它是根据数据类型来决定的。的,因为它是根据数据类型来决定的。图图形的数据集来自三个方面,其数值可以是:形的数据集来自三个方面,其数值可以是:顺序的(布尔值,即有/无);标称的顺序的(布尔值,即有/无);标称的(整数);十进制的(实数)。数据集可(整数);十进制的(实数)。数据集可以按标绘图类型来分类。以按标绘图类型来分类。 ··常用的二维图形常用的二维图形在商用的图形库中,常取下列在商用的图形库中,常取下列44种图形。种图形。 ¸¸三维图形三维图形当每个对象有三个测量值(当每个对象有三个测量值(xx,,yy,,zz))时,时,可用三维图形方法。可用三维图形方法。三维直方图,三维饼图,三维线图等三维直方图,三维饼图,三维线图等 报告报告n报告的功能和分类报告的功能和分类报告是输出字符的一个子集,它的功能可以是报告是输出字符的一个子集,它的功能可以是从一个系统向另一个系统传递信息;也可以是从一个系统向另一个系统传递信息;也可以是某一系统的总结;还可以是一个历史文献、简某一系统的总结;还可以是一个历史文献、简单的列表等等。报告可以归为四类。单的列表等等。报告可以归为四类。¶¶文宗报告文宗报告:报告中输出的是数据处理的结:报告中输出的是数据处理的结果。它主要用于在各个系统之间传送信息,果。它主要用于在各个系统之间传送信息,包括正在处理的对象的信息。例如,订货单包括正在处理的对象的信息。例如,订货单、、发货单、发票、购物单、帐单等。发货单、发票、购物单、帐单等。 ··信息报告:信息报告:报告中包含的系统信息有描述报告中包含的系统信息有描述系统进程和活动的数据。这些信息主要是系统进程和活动的数据。这些信息主要是系统管理人员用来监测、控制和修改系统系统管理人员用来监测、控制和修改系统的行为。例如,异常报告、监控和分析报的行为。例如,异常报告、监控和分析报告、管理总结报告等。告、管理总结报告等。¸¸历史和档案报告:历史和档案报告:此类报告所载的信息记此类报告所载的信息记录了系统在某一时刻的状况,或者是记录录了系统在某一时刻的状况,或者是记录系统的历史。今后或许还会用到的已处理系统的历史。今后或许还会用到的已处理过的数据也存在档案报告中。过的数据也存在档案报告中。¹¹浏览报告:浏览报告:这相当于显示查询结果的屏幕这相当于显示查询结果的屏幕或文件列表。信息一般用比较简单的格式或文件列表。信息一般用比较简单的格式表示。用户可以用各种方法使用它。表示。用户可以用各种方法使用它。 n报告的用途分析报告的用途分析报告中的内容应当在系统的输出数据流和用报告中的内容应当在系统的输出数据流和用户要求中指明。但是,在报告中数据如何分户要求中指明。但是,在报告中数据如何分组,还受到下面一些因素的影响。组,还受到下面一些因素的影响。u提出报告的频度:提出报告的频度:有随机提交的报告、定有随机提交的报告、定期提交的报告。各种报告所需信息不尽相期提交的报告。各种报告所需信息不尽相同。因此,时效性的需求要求考虑信息应同。因此,时效性的需求要求考虑信息应当存放在那一种报告中。当存放在那一种报告中。u报告的打印量:报告的打印量:需求量不同的报告应分别需求量不同的报告应分别进行处理。进行处理。 u信息的时效性和精确性:信息的时效性和精确性:要求信息的及时要求信息的及时程度以及陈旧信息对用户的使用价值,都程度以及陈旧信息对用户的使用价值,都会影响提出报告的时间。对于数值数据,会影响提出报告的时间。对于数值数据,还要考虑它的精度。还要考虑它的精度。u保密:保密:信息的机密程度以及需要采取什么信息的机密程度以及需要采取什么预防措施以保证数据不被未授权的人存预防措施以保证数据不被未授权的人存取,这一点与打印报告的设备及分发报告取,这一点与打印报告的设备及分发报告的管理有关。的管理有关。 布局设计布局设计n报告有三种布局设计。报告有三种布局设计。u列表适用于记录信息的简单罗列,浏览报告列表适用于记录信息的简单罗列,浏览报告和档案报告即属于这一类;和档案报告即属于这一类;u块结构是用行、列和总计等形式来组织数块结构是用行、列和总计等形式来组织数据,信息报告就属于这一类;据,信息报告就属于这一类;u分组结构则在块内进一步做更复杂的成组的分组结构则在块内进一步做更复杂的成组的信息布局,文宗报告一般属于此类。信息布局,文宗报告一般属于此类。n报告设计的步骤可以应用前述的屏幕显示设报告设计的步骤可以应用前述的屏幕显示设计的许多准则。计的许多准则。 ÀÀ列表报告列表报告u数据通常以记录格式给出,数据按记录规数据通常以记录格式给出,数据按记录规定格式成行打印。定格式成行打印。u各页应加页号。各页应加页号。u如果列表中的数据以某种顺序排列或分如果列表中的数据以某种顺序排列或分类,在各分类的组间应加空行,使结构更类,在各分类的组间应加空行,使结构更清楚。清楚。u数据域应分列安排并加上栏题。数据域应分列安排并加上栏题。ÁÁ块结构报告块结构报告u在报告中信息分块,各块按设计要求顺序在报告中信息分块,各块按设计要求顺序排列。排列。 u可变项应安排在报告右边的列中,以免显可变项应安排在报告右边的列中,以免显得凌乱。得凌乱。u信息块应当用空格分开,而不要用分隔符。信息块应当用空格分开,而不要用分隔符。u在信息块顶部的左侧应加上题头,为信息在信息块顶部的左侧应加上题头,为信息块做标记。块做标记。u若有总计数字,必须紧跟在与其有关的数若有总计数字,必须紧跟在与其有关的数据后面安排。如果有多层次的合计数字,据后面安排。如果有多层次的合计数字,需要增加总结页,说明合计数字间的层次需要增加总结页,说明合计数字间的层次和所属关系。和所属关系。ÂÂ组结构报告组结构报告可以利用通常的报告设计的规则来设计组的可以利用通常的报告设计的规则来设计组的内容和数据的布局顺序。内容和数据的布局顺序。 u信息组应以空格分隔开,或者是用方框或信息组应以空格分隔开,或者是用方框或背景色来分隔,应避免使用过多的分隔符。背景色来分隔,应避免使用过多的分隔符。u报告的标题应居中安排。特别对于文宗报报告的标题应居中安排。特别对于文宗报告,在报告的右上角应使用清晰而唯一的告,在报告的右上角应使用清晰而唯一的代码对报告进行标识或索引。代码对报告进行标识或索引。n具体布局具体布局布局的规则类似于屏幕显示中的规则。再加布局的规则类似于屏幕显示中的规则。再加一些参考规定:一些参考规定:u应检查数据内容的类型和格式,以确定它应检查数据内容的类型和格式,以确定它所需的打印字符的数目。所需的打印字符的数目。 u字符左侧对齐,数字右侧对齐,有小数点字符左侧对齐,数字右侧对齐,有小数点则对齐小数点。负号放在前面会使数列变则对齐小数点。负号放在前面会使数列变得不规整,可把负号放在后面。得不规整,可把负号放在后面。u各列之间的间隔至少用三个空格。各列之间的间隔至少用三个空格。u标题应安排在列的正中。标题应安排在列的正中。u可用粗体字、不同的字体、下划线或不同可用粗体字、不同的字体、下划线或不同的色彩等来强调重要的部分。的色彩等来强调重要的部分。u给每页加页码和名称。给每页加页码和名称。u每次要给报告加上日期和时间。每次要给报告加上日期和时间。u当一切细节设计好之后,不能忘记征求用当一切细节设计好之后,不能忘记征求用户的意见。需要同用户磋商,交换意见,户的意见。需要同用户磋商,交换意见,然后做出修改以满足其要求。然后做出修改以满足其要求。 控制界面的设计控制界面的设计设计控制界面的主要目的是让用户能够主动地设计控制界面的主要目的是让用户能够主动地控制计算机上软件系统的工作,使得用户能够控制计算机上软件系统的工作,使得用户能够很容易地访问计算机的各种设备。其主要方式很容易地访问计算机的各种设备。其主要方式有控制对话、菜单、功能键、图标、直接指点、有控制对话、菜单、功能键、图标、直接指点、窗口、命令语言和自然语言等。窗口、命令语言和自然语言等。用控制对话选择操作命令用控制对话选择操作命令n控制对话可以是简单的问答形式,系统提出控制对话可以是简单的问答形式,系统提出是否需要某个操作,然后用户以是否需要某个操作,然后用户以YY//NN的方的方式回答。式回答。 n复杂的对话形式是基于菜单的系统。这种对复杂的对话形式是基于菜单的系统。这种对话方式容易使用,但每次的操作都是单调重话方式容易使用,但每次的操作都是单调重复的,老的用户往往会感到冗长乏味。复的,老的用户往往会感到冗长乏味。u在设计对话的时候,需要注意的要点是:在设计对话的时候,需要注意的要点是:u每次只能有一个提问,避免多个询问每次只能有一个提问,避免多个询问;;u当需要几个关联的回答时,应重新显示上当需要几个关联的回答时,应重新显示上一个回答。如果以前的回答在后面还需要一个回答。如果以前的回答在后面还需要用到时,在用到的时侯要重新显示它,否用到时,在用到的时侯要重新显示它,否则会因短期记忆出现错误。则会因短期记忆出现错误。u保持提问的顺序与原文档或用户模型一致。保持提问的顺序与原文档或用户模型一致。 用菜单界面进行控制用菜单界面进行控制n通常用户在菜单条件下做出应答有两种方式:通常用户在菜单条件下做出应答有两种方式:u使用应答码在屏幕显示的菜单做出选择。使用应答码在屏幕显示的菜单做出选择。应答码可以是数字,也可以是字符。字符应答码可以是数字,也可以是字符。字符码通常应当能够记忆并且能够代表这个选码通常应当能够记忆并且能够代表这个选择的实际含义,例如,利用择的实际含义,例如,利用““FF””表示对磁表示对磁盘格式化。但有时找不到合适的字符来表盘格式化。但有时找不到合适的字符来表示选择,例如,用示选择,例如,用““EE””表示表示““editedit””,,还是用还是用““EE””表示表示““exitexit””。。因此需要使用较长的字符因此需要使用较长的字符串。串。 u使用鼠标器按钮,或者用周转选择法,即使用鼠标器按钮,或者用周转选择法,即用户用移位键,逐行地把高亮度的菜单选用户用移位键,逐行地把高亮度的菜单选择条往下拉,从菜单的底部还可回到顶择条往下拉,从菜单的底部还可回到顶部,或者逐行地把高亮度的菜单选择条往部,或者逐行地把高亮度的菜单选择条往上拉,到了菜单的顶部又可回到底部,然上拉,到了菜单的顶部又可回到底部,然后,按回车键以确定当前选定的菜单选择后,按回车键以确定当前选定的菜单选择条所代表的操作。条所代表的操作。u在多数系统中,采用了多级菜单结构。这在多数系统中,采用了多级菜单结构。这种结构必须使可选项的组织与用户的模型种结构必须使可选项的组织与用户的模型一致,以及把系统中的功能和可选项正确一致,以及把系统中的功能和可选项正确地分组。地分组。 u对于多级菜单的深度和宽度,需要权衡。对于多级菜单的深度和宽度,需要权衡。F在一个菜单中放置很多的选择项,将在一个菜单中放置很多的选择项,将使多级菜单加宽,使用户在菜单中做选使多级菜单加宽,使用户在菜单中做选择时需要较多的查询时间,但菜单的层择时需要较多的查询时间,但菜单的层次就会少一些。次就会少一些。F如果多级菜单设置很多级别,会使层如果多级菜单设置很多级别,会使层次加深,而每个菜单中选择项变少,这次加深,而每个菜单中选择项变少,这样每级菜单的查询时间会变短,但在菜样每级菜单的查询时间会变短,但在菜单上巡航的时间会增加。单上巡航的时间会增加。F经验表明,在一级菜单中包含经验表明,在一级菜单中包含77~~99个个选择项最为适宜。选择项最为适宜。 n对于一个小的系统,一般采用宽菜单比较好。对于一个小的系统,一般采用宽菜单比较好。例如,例如,WordStarWordStar的菜单就是一个例子。因的菜单就是一个例子。因为它不需要搜索层次的时间。但是对于一个为它不需要搜索层次的时间。但是对于一个大的系统,需要一个明显的层次结构,以帮大的系统,需要一个明显的层次结构,以帮助用户了解系统。这时,采用多级菜单的形助用户了解系统。这时,采用多级菜单的形式,对于一个大的系统是合适的。式,对于一个大的系统是合适的。n对于多级菜单,一些有经验的用户不希望每对于多级菜单,一些有经验的用户不希望每次都按层次上下,而要求能够从一个选择转次都按层次上下,而要求能够从一个选择转换到另一个选择。为此,需要设计一个菜单换到另一个选择。为此,需要设计一个菜单旁路工具,以便直接访问。旁路工具,以便直接访问。 n菜单设计的准则如下:菜单设计的准则如下:u按逻辑相关性把选择项分组,组成菜单块按逻辑相关性把选择项分组,组成菜单块或单独的菜单屏或单独的菜单屏;;u根据通常标准,例如操作顺序、使用频度、根据通常标准,例如操作顺序、使用频度、重要程度等确定菜单的次序重要程度等确定菜单的次序;;u指明所期望的应答,并使之与选择项相联指明所期望的应答,并使之与选择项相联系系;;u根据菜单及菜单选择项的功能来命名根据菜单及菜单选择项的功能来命名;;u提供给用户关于菜单级别、错误等的反馈提供给用户关于菜单级别、错误等的反馈信息信息;;u提供退出路径及旁路机制提供退出路径及旁路机制;; u防止错误的应答。例如,若防止错误的应答。例如,若11~~77是选择,是选择,00是退出,就应当使一旦按下其它的键是退出,就应当使一旦按下其它的键时,能够得到出错的信息而不应导致系统时,能够得到出错的信息而不应导致系统的失败。的失败。用功能键定义操作命令用功能键定义操作命令n功能键是与选择菜单等效的硬件。通过定义功能键是与选择菜单等效的硬件。通过定义和使用键盘上特定的键来选择可以节省屏幕和使用键盘上特定的键来选择可以节省屏幕空间。功能键可以用硬编码,也可以用软编空间。功能键可以用硬编码,也可以用软编码。硬编码是将功能键的操作固定到某个特码。硬编码是将功能键的操作固定到某个特殊键。对于像文字处理机这种功能不变的专殊键。对于像文字处理机这种功能不变的专用硬件来说,这种硬编码非常有效。用硬件来说,这种硬编码非常有效。 n对大多数系统,功能键都是软编码的。用软对大多数系统,功能键都是软编码的。用软编码时,命令调用可通过应用程序分配到各编码时,命令调用可通过应用程序分配到各个功能键上,每个键可以对应一个或多个命个功能键上,每个键可以对应一个或多个命令。如果多个命令对应单个键,用户必须随令。如果多个命令对应单个键,用户必须随时跟踪系统所处的状态。时跟踪系统所处的状态。n例如,键例如,键F2F2在某种情况下是删除一个字,而在某种情况下是删除一个字,而在另一情况下是存入一个文件。为了帮助用在另一情况下是存入一个文件。为了帮助用户,需要在屏幕上显示一个副菜单,在这个户,需要在屏幕上显示一个副菜单,在这个菜单上显示了选择码的分配,以及在屏幕上菜单上显示了选择码的分配,以及在屏幕上的键盘布局图像。的键盘布局图像。n大多数计算机硬件提供了大多数计算机硬件提供了1010~~1212个功能键。个功能键。 用图标表示对象或命令用图标表示对象或命令n为了使得用户能够识别一个图符所表示的物为了使得用户能够识别一个图符所表示的物体或命令,图标应当是逼真的,以至于用户体或命令,图标应当是逼真的,以至于用户可以不用专门学习就可对它所代表的意义立可以不用专门学习就可对它所代表的意义立即做出有据的判断。即做出有据的判断。n例如,用例如,用““””表示擦图操作,用表示擦图操作,用““””表示图形表示图形拖曳操作,用拖曳操作,用““””表示喷涂操作,等等。表示喷涂操作,等等。n有时图标可能会有多义性,对于同一个图有时图标可能会有多义性,对于同一个图标,不同的人有不同的解释。例如,图标标,不同的人有不同的解释。例如,图标““””有人理解为计算器,有人理解为传真机。为有人理解为计算器,有人理解为传真机。为了防止多义性,在图标下面加文字解释。了防止多义性,在图标下面加文字解释。 设计图标时的几点建议设计图标时的几点建议n让用户来确认图标的含义让用户来确认图标的含义;;n使得图标尽可能逼真使得图标尽可能逼真;;n图标应有一个清晰的轮廓,以利于辨认图标应有一个清晰的轮廓,以利于辨认;;n当显示命令时,要给出在此命令下操作对象当显示命令时,要给出在此命令下操作对象的具体表象的具体表象;;n要避免使用符号,除非其意义十分明确。要避免使用符号,除非其意义十分明确。 直接操纵直接操纵n这种界面的主要思想是想让用户能够观看并这种界面的主要思想是想让用户能够观看并直接操纵系统中的对象。它包括图标、指直接操纵系统中的对象。它包括图标、指点,以及与点,以及与WIMPWIMP((窗口窗口、、图标图标、、鼠标鼠标、、上托上托式菜单式菜单))有关的特性。有关的特性。n对象用图标表示,并且可通过鼠标或其它类对象用图标表示,并且可通过鼠标或其它类似的光标控制器似的光标控制器((如光笔、数字化仪等如光笔、数字化仪等))的指点的指点来进行寻址及选择对象。然后,依据指点和来进行寻址及选择对象。然后,依据指点和选择调用一个系统操作。选择调用一个系统操作。n例如,用拖曳操作,可使选中的对象在屏幕例如,用拖曳操作,可使选中的对象在屏幕上移动,如把一个文件放在文件夹里,或把上移动,如把一个文件放在文件夹里,或把一条信文放在邮箱里。一条信文放在邮箱里。 直接操纵界面的基本特性直接操纵界面的基本特性n明确的动作:明确的动作:用户在屏幕上指点并操纵对象。用户在屏幕上指点并操纵对象。n即时的反馈:即时的反馈:用户操作的结果立即可见。例用户操作的结果立即可见。例如,当用户选择一个图标时,它即呈高亮度。如,当用户选择一个图标时,它即呈高亮度。n增量效应:增量效应:用户的动作应当有一个模拟/顺用户的动作应当有一个模拟/顺序的尺度。例如,当一个图标被拖曳着在屏序的尺度。例如,当一个图标被拖曳着在屏幕上移动时,应当随着用户鼠标的移动而连幕上移动时,应当随着用户鼠标的移动而连续地移动,而不应突然跳到一个新的位置。续地移动,而不应突然跳到一个新的位置。n直观的交互作用:直观的交互作用:交互作用应当与有关如何交互作用应当与有关如何操作系统的用户概念模型相匹配,并且能够操作系统的用户概念模型相匹配,并且能够显示对象的直观图像。显示对象的直观图像。 n剥皮式的学习:剥皮式的学习:当用户学习系统功能时,其当用户学习系统功能时,其复杂性应按层逐渐增加。复杂性应按层逐渐增加。n可逆的动作:可逆的动作:使用退回操作,可以顺序复原使用退回操作,可以顺序复原到原先的动作状态。到原先的动作状态。n事先验证:事先验证:只允许合法的交互产生效果,如只允许合法的交互产生效果,如果用户指向一个对象而交互动作对现行任务果用户指向一个对象而交互动作对现行任务没有意义时,显示屏幕上应无反应。没有意义时,显示屏幕上应无反应。用窗口划分屏幕用窗口划分屏幕直接操纵有时要求能够同时具有许多不同的界直接操纵有时要求能够同时具有许多不同的界面,或者对于同一对象有多个视图,这就需要面,或者对于同一对象有多个视图,这就需要窗口的支持。窗口的支持。 n窗口把物理屏幕划分成几部分,在屏幕上同窗口把物理屏幕划分成几部分,在屏幕上同时可以进行不同的操作。时可以进行不同的操作。n存在两种类型的窗口:存在两种类型的窗口:u砖状的窗口:砖状的窗口:即把整个物理屏幕规则地划即把整个物理屏幕规则地划分成几个子屏幕,并且不重叠分成几个子屏幕,并且不重叠;;u重叠的窗口:重叠的窗口:即把窗口依次嵌套叠在别的即把窗口依次嵌套叠在别的窗口上方,好似层层深入一样。窗口上方,好似层层深入一样。n如果在一段对话中间需要一段子对话,就可如果在一段对话中间需要一段子对话,就可以打开控制窗口,使得用户可以在不同的窗以打开控制窗口,使得用户可以在不同的窗口中运行两个或多个进程。窗口以这种方式口中运行两个或多个进程。窗口以这种方式允许多任务处理进入允许多任务处理进入““挂起/继续挂起/继续””状态。状态。 n在办公室的环境中,需要并行地处理多个任在办公室的环境中,需要并行地处理多个任务,窗口就很适合于这种工作。务,窗口就很适合于这种工作。n窗口还在监控信息方面有用,在窗口上可以窗口还在监控信息方面有用,在窗口上可以保持背景或挂起任务的状态,故而能够周期保持背景或挂起任务的状态,故而能够周期地监控任务的进展情况。地监控任务的进展情况。以下的建议,对于窗口的使用是有益的。以下的建议,对于窗口的使用是有益的。u对于初学者来说,简单的砖状的窗口就足对于初学者来说,简单的砖状的窗口就足够用的了,重叠的窗口将增加不必要的复够用的了,重叠的窗口将增加不必要的复杂性。杂性。u利用窗口可进行任务切换利用窗口可进行任务切换((如从编辑到任如从编辑到任务管理又再次返回务管理又再次返回)),但要使任务数量尽量,但要使任务数量尽量少。少。 u避免在不活动的窗口上经常改变图像。因避免在不活动的窗口上经常改变图像。因为这会使得人对正在处理的作业的注意力为这会使得人对正在处理的作业的注意力分散。分散。u要删去与现行任务不直接有关的旧窗口,要删去与现行任务不直接有关的旧窗口,否则,旧窗口会使得屏幕杂乱无章。否则,旧窗口会使得屏幕杂乱无章。n窗口和直接操纵界面需要先进的接口软件去窗口和直接操纵界面需要先进的接口软件去控制屏幕的显示和高分辨率的显示器。该软控制屏幕的显示和高分辨率的显示器。该软件的作用是充当应用软件和用户之间的翻件的作用是充当应用软件和用户之间的翻译,并且管理所有的交互作用和通信。具有译,并且管理所有的交互作用和通信。具有这种特性的接口软件叫做这种特性的接口软件叫做““用户接口管理系用户接口管理系统统””。。 命令语言命令语言n命令语言是潜在的最强有力的控制界面。其命令语言是潜在的最强有力的控制界面。其主要优点是:可节省屏幕空间;可通过名字主要优点是:可节省屏幕空间;可通过名字对目标和功能直接使用对目标和功能直接使用((从而不必提供存取层从而不必提供存取层次次))。。n命令的组合可以使系统功能更灵活。命令的组合可以使系统功能更灵活。n所有的命令语言都有一个词典和一个语法。所有的命令语言都有一个词典和一个语法。词典给定单词的集合,语法给出说明单词组词典给定单词的集合,语法给出说明单词组合方式的规则。合方式的规则。 命令语言的词汇命令语言的词汇n命令语言使用单词来标识对象和操作。对象是命令语言使用单词来标识对象和操作。对象是指命令语言操作的设备、文件等,常用名词来指命令语言操作的设备、文件等,常用名词来描述。操作常用动词来描述。描述。操作常用动词来描述。n这两类单词集合在命名上都应尽可能符合实际这两类单词集合在命名上都应尽可能符合实际物理含义。如删除一个文件的命令可以是:物理含义。如删除一个文件的命令可以是:DELETEDELETE〈〈被删文件名〉被删文件名〉n命令输入应是简短的,往往需要对标识符进行命令输入应是简短的,往往需要对标识符进行编码。当要缩短一个单词时,常用的一种方法编码。当要缩短一个单词时,常用的一种方法就是截尾或者缩写。就是截尾或者缩写。 n截尾就是去掉单词的后面部分,只保留前面截尾就是去掉单词的后面部分,只保留前面几个字符。如几个字符。如DELeteDELete,,DISplayDISplay,,DIRectoryDIRectory,,RENameREName等等。其优点是它允许等等。其优点是它允许以两种方式使用命令以两种方式使用命令────对于初学者可提供它对于初学者可提供它的完整形式,对于熟练者可使用它的截尾形的完整形式,对于熟练者可使用它的截尾形式。式。n但若两个单词具有相同前缀时,截尾法会带但若两个单词具有相同前缀时,截尾法会带来问题。例如,来问题。例如,DELeteDELete,,DELayDELay,,DISplayDISplay,,DISconnectDISconnect等。这时必须添加字母等。这时必须添加字母以避免多义性。以避免多义性。n大多数操作系统都使用大多数操作系统都使用22字母命令或字母命令或33字母命字母命令令,,以节省敲键时间以节省敲键时间。。 n缩写是另一种压缩单词的方法。它去掉命令缩写是另一种压缩单词的方法。它去掉命令字中不同位置的字母,只留下足够表达字义字中不同位置的字母,只留下足够表达字义的字母。简单地去掉元音或辅音,不容易产的字母。简单地去掉元音或辅音,不容易产生好的命令字,最好是把单词的前、中、生好的命令字,最好是把单词的前、中、后,各段音节压缩形成助记符。后,各段音节压缩形成助记符。命令语言的语法命令语言的语法n命令语言按其简繁不同,可分为以下等级:命令语言按其简繁不同,可分为以下等级:u关键词:关键词:使用单个关键词进行操作的简使用单个关键词进行操作的简单命令语言单命令语言;;u关键词和参数:关键词和参数:给关键词加上合适的变给关键词加上合适的变元或条件,使语言变得更灵活元或条件,使语言变得更灵活;; u基于语法的语言:基于语法的语言:它是最复杂的。有完整它是最复杂的。有完整的语法结构,能写出复杂的命令。的语法结构,能写出复杂的命令。n命令语言的语法结构的类型按功能大致可分命令语言的语法结构的类型按功能大致可分为以下几组:为以下几组:u赋值:赋值:它通常包含两个对象,其命令短语它通常包含两个对象,其命令短语的结构为的结构为““动词动词──目标目标──到到──目标目标””。例如,。例如,SETCOLORTOWSETCOLORTOW//GR+GR+((设置屏幕上的前景与背景的颜色设置屏幕上的前景与背景的颜色))STORE3.20TOCOUNTSTORE3.20TOCOUNT((给变量赋值给变量赋值)) u祈使:祈使:该命令一般用该命令一般用““动词动词──限定词限定词──对象对象””的词序,由表示结果目的地的对象来限定的词序,由表示结果目的地的对象来限定这一操作。例如,这一操作。例如,trofftroff-Ti300-source.text-Ti300-source.text((trofftroff向命名为向命名为i300i300的打印机输出源文本的打印机输出源文本))u定位:定位:这是一个在清单或文件中查找数据这是一个在清单或文件中查找数据项的命令,它由动词项的命令,它由动词((find)find)和带限定条件的和带限定条件的对象组成。例如,对象组成。例如,FINDCUSTOMERWHEREFINDCUSTOMERWHERECSTATUSCSTATUS==NEWNEW((找出新顾客的记录找出新顾客的记录))u接受输入:接受输入:这是取得用户输入并且用该输这是取得用户输入并且用该输入进行操作的命令。入进行操作的命令。 createbackupcreatebackup【【filenamefilename==************】】((创建以用户输入的创建以用户输入的66个字符为名字的备个字符为名字的备份文件份文件))n仔细地分析命令的功能,可以为命令选择更仔细地分析命令的功能,可以为命令选择更加自然的语法结构。如果简单短语能够构成加自然的语法结构。如果简单短语能够构成更复杂的表达式,那么命令语言就会变得更更复杂的表达式,那么命令语言就会变得更复杂。复杂。命令语言的分析与设计命令语言的分析与设计一个命令语言的功能是靠命令的名字和语法结一个命令语言的功能是靠命令的名字和语法结构来识别和联系的,因此对每个功能应当只提构来识别和联系的,因此对每个功能应当只提供一个命令。语言的复杂程度应当与用户的水供一个命令。语言的复杂程度应当与用户的水平相适应。平相适应。 n命令的规格说明包括制定命令词典和语法,命令的规格说明包括制定命令词典和语法,再加上出错信息表和求助子系统。必须用文再加上出错信息表和求助子系统。必须用文法的法的BNFBNF范式或用语法图表来说明语法序列。范式或用语法图表来说明语法序列。n需要仔细规划出错信息,词汇拼写错误、语需要仔细规划出错信息,词汇拼写错误、语法错误、在使用命令时的语义理解错误、在法错误、在使用命令时的语义理解错误、在支持软件上的运行错误等等,要预想到各个支持软件上的运行错误等等,要预想到各个层次上的错误。出错信息解释器应能给出出层次上的错误。出错信息解释器应能给出出现错误的类型信息,并能给出最有可能的出现错误的类型信息,并能给出最有可能的出错源(出错位置)。错源(出错位置)。n命令语言的设计应该包括设计输入的语法分命令语言的设计应该包括设计输入的语法分析器、错误信息解释器和运行时的系统。析器、错误信息解释器和运行时的系统。 自然语言自然语言n像命令语言一样,自然语言由词典和语法组像命令语言一样,自然语言由词典和语法组成。但与命令语言和程序设计语言不同的成。但与命令语言和程序设计语言不同的是,自然语言的语法成分有许多规则,使其是,自然语言的语法成分有许多规则,使其具有更灵活的表达式和多义性的解释。具有更灵活的表达式和多义性的解释。n语法语法自然语言是由词自然语言是由词((词汇词汇))构成的,词可划分成名构成的,词可划分成名词、动词、形容词等等。语法规则规定了如词、动词、形容词等等。语法规则规定了如何把各种词类联接起来构成一个完整的句子。何把各种词类联接起来构成一个完整的句子。如在英语中的句子如在英语中的句子::““HemustgotothestationHemustgotothestationtocatchthetraintocatchthetrain””((他必须去车站赶火车他必须去车站赶火车))。。 u句子可利用语法分析方法来分解,以检查句句子可利用语法分析方法来分解,以检查句子中词的排列顺序是否符合允许的组合规则。子中词的排列顺序是否符合允许的组合规则。常用语法分析树来表示句子的语法结构。常用语法分析树来表示句子的语法结构。u语法只能告诉人们一个句子是否符合语言的语法只能告诉人们一个句子是否符合语言的语法规则,要理解句子的意思,必须考虑句语法规则,要理解句子的意思,必须考虑句子的语义。如子的语义。如thesquaretrianglethesquaretrianglestastestastenicenice””((方的三角形味道好方的三角形味道好))这句话,语法上看是正这句话,语法上看是正确的,但语义上看,明显地是荒谬的。确的,但语义上看,明显地是荒谬的。 n语义语义语义是指从词与词的关联知识中产生的含义。语义是指从词与词的关联知识中产生的含义。它形成了语言、记忆和经验的联系。语义规它形成了语言、记忆和经验的联系。语义规则可放入语法中,以便把无意义的句子删去。则可放入语法中,以便把无意义的句子删去。 u建立一套完整的语义文法很困难,许多词有建立一套完整的语义文法很困难,许多词有不同的含义。例如,不同的含义。例如,““setset””一词,可以当一词,可以当““建立建立””解,也可以当解,也可以当““集合集合””解,其解释多达解,其解释多达100100多种。多种。u词的多义性是双关语的基础,在双关语中同词的多义性是双关语的基础,在双关语中同一个句子可有几种含义。一个句子可有几种含义。u不适当的语法规则会加重语言的多义性。自不适当的语法规则会加重语言的多义性。自然语言在语法上一个重大的缺陷是没有作用然语言在语法上一个重大的缺陷是没有作用域规则。域规则。u例如在一个杂志封二上有一张剧照,下面附例如在一个杂志封二上有一张剧照,下面附加的解释句子是:加的解释句子是:““影星莎莉影星莎莉··爱登在系列片爱登在系列片007007《金手指》中饰演邦德女郎,自顶至踵被《金手指》中饰演邦德女郎,自顶至踵被涂满金漆,因皮肤窒息致死。涂满金漆,因皮肤窒息致死。”” u语义的含义可以用网络图来分析,该图展现语义的含义可以用网络图来分析,该图展现了一个句子各个组成部分含义之间的关系,了一个句子各个组成部分含义之间的关系,把动词和名词的关系以一系列语义原语的形把动词和名词的关系以一系列语义原语的形式标在图上。式标在图上。u语义图很少是完整的,因此它不可能精确地语义图很少是完整的,因此它不可能精确地说明自然语言中各种句子的含义。而人们并说明自然语言中各种句子的含义。而人们并不仅仅依赖语法和语义来理解一个语句。要不仅仅依赖语法和语义来理解一个语句。要获得进一步的理解,还需要知道说话者和听获得进一步的理解,还需要知道说话者和听话者对话的上下文,这称之为语言理解的语话者对话的上下文,这称之为语言理解的语用学。用学。 P=Ptrans,表示带有宾语的及物动词,O=Objects,表示动词的宾语,Poss-by表示所有的格短语。 n语用学语用学语用学是用说话者、对话环境,以及其它因语用学是用说话者、对话环境,以及其它因素(诸如说话者的手势、说话者和听话者过素(诸如说话者的手势、说话者和听话者过去的关系等)来理解语义的一个学科。去的关系等)来理解语义的一个学科。u当我们听到这样一句话:当我们听到这样一句话:““HeissupportingHeissupportingtheredsthereds**””的时侯,可能会认为说话者是在提的时侯,可能会认为说话者是在提及一个共产党的会议,也可能会理解为是对及一个共产党的会议,也可能会理解为是对一个利物浦足球俱乐部一个利物浦足球俱乐部((红队红队))的支持,两种的支持,两种含义大相径庭。含义大相径庭。u由此可见,语言的理解是一个很复杂的事情。由此可见,语言的理解是一个很复杂的事情。它需要关于周围世界的知识和单词。它需要关于周围世界的知识和单词。 结构化程序设计结构化程序设计程序设计风格程序设计风格程序效率程序效率程序复杂性度量程序复杂性度量 n做为软件工程过程的一个阶段,做为软件工程过程的一个阶段,程程序编码是设计的继续序编码是设计的继续。。n程序设计语言的特性和程序设计风程序设计语言的特性和程序设计风格会深刻地影响软件的质量和可维格会深刻地影响软件的质量和可维护性。护性。n为了保证程序编码的质量,程序员为了保证程序编码的质量,程序员必须深刻理解、熟练掌握并正确地必须深刻理解、熟练掌握并正确地运用程序设计语言的特性。此外,运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和还要求源程序具有良好的结构性和良好的程序设计风格。良好的程序设计风格。 结构化程序设计结构化程序设计结构化程序设计主要包括两方面:结构化程序设计主要包括两方面:n在编写程序时,强调在编写程序时,强调使用几种基使用几种基本控制结构本控制结构,通过组合嵌套,形,通过组合嵌套,形成程序的控制结构。成程序的控制结构。尽可能避免尽可能避免使用使用GOTOGOTO语句语句。。n在程序设计过程中,尽量采用自在程序设计过程中,尽量采用自顶向下和逐步细化的原则,顶向下和逐步细化的原则,由粗由粗到细到细,,一步步展开一步步展开。。 结构化程序设计的主要原则结构化程序设计的主要原则n使用语言中的使用语言中的顺序顺序、、选择选择、、重复重复等等有限的基本控制结构表示程序逻辑。有限的基本控制结构表示程序逻辑。n选用的控制结构只准许有选用的控制结构只准许有一个入口一个入口和和一个出口一个出口。。n程序语句组成程序语句组成容易识别的块容易识别的块,,每块每块只有只有一个入口一个入口和和一个出口一个出口。。n复杂结构应该用基本控制结构进行复杂结构应该用基本控制结构进行组合嵌套来实现。组合嵌套来实现。 n语言中没有的控制结构,可用一语言中没有的控制结构,可用一段等价的程序段模拟,但要求该段等价的程序段模拟,但要求该程序段在整个系统中应前后一致。程序段在整个系统中应前后一致。n严格控制严格控制GOTOGOTO语句语句,仅在下列,仅在下列情形才可使用:情形才可使用:①①用一个非结构化的程序设计语用一个非结构化的程序设计语言去实现一个结构化的构造。言去实现一个结构化的构造。②②若不使用若不使用GOTOGOTO语句就会使程语句就会使程序功能模糊。序功能模糊。③③在某种可以改善而不是损害程在某种可以改善而不是损害程序可读性的情况下。序可读性的情况下。 例例11打印打印AA,,BB,,CC三数中最小者程序三数中最小者程序 程序程序11if(if(AA<0)>0){{xx00==xxmm;;ff00==ffmm;;}}elseelsexx11==xxmm;;}} finish:printf(“nTherootofthisequationis%dn”,xm);}n单入口,两出口单入口,两出口n正常出口是循环达到正常出口是循环达到nn次,非正常次,非正常出口是循环中途控制转出到标号出口是循环中途控制转出到标号finishfinish所在位置所在位置n可读性好可读性好 ff00==ff((aa));;ff11==ff((bb));;////程序程序22if(if(ff00**ff11<=0){<=0){xx00==aa;;xx11==bb;;for(for(ii=1=1;;ii<=<=nn;;ii++){++){xxmm=(=(xx00++xx11)/2)/2;;ffmm==ff((xxmm));;if(if(absabs((ffmm))<<epseps||||absabs((xx11--xx00))<<epseps)break)break;;if(if(ff00**ffmm>>0)0){{xx00==xxmm;;ff00==ffmm;;}}elseelsexx11==xxmm;;}}}} ff00==ff((aa));;ff11==ff((bb));;////程序程序33if(if(ff00**ff11<=0){<=0){xx00==aa;;xx11==bb;;ii=1=1;;finishedfinished==00;;while(while(ii<=<=nn&&&&finishedfinished==0){==0){xxmm=(=(xx00++xx11))//22;;ffmm==ff((xxmm));;if(if(absabs((ffmm))<<epseps||||absabs((xx11--xx00))<<epseps))finishedfinished==11;;if(if(finishedfinished==0)==0) if(if(ff00**ffmm>>0)0){{xx00==xxmm;;ff00==ffmm;;}}elseelsexx11==xxmm;;}}}}n引入布尔变量引入布尔变量finishedfinished,,改改forfor型型循环为循环为whilewhile型,将单入口多出口型,将单入口多出口结构改为单入口单出口结构。结构改为单入口单出口结构。 自顶向下,逐步求精自顶向下,逐步求精n在详细设计和编码阶段,应在详细设计和编码阶段,应当采取自顶向下,逐步求精当采取自顶向下,逐步求精的方法。的方法。n把一个模块的功能逐步分把一个模块的功能逐步分解,细化为一系列具体的步解,细化为一系列具体的步骤,进而翻译成一系列用某骤,进而翻译成一系列用某种程序设计语言写成的程序。种程序设计语言写成的程序。 例,用筛选法求例,用筛选法求100100以内的素数以内的素数n筛选法就是从筛选法就是从22到到100100中去掉中去掉2,3,2,3,……,9,10,9,10的倍数,剩下的就是的倍数,剩下的就是100100以内的素数。以内的素数。n为了解决这个问题,可先按程序为了解决这个问题,可先按程序功能写出一个框架。功能写出一个框架。 mainmain(){//(){//程序框架程序框架建立建立22到到100100的数组的数组AA[][],,其中其中AA[[ii]]==ii;;-----------------------------------1-----------------------------------1建立建立22到到1010的素数表的素数表BB[][],,其中存放其中存放22到到1010以内的素数;以内的素数;-----------2-----------2若若AA[[ii]]==ii是是BB[][]中任一数的倍数,则中任一数的倍数,则剔除剔除AA[[ii]];;---------------------3---------------------3输出输出AA[][]中所有没有被剔除的数;中所有没有被剔除的数;-----------------------------------4-----------------------------------4}} mainmain(){(){//**建立建立22到到100100的数组的数组AA[][],,其中其中AA[[ii]]==ii**//for(for(ii=2=2;;ii<=100<=100;;ii++)++)AA[[ii]=]=ii;;//**建立建立22到到1010的素数表的素数表BB[][],,其中存放其中存放22到到1010以内的素数以内的素数**//BB[1]=2[1]=2;;BB[2]=3[2]=3;;BB[3]=5[3]=5;;BB[4]=7[4]=7;;//**若若AA[[ii]]==ii是是BB[][]中任一数的倍数,则剔中任一数的倍数,则剔除除AA[[ii]]**//for(for(jj=1=1;;jj<=4<=4;;jj++)++)检查检查AA[][]所有的数能否被所有的数能否被BB[[jj]]整除并将整除并将能被整除的数从能被整除的数从AA[][]中剔除中剔除;;-----3.1-----3.1 //**输出输出A[]A[]中所有没有被剔除的数中所有没有被剔除的数**//for(for(ii=2=2;;ii<=100<=100;;ii++)++)若若AA[[ii]]没有被剔除,则输出之没有被剔除,则输出之---4.1---4.1}}n对框架中的局部再做细化,得到整个对框架中的局部再做细化,得到整个程序。程序。 mainmain(){(){//**建立建立22到到100100的数组的数组AA[][],,其中其中AA[[ii]]==ii**//for(for(ii=2=2;;ii<=100<=100;;ii++)++)AA[[ii]=]=ii;;//**建立建立22到到1010的素数表的素数表BB[][],,其中存放其中存放22到到1010以内的素数以内的素数**//BB[1]=2[1]=2;;BB[2]=3[2]=3;;BB[3]=5[3]=5;;BB[4]=7[4]=7;;//**若若AA[[ii]]==ii是是BB[][]中任一数的倍数,则剔除中任一数的倍数,则剔除AA[[ii]]**//for(for(jj=1=1;;jj<=4<=4;;jj++)++)//**检查检查AA[][]所有的数能否被所有的数能否被BB[[jj]]整除并将能整除并将能被整除的数从被整除的数从AA[][]中剔除中剔除**// for(for(ii=2=2;;ii<=100<=100;;ii++++))if(if(AA[[ii]]//BB[[jj]]**BB[[jj]==]==AA[[ii])])AA[[ii]=0]=0;;//**输出输出AA[][]中所有没有被剔除的数中所有没有被剔除的数**//for(for(ii=2=2;;ii<=100<=100;;ii++++))//**若若AA[[ii]]没有被剔除,则输出之没有被剔除,则输出之**//if(if(AA[i]!=0[i]!=0))printfprintf((““AA[%d][%d]==%dn%dn””,,I,I,AA[[ii])]);;}} 自顶向下,逐步求精方法的优点自顶向下,逐步求精方法的优点n符合人们解决复杂问题的普遍规律。符合人们解决复杂问题的普遍规律。可提高软件开发的成功率和生产率可提高软件开发的成功率和生产率n用先全局后局部,先整体后细节,用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结发出来的程序具有清晰的层次结构,程序容易阅读和理解构,程序容易阅读和理解 n程序自顶向下,逐步细化,分解成程序自顶向下,逐步细化,分解成一个树形结构。在同一层的节点上一个树形结构。在同一层的节点上的细化工作相互独立。有利于编码、的细化工作相互独立。有利于编码、测试和集成测试和集成n每一步工作仅在上层节点的基础上每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查做不多的设计扩展,便于检查n有利于设计的分工和组织工作。有利于设计的分工和组织工作。 程序设计风格程序设计风格n程序实际上也是一种供人阅读的程序实际上也是一种供人阅读的文章,有一个文章,有一个文章的风格文章的风格问题。问题。应该使程序具有良好的风格。应该使程序具有良好的风格。u源程序文档化源程序文档化u数据说明数据说明u语句结构语句结构u输入/输出方法输入/输出方法 源程序文档化源程序文档化u标识符的命名标识符的命名u安排注释安排注释uu程序的视觉组织程序的视觉组织 符号名的命名符号名的命名n符号名即标识符,包括符号名即标识符,包括模块名模块名、、变量名变量名、、常量名常量名、、标号名标号名、、子程子程序名序名、、、、数据区名数据区名以及以及缓冲区名缓冲区名等。等。n这些名字应能反映它所代表的实这些名字应能反映它所代表的实际东西,际东西,应有一定实际意义应有一定实际意义。。n例如,表示次数的量用例如,表示次数的量用TimesTimes,,表表示总量的用示总量的用TotalTotal,,表示平均值的表示平均值的用用AverageAverage,,表示和的量用表示和的量用SumSum等。等。 n名字不是越长越好名字不是越长越好,应当选择精炼的,应当选择精炼的意义明确的名字。意义明确的名字。必要时可使用缩写必要时可使用缩写名字名字,但这时要注意缩写规则要一,但这时要注意缩写规则要一致,并且要致,并且要给每一个名字加注释给每一个名字加注释。同。同时,在一个程序中,一个变量只应用时,在一个程序中,一个变量只应用于一种用途。于一种用途。nNEW.BALANCE.ACCOUNTS.PAYABLENEW.BALANCE.ACCOUNTS.PAYABLEnNBALAPNBALAPnNN 程序的注释程序的注释n夹在程序中的注释是程序员与日后夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。的程序读者之间通信的重要手段。n注释决不是可有可无的。注释决不是可有可无的。n一些正规的程序文本中,注释行的一些正规的程序文本中,注释行的数量占到整个源程序的数量占到整个源程序的11//33到到11//22,甚至更多。,甚至更多。n注释分为序言性注释和功能性注释。注释分为序言性注释和功能性注释。 序言性注释序言性注释n通常置于每个程序模块的开头部通常置于每个程序模块的开头部分,分,它应当给出程序的整体说明它应当给出程序的整体说明,,对于理解程序本身具有引导作用。对于理解程序本身具有引导作用。有些软件开发部门对序言性注释做有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编了明确而严格的规定,要求程序编制者逐项列出。制者逐项列出。n有关项目包括:有关项目包括:u程序标题程序标题;; u有关本模块有关本模块功能和目的功能和目的的的说明说明;;u主要算法主要算法;;u接口说明接口说明:包括调用形式,参数描:包括调用形式,参数描述,子程序清单;述,子程序清单;u有关数据描述有关数据描述:重要的变量及其用:重要的变量及其用途,约束或限制条件,以及其它有途,约束或限制条件,以及其它有关信息;关信息;u模块位置模块位置:在哪一个源文件中,或:在哪一个源文件中,或隶属于哪一个软件包;隶属于哪一个软件包;u开发简历开发简历:模块设计者,复审者,:模块设计者,复审者,复审日期,修改日期及有关说明等。复审日期,修改日期及有关说明等。 功能性注释功能性注释n功能性注释嵌在源程序体中,用以功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。怎么样。而不要解释下面怎么做。n例如,例如,//**ADDAMOUNTTOTOTALADDAMOUNTTOTOTAL**//TOTAL=AMOUNTTOTAL=AMOUNT++TOTALTOTAL不好。不好。 n如果注明把月销售额计入年度总额,如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:便使读者理解了下面语句的意图://**ADDMONTHLY-SALESTOADDMONTHLY-SALESTOANNUAL-TOTALANNUAL-TOTAL**//TOTAL=AMOUNTTOTAL=AMOUNT++TOTALTOTALn要点要点u描述一段程序,而不是每一个语描述一段程序,而不是每一个语句;句;u用缩进和空行,使程序与注释容易用缩进和空行,使程序与注释容易区别;区别;u注释要正确。注释要正确。 视觉组织视觉组织空格、空行和移行空格、空行和移行n恰当地利用恰当地利用空格空格,可以,可以突出运算的突出运算的优先性优先性,避免发生运算的错误。,避免发生运算的错误。n例如例如,将表达式,将表达式((AA<-<-17)17)ANDNOTANDNOT((BB<=<=49)49)ORCORC写成写成((AA<-<-17)17)ANDNOTANDNOT((BB<=<=49)49)ORORCCn自然的程序段之间可用自然的程序段之间可用空行空行隔开;隔开; n移行移行也叫做也叫做向右缩格向右缩格。它是指程序中。它是指程序中的各行不必都在左端对齐,都从第一的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清格起排列。这样做使程序完全分不清层次关系。层次关系。n对于对于选择语句选择语句和和循环语句循环语句,把其中的,把其中的程序段语句向右做程序段语句向右做阶梯式移行阶梯式移行。使程。使程序的逻辑结构更加清晰。序的逻辑结构更加清晰。n例如,两重选择结构嵌套,写成下面例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。的移行形式,层次就清楚得多。 IFIF((……))THENTHENIFIF((……))THENTHEN…………ELSEELSE…………ENDIFENDIF…………ELSEELSE…………ENDIFENDIF 数据说明数据说明n在设计阶段已经确定了数据结构的在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,组织及其复杂性。在编写程序时,则需要注意数据说明的风格。则需要注意数据说明的风格。n为了使程序中数据说明更易于理解为了使程序中数据说明更易于理解和维护,必须注意以下几点。和维护,必须注意以下几点。1.1.数据说明的次序应当规范化数据说明的次序应当规范化2.2.说明语句中变量安排有序化说明语句中变量安排有序化3.3.使用注释说明复杂数据结构使用注释说明复杂数据结构 数据说明的次序应当规范化数据说明的次序应当规范化n数据说明次序规范化,使数据属性数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和容易查找,也有利于测试,排错和维护。维护。n原则上,数据说明的次序与语法无原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范理解和维护的需要,最好使其规范化,使说明的先后次序固定。化,使说明的先后次序固定。 n例如,在例如,在FORTRANFORTRAN程序中数据说明次序程序中数据说明次序①①常量说明常量说明②②简单变量类型说明简单变量类型说明③③数组说明数组说明④④公用数据块说明公用数据块说明⑤⑤所有的文件说明所有的文件说明n在类型说明中还可进一步要求。例如,在类型说明中还可进一步要求。例如,可按如下顺序排列:可按如下顺序排列:①①整型量说明整型量说明②②实型量说明实型量说明③③字符量说明字符量说明④④逻辑量说明逻辑量说明 说明语句中变量安排有序化说明语句中变量安排有序化n当当多个变量名在一个说明语句中说明多个变量名在一个说明语句中说明时,应当对这些变量时,应当对这些变量按字母的顺序排按字母的顺序排列列。带标号的全程数据。带标号的全程数据((如如FORTRANFORTRAN的公用块的公用块))也应当按字母也应当按字母的顺序排列。的顺序排列。n例如,把例如,把integerintegersizesize,,lengthlength,,widthwidth,,costcost,,priceprice写成写成integerintegercostcost,,lengthlength,,priceprice,,sizesize,,widthwidth 使用注释说明复杂数据结构使用注释说明复杂数据结构n如果设计了一个复杂的数据结构,如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时应当使用注释来说明在程序实现时这个数据结构的固有特点。这个数据结构的固有特点。n例如例如,,对对PLPL/1/1的链表结构和的链表结构和PascalPascal中用户自定义的数据类型,都应当中用户自定义的数据类型,都应当在注释中做必要的补充说明。在注释中做必要的补充说明。 语句结构语句结构n在设计阶段确定了软件的逻辑流结在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直的任务。语句构造力求简单,直接,不能为了片面追求效率而使语接,不能为了片面追求效率而使语句复杂化。句复杂化。 1.1.在一行内只写一条语句在一行内只写一条语句n在一行内只写一条语句,并且采取在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和适当的移行格式,使程序的逻辑和功能变得更加明确。功能变得更加明确。n许多程序设计语言允许许多程序设计语言允许在一行内写在一行内写多个语句多个语句。但这种方式。但这种方式会使程序可会使程序可读性变差读性变差。因而不可取。。因而不可取。 n例如,有一段排序程序例如,有一段排序程序FORI:=1TONFORI:=1TON--1DOBEGIN1DOBEGINT:=IT:=I;;FORJ:=IFORJ:=I++1TONDOIFA[J]1TONDOIFA[J]<<A[T]THENT:=JA[T]THENT:=J;;IFTIFT≠≠ITHENITHENBEGINWORK:=A[T]BEGINWORK:=A[T];;A[T]:=A[I]A[T]:=A[I];;A[I]:=WORKA[I]:=WORK;;ENDENDENDEND;;n由于一行中包括了多个语句,掩盖了由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可程序的循环结构和条件结构,使其可读性变得很差。读性变得很差。 FORI:=1TONFORI:=1TON--1DO1DO////改进布局改进布局BEGINBEGINT:=IT:=I;;FORJ:=IFORJ:=I++1TONDO1TONDOIFA[J]IFA[J]<<A[T]THENT:=JA[T]THENT:=J;;IFTIFT≠≠ITHENITHENBEGINBEGINWORK:=A[T]WORK:=A[T];;A[T]:=A[I]A[T]:=A[I];;A[I]:=WORKA[I]:=WORK;;ENDENDENDEND;; 2.2.程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性n程序编写首先应当考虑清晰性,不程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得要刻意追求技巧性,使程序编写得过于紧凑。过于紧凑。n例如,有一个用例如,有一个用CC语句写出的程序语句写出的程序段:段:A[I]=A[I]A[I]=A[I]++A[T]A[T];;A[T]=A[I]A[T]=A[I]--A[T]A[T];;A[I]=A[I]A[I]=A[I]--A[T]A[T];; n此段程序可能不易看懂,有时还需此段程序可能不易看懂,有时还需用实际数据试验一下。用实际数据试验一下。n实际上,这段程序的功能就是交换实际上,这段程序的功能就是交换A[I]A[I]和和A[T]A[T]中的内容。目的是为了节中的内容。目的是为了节省一个工作单元。如果改一下:省一个工作单元。如果改一下:WORK=A[T]WORK=A[T];;A[T]=A[I]A[T]=A[I];;A[I]=WORKA[I]=WORK;;就能让读者一目了然了。就能让读者一目了然了。 3.3.程序要能直截了当地说明程序程序要能直截了当地说明程序员的用意。员的用意。n程序编写得要简单,写清楚,直截程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,了当地说明程序员的用意。例如,for(for(ii=1;=1;ii<=<=nn;;ii++)++)for(for(jj=1;=1;jj<=<=nn;;jj++)++)VV[[ii][][jj]]==((ii//jj))**((jj//ii))除法运算(/)在除数和被除数都除法运算(/)在除数和被除数都是整型量时,其结果只取整数部是整型量时,其结果只取整数部分,而得到整型量。分,而得到整型量。 当当ii<<jj时时,,ii//jj=0=0当当jj<<ii时时,,jj//ii=0=0得到的数组得到的数组当当ii≠≠jj时时VV[[ii][][jj]=(]=(ii//jj))**((jj//ii)=0)=0当当ii==jj时时VV[[ii][][jj]=(]=(ii//jj))**((jj//ii)=1)=1这样得到的结果这样得到的结果VV是一个单位矩阵。是一个单位矩阵。 n写成以下的形式,就能让读者直接写成以下的形式,就能让读者直接了解程序编写者的意图。了解程序编写者的意图。for(for(ii==1;1;ii<=<=nn;;ii++)++)for(for(jj==1;1;jj<=<=nn;;jj++)++)if(if(i==ji==j))VV[[ii][][jj]]==1.0;1.0;ELSEELSEVV[[ii][][jj]]==0.0;0.0; 4.4.除非对效率有特殊的要求除非对效率有特殊的要求,,程序编程序编写要做到写要做到清晰第一清晰第一,,效率第二效率第二。。不不要为了追求效率而丧失了清晰性。要为了追求效率而丧失了清晰性。事实上,事实上,程序效率的提高主要应通程序效率的提高主要应通过选择高效的算法过选择高效的算法来实现。来实现。5.5.首先要保证首先要保证程序正确程序正确,,然后才要求然后才要求提高速度提高速度。。反过来说,在使程序高反过来说,在使程序高速运行时,首先要保证它是正确的速运行时,首先要保证它是正确的。。 6.6.避免避免使用临时变量使用临时变量而使可读性下而使可读性下降。降。例如,有的程序员为了追求例如,有的程序员为了追求效率,往往喜欢把表达式效率,往往喜欢把表达式A[I]A[I]++11//A[I];A[I];写成写成AIAI==A[I];A[I];XX==AIAI++11//AI;AI;这样将一句分成两句写,会产生意这样将一句分成两句写,会产生意想不到的问题。想不到的问题。 7.7.让编译程序做简单的优化。让编译程序做简单的优化。8.8.尽可能尽可能使用库函数使用库函数9.9.避免避免不必要的转移不必要的转移。。同时如果能保同时如果能保持程序可读性,则不必用持程序可读性,则不必用GOTOGOTO语语句。句。例如,有一个求三个数中最小值的例如,有一个求三个数中最小值的程序:程序: IF(XIF(X<<Y)GOTO30Y)GOTO30IF(YIF(Y<<Z)GOTO50Z)GOTO50SMALLSMALL==ZZGOTO70GOTO7030IF(X30IF(X<<ZZ))GOTO60GOTO60SMALLSMALL==ZZGOTO70GOTO7050SMALL50SMALL==YYGOTO70GOTO7060SMALL60SMALL==XX70CONTINUE70CONTINUE 程序只需编写成:程序只需编写成:smallsmall==xx;;if(if(yy<=">="aa’’))if(if(charchar<=<=’’zz’’))coutcout<<<<““ThisisaletterThisisaletter。。””;;elseelsecoutcout<<<<““ThisisnotaletterThisisnotaletter。。””;;可能产生二义性问题。可能产生二义性问题。 12.12.避免采用过于复杂的条件测试。避免采用过于复杂的条件测试。13.13.尽量减少使用尽量减少使用““否定否定””条件的条件语条件的条件语句。句。例如,如果在程序中出现例如,如果在程序中出现if(!(charif(!(char<<‘‘00’’||char||char>>‘‘99’’))))…………改成改成if(char>="0if(char>="0’’&&char<="9&&char<="9’’))…………不要让读者绕弯子想。不要让读者绕弯子想。 14.14.尽可能用尽可能用通俗易懂的伪码通俗易懂的伪码来描述来描述程序的流程,然后再翻译成必须使程序的流程,然后再翻译成必须使用的语言。用的语言。15.15.数据结构要有利于程序的简化。数据结构要有利于程序的简化。16.16.要要模块化模块化,使模块功能尽可能单,使模块功能尽可能单一化,模块间的耦合能够清晰可见。一化,模块间的耦合能够清晰可见。17.17.利用利用信息隐蔽信息隐蔽,确保每一个模块,确保每一个模块的独立性。的独立性。 18.18.从从数据数据出发去构造程序。出发去构造程序。19.19.不要修补不好的程序,要重新编写。不要修补不好的程序,要重新编写。也不要一味地追求代码的复用,要也不要一味地追求代码的复用,要重新组织。重新组织。20.20.对太大的程序,要分块编写、测对太大的程序,要分块编写、测试,然后再集成。试,然后再集成。21.21.对递归定义的数据结构尽量使用递对递归定义的数据结构尽量使用递归过程。归过程。 输入和输出输入和输出n输入和输出信息是与用户的使用直输入和输出信息是与用户的使用直接相关的。输入和输出的方式和格接相关的。输入和输出的方式和格式应当尽可能方便用户的使用。一式应当尽可能方便用户的使用。一定要避免因设计不当给用户带来的定要避免因设计不当给用户带来的麻烦。麻烦。n因此,在软件需求分析阶段和设计因此,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的阶段,就应基本确定输入和输出的风格。系统能否被用户接受,有时风格。系统能否被用户接受,有时就取决于输入和输出的风格。就取决于输入和输出的风格。 n不论是不论是批处理的输入/输出方式批处理的输入/输出方式,,还是还是交互式的输入/输出方式交互式的输入/输出方式,在,在设计和编码时都应考虑下列原则:设计和编码时都应考虑下列原则:1.1.对所有的输入数据都要进行检对所有的输入数据都要进行检验,识别错误的输入,以保证每个验,识别错误的输入,以保证每个数据的有效性;数据的有效性;2.2.检查输入项的各种重要组合的合检查输入项的各种重要组合的合理性,必要时报告输入状态信息;理性,必要时报告输入状态信息;3.3.使得输入的步骤和操作尽可能简使得输入的步骤和操作尽可能简单,并保持简单的输入格式;单,并保持简单的输入格式; 4.4.输入数据时,应允许使用自由格输入数据时,应允许使用自由格式输入;式输入;5.5.应允许缺省值;应允许缺省值;6.6.输入一批数据时,最好使用输入输入一批数据时,最好使用输入结束标志,而不要由用户指定输入结束标志,而不要由用户指定输入数据数目;数据数目;7.7.在交互式输入输入时,要在屏幕在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上程中和输入结束时,也要在屏幕上给出状态信息;给出状态信息; 8.8.当程序设计语言对输入/输出格式当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与有严格要求时,应保持输入格式与输入语句的要求的一致性;输入语句的要求的一致性;9.9.给所有的输出加注解,并设计输给所有的输出加注解,并设计输出报表格式。出报表格式。输入/输出风格还受到许多其它因输入/输出风格还受到许多其它因素的影响。如输入/输出设备(例素的影响。如输入/输出设备(例如终端的类型,图形设备,数字化如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度、转换设备等)、用户的熟练程度、以及通信环境等。以及通信环境等。 程序效率程序效率n讨论效率的准则讨论效率的准则程序的效率是指程序的效率是指程序的执行速度程序的执行速度及及程序所需占用的内存的存储空间程序所需占用的内存的存储空间。。程序编码是最后提高运行速度和节程序编码是最后提高运行速度和节省存储的机会,因此在此阶段不能省存储的机会,因此在此阶段不能不考虑程序的效率。让我们首先明不考虑程序的效率。让我们首先明确讨论程序效率的几条准则确讨论程序效率的几条准则 u效率是一个性能要求,应当在需效率是一个性能要求,应当在需求分析阶段给出。求分析阶段给出。软件效率以需求软件效率以需求为准为准,不应以人力所及为准。,不应以人力所及为准。u好的设计可以提高效率。好的设计可以提高效率。u程序的程序的效率与程序的简单性效率与程序的简单性相关。相关。u一般说来,任何对效率无重要改一般说来,任何对效率无重要改善,且对程序的简单性、可读性和善,且对程序的简单性、可读性和正确性不利的程序设计方法都是不正确性不利的程序设计方法都是不可取的。可取的。 算法对效率的影响算法对效率的影响n源程序的源程序的效率与详细设计阶段确定效率与详细设计阶段确定的算法的效率直接有关的算法的效率直接有关。在详细设。在详细设计翻译转换成源程序代码后,算法计翻译转换成源程序代码后,算法效率反映为程序的执行速度和存储效率反映为程序的执行速度和存储容量的要求。容量的要求。n设计向程序转换过程中的指导原则:设计向程序转换过程中的指导原则: ①①在编程序前,尽可能化简有关的在编程序前,尽可能化简有关的算术表达式和逻辑表达式;算术表达式和逻辑表达式;②②仔细检查算法中的嵌套的循环,仔细检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循尽可能将某些语句或表达式移到循环外面;环外面;③③尽量避免使用多维数组;尽量避免使用多维数组;④④尽量避免使用指针和复杂的表;尽量避免使用指针和复杂的表;⑤⑤采用采用““快速快速””的算术运算;的算术运算; ⑥⑥不要混淆数据类型,避免在不要混淆数据类型,避免在表达式中出现类型混杂;表达式中出现类型混杂;⑦⑦尽量采用整数算术表达式和尽量采用整数算术表达式和布尔表达式;布尔表达式;⑧⑧选用等效的高效率算法;选用等效的高效率算法;n许多编译程序具有许多编译程序具有““优化优化””功功能,可以自动生成高效率的目能,可以自动生成高效率的目标代码。标代码。 影响存储器效率的因素影响存储器效率的因素n在大中型计算机系统中,存储在大中型计算机系统中,存储限制不再是主要问题。在这种限制不再是主要问题。在这种环境下,对环境下,对内存采取基于操作内存采取基于操作系统的分页功能的虚拟存储管系统的分页功能的虚拟存储管理理。。存储效率与操作系统的分存储效率与操作系统的分页功能直接有关页功能直接有关。。 n采用结构化程序设计,采用结构化程序设计,将程序将程序功能合理分块功能合理分块,,使每个模块或使每个模块或一组密切相关模块的程序体积一组密切相关模块的程序体积大小与每页的容量相匹配大小与每页的容量相匹配,可,可减少页面调度,减少内外存交减少页面调度,减少内外存交换,提高存储效率。换,提高存储效率。 n在微型计算机系统中,存储器在微型计算机系统中,存储器的容量对软件设计和编码的制的容量对软件设计和编码的制约很大。因此约很大。因此要选择可生成较要选择可生成较短目标代码且存储压缩性能优短目标代码且存储压缩性能优良的编译程序良的编译程序,有时需采用汇,有时需采用汇编程序。编程序。n提高存储器效率的关键是程序提高存储器效率的关键是程序的简单性。的简单性。 影响输入/输出的因素影响输入/输出的因素n输入/输出可分为两种类型:输入/输出可分为两种类型:u面向人面向人((操作员操作员))的输入/输出的输入/输出u面向设备的输入/输出面向设备的输入/输出n如果操作员能够十分方便、简单地如果操作员能够十分方便、简单地录入输入数据,或者能够十分直观、录入输入数据,或者能够十分直观、一目了然地了解输出信息,则可以一目了然地了解输出信息,则可以说面向人的输入/输出是高效的。说面向人的输入/输出是高效的。 n关于面向设备的输入关于面向设备的输入//输出,可以输出,可以提出一些提高输入提出一些提高输入//输出效率的指输出效率的指导原则:导原则:u输入输入//输出的请求应当最小化;输出的请求应当最小化;u对于所有的输入对于所有的输入//输出操作,输出操作,安安排适当的缓冲区排适当的缓冲区,以减少频繁的,以减少频繁的信息交换。信息交换。u对辅助存储对辅助存储((例如磁盘例如磁盘)),,选择尽选择尽可能简单的,可接受的存取方可能简单的,可接受的存取方法法;; u对辅助存储的输入对辅助存储的输入//输出,应当输出,应当成成块传送块传送;;u对终端或打印机的输入对终端或打印机的输入//输出,应输出,应考虑设备特性考虑设备特性,尽可能改善输入,尽可能改善输入//输出的质量和速度;输出的质量和速度;u任何不易理解的,对改善输入任何不易理解的,对改善输入//输输出效果关系不大的措施都是不可出效果关系不大的措施都是不可取的;取的;u任何不易理解的所谓任何不易理解的所谓““超高效超高效””的的输入输入//输出是毫无价值的;输出是毫无价值的; 程序复杂性度量程序复杂性度量n程序复杂性主要指程序复杂性主要指模块内程序的复模块内程序的复杂性杂性。它直接关联到软件开发费用。它直接关联到软件开发费用的多少,开发周期的长短和软件内的多少,开发周期的长短和软件内部潜伏错误的多少。部潜伏错误的多少。n减少程序复杂性,可提高软件的简减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部用减少,开发周期缩短,软件内部潜藏错误减少潜藏错误减少。。 复杂性度量需要满足的假设复杂性度量需要满足的假设n为了度量程序复杂性,要求:为了度量程序复杂性,要求:u它可以用来计算任何一个程序的它可以用来计算任何一个程序的复杂性;复杂性;u对于不合理的程序,例如对于长对于不合理的程序,例如对于长度动态增长的程序,或者对于原则度动态增长的程序,或者对于原则上无法排错的程序,不应当使用它上无法排错的程序,不应当使用它进行复杂性计算;进行复杂性计算;u如果程序中指令条数、附加存储如果程序中指令条数、附加存储量、计算时间增多,不会减少程序量、计算时间增多,不会减少程序的复杂性。的复杂性。 代码行度量法代码行度量法n源代码行数度量法基于两个前提:源代码行数度量法基于两个前提:u程序复杂性随着程序规模的增加程序复杂性随着程序规模的增加不均衡地增长;不均衡地增长;u控制程序规模的方法最好是采用控制程序规模的方法最好是采用分而治之的办法。将一个大程序分而治之的办法。将一个大程序分解成若干个简单的可理解的程分解成若干个简单的可理解的程序段。序段。 n方法的基本考虑是方法的基本考虑是统计一个程序模统计一个程序模块的源代码行数目,并以源代码行块的源代码行数目,并以源代码行数做为程序复杂性的度量。数做为程序复杂性的度量。n设设每行代码的出错率每行代码的出错率为为每每100100行源程行源程序中可能有的错误数目序中可能有的错误数目。。nThayerThayer曾指出,曾指出,程序出错率的估算程序出错率的估算范围是从范围是从0.040.04%~%~77%之间%之间,即每,即每100100行源程序中可能存在行源程序中可能存在0.040.04~~77个个错误。他还指出,每行代码的出错错误。他还指出,每行代码的出错率与源程序行数之间不存在简单的率与源程序行数之间不存在简单的线性关系。线性关系。 nLipowLipow指出,对于指出,对于小程序小程序,每行代码,每行代码出错率为出错率为1.31.3%~%~1.81.8%%;对于;对于大程大程序序,每行代码的出错率增加到,每行代码的出错率增加到2.72.7%~%~3.23.2%%之间,这只是考虑了程序之间,这只是考虑了程序的可执行部分,没有包括程序中的的可执行部分,没有包括程序中的说明部分。说明部分。nLipowLipow及其他研究者得出一个结论:及其他研究者得出一个结论:对于少于对于少于100100个语句的小程序,源代个语句的小程序,源代码行数与出错率是线性相关的。随码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方着程序的增大,出错率以非线性方式增长。式增长。 McCabeMcCabe度量法度量法nMcCabeMcCabe度量法,又称环路复杂性度度量法,又称环路复杂性度量,是一种量,是一种基于程序控制流基于程序控制流的复杂的复杂性度量方法。性度量方法。n它它基于一个程序模块的程序图中环基于一个程序模块的程序图中环路的个数路的个数,因此计算它先要画出程,因此计算它先要画出程序图。序图。n程序图是退化的程序流程图。流程程序图是退化的程序流程图。流程图中每个处理都退化成一个结点,图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。流线变成连接不同结点的有向弧。 n程序图仅描述程序内部的控制流程序图仅描述程序内部的控制流程,完全不表现对数据的具体操程,完全不表现对数据的具体操作,以及分支和循环的具体条件。作,以及分支和循环的具体条件。n计算环路复杂性的方法:计算环路复杂性的方法:根据图根据图论,在一个强连通的有向图论,在一个强连通的有向图GG中,中,环的个数由以下公式给出:环的个数由以下公式给出:VV((GG))==mm--nn++pp其中,其中,VV((GG))是有向图是有向图GG中环路个中环路个数,数,mm是图是图GG中弧数,中弧数,nn是图是图GG中结中结点数,点数,pp是图是图GG中的强连通分量个数。中的强连通分量个数。 nMyersMyers建议,对于复合判定,例建议,对于复合判定,例如,如,((AA==0)0)∩∩(C(C==D)D)∪∪(X(X==‘‘AA’’))算算做三个判定。做三个判定。n为使图成为强连通图,从图的入口为使图成为强连通图,从图的入口点到出口点加一条用虚线表示的有点到出口点加一条用虚线表示的有向边,使图成为强连通图。这样就向边,使图成为强连通图。这样就可以使用上式计算环路复杂性。可以使用上式计算环路复杂性。n在例示中,结点数在例示中,结点数nn==1111,,弧数弧数mm==1313,,pp==11,,则有则有VV((GG))==mm--nn++pp==1313--1111++11==3.3.n等于程序图中弧所封闭的区域数。等于程序图中弧所封闭的区域数。 几点说明几点说明n环路复杂度取决于程序控制结构的环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环复杂度。当程序的分支数目或循环数目增加时其复杂度也增加。数目增加时其复杂度也增加。环路环路复杂度与程序中覆盖的路径条数有复杂度与程序中覆盖的路径条数有关关。。n环路复杂度是可加的。例如,环路复杂度是可加的。例如,模块模块AA的复杂度为的复杂度为33,,模块模块BB的复杂度为的复杂度为44,则,则模块模块AA与与模块模块BB的复杂度是的复杂度是77。。 nMcCabeMcCabe建议,建议,对于复杂度超过对于复杂度超过1010的程序,应分成几个小程序,以减的程序,应分成几个小程序,以减少程序中的错误。少程序中的错误。WalshWalsh用实例证用实例证实了这个建议的正确性。在实了这个建议的正确性。在McCabeMcCabe复杂度为复杂度为1010的附近,存在的附近,存在出错率的间断跃变。出错率的间断跃变。nMcCabeMcCabe环路复杂度隐含的前提是:环路复杂度隐含的前提是:错误与程序的判定加上例行子程序错误与程序的判定加上例行子程序的调用数目成正比。的调用数目成正比。加工复杂性、加工复杂性、数据结构、录入与打乱输入卡片的数据结构、录入与打乱输入卡片的错误可以忽略不计。错误可以忽略不计。 n这种度量的缺点是:这种度量的缺点是:u对于不同种类的控制流的复杂性对于不同种类的控制流的复杂性不能区分不能区分u简单简单IFIF语句语句与与循环语句循环语句的复杂性的复杂性同等看待同等看待u嵌套嵌套IFIF语句语句与与简单简单CASECASE语句语句的的复杂性是一样的复杂性是一样的u模块间接口模块间接口当成当成一个简单分支一个简单分支一一样处理样处理u一个一个具有具有10001000行的顺序程序行的顺序程序与与一一行语句行语句的复杂性相同的复杂性相同 HalsteadHalstead的软件科学的软件科学nHalsteadHalstead软件科学研究确定计算机软件科学研究确定计算机软件开发中的一些定量规律,它软件开发中的一些定量规律,它采用以下一组基本的度量值。采用以下一组基本的度量值。n这些度量值通常在程序产生之后这些度量值通常在程序产生之后得出,或者在设计完成之后估算得出,或者在设计完成之后估算出。出。 n程序长度程序长度((预测的预测的HalsteadHalstead长度长度))令令nn11表示程序中不同运算符表示程序中不同运算符((包括保包括保留字留字))的个数,令的个数,令nn22表示程序中不同表示程序中不同运算对象的个数,令运算对象的个数,令HH表示表示““程序长程序长度度””,则有,则有HH==nn11loglog22nn1+1+nn22loglog22nn22n这里,这里,HH是程序长度的预测值,它是程序长度的预测值,它不等于程序中语句个数。不等于程序中语句个数。 n在定义中,运算符包括:在定义中,运算符包括:算术运算符算术运算符赋值符赋值符(=(=或或:=):=)逻辑运算符逻辑运算符分界符分界符((,或;或,或;或:):)关系运算符关系运算符括号运算符括号运算符子程序调用符子程序调用符数组操作符数组操作符循环操作符等。循环操作符等。n特别地,成对的运算符,例如特别地,成对的运算符,例如““beginbegin……endend””、、““forfor……toto””、、““repeatrepeat……untiluntil””、、““whilewhile……dodo””、、““ifif……thenthen……elseelse””、、““((……))””等都当等都当做单一运算符。做单一运算符。 n运算对象包括变量名和常数。运算对象包括变量名和常数。n实际的实际的HalsteadHalstead长度长度设设NN11为程序中实际出现的运算符为程序中实际出现的运算符总个数,总个数,NN22为程序中实际出现的为程序中实际出现的运算对象总个数,运算对象总个数,NN为实际的为实际的HalsteadHalstead长度,则有长度,则有NN==NN1+1+NN22 n程序的词汇表程序的词汇表HalsteadHalstead定义程序的词汇表为不同的定义程序的词汇表为不同的运算符种类数运算符种类数nn11和不同的运算对象和不同的运算对象种类数种类数nn22的总和。若令的总和。若令nn为程序的词为程序的词汇表,则有汇表,则有nn==nn1+1+nn22例如,例如,用用FORTRANFORTRAN语言写出的交语言写出的交换排序的例子换排序的例子SUBROUTINESORT(X,N)SUBROUTINESORT(X,N)DIMENSIONX(N)DIMENSIONX(N) IF(N.LT.2)RETURNIF(N.LT.2)RETURNDO20I=2,NDO20I=2,NDO10J=1,IDO10J=1,IIFIF(X(I).GE.X(J))GOTO10(X(I).GE.X(J))GOTO10SAVE=X(I)SAVE=X(I)X(I)=X(J)X(I)=X(J)X(J)=SAVEX(J)=SAVE10CONTINUE10CONTINUE20CONTINUE20CONTINUERETURNRETURNENDEND 运算符计数运算对象计数可执行语句结束7X6数组下标6I5=5J4IF()2N2DO222,2SAVE2程序结束111.LT.1N1=7N2=22.GE.1GOTO101n1=10n2=28 n程序量程序量程序量程序量VV可用下式得到可用下式得到VV==NNloglog22nn它表明了程序在它表明了程序在词汇上的复杂性词汇上的复杂性。。其最小值为其最小值为VV**=(2+=(2+nn22**))loglog22(2+(2+nn22**))VV这里,这里,22表明程序中至少有两个运算表明程序中至少有两个运算符:赋值符符:赋值符==和函数调用符和函数调用符ff()(),,nn22**表示输入/输出变量个数。表示输入/输出变量个数。 n对于上面的例子,利用对于上面的例子,利用nn11,,NN11,,nn22,,NN22,,可以计算得可以计算得HH=10=10loglog2210+710+7loglog227=52.877=52.87NN=28+22=50=28+22=50VV=(28+22)=(28+22)loglog22(10+7)=204(10+7)=204n等效的汇编语言程序的等效的汇编语言程序的VV==328328。。这这说明汇编语言比说明汇编语言比FORTRANFORTRAN语言需语言需要更多的信息量要更多的信息量((以以bitbit表示表示))。。 n程序量比率程序量比率((语言的抽象级别语言的抽象级别))LL==VV**//VV或或LL=(2/=(2/nn1)1)((nn2/2/NN2)2)它表明了一个程序的最紧凑形式它表明了一个程序的最紧凑形式的程序量与实际程序量之比,反的程序量与实际程序量之比,反映了程序的效率。其倒数映了程序的效率。其倒数DD=1/=1/LL表明了实现算法的困难程度。表明了实现算法的困难程度。 n程序员工作量程序员工作量EE==VV//LLn程序的潜在错误程序的潜在错误HalsteadHalstead度量可以用来预测程序中度量可以用来预测程序中的错误。预测公式为的错误。预测公式为BB=(=(NN1+1+NN2)2)loglog22((nn1+1+nn2)/30002)/3000BB为该程序的错误数。它表明程序为该程序的错误数。它表明程序中可能存在的差错中可能存在的差错BB应与程序量应与程序量VV成正比。成正比。 n例如,一个程序对例如,一个程序对7575个数据库项共个数据库项共访问访问13001300次,对次,对150150个运算符共使用个运算符共使用了了12001200次,那么预测该程序的错误次,那么预测该程序的错误数:数:BB=(1200+1300)=(1200+1300)loglog22(75+150)/3000(75+150)/30006.56.5即预测该程序中可能包含即预测该程序中可能包含66~~77个错个错误误 nHalsteadHalstead的重要结论的重要结论n程序的实际程序的实际HalsteadHalstead长度长度NN可以由可以由词汇表词汇表nn算出。即使程序还未编制算出。即使程序还未编制完成,也能预先算出程序的实际完成,也能预先算出程序的实际HalsteadHalstead长度长度NN,,虽然它没有明确虽然它没有明确指出程序中到底有多少个语句。指出程序中到底有多少个语句。这个结论非常有用。经过多次验这个结论非常有用。经过多次验证,预测的证,预测的HalsteadHalstead长度与实际的长度与实际的HalsteadHalstead长度是非常接近的。长度是非常接近的。 HalsteadHalstead度量的缺点度量的缺点n没有区别自己编的程序与别人编的没有区别自己编的程序与别人编的程序。程序。这是与实际经验相违背的。这是与实际经验相违背的。这时应将外部调用乘上一个大于这时应将外部调用乘上一个大于11的的常数的的常数KfKf((应在应在11~~55之间,它与之间,它与文档资料的清晰度有关文档资料的清晰度有关))。。n没有考虑非执行语句。没有考虑非执行语句。补救办法:补救办法:在统计在统计nn11、、nn22、、NN11、、NN22时,可以时,可以把非执行语句中出现的运算对象,把非执行语句中出现的运算对象,运算符统计在内。运算符统计在内。 n在允许混合运算的语言中,每种运在允许混合运算的语言中,每种运算符与它的运算对象相关。算符与它的运算对象相关。n如果一种语言有整型、实型、双精如果一种语言有整型、实型、双精度型三种不同类型的运算对象,则度型三种不同类型的运算对象,则任何一种基本算术运算符任何一种基本算术运算符((+、-、+、-、2××、/、/))实际上代表了实际上代表了=6=6A3种运算种运算符。符。在计算时应考虑这种因数据类在计算时应考虑这种因数据类型而引起差异的情况。型而引起差异的情况。 n没有注意调用的深度。没有注意调用的深度。HalsteadHalstead公公式应当对调用子程序的不同深度区式应当对调用子程序的不同深度区别对待。在计算嵌套调用的运算符别对待。在计算嵌套调用的运算符和运算对象时,应乘上一个调用深和运算对象时,应乘上一个调用深度因子。这样可以增大嵌套调用时度因子。这样可以增大嵌套调用时的错误预测率。的错误预测率。n没有把不同类型的运算对象,运算没有把不同类型的运算对象,运算符与不同的错误发生率联系起来,符与不同的错误发生率联系起来,而是把它们同等看待。而是把它们同等看待。例如,对例如,对简简单单ifif语句语句与与whilewhile语句语句就没有区别。就没有区别。 n忽视了嵌套结构忽视了嵌套结构((嵌套的循环语句、嵌套的循环语句、嵌套嵌套IFIF语句、括号结构等语句、括号结构等))。。一般一般地,运算符的嵌套序列,总比具有地,运算符的嵌套序列,总比具有相同数量的运算符和运算对象的非相同数量的运算符和运算对象的非嵌套序列要复杂得多。解决的办法嵌套序列要复杂得多。解决的办法是对嵌套结果乘上一个嵌套因子。是对嵌套结果乘上一个嵌套因子。 4软件测试的目的和原则软件测试的目的和原则4软件测试用例设计软件测试用例设计4软件测试策略软件测试策略4软件测试种类软件测试种类4程序调试程序调试 软件测试的目的和原则软件测试的目的和原则n软件测试的目的软件测试的目的n软件测试的原则软件测试的原则n软件测试的对象软件测试的对象n测试信息流测试信息流n测试与软件开发各阶段的关系测试与软件开发各阶段的关系 软件测试的目的软件测试的目的n基于不同的立场,存在着两种完全基于不同的立场,存在着两种完全不同的测试目的。不同的测试目的。n从从用户的角度用户的角度出发,普遍希望通过出发,普遍希望通过软件测试软件测试暴露软件中隐藏的错误和暴露软件中隐藏的错误和缺陷缺陷,以考虑是否可接受该产品。,以考虑是否可接受该产品。n从从软件开发者的角度软件开发者的角度出发,则希望出发,则希望测试成为测试成为表明软件产品中不存在错表明软件产品中不存在错误误的过程,验证该软件已正确地实的过程,验证该软件已正确地实现了用户的要求,确立人们对软件现了用户的要求,确立人们对软件质量的信心。质量的信心。 MyersMyers软件测试目的软件测试目的(1)(1)测试是测试是程序的执行过程程序的执行过程,目的在,目的在于于发现错误发现错误;;(2)(2)一个好的测试用例在于一个好的测试用例在于能发现至能发现至今未发现的错误今未发现的错误;;(3)(3)一个成功的测试是一个成功的测试是发现了至今未发现了至今未发现的错误的测试发现的错误的测试。。 n换言之,测试的目的是换言之,测试的目的是u想以最少的时间和人力,想以最少的时间和人力,系统地找系统地找出软件中潜在的各种错误和缺陷出软件中潜在的各种错误和缺陷。如。如果我们成功地实施了测试,我们就能果我们成功地实施了测试,我们就能够发现软件中的错误。够发现软件中的错误。u测试的附带收获是,它测试的附带收获是,它能够证明软能够证明软件的功能和性能与需求说明相符合件的功能和性能与需求说明相符合。。u实施测试收集到的测试结果数据为实施测试收集到的测试结果数据为可靠性分析提供了依据。可靠性分析提供了依据。u测试不能表明软件中不存在错误,测试不能表明软件中不存在错误,它只能说明软件中存在错误。它只能说明软件中存在错误。 软件测试的原则软件测试的原则1.1.应当把应当把““尽早地和不断地进行软件尽早地和不断地进行软件测试测试””作为软件开发者的座右铭。作为软件开发者的座右铭。2.2.测试用例应由测试用例应由测试输入数据测试输入数据和对和对应的应的预期输出结果预期输出结果这两部分组成。这两部分组成。3.3.程序员应避免检查自己的程序。程序员应避免检查自己的程序。4.4.在设计测试用例时,应包括在设计测试用例时,应包括合理合理的输入条件的输入条件和和不合理的输入条件不合理的输入条件。。 5.5.充分注意测试中的群集现象。充分注意测试中的群集现象。经验表明,经验表明,测试后测试后程序中残存的错程序中残存的错误数目与该程序中已发现的错误数误数目与该程序中已发现的错误数目成正比目成正比。。6.6.严格执行测试计划,严格执行测试计划,排除测试的随排除测试的随意性意性。。7.7.应当对每一个测试结果做全面检查。应当对每一个测试结果做全面检查。8.8.妥善保存测试计划,测试用例,出妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提错统计和最终分析报告,为维护提供方便。供方便。 软件测试的对象软件测试的对象n软件测试并不等于程序测试。软件测试并不等于程序测试。软件软件测试应贯穿于软件定义与开发的整测试应贯穿于软件定义与开发的整个期间个期间。。n需求分析需求分析、、概要设计概要设计、、详细设计以详细设计以及程序编码及程序编码等各阶段所得到的等各阶段所得到的文文档档,包括需求规格说明、概要设计,包括需求规格说明、概要设计规格说明、详细设计规格说明以及规格说明、详细设计规格说明以及源程序,源程序,都应成为软件测试的对象都应成为软件测试的对象。。 n为把握软件开发各个环节的正确为把握软件开发各个环节的正确性,需要进行各种性,需要进行各种确认确认和和验证验证工作。工作。n确认确认((ValidationValidation)),,是一系列的活动是一系列的活动和过程,目的是想证实在一个给定和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。的外部环境中软件的逻辑正确性。u需求规格说明确认需求规格说明确认u程序确认程序确认((静态确认、动态确认静态确认、动态确认))n验证验证((VerificationVerification)),,试图证明在软试图证明在软件生存期各个阶段,以及阶段间的件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。逻辑协调性、完备性和正确性。 测试信息流测试信息流 测试信息流测试信息流n软件配置软件配置:软件需求规格说明、软:软件需求规格说明、软件设计规格说明、源代码等;件设计规格说明、源代码等;n测试配置测试配置:测试计划、测试用例、:测试计划、测试用例、测试程序等;测试程序等;n测试工具测试工具:测试数据自动生成程序、:测试数据自动生成程序、静态分析程序、动态分析程序、测静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的试结果分析程序、以及驱动测试的测试数据库等等。测试数据库等等。 n测试结果分析测试结果分析:比较实测结果与:比较实测结果与预期结果,评价错误是否发生。预期结果,评价错误是否发生。n排错排错((调试调试)):对已经发现的错误:对已经发现的错误进行错误定位和确定出错性质,进行错误定位和确定出错性质,并改正这些错误,同时修改相关并改正这些错误,同时修改相关的文档。的文档。n修正后的文档再测试修正后的文档再测试:直到通过:直到通过测试为止。测试为止。 n通过收集和分析测试结果数据,对通过收集和分析测试结果数据,对软件建立可靠性模型软件建立可靠性模型n利用可靠性分析,评价软件质量:利用可靠性分析,评价软件质量:u软件的质量和可靠性达到可以接软件的质量和可靠性达到可以接受的程度;受的程度;u所做的测试不足以发现严重的错所做的测试不足以发现严重的错误;误;n如果测试发现不了错误,可以肯如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。分,错误仍然潜伏在软件中。 测试与软件开发各阶段的关系测试与软件开发各阶段的关系n软件开发过程是一个自顶向下,逐软件开发过程是一个自顶向下,逐步细化的过程步细化的过程n软件计划阶段定义软件作用域软件计划阶段定义软件作用域n软件需求分析建立软件信息域、功软件需求分析建立软件信息域、功能和性能需求、约束等能和性能需求、约束等n软件设计软件设计n把设计用某种程序设计语言转换成把设计用某种程序设计语言转换成程序代码程序代码 n测试过程是依相反顺序安排的自底测试过程是依相反顺序安排的自底向上,逐步集成的过程。向上,逐步集成的过程。 测试用例设计测试用例设计n两种常用的测试方法两种常用的测试方法u黑盒测试黑盒测试u白盒测试白盒测试 黑盒测试黑盒测试n这种方法是把这种方法是把测试对象测试对象看做看做一个黑一个黑盒子盒子,测试人员完全不考虑程序内,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序程序的需求规格说明书,检查程序的功能是否符合它的功能说明。的功能是否符合它的功能说明。n黑盒测试又叫做黑盒测试又叫做功能测试功能测试或或数据驱数据驱动测试动测试。。 n黑盒测试方法是在程序接口上进行黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误测试,主要是为了发现以下错误::u是否有不正确或遗漏了的功能是否有不正确或遗漏了的功能??u在接口上,在接口上,输入能否正确地接受输入能否正确地接受??能否输出正确的结果能否输出正确的结果??u是否有数据结构错误或外部信息是否有数据结构错误或外部信息((例如数据文件例如数据文件))访问错误访问错误??u性能上是否能够满足要求性能上是否能够满足要求??u是否有初始化或终止性错误是否有初始化或终止性错误?? n用黑盒测试发现程序中的错误,必用黑盒测试发现程序中的错误,必须在须在所有可能的输入条件和输出条所有可能的输入条件和输出条件件中确定测试数据,来检查程序是中确定测试数据,来检查程序是否都能产生正确的输出。否都能产生正确的输出。n但这是但这是不可能不可能的。的。 n假设一个假设一个程序程序PP有有输入量输入量XX和和YY及及输输出量出量ZZ。。在字长为在字长为3232位的计算机上位的计算机上运行。若运行。若XX、、YY取整数,按黑盒方法取整数,按黑盒方法进行穷举测试:进行穷举测试:n可能采用的可能采用的测试数据组:测试数据组:223232××223232==226464n如果测试一组数据需要如果测试一组数据需要11毫秒,一毫秒,一年工作年工作365365××2424小时,完成所有测小时,完成所有测试需试需55亿年。亿年。 白盒测试白盒测试n此方法此方法把测试对象看做一个透明的把测试对象看做一个透明的盒子盒子,它允许测试人员利用程序内,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路选择测试用例,对程序所有逻辑路径进行测试。径进行测试。n通过在不同点检查程序的状态,确通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试致。因此白盒测试又称为结构测试或逻辑驱动测试。或逻辑驱动测试。 n软件人员使用白盒测试方法,主要软件人员使用白盒测试方法,主要想对程序模块进行如下的检查:想对程序模块进行如下的检查:u对程序模块的对程序模块的所有独立的执行路所有独立的执行路径径至少测试一次;至少测试一次;u对对所有的逻辑判定所有的逻辑判定,,取取““真真””与取与取““假假””的两种情况都至少测试一次的两种情况都至少测试一次;;u在循环的边界和运行界限内执行在循环的边界和运行界限内执行循环体;循环体;u测试测试内部数据结构的有效性内部数据结构的有效性,等。,等。 n对一个具有对一个具有多重选择和循环嵌套多重选择和循环嵌套的的程序,程序,不同的路径数目可能是天文不同的路径数目可能是天文数字数字。给出一个小程序的流程图,。给出一个小程序的流程图,它包括了一个执行它包括了一个执行2020次的循环。次的循环。2020n包含的不同执行路径数达包含的不同执行路径数达55条,对条,对每一条路径进行测试需要每一条路径进行测试需要11毫秒,毫秒,假定一年工作假定一年工作365365××2424小时,要想小时,要想把所有路径测试完,需把所有路径测试完,需31703170年。年。 逻辑覆盖逻辑覆盖逻辑覆盖是以逻辑覆盖是以程序内部的逻辑结构为程序内部的逻辑结构为基础基础的设计测试用例的技术。它属白的设计测试用例的技术。它属白盒测试。盒测试。u语句覆盖语句覆盖u判定-条件覆盖判定-条件覆盖u判定覆盖判定覆盖u条件组合覆盖条件组合覆盖u条件覆盖条件覆盖u路径覆盖路径覆盖。。 aabbFTcc(A>1)and(B=0)X=X/AX=X/AddFTee(A=2)(A=2)or(X>1)or(X>1)X=X+1X=X+1 L1L1((aaccee))=={{(A>1)(A>1)andand(B=0)(B=0)}and}and{{(A=2)(A=2)oror(X/A>1)(X/A>1)}}=(A>1)=(A>1)andand(B=0)(B=0)andand(A=2)(A=2)oror(A>1)(A>1)andand(B=0)(B=0)andand(X/A>1)(X/A>1)==(A=2)(A=2)andand(B=0)(B=0)oror(A>1)(A>1)andand(B=0)(B=0)andand(X/A>1)(X/A>1) L2(aL2(abbd)d)==not{not{(A>1)(A>1)andand(B=0)(B=0)}}andandnot{not{(A=2)(A=2)oror(X>1)(X>1)}}=={not{not(A>1)(A>1)ornotornot(B=0)(B=0)}and}and{not{not(A=2)(A=2)andnotandnot(X>1)(X>1)}}==notnot(A>1)(A>1)andnotandnot(A=2)(A=2)andnotandnot(X>1)(X>1)orornotnot(B=0)(B=0)andandnotnot(A=2)(A=2)andnotandnot(X>1)(X>1) L3(aL3(abbe)e)==not{not{(A>1)(A>1)andand(B=0)(B=0)}and}and{{(A=2)(A=2)oror(X>1)(X>1)}}=={not{not(A>1)(A>1)ornotornot(B=0)(B=0)}and}and{{(A=2)(A=2)oror(X>1)(X>1)}}==notnot(A>1)(A>1)andand(A=2)(A=2)orornotnot(A>1)(A>1)andand(X>1)(X>1)orornotnot(B=0)(B=0)andand(A=2)(A=2)orornotnot(B=0)(B=0)andand(X>1)(X>1) L4(aL4(accd)d)=={{(A>1)(A>1)andand(B=0)(B=0)}}andandnotnot{{(A=2)(A=2)oror(X/A>1)(X/A>1)}}==(A>1)(A>1)andand(B=0)(B=0)andnotandnot(A=2)(A=2)andandnotnot(X/A>1)(X/A>1) 语句覆盖语句覆盖n语句覆盖就是设计若干个测试用语句覆盖就是设计若干个测试用例,运行被测程序,使得例,运行被测程序,使得每一可执每一可执行语句至少执行一次行语句至少执行一次。。n在图例中,正好所有的可执行语句在图例中,正好所有的可执行语句都在都在路径路径L1L1上,所以选择上,所以选择路径路径L1L1设设计测试用例,就可以覆盖所有的可计测试用例,就可以覆盖所有的可执行语句。执行语句。 n测试用例的设计格式如下测试用例的设计格式如下【输入的【输入的((AA,,BB,,XX)),,输出的输出的((AA,,BB,,XX))】】n为图例设计满足为图例设计满足语句覆盖语句覆盖的测试用例的测试用例是是::【【(2,0,4)(2,0,4),,(2,0,3)(2,0,3)】 】 覆盖覆盖aceace【【L1L1】】((A=2)A=2)andand(B=0)(B=0)oror(A>1)(A>1)andand(B=0)(B=0)andand(X/A>1)(X/A>1) 判定覆盖判定覆盖n判定覆盖就是设计若干个测试用判定覆盖就是设计若干个测试用例,运行被测程序,使得例,运行被测程序,使得程序中程序中每个判断的取真分支和取假分支每个判断的取真分支和取假分支至少经历一次至少经历一次。。n判定覆盖又称为判定覆盖又称为分支覆盖分支覆盖。。n对于图例,如果选择对于图例,如果选择路径路径L1L1和和L2L2,,就可得满足要求的测试用例就可得满足要求的测试用例:: n【【(2,0,4)(2,0,4),,(2,0,3)(2,0,3)】覆盖】覆盖aceace【【L1L1】】【【(1,1,1)(1,1,1),,(1,1,1)(1,1,1)】】覆盖覆盖abdabd【【L2L2】】((A=2)A=2)andand(B=0)(B=0)oror(A>1)(A>1)andand(B=0)(B=0)andand(X/A>1)(X/A>1)notnot(A>1)(A>1)andnotandnot(A=2)(A=2)andnotandnot(X>1)(X>1)orornotnot(B=0)(B=0)andandnotnot(A=2)(A=2)andnotandnot(X>1)(X>1) n如果选择路径如果选择路径L3L3和和L4L4,,还可得另一还可得另一组可用的测试用例组可用的测试用例::【【(2,1,1)(2,1,1),,(2,1,2)(2,1,2)】覆盖】覆盖abeabe【【L3L3】】【【(3,0,3)(3,0,3),,(3,1,1)(3,1,1)】】覆盖覆盖acdacd【【L4L4】】notnot(A>1)(A>1)andand(X>1)(X>1)orornotnot(B=0)(B=0)andand(A=2)(A=2)orornotnot(B=0)(B=0)andand(X>1)(X>1)(A>1)(A>1)andand(B=0)(B=0)andnotandnot(A=2)(A=2)andandnotnot(X/A>1)(X/A>1) 条件覆盖条件覆盖n条件覆盖就是设计若干个测试用例,条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中运行被测程序,使得程序中每个判断每个判断的每个条件的可能取值至少执行一次的每个条件的可能取值至少执行一次。。n在图例中,我们事先可对所有条件的在图例中,我们事先可对所有条件的取值加以标记。例如,取值加以标记。例如,n对于第一个判断:对于第一个判断:u条件条件AA>>11取真为取真为,取假为,取假为条件条件BB==00取真为取真为T1,取假为,取假为T1T2T2 n对于第二个判断:对于第二个判断:u条件条件AA==22取真为取真为T3,取假为,取假为T3条件条件XX>>11取真为取真为,取假为,取假为T4测试用例测试用例覆盖分支覆盖分支条件取值条件取值【【(2,0,4)(2,0,4),,(2,0,3)(2,0,3)】】L1(c,e)L1(c,e)TTTT1234【【(1,0,1)(1,0,1),,(1,0,1)(1,0,1)】】L2(b,d)L2(b,d)T1T2T3T4【【(2,1,1)(2,1,1),,(2,1,2)(2,1,2)】】L3(b,e)L3(b,e)TTTT1234或或 测测试试用用例例覆盖分支覆盖分支条件取值条件取值【【(1,0,3)(1,0,3),,(1,0,4)(1,0,4)】】L3(b,e)L3(b,e)TTTT1234【【(2,1,1)(2,1,1),,(2,1,2)(2,1,2)】】L3(b,e)L3(b,e)TTTT1234判定-条件覆盖判定-条件覆盖n判定-条件覆盖就是设计足够的测试判定-条件覆盖就是设计足够的测试用例,使得用例,使得判断中每个条件的所有可判断中每个条件的所有可能取值至少执行一次能取值至少执行一次,,每个判断中的每个判断中的每个条件的可能取值至少执行一次每个条件的可能取值至少执行一次。。 测测试试用用例例覆盖分支覆盖分支条件取值条件取值【【(2,0,4)(2,0,4),,(2,0,3)(2,0,3)】】L1(c,e)L1(c,e)TTTT1234【【(1,1,1)(1,1,1),,(1,1,1)(1,1,1)】】L2(b,d)L2(b,d)TTTT1234((A=2)A=2)andand(B=0)(B=0)oror(A>1)(A>1)andand(B=0)(B=0)andand(X/A>1)(X/A>1)notnot(A>1)(A>1)andnotandnot(A=2)(A=2)andnotandnot(X>1)(X>1)orornotnot(B=0)(B=0)andandnotnot(A=2)(A=2)andnotandnot(X>1)(X>1) TTA>1B=0FFandandX=X/ATA=2FororTX>1X=X+1F 条件组合覆盖条件组合覆盖n条件组合覆盖就是设计足够的测条件组合覆盖就是设计足够的测试用例,运行被测程序,使得试用例,运行被测程序,使得每每个判断的所有可能的条件取值组个判断的所有可能的条件取值组合至少执行一次合至少执行一次。。记记①①AA>>1,B1,B==00作作TT12②②AA>>1,B1,B≠≠00作作TT12③③AA≯≯1,B1,B==00作作TT12④④AA≯≯1,B1,B≠≠00作作TT12 ⑤⑤AA==2,X2,X>>11作作TT34⑥⑥AA==2,X2,X≯≯11作作TT34⑦⑦AA≠≠2,X2,X>>11作作TT34⑧⑧AA≠≠2,X2,X≯≯11作作TT34测测试试用用例例覆盖条件覆盖条件覆盖组合覆盖组合【【(2,0,4),(2,0,3)(2,0,4),(2,0,3)】】((L1)L1)TTTT1234①,⑤【【(2,1,1),(2,1,2)(2,1,1),(2,1,2)】】(L3)(L3)TTTT1234②,⑥【【(1,0,3),(1,0,4)(1,0,3),(1,0,4)】】(L3)(L3)TTTT1234③,⑦【【(1,1,1),(1,1,1)(1,1,1),(1,1,1)】】(L2)(L2)TTTT1234④,⑧ 路径测试路径测试n路径测试就是设计足够的测试用路径测试就是设计足够的测试用例,例,覆盖程序中所有可能的路径覆盖程序中所有可能的路径。。测测试试用用例例通过路径通过路径覆盖条件覆盖条件【【(2,0,4),(2,0,3)(2,0,4),(2,0,3)】】ace(L1)ace(L1)TTTT1234【【(1,1,1),(1,1,1)(1,1,1),(1,1,1)】】abdabd(L2)(L2)TTTT1234【【(1,1,2),(1,1,3)(1,1,2),(1,1,3)】】abeabe(L3)(L3)TTTT1234【【(3,0,3),(3,0,1)(3,0,3),(3,0,1)】】acdacd(L4)(L4)TTTT1234 条件测试路径选择条件测试路径选择n当程序中判定多于一个时,形成的当程序中判定多于一个时,形成的分支结构可以分为两类:分支结构可以分为两类:嵌套型分嵌套型分支结构支结构和和连锁型分支结构连锁型分支结构。。n对于嵌套型分支结构,若有对于嵌套型分支结构,若有nn个判定个判定语句,需要语句,需要nn+1+1个测试用例;个测试用例;n对于连锁型分支结构,对于连锁型分支结构,若有若有nn个判定个判定语句,需要有语句,需要有22nn个测试用例,覆盖个测试用例,覆盖它的它的22nn条路径。条路径。 循环测试路径选择循环测试路径选择n循环分为循环分为44种不同类型:种不同类型:简单循环简单循环、、连锁循环连锁循环、、嵌套循环嵌套循环和和非结构循环非结构循环。。(1)(1)简单循环简单循环①①零次循环零次循环:从循环入口到出口:从循环入口到出口②②一次循环一次循环:检查循环初始值:检查循环初始值③③二次循环二次循环:检查多次循环:检查多次循环④④mm次循环:次循环:检查在多次循环检查在多次循环⑤⑤最大次数循环、比最大次数多最大次数循环、比最大次数多一次、少一次的循环。一次、少一次的循环。 例:求最小值例:求最小值kk==ii;;for(for(jj==ii+1;+1;jj<=<=nn;;jj++)++)if(A[if(A[jj]whenSIMPLE.EQUAL=>xx:=7;:=7;----处理例外处理例外end;end;----处理例外并给处理例外并给xx赋值赋值??endMAIN;endMAIN; (7)(7)用户定义的错误处理用户定义的错误处理((User_DefinedErrorHandling)User_DefinedErrorHandling)n有两种相对简单的错误处理技术,有两种相对简单的错误处理技术,它们提供了打印出错信息和终止软它们提供了打印出错信息和终止软件执行的能力。它们都不允许嵌套件执行的能力。它们都不允许嵌套的错误处理。的错误处理。n第一种技术使用了一个第一种技术使用了一个全局错误处全局错误处理器对象理器对象。。每一个类都能对这个全每一个类都能对这个全局对象进行存取局对象进行存取。。 n当在一个用户对象中检测出一个错当在一个用户对象中检测出一个错误的时候,就把一个误的时候,就把一个消息发送给这消息发送给这个全局对象个全局对象。这个消息运载了一个。这个消息运载了一个字符串,它就是要被打印的出错信字符串,它就是要被打印的出错信息,消息中还有一个整数,它指出息,消息中还有一个整数,它指出错误的严重程度。消息格式为:错误的严重程度。消息格式为:ERROR_HANDLERERROR_HANDLER..handlehandle("Messagetobeprinted",1);("Messagetobeprinted",1);nERROR_HANDLERERROR_HANDLER将打印消息并将打印消息并终止应用的执行。终止应用的执行。 n第二种用户定义错误处理的技术要第二种用户定义错误处理的技术要求求每个类都定义或再定义一个命名每个类都定义或再定义一个命名为为errorerror的操作的操作。这个操作不应是类。这个操作不应是类的共有界面部分,它应是一个隐蔽的共有界面部分,它应是一个隐蔽的实现部分,可以被一些公共操作的实现部分,可以被一些公共操作调用以检测错误。这种调用以检测错误。这种errorerror操作可操作可以打印消息,在适当时候请求一些以打印消息,在适当时候请求一些额外输入,在必要时终止软件的执额外输入,在必要时终止软件的执行。行。 (8)(8)多重实现多重实现((MultipleImplementation)MultipleImplementation)n同一个类可以多种方式实现同一个类可以多种方式实现。为。为此,软件库必须对库中的每一部分此,软件库必须对库中的每一部分都能保留充足的信息,使得定义能都能保留充足的信息,使得定义能同时关联到不止一个实现。同时关联到不止一个实现。n为了定义连接到几个实现所使用的为了定义连接到几个实现所使用的关系。程序员应能指出要求的实例关系。程序员应能指出要求的实例所在的类,并确定所期待的特定实所在的类,并确定所期待的特定实现。现。 应用的实现应用的实现n应用的实现是在所有的类都被实现应用的实现是在所有的类都被实现之后的事情。之后的事情。n实际上,当把类开发出来时就已经实际上,当把类开发出来时就已经实现了应用。实现了应用。n每个类提供了完成应用所需要的某每个类提供了完成应用所需要的某种功能。种功能。n在在C++C++和和CC中有一个中有一个mainmain()()函数。函数。可以使用这个过程来说明构成应用可以使用这个过程来说明构成应用的主要对象的那些类的实例。的主要对象的那些类的实例。 nC++C++系统中主过程的两个主要职责系统中主过程的两个主要职责就是就是建立实例建立实例和和通过指针建立对象通过指针建立对象之间的通信之间的通信。。n以图形系统为例,首先以图形系统为例,首先建立一个用建立一个用户界面的单一实例户界面的单一实例。一旦它建立起。一旦它建立起来,来,就发送一个消息就发送一个消息,,启动绘图程启动绘图程序的命令循环序的命令循环。。n然后,这个对象担负起在系统寿命然后,这个对象担负起在系统寿命的其余时期协调通信关系和对象建的其余时期协调通信关系和对象建立的责任。立的责任。 n对于纯面向对象的语言,在系统中对于纯面向对象的语言,在系统中的每个的每个““事物事物””都是对象。都是对象。n在这些语言中没有在这些语言中没有““主过程主过程””。。n用户建立起一个类的实例,然后,用户建立起一个类的实例,然后,通过实例接受控制和执行服务,产通过实例接受控制和执行服务,产生实例输出的结果或接收由用户发生实例输出的结果或接收由用户发送来的消息。送来的消息。n由那些原始消息而产生的消息序列由那些原始消息而产生的消息序列就成为目标软件的功能。就成为目标软件的功能。 测试一个面向对象的应用测试一个面向对象的应用n传统软件测试经历传统软件测试经历单元测试单元测试、、组组装测试装测试、、确认测试确认测试和和系统测试系统测试等等44个阶段。个阶段。n单元测试单元测试主要针对最小的程序单主要针对最小的程序单元元程序模块进行测试。程序模块进行测试。n一旦这些程序模块分别测试完成一旦这些程序模块分别测试完成后,就将它们后,就将它们组装组装起来形成程序起来形成程序结构。结构。n对整个对整个系统系统进行一系列的测试,进行一系列的测试,查找和排除在需求方面的问题。查找和排除在需求方面的问题。 面向对象环境下的测试策略面向对象环境下的测试策略n单元测试单元测试(类测试)(类测试)u在面向对象环境下,在面向对象环境下,最小的可最小的可测试的单元是封装了的类或对测试的单元是封装了的类或对象象,而不是程序模块。,而不是程序模块。u面向对象软件的面向对象软件的类测试等价于类测试等价于传统软件开发方法中的传统软件开发方法中的单元测试单元测试。。但它是由类中封装的操作和和类但它是由类中封装的操作和和类的状态行为驱动的。的状态行为驱动的。u完全孤立地测试类的各个操作完全孤立地测试类的各个操作是不行的。是不行的。 u考虑一个类的层次。考虑一个类的层次。在基类中我在基类中我们定义了一个操作们定义了一个操作XX。。u每一个派生类都使用操作每一个派生类都使用操作XX,,它是它是在各个类所定义的私有属性和操作在各个类所定义的私有属性和操作的环境中使用的。的环境中使用的。因使用操作因使用操作XX的的环境变化太大环境变化太大,,所以必须在每一个所以必须在每一个派生类的环境下都测试操作派生类的环境下都测试操作XX。。u在面向对象开发环境下,把操作在面向对象开发环境下,把操作完全孤立起来进行测试,其收效是完全孤立起来进行测试,其收效是很小的。很小的。 n组装测试组装测试u因为面向对象软件因为面向对象软件没有一个层次没有一个层次的控制结构的控制结构,所以,所以传统的自顶向下传统的自顶向下和自底向上的组装策略和自底向上的组装策略意义不大。意义不大。u每次将一个操作组装到类中(像每次将一个操作组装到类中(像传统的增殖式组装那样)常常行不传统的增殖式组装那样)常常行不通,因为通,因为在构成类的各个部件之间在构成类的各个部件之间存在各种存在各种直接的和非直接的交互直接的和非直接的交互。。u对于面向对象系统的组装测试,对于面向对象系统的组装测试,存在两种不同的测试策略。存在两种不同的测试策略。 n基于线索测试基于线索测试((Thread-basedTest)Thread-basedTest)u它把它把为响应某一系统输入或事件为响应某一系统输入或事件所需的一组类组装在一起所需的一组类组装在一起。每一。每一条线索将分别测试和组装。条线索将分别测试和组装。n基于应用的测试基于应用的测试((Use-basedTest)Use-basedTest)u它它着眼于系统结构着眼于系统结构,首先测试独,首先测试独立类,这些类只使用很少的服务立类,这些类只使用很少的服务器类。再测试那些使用了独立类器类。再测试那些使用了独立类的相关类。一系列测试各层相关的相关类。一系列测试各层相关类的活动继续下去,直到整个系类的活动继续下去,直到整个系统构造完成。统构造完成。 n确认测试确认测试n在进行在进行确认测试确认测试和和系统测试系统测试时,不时,不关心类之间连接的细节。着眼于用关心类之间连接的细节。着眼于用户的要求和用户能够认可的系统输户的要求和用户能够认可的系统输出。出。n为了帮助确认测试的执行,测试者为了帮助确认测试的执行,测试者需要需要回到分析模型回到分析模型,根据那里提供,根据那里提供的事件序列(脚本)进行测试。的事件序列(脚本)进行测试。n可以利用黑盒测试的方法来驱动确可以利用黑盒测试的方法来驱动确认测试认测试。。 n测试方法学测试方法学检测软件中的故障检测软件中的故障并并确确定软件是否执行了预定要开发的功定软件是否执行了预定要开发的功能能。。n测试过程包括了测试过程包括了一组测试用例的开一组测试用例的开发发,每一个测试用例要求能检验应,每一个测试用例要求能检验应用的一个特定的元素。还需要分析用的一个特定的元素。还需要分析用各个测试用例执行测试的结果来用各个测试用例执行测试的结果来收集有关软件的信息。收集有关软件的信息。 按不同层次进行测试按不同层次进行测试n测试类中各个操作,主要测试类测试类中各个操作,主要测试类n这种测试是某些这种测试是某些单元测试单元测试与与组装测组装测试试的组合的组合n假定假定测试一个软件与测试一个类一测试一个软件与测试一个类一样样。这个测试者常常就是一个特定。这个测试者常常就是一个特定类的开发者。类的开发者。n下面讨论测试,主要集中于测试类下面讨论测试,主要集中于测试类和它们的各个操作,而不考虑确认和它们的各个操作,而不考虑确认测试或其它系统测试。测试或其它系统测试。 类的测试用例组类的测试用例组n一个类的测试用例组由满足测试需一个类的测试用例组由满足测试需求的用例组成。求的用例组成。n每个测试用例是一系列输入值,它每个测试用例是一系列输入值,它们将在要求的处理中执行,以满足们将在要求的处理中执行,以满足测试需求测试需求。。n每个测试用例应当包括每个测试用例应当包括送给构造函送给构造函数的参数数的参数,以把对象在测试之前置,以把对象在测试之前置于一个初始化的状态中。于一个初始化的状态中。 类测试类测试n类,作为在语法上独立的部件,应类,作为在语法上独立的部件,应当允许用在许多不同的应用中。当允许用在许多不同的应用中。n每个类都应是可靠的,并且不需了每个类都应是可靠的,并且不需了解任何实现的细节就能复用。解任何实现的细节就能复用。n因此,因此,类应尽可能孤立地进行测试类应尽可能孤立地进行测试。。 测试类操作的测试用例组测试类操作的测试用例组n首先定义首先定义测试类的各个操作测试类的各个操作的测的测试用例组。试用例组。n然后再把测试用例组扩充,针对然后再把测试用例组扩充,针对被测操作调用类中其它操作被测操作调用类中其它操作的情的情况,进行组装测试。况,进行组装测试。n如果一个类中的如果一个类中的所有操作的先决所有操作的先决条件条件和和后置条件后置条件都已定下来,就都已定下来,就为各个独立操作的测试用例的开为各个独立操作的测试用例的开发提供了指导。发提供了指导。 类测试的种类类测试的种类n基于定义的测试基于定义的测试u把类当做一个黑盒对待,确认类把类当做一个黑盒对待,确认类的实现是否遵照它的定义。例的实现是否遵照它的定义。例如,若类是一个如,若类是一个““StackStack””,,则测则测试应当确保试应当确保LIFOLIFO原则得以实施。原则得以实施。n基于程序的测试基于程序的测试u考虑类的实现,确定代码编写得考虑类的实现,确定代码编写得是否正确。例如,是否正确。例如,在在stackstack类中,类中,确认所有语句至少应被运行一确认所有语句至少应被运行一次,同时正确地执行了操作。次,同时正确地执行了操作。 基于定义的测试基于定义的测试n基于定义的测试包括两个级别:基于定义的测试包括两个级别:类类定义定义和和服务定义服务定义。。n类定义类定义u一个类的定义由各个服务的定义一个类的定义由各个服务的定义和一些表示类的概念的语句组合和一些表示类的概念的语句组合而成。而成。u例,一个例,一个stackstack类包括了服务类包括了服务pushpush和和poppop的定义。还表达了的定义。还表达了LIFOLIFO的的思想。思想。 uC++C++中中类的定义是多层次的类的定义是多层次的。。u对于大多数的类,检验类的定义对于大多数的类,检验类的定义主要检验在类定义的主要检验在类定义的publicpublic域中所域中所包含的那些服务。包含的那些服务。u对于派生类,要检查包括对于派生类,要检查包括publicpublic和和protectedprotected这两个域在内的扩充界面。这两个域在内的扩充界面。u如果完全地检查类中定义的服如果完全地检查类中定义的服务,则需要检查包括所有三个访问务,则需要检查包括所有三个访问级别级别publicpublic,,protectedprotected以及以及privateprivate的界面。的界面。 n服务定义服务定义u对于一个单独的服务,可通过该对于一个单独的服务,可通过该服务的服务的先决条件先决条件和和后置条件后置条件,以,以及它的名字加以定义。及它的名字加以定义。u根据先决条件选择测试用例根据先决条件选择测试用例,产,产生输出,以便让测试者能够生输出,以便让测试者能够判断判断后置条件是否能够得到满足后置条件是否能够得到满足。。u各个服务的定义的测试与对于各各个服务的定义的测试与对于各个过程定义的测试基本相同。个过程定义的测试基本相同。 基于程序的测试基于程序的测试n基于程序的类的测试将基于程序的类的测试将测试类的各测试类的各个服务个服务,并,并把类当做一个单元进行把类当做一个单元进行测试测试。。n首先,测试计划考虑测试属于该类首先,测试计划考虑测试属于该类的各个单个服务中的代码的各个单个服务中的代码n然后考虑测试各个服务之间的相互然后考虑测试各个服务之间的相互作用:作用:类内通信类内通信//类间通信类间通信。。 n测试可以覆盖测试可以覆盖每个服务的整个输入每个服务的整个输入域域。但这是不够的,还。但这是不够的,还必须测试这必须测试这些服务的相互作用些服务的相互作用,才能认为测试,才能认为测试是充分的。是充分的。n完全的单元完全的单元应当保证类的执行必须应当保证类的执行必须覆盖它的一个有代表性的状态集合覆盖它的一个有代表性的状态集合。。n构造函数和消息序列(线索)的参构造函数和消息序列(线索)的参数值的选择应当满足这个规则。数值的选择应当满足这个规则。 处于隔离的服务处于隔离的服务n基于程序的测试考虑基于程序的测试考虑测试每一个单测试每一个单独的服务独的服务,可以使用那些与过程性,可以使用那些与过程性测试相同的方式对它们进行测试。测试相同的方式对它们进行测试。n在测试一个服务与测试一个过程之在测试一个服务与测试一个过程之间最明显的不同就是间最明显的不同就是服务可能会改服务可能会改变它所在的实例的状态变它所在的实例的状态。。n在测试一个服务时,该服务发送给在测试一个服务时,该服务发送给其它实例的消息都将被隔离,由桩其它实例的消息都将被隔离,由桩((stub)stub)代替其它实例返回合适的值。代替其它实例返回合适的值。 处于组装的服务处于组装的服务n基于程序的测试需要考虑基于程序的测试需要考虑u在同一个类内部一个服务调用另在同一个类内部一个服务调用另一个服务时的相互作用一个服务时的相互作用((类内消息类内消息))u从一个类到另一个类的消息从一个类到另一个类的消息((类间类间消息消息))。。n加入加入检查相互作用的测试用例检查相互作用的测试用例到测到测试用例组中,确定这种交互影响是试用例组中,确定这种交互影响是否处理得当。否处理得当。n类内测试需要类内测试需要执行类的所有主要的执行类的所有主要的状态状态。。 组装测试组装测试n类组装类组装u测试一个新类时,测试一个新类时,需要先测试在需要先测试在定义中所涉及的类定义中所涉及的类,,再考虑这些再考虑这些类的组装类的组装。。u关系关系““isaisa”“”“ispartofispartof””和和““referstorefersto””建立了测试几个类时的建立了测试几个类时的次序之间次序之间的关联的关联。一旦。一旦基本类测试完成基本类测试完成,,使用这些类的那些类可以接着测使用这些类的那些类可以接着测试试,然后按层次继续测试下去。,然后按层次继续测试下去。 n总体组装总体组装u把把所有组成完整软件的各个部分所有组成完整软件的各个部分集合在一起集合在一起。。u在在C++C++的的主过程中主过程中,,仅建立几个仅建立几个高层的和全局的类的实例高层的和全局的类的实例,这些,这些实例之间必须经常互相通信。实例之间必须经常互相通信。u这种测试所选择的测试用例应当这种测试所选择的测试用例应当瞄准待开发软件的目标瞄准待开发软件的目标,并且应,并且应当提供数据给测试者,以确定软当提供数据给测试者,以确定软件开发是否与它的目标相吻合。件开发是否与它的目标相吻合。 测试一个派生类测试一个派生类n对对基类和继承关系基类和继承关系进行完全测试。进行完全测试。n从基类的测试用例组复用已存在的从基类的测试用例组复用已存在的测试用例到派生类的测试用例组中测试用例到派生类的测试用例组中。。这种技术基于类的带有祖先的层次这种技术基于类的带有祖先的层次关系,渐增地开发类的测试用例关系,渐增地开发类的测试用例组,因此叫做分层增殖式测试。组,因此叫做分层增殖式测试。n我们我们首先安排一个针对单独的类的首先安排一个针对单独的类的测试计划测试计划,,然后考虑分层增殖式测然后考虑分层增殖式测试计划和算法试计划和算法。。 n软件质量概念软件质量概念n软件质量保证软件质量保证n软件可靠性软件可靠性n软件配置管理软件配置管理 软件质量概念软件质量概念n软件质量的定义软件质量的定义n软件质量特性软件质量特性n软件质量模型软件质量模型n软件质量的度量和评价软件质量的度量和评价 软件质量的定义软件质量的定义nANSI/IEEEStd729-1983ANSI/IEEEStd729-1983定义软件定义软件质量为质量为““与软件产品满足规定的和与软件产品满足规定的和隐含的需求的能力有关的特征或特隐含的需求的能力有关的特征或特性的全体性的全体””。。nM.J.FisherM.J.Fisher定义软件质量为定义软件质量为““所有所有描述计算机软件优秀程度的特性的描述计算机软件优秀程度的特性的组合组合””。。 质量特性及其组合,是软件开发质量特性及其组合,是软件开发与维护中的重要考虑因素与维护中的重要考虑因素n为满足软件的各项精确定义的功能、为满足软件的各项精确定义的功能、性能需求,符合文档化的开发标性能需求,符合文档化的开发标准,需要相应地给出或设计一些质准,需要相应地给出或设计一些质量特性及其组合。量特性及其组合。n如果这些质量特性及其组合都能在如果这些质量特性及其组合都能在产品中得到满足,则这个软件产品产品中得到满足,则这个软件产品质量就是高的。质量就是高的。 n软件需求是度量软件质量的基础软件需求是度量软件质量的基础。。不符合需求的软件就不具备质量。不符合需求的软件就不具备质量。n标准定义了一组开发准则,用来指标准定义了一组开发准则,用来指导软件人员用工程化的方法来开发导软件人员用工程化的方法来开发软件软件。如果不遵守这些开发准则,。如果不遵守这些开发准则,软件质量就得不到保证。软件质量就得不到保证。n软件质量是各种特性的复杂组合。软件质量是各种特性的复杂组合。它随着应用的不同而不同,随着用它随着应用的不同而不同,随着用户提出的质量要求不同而不同。户提出的质量要求不同而不同。 软件质量特性软件质量特性n软件质量特性,反映了软件的本质软件质量特性,反映了软件的本质。。讨论一个软件的质量,问题最终要讨论一个软件的质量,问题最终要归结到定义软件的质量特性。归结到定义软件的质量特性。n定义一个软件的质量,就等价于为定义一个软件的质量,就等价于为该软件定义一系列质量特性。该软件定义一系列质量特性。n人们通常把影响软件质量的特性用人们通常把影响软件质量的特性用软件质量模型来描述软件质量模型来描述。。 软件质量模型软件质量模型n软件质量特性定义成软件质量特性定义成分层模型分层模型n最基本的叫做最基本的叫做基本质量特性基本质量特性,它可,它可以由一些子质量特性定义和度量。以由一些子质量特性定义和度量。n二次特性二次特性在必要时又可由它的一些在必要时又可由它的一些子质量特性定义和度量。子质量特性定义和度量。n19761976年年BoehmBoehm质量模型质量模型n19791979年年McCallMcCall质量模型质量模型n19851985年年ISOISO质量模型质量模型 ISOISO的软件质量评价模型的软件质量评价模型n按照按照ISO/TC97/SC7/WG3/1985-1-ISO/TC97/SC7/WG3/1985-1-30/N38230/N382,,软件质量度量模型由三软件质量度量模型由三层组成层组成n软件质量需求评价准则软件质量需求评价准则((SQRCSQRC))n软件质量设计评价准则软件质量设计评价准则((SQDCSQDC))n软件质量度量评价准则软件质量度量评价准则((SQMCSQMC))n高层和中层建立国际标准,低层可高层和中层建立国际标准,低层可由各使用单位视实际情况制定由各使用单位视实际情况制定 Boehm质量模型质量模型 19911991年年ISOISO质量特性国际标准质量特性国际标准((ISO/IEC9126ISO/IEC9126))n质量特性:质量特性:功能性功能性、、可靠性可靠性、、可维可维护性护性、、效率效率、、可使用性可使用性、、可移植性可移植性n推荐推荐2121个子特性:适合性个子特性:适合性准确性准确性互用性互用性依从性依从性安全性安全性成熟性成熟性容错性容错性可恢复性可恢复性可理解性可理解性易学习性易学习性操作性操作性时间特性时间特性资源特性资源特性可分析性可分析性稳定性稳定性可可变更性变更性可测试性可测试性可安装性可安装性可替可替换性换性适应性适应性一致性一致性 软件质量的度量和评价软件质量的度量和评价n软件质量特性度量有两类:软件质量特性度量有两类:预测型预测型和和验收型验收型。。n预测度量预测度量是利用定量或定性的方是利用定量或定性的方法,估算软件质量的评价值,以得法,估算软件质量的评价值,以得到软件质量的比较精确的估算值。到软件质量的比较精确的估算值。n验收度量验收度量是在软件开发各阶段的检是在软件开发各阶段的检查点,对软件的要求质量进行确认查点,对软件的要求质量进行确认性检查的具体评价值,它是对开发性检查的具体评价值,它是对开发过程中的预测进行评价。过程中的预测进行评价。 n预测度量预测度量有两种。有两种。n第一种叫做第一种叫做尺度度量尺度度量,这是一种,这是一种定定量度量量度量。它适用于一些能够直接度。它适用于一些能够直接度量的特性,量的特性,例如,出错率定义为:例如,出错率定义为:错误数/错误数/KLOCKLOC//单位时间单位时间。。n第二种叫做第二种叫做二元度量二元度量,这是一种,这是一种定定性度量性度量。它适用于一些只能间接度。它适用于一些只能间接度量的特性,量的特性,例如,可使用性、灵活例如,可使用性、灵活性等等性等等。。 尺度度量检查表尺度度量检查表 二元度量检查表二元度量检查表 n通过对照检查项目,确定一种质量通过对照检查项目,确定一种质量特性的有无。特性的有无。n例如,在设计和编码阶段的复杂性例如,在设计和编码阶段的复杂性度量,利用度量,利用尺度度量方法尺度度量方法来做。对来做。对模块复杂性的度量采用模块复杂性的度量采用McCabeMcCabe环环路度量。路度量。n对于对于二元度量二元度量,可针对检查表中每,可针对检查表中每一项都应给以记分,指定信息存在一项都应给以记分,指定信息存在时记时记““11””,否则记,否则记““00””。表中所有各。表中所有各项的分数相加,即得度量结果。项的分数相加,即得度量结果。 软件的质量保证软件的质量保证n质量保证的概念质量保证的概念n软件质量保证的主要任务软件质量保证的主要任务n质量保证与检验质量保证与检验n软件质量保证体系软件质量保证体系n质量保证的实施质量保证的实施n软件的质量设计软件的质量设计 质量保证的概念质量保证的概念n什么是质量保证,它是什么是质量保证,它是为保证产品为保证产品和服务充分满足消费者要求的质量和服务充分满足消费者要求的质量而进行的有计划、有组织的活动而进行的有计划、有组织的活动。。n质量保证是质量保证是面向消费者的活动面向消费者的活动,是,是为了使产品实现用户要求的功能,为了使产品实现用户要求的功能,站在用户立场上来掌握产品质量的。站在用户立场上来掌握产品质量的。n软件的质量保证就是向用户及社会软件的质量保证就是向用户及社会提供满意的高质量的产品。提供满意的高质量的产品。 n软件的质量保证活动也和一般的质软件的质量保证活动也和一般的质量保证活动一样,是量保证活动一样,是确保软件产品确保软件产品从诞生到消亡为止的所有阶段的质从诞生到消亡为止的所有阶段的质量的活动量的活动。即。即为了确定、达到和维为了确定、达到和维护需要的软件质量而进行的所有有护需要的软件质量而进行的所有有计划、有系统的管理活动计划、有系统的管理活动。。 软件质量保证的主要任务软件质量保证的主要任务n为了提高软件的质量和软件的生为了提高软件的质量和软件的生产率,软件质量保证的主要任务产率,软件质量保证的主要任务大致可归结为大致可归结为88点。点。 1.1.用户要求定义用户要求定义n熟练掌握熟练掌握正确定义用户要求的技正确定义用户要求的技术术n熟练使用和指导他人使用熟练使用和指导他人使用定义软定义软件需求的支持工具件需求的支持工具n重视重视领导全体开发人员收集和积领导全体开发人员收集和积累有关用户业务领域的各种业务累有关用户业务领域的各种业务的资料和技术的资料和技术技能技能。 2.2.力争不重复劳动力争不重复劳动n考虑哪些考虑哪些既有软件可以复用既有软件可以复用n在开发过程中,随时在开发过程中,随时考虑所生产考虑所生产软件的复用性软件的复用性。。 3.3.掌握开发新软件的方法掌握开发新软件的方法n在开发新软件的过程中大力使用和在开发新软件的过程中大力使用和推行软件工程学中所介绍的开发方推行软件工程学中所介绍的开发方法和工具。法和工具。u使用先进的开发技术:如使用先进的开发技术:如结构化结构化技术技术、、面向对象技术面向对象技术u使用数据库技术或网络化技术使用数据库技术或网络化技术u应用开发工具或环境应用开发工具或环境u改进开发过程改进开发过程 4.4.组织外部力量协作的方法组织外部力量协作的方法n一个软件自始至终由同一个软件开一个软件自始至终由同一个软件开发单位来开发,也许是最理想的。发单位来开发,也许是最理想的。但在现实中常常难以做到。但在现实中常常难以做到。n改善对外部协作部门的开发管理。改善对外部协作部门的开发管理。必须必须明确规定明确规定进度管理进度管理、、质量管理质量管理、、交接检查交接检查、、维护体制维护体制等各方面的要等各方面的要求求,,建立建立跟踪检查跟踪检查的体制的体制。。 5.5.排除无效劳动排除无效劳动n最大的无效劳动就是最大的无效劳动就是因需求规格说因需求规格说明有误明有误、、设计有误设计有误而造成的而造成的返工返工。。定量记录返工工作量定量记录返工工作量,,收集和分析收集和分析返工劳动花费数据返工劳动花费数据n较大的无效劳动是较大的无效劳动是重复劳动重复劳动,即相,即相似的软件在几个地方同时开发似的软件在几个地方同时开发n建立互相交流、信息往来通畅、具建立互相交流、信息往来通畅、具横向交流特征的信息流通网横向交流特征的信息流通网 6.6.发挥每个开发者的能力发挥每个开发者的能力n软件生产是人的智能生产活动,它软件生产是人的智能生产活动,它依赖于人的能力依赖于人的能力和和开发组织团队的开发组织团队的能力能力。。n开发者开发者必须有必须有学习各专业业务知识学习各专业业务知识、、生产技术生产技术和和管理技术管理技术的能动性。的能动性。n管理者管理者或或产品服务者产品服务者要要制定技术培制定技术培训计划训计划、、技术水平标准技术水平标准,以及,以及适用适用于将来需要的中长期技术培训计划于将来需要的中长期技术培训计划。。 7.7.提高软件开发的工程能力提高软件开发的工程能力n要想生产出高质量的软件产品必要想生产出高质量的软件产品必须有高水平的须有高水平的软件工程能力软件工程能力。。n在软件开发环境或软件工具箱的在软件开发环境或软件工具箱的支持下支持下,,运用先进的开发技术运用先进的开发技术、、工具和管理方法开发软件的能力工具和管理方法开发软件的能力。。 8.8.提高计划和管理质量能力提高计划和管理质量能力n项目开发初期项目开发初期计划阶段的项目计划计划阶段的项目计划评价评价n计划执行过程中及计划完成报告的计划执行过程中及计划完成报告的评价评价n将评价、评审工作在工程实施之前将评价、评审工作在工程实施之前就列入整个开发工程的工程计划中就列入整个开发工程的工程计划中n提高软件开发项目管理的精确度提高软件开发项目管理的精确度 质量保证与检验质量保证与检验n其一是其一是切实搞好开发阶段的管理切实搞好开发阶段的管理,,检查各开发阶段的质量保证活动开检查各开发阶段的质量保证活动开展得如何;展得如何;n其二是其二是预先防止软件差错给用户造预先防止软件差错给用户造成损失成损失。。n为了为了确保每个开发过程的质量确保每个开发过程的质量,防,防止把软件差错传递到下一个过程,止把软件差错传递到下一个过程,必须进行质量检验。必须进行质量检验。 质量检验的原则质量检验的原则n用户要求的是产品所具有的功能,用户要求的是产品所具有的功能,这是这是““真质量真质量””。。靠质量检验,一般靠质量检验,一般检查的是检查的是““真质量真质量””的质量特性的质量特性。。n能靠质量检验的质量特性,能靠质量检验的质量特性,即使全即使全数检验,也只是代表产品的部分质数检验,也只是代表产品的部分质量特性量特性。。n必须必须在各开发阶段对影响产品质量在各开发阶段对影响产品质量的因素进行切实的管理的因素进行切实的管理,认真检查,认真检查实施落实情况。实施落实情况。 n当开发阶段出现异常时,当开发阶段出现异常时,要从质量要从质量特性方面进行检验,看是否会给后特性方面进行检验,看是否会给后续阶段带来影响续阶段带来影响。。n虽然各开发阶段进展稳定,但由于虽然各开发阶段进展稳定,但由于工程能力不足,软件产品不能满足工程能力不足,软件产品不能满足用户要求的质量。这时用户要求的质量。这时可通过检验可通过检验对该产品做出评价,判断是否能向对该产品做出评价,判断是否能向用户提供该产品用户提供该产品。。n要以一定的标准检验产品,根据产要以一定的标准检验产品,根据产品的质量特性,检查各个过程的管品的质量特性,检查各个过程的管理状态。理状态。 软件质量保证体系软件质量保证体系n软件的质量保证活动,是涉及各个软件的质量保证活动,是涉及各个部门的部门间的活动。部门的部门间的活动。n例如,如果在用户处发现了软件故例如,如果在用户处发现了软件故障,障,产品服务部门产品服务部门就应听取用户的就应听取用户的意见,再由意见,再由检查部门检查部门调查该产品的调查该产品的检验结果,进而还要调查软件实现检验结果,进而还要调查软件实现过程的状况,并根据情况检查设计过程的状况,并根据情况检查设计是否有误,不当之处加以改进,防是否有误,不当之处加以改进,防止再次发生问题。止再次发生问题。 n为了顺利开展以上活动,为了顺利开展以上活动,事先明确事先明确部门间的质量保证业务部门间的质量保证业务,,确立部门确立部门间的联合与协作的机构间的联合与协作的机构十分重要,十分重要,这个机构就是质量保证体系这个机构就是质量保证体系。。u必须必须明确反馈途径明确反馈途径。。u必须必须明确各部门的职责明确各部门的职责。。u必须必须确定保证系统运行的方法确定保证系统运行的方法、、工具工具、、有关文档资料有关文档资料,以及,以及系统系统管理的规程和标准管理的规程和标准。。 u必须必须明确决定是否可向下一阶段明确决定是否可向下一阶段进展的评价项目和评价准则进展的评价项目和评价准则。。u必须必须不断地总结系统管理的经验不断地总结系统管理的经验教训教训,,能够修改系统能够修改系统。。u制定质量保证计划制定质量保证计划,在计划中,在计划中F确定确定质量目标质量目标F确定确定在每个阶段为达到总目标在每个阶段为达到总目标所应达到的要求所应达到的要求F确定确定进度安排进度安排F确定确定所需人力、资源和成本等所需人力、资源和成本等。。 软件质量保证规程和技术准则软件质量保证规程和技术准则n规定规定在项目的哪个阶段进行评审及在项目的哪个阶段进行评审及如何评审如何评审;;n规定规定在项目的哪个阶段应当产生哪在项目的哪个阶段应当产生哪些报告和计划些报告和计划;;n规定规定产品各方面测试应达到的水平产品各方面测试应达到的水平。。n在在每次评审和测试中发现的错误如每次评审和测试中发现的错误如何修正何修正;; n描述描述希望得到的质量度量希望得到的质量度量;;n说明说明各种软件人员的职责各种软件人员的职责,规定为,规定为了达到质量目标他们必须进行哪些了达到质量目标他们必须进行哪些活动。活动。n建立建立u在各阶段中执行质量评价的在各阶段中执行质量评价的质量质量评价和质量检查系统评价和质量检查系统u有效运用质量信息的有效运用质量信息的质量信息系质量信息系统统,并使其运行。,并使其运行。 质量保证的实施质量保证的实施n软件质量保证的实施需要从纵向软件质量保证的实施需要从纵向和横向两个方面展开。和横向两个方面展开。u要求所有与软件生存期有关的人要求所有与软件生存期有关的人员都要参加员都要参加u要求对产品形成的全过程进行质要求对产品形成的全过程进行质量管理量管理n这要求整个软件部门齐心协力,这要求整个软件部门齐心协力,不断完善软件的开发环境。此外不断完善软件的开发环境。此外还需要与用户共同合作。还需要与用户共同合作。 质量目标与度量质量目标与度量n为了开发高质量的软件,需要为了开发高质量的软件,需要明确明确软件的功能软件的功能,,明确软件应达到什么明确软件应达到什么样的质量标准样的质量标准,即,即质量目标质量目标。。n为了达到这个目标,为了达到这个目标,在开发过程中在开发过程中的各个阶段进行检查和评价的各个阶段进行检查和评价。。n在做质量评价时,在做质量评价时,需要有对质量进需要有对质量进行度量的准则和方法行度量的准则和方法。。n需要有在软件生存期中如何使用这需要有在软件生存期中如何使用这些准则和方法的些准则和方法的质量保证步骤质量保证步骤,以,以及提高该项作业效率的及提高该项作业效率的工具工具 软件质量度量和保证的条件软件质量度量和保证的条件n适应性:适应性:适应各种用户、软件类型适应各种用户、软件类型n易学性:易学性:不需要特殊技术,易掌握不需要特殊技术,易掌握n可靠性:可靠性:同个软件的评价结果一致同个软件的评价结果一致n针对性:针对性:设计阶段就确立质量目设计阶段就确立质量目标,在各个阶段实施落实。标,在各个阶段实施落实。n客观性:客观性:n经济性:经济性: 质量保证活动的实施步骤:质量保证活动的实施步骤:nTargetTarget::以用户要求和开发方针为以用户要求和开发方针为依据,对质量需求准则、质量设计依据,对质量需求准则、质量设计准则的各质量特性设定质量目标。准则的各质量特性设定质量目标。nPlanPlan::设定适合于被开发软件的评设定适合于被开发软件的评测检查项目测检查项目((质量评价准则质量评价准则))。研讨。研讨实现质量目标的方法或手段。实现质量目标的方法或手段。nDoDo::制作高质量的规格说明和程序。制作高质量的规格说明和程序。在接受质量检查前先做自我检查在接受质量检查前先做自我检查。 nCheckCheck::以以PlanPlan阶段设定的质量评阶段设定的质量评价准则进行评价。价准则进行评价。计算结果用质量计算结果用质量图的形式表示图的形式表示出来。比较评价结果出来。比较评价结果的质量得分和质量目标,看其是否的质量得分和质量目标,看其是否合格。合格。nActionAction::对对评价发现的问题进行改评价发现的问题进行改进活动进活动,如果实现并达到了质量目,如果实现并达到了质量目标就转入下一个工程阶段。标就转入下一个工程阶段。这样重这样重复复““PlanPlan””到到““ActionAction””的过程的过程,直到,直到整个开发项目完成。整个开发项目完成。 软件的质量设计软件的质量设计n质量特性转换为软件的内部结构质量特性转换为软件的内部结构n在在软件定义阶段软件定义阶段,,必须定义对软件必须定义对软件的质量需求的质量需求。即确定软件的质量特。即确定软件的质量特性及必需的评价准则,并定量地设性及必需的评价准则,并定量地设定其必须达到的质量水平定其必须达到的质量水平n在以后软件开发的每一阶段结束在以后软件开发的每一阶段结束时,要算出评价的分数时,要算出评价的分数,然后与,然后与目目标值加以对照标值加以对照,以评估在这一阶段,以评估在这一阶段开发的软件质量是否达到要求。开发的软件质量是否达到要求。 n为了实现规定的质量特性,就需要为了实现规定的质量特性,就需要把这些把这些质量特性转换为软件的内部质量特性转换为软件的内部结构的特性结构的特性。。n例如,软件质量需求中的例如,软件质量需求中的““性能性能””,,可以转换成软件内部结构中的构成可以转换成软件内部结构中的构成元素,即元素,即每一个程序模块和物理数每一个程序模块和物理数据各自应具有的性能特性据各自应具有的性能特性。。这些性这些性能特性的累积就形成外部规格中的能特性的累积就形成外部规格中的性能特性性能特性。。 软件的结构特性与评价标准软件的结构特性与评价标准n结构特性结构特性逻辑数据层次逻辑数据层次n评价标准评价标准u全部数据元素定义完毕全部数据元素定义完毕u所有层次的操作符定义完毕所有层次的操作符定义完毕n结构特性结构特性功能层次功能层次n评价标准评价标准u全部功能元素定义完毕全部功能元素定义完毕u所有层次的操作符定义完毕所有层次的操作符定义完毕 n结构特性结构特性逻辑数据与功能的对应逻辑数据与功能的对应关系关系n评价准则评价准则u所有数据都与功能对应所有数据都与功能对应u所有功能元素都与数据对应所有功能元素都与数据对应u逻辑数据与功能的相互关系个数逻辑数据与功能的相互关系个数(局部)(局部) n结构特性结构特性物理数据层次物理数据层次n评价准则评价准则u全部数据元素定义完毕全部数据元素定义完毕u物理数据之间的所有指针定义完物理数据之间的所有指针定义完毕毕u上述指针都具有层次性上述指针都具有层次性 n结构特性结构特性模块层次模块层次n评价准则评价准则u所有模块定义完毕所有模块定义完毕u模块之间所有控制关系定义完毕模块之间所有控制关系定义完毕u上述关系都是标准过程调用形式上述关系都是标准过程调用形式u各层次上的模块大小适当各层次上的模块大小适当 n结构特性结构特性物理数据与模块的对应关系物理数据与模块的对应关系n评价准则评价准则u所有物理数据都与模块对应所有物理数据都与模块对应u所有模块都与物理数据对应所有模块都与物理数据对应u对应于一个物理数据的模块数对应于一个物理数据的模块数(以一对一为好)(以一对一为好) n结构特性结构特性逻辑数据与物理数据的对应关系逻辑数据与物理数据的对应关系n评价准则评价准则u所有逻辑数据都与物理数据对应所有逻辑数据都与物理数据对应u对应于一个物理数据的逻辑数据对应于一个物理数据的逻辑数据数(以一对一为好)数(以一对一为好) n结构特性结构特性功能与模块的对应关系功能与模块的对应关系n评价准则评价准则u所有功能都与模块对应所有功能都与模块对应u对应模块的功能个数(以一对对应模块的功能个数(以一对一为好)一为好) 软件可靠性软件可靠性n软件生存期与软件寿命的关系软件生存期与软件寿命的关系n在软件工程中常用的定义在软件工程中常用的定义n软件可靠性定义软件可靠性定义n测试中的可靠性分析测试中的可靠性分析n测试精确度和测试覆盖度的评价测试精确度和测试覆盖度的评价 软件生存期与软件寿命的关系软件生存期与软件寿命的关系n一切有生命的东西都有一个一切有生命的东西都有一个““寿命寿命””n这个概念也可以延伸到对非生命产这个概念也可以延伸到对非生命产品的质量评价上来。例如一个电子品的质量评价上来。例如一个电子产品的寿命就是指该产品从出厂直产品的寿命就是指该产品从出厂直到丧失使用价值的持续时间。到丧失使用价值的持续时间。n从软件工程的角度来说,从软件工程的角度来说,软件产品软件产品的寿命是指软件的整个生存期的寿命是指软件的整个生存期。。 n从软件用户的角度来看,更关心的从软件用户的角度来看,更关心的是是软件在交付使用后的情况如何软件在交付使用后的情况如何。。n希望用一个指标希望用一个指标平均失效间隔时间平均失效间隔时间MTBFMTBF((MeanTimeMeanTimeBetweenFailure)BetweenFailure)来表明,在规定的要求和条件下,来表明,在规定的要求和条件下,能在多大的程度上依赖这个软件来能在多大的程度上依赖这个软件来完成任务。完成任务。n我们把我们把在使用期间软件能够正常工在使用期间软件能够正常工作的持续时间叫做软件的使用寿命作的持续时间叫做软件的使用寿命。 n软件的软件的使用寿命与输入环境有关使用寿命与输入环境有关。。n例如,有一个存在缺陷的编译程例如,有一个存在缺陷的编译程序,当用于学生做简单练习时,序,当用于学生做简单练习时,MTBFMTBF可能很长。而做一个大的课可能很长。而做一个大的课题时,由于程序连续出错,题时,由于程序连续出错,MTBFMTBF就会变得很短。就会变得很短。nMTBFMTBF可以看做是对软件可靠性做可以看做是对软件可靠性做估计的样本数据,但不能看做是依估计的样本数据,但不能看做是依据。据。 n““错误错误””这一术语。在没有特别加以这一术语。在没有特别加以说明的情况下,这是一个泛用的、说明的情况下,这是一个泛用的、模糊的概念。模糊的概念。n它指的可能是它指的可能是bugbug((设计中的差错设计中的差错))、、faultfault((故障故障))、、errorerror((错误错误))、、failurefailure((失效失效))、、crashcrash((重大事故重大事故))、、problemproblem((疑问疑问))等。等。n在汉译中,这些术语的使用更加混在汉译中,这些术语的使用更加混乱。乱。 在软件工程中常用的定义在软件工程中常用的定义n故障故障((fault)fault)::软件的内在缺陷软件的内在缺陷。这些。这些缺陷可在生存期各个阶段被引入。缺陷可在生存期各个阶段被引入。n错误错误((error)error)::故障在一定的环境条故障在一定的环境条件下的暴露件下的暴露,导致系统在运行中出,导致系统在运行中出现了不正常、不正确、不按规范执现了不正常、不正确、不按规范执行的状态,称为软件出错。行的状态,称为软件出错。n失效失效((failure)failure)::对错误不做任何修正对错误不做任何修正和恢复,和恢复,导致系统的输出不满足用导致系统的输出不满足用户要求户要求,称为软件的一次失效。,称为软件的一次失效。 n以上定义的故障、错误和失效,分以上定义的故障、错误和失效,分别代表了别代表了广义的广义的““错误错误””在不同的条在不同的条件下件下所对应的术语。所对应的术语。n它们可以理解为:设计者的失误它们可以理解为:设计者的失误──导致系统中留有错误的设计导致系统中留有错误的设计────缺缺陷或陷或““故障故障””((faultfault)),,这些这些故障故障导致导致系统的错误执行系统的错误执行────错误错误((errorerror)),,由于由于错误错误导致系统的错误输出导致系统的错误输出────失效失效((failurefailure))。。 n故障是物理地或静态地存在的故障是物理地或静态地存在的n失误、错误和失效都是系统的一种失误、错误和失效都是系统的一种动态的转瞬即逝的现象动态的转瞬即逝的现象n软件发生失效标志着软件一次使用软件发生失效标志着软件一次使用寿命的结束寿命的结束n发生过失效的软件通常仍然是可用发生过失效的软件通常仍然是可用的。只有当软件频繁失效,或者公的。只有当软件频繁失效,或者公认已经认已经““过时过时””了的时侯,软件才被了的时侯,软件才被废弃,废弃,意味着当前这一版本软件使意味着当前这一版本软件使用寿命的终结。用寿命的终结。 软件故障产生原因软件故障产生原因n支持软件工作的基本条件支持软件工作的基本条件((除硬件除硬件外的操作系统、数据库管理系统、外的操作系统、数据库管理系统、编译程序、微代码等编译程序、微代码等))的缺陷的缺陷n软件设计不当软件设计不当n加入了允许范围之外的输入加入了允许范围之外的输入 软件可靠性的定义软件可靠性的定义n软件可靠性是软件在软件可靠性是软件在给定的时间间给定的时间间隔隔及及给定的环境条件给定的环境条件下,下,按设计要按设计要求求,,成功地运行程序成功地运行程序的概率。的概率。n环境条件环境条件──指的是指的是软件的使用环境软件的使用环境。。无论是什么软件,如果不对它的使无论是什么软件,如果不对它的使用环境加以限制,都是会失效的。用环境加以限制,都是会失效的。这种失效的数据,不能用来度量软这种失效的数据,不能用来度量软件的可靠性。件的可靠性。 n规定的时间规定的时间──在定义中,一般采用在定义中,一般采用““运行时间运行时间””tt作为时间的尺度。因作为时间的尺度。因n具体要处理的问题是多种多样的具体要处理的问题是多种多样的n其对应的输入环境是随机其对应的输入环境是随机n程序中相应程序路径的选取也是随程序中相应程序路径的选取也是随机的机的n软件的失效也是随机的软件的失效也是随机的n应当把运行时间应当把运行时间tt当作随机变量来考当作随机变量来考虑。虑。 n规定的功能规定的功能──在考虑软件可靠性在考虑软件可靠性时,首先应当明确时,首先应当明确软件的功能是什软件的功能是什么么,,哪些功能是主要的哪些功能是主要的,,哪些功能哪些功能是次要的是次要的。一般从软件需求分析说。一般从软件需求分析说明书和设计说明书中可以了解这些明书和设计说明书中可以了解这些情况。情况。u由于功能不同,失效带来的损失由于功能不同,失效带来的损失就不一样。因此,还要明确就不一样。因此,还要明确哪些失哪些失效是致命的效是致命的,,哪些失效是非致命哪些失效是非致命的的,,哪些又是容易修复的哪些又是容易修复的。此外,。此外,还要明确,还要明确,怎样才算是完成了一个怎样才算是完成了一个规定的功能规定的功能。。 n成功地运行程序成功地运行程序──是指不仅程序能是指不仅程序能正确地运行,满足用户对它的功能正确地运行,满足用户对它的功能要求,要求,而且当程序一旦受到意外而且当程序一旦受到意外的伤害,或系统故障时,能尽快恢的伤害,或系统故障时,能尽快恢复,仍能正常地运行。复,仍能正常地运行。 测试中的可靠性分析测试中的可靠性分析n在软件开发的过程中,在软件开发的过程中,利用测试的利用测试的统计数据,估算软件的可靠性统计数据,估算软件的可靠性,以,以控制软件的质量是至关重要的。控制软件的质量是至关重要的。n推测错误的产生频度,即推测错误推测错误的产生频度,即推测错误产生的时间间隔产生的时间间隔n推测残留在程序中的错误数推测残留在程序中的错误数n评价测试的精确度和覆盖率评价测试的精确度和覆盖率 推测错误的产生频度推测错误的产生频度n估算错误产生频度的一种方法是估算错误产生频度的一种方法是估算平均失效等待时间估算平均失效等待时间MTTFMTTF((MeanTimeToFailureMeanTimeToFailure))nMTTFMTTF估算公式估算公式((ShoomanShooman模型模型))ITMTTF=KEEt(())TC KtEt()E(1e)T故障累积指数曲线模型故障累积指数曲线模型 估算软件中故障总数估算软件中故障总数EETT的方法的方法利用利用ShoomanShooman模型模型估算程序中原估算程序中原来错误总量来错误总量EETT——瞬间估算瞬间估算Et()1EEt()CT1C1KtMTTFII11TTEt()1EEt()CT2C2KtMTTFII22TT 解此方程组解此方程组ttE21EtEt()()TCC12tEttEt()()21CC12IEt()KTC1tEEt(())11TC 利用最小二乘法进行程序原有错利用最小二乘法进行程序原有错误数误数EETT及及KK的估算的估算n由失效率由失效率EEt()TcKIITTEt()En整理得整理得cTIIKTTn若对程序进行若干次不同的功能测若对程序进行若干次不同的功能测试,可得到一系列实验数据试,可得到一系列实验数据 EEcc((ttii),),((ttii),),ii=1,2,=1,2,……,,nnn令令1ETa,,bKITEt()Ci,()tiiiITn有有abi,,12,,nii n用最小二乘法解此方程组,可解出用最小二乘法解此方程组,可解出aa、、bb的估计值的估计值n最后得到最后得到KK,,EETT的估计值的估计值1K,EIbTTa利用植入故障法估算程序中原有故利用植入故障法估算程序中原有故障总数障总数EETT──捕获-再捕获抽样法捕获-再捕获抽样法 n设设NNss是是在测试前人为地向程序中植在测试前人为地向程序中植入的故障数入的故障数,,nnss是是经过一段时间测经过一段时间测试后发现的播种故障数目试后发现的播种故障数目,,nn是是在测在测试中又发现的程序原有故障数试中又发现的程序原有故障数。设。设测试用例发现植入故障和原有故障测试用例发现植入故障和原有故障的能力相同的能力相同,则,则程序中原有故障总程序中原有故障总数数NN(=(=EETT))估算值为估算值为NsNnns HymanHyman分别测试法分别测试法n由两个测试员同时互相独立地测试由两个测试员同时互相独立地测试同一程序的两个副本,用同一程序的两个副本,用tt表示表示测测试时间试时间,记,记tt==00时,时,程序中原有故程序中原有故障总数是障总数是BB00;;tt==tt11时,时,测试员甲测试员甲发现的故障总数是发现的故障总数是BB11;;测试员乙发测试员乙发现的故障总数是现的故障总数是BB22;;其中两人发现其中两人发现的的相同故障数目是相同故障数目是bcbc;;两人发现的两人发现的不同故障数目是不同故障数目是bibi。。 n在大程序测试时,头几个月两个测在大程序测试时,头几个月两个测试员测试的结果应当比较接近,试员测试的结果应当比较接近,bibi不是很大不是很大。这时有。这时有BB12B0bcn如果如果bibi比较显著比较显著,,应当每隔一段时应当每隔一段时间间,,由两个测试员再进行分别测由两个测试员再进行分别测试试,分析测试结果,估算,分析测试结果,估算BB00。。如果如果bibi减小,或几次估算值的结果相差减小,或几次估算值的结果相差不多,则不多,则BB00作为原有错误总数的估作为原有错误总数的估算值。算值。 测试精确度和测试覆盖度的评价测试精确度和测试覆盖度的评价n在软件测试过程中累积发现的故障在软件测试过程中累积发现的故障数,数,可用带有平均值函数可用带有平均值函数mm((tt))的非的非齐次泊松过程齐次泊松过程((NHPPNHPP))来描述:来描述:btmt()N1en其中,其中,NN是在测试中可能发现的故是在测试中可能发现的故障总数,障总数,bb是故障发现率。是故障发现率。n当当NN一定时,一定时,bb越大,在短期内发现越大,在短期内发现的故障越多。的故障越多。 nNN可以认为是可以认为是当测试时间无限延长当测试时间无限延长时时估计可能发现的故障总数估计可能发现的故障总数。由于。由于u测试的不完全,在某些很难发现的测试的不完全,在某些很难发现的故障未发现前就可能结束测试故障未发现前就可能结束测试u若程序中潜在的故障较少,则参数若程序中潜在的故障较少,则参数NN的估计误差较大的估计误差较大n因此,只用测试中累积发现的故障因此,只用测试中累积发现的故障数来评价测试是不够的。需要从测数来评价测试是不够的。需要从测试的试的量的方面量的方面和和质的方面质的方面,全面地,全面地评价测试。评价测试。 测试结束时软件产品质量水准测试结束时软件产品质量水准nSPQLSPQL((SoftwareProductQualitySoftwareProductQualityLevelLevel))用如下公式度量:用如下公式度量:SPQLSPQL==AcAc××CvCvn其中其中,,AcAc((TestAccuracyTestAccuracy))是是测试测试的精确度的精确度,它反映了测试的质量;,它反映了测试的质量;CvCv((TestTestCoveragyCoveragy))是是测试的覆盖测试的覆盖度度,它反映了测试的数量。,它反映了测试的数量。 n测试质量的度量可以靠测试质量的度量可以靠测试的故障测试的故障捕捉率和遗漏率捕捉率和遗漏率来衡量。来衡量。n测试数量的度量指标是测试数量的度量指标是执行的测试执行的测试用例数用例数、、确认的程序路径数确认的程序路径数等等;等等; 测试精确度测试精确度AcAcn表明在测试的过程中以多大的把握表明在测试的过程中以多大的把握捕捉了软件中潜在的故障。捕捉了软件中潜在的故障。n测定测定AcAc,,需要预先植入播种故障,需要预先植入播种故障,然后通过测试,根据播种故障的捕然后通过测试,根据播种故障的捕捉率来推测原有故障的捕获率。捉率来推测原有故障的捕获率。 n用用nnss表示表示经过相当长时间测试可能经过相当长时间测试可能发现的播种故障数发现的播种故障数,用,用NNss表示测试表示测试对象软件内对象软件内预先埋设的播种故障总预先埋设的播种故障总数数,,用平均值为用平均值为mm((tt))的的NHPPNHPP模型模型描描述测试时发现播种故障的过程述测试时发现播种故障的过程nmm((tt))的收敛值的收敛值mm(())==NNn测试精确度测试精确度AcAc的推测值:的推测值:nm()NsAcNNNsss n若设测试过程中到时刻若设测试过程中到时刻ttii能发现的能发现的累积播种故障总数为累积播种故障总数为yyii,,则在测试则在测试期间可得到一连串数据期间可得到一连串数据((tt00,0),(,0),(tt11,,yy11),),…………,(,(ttmm,,yymm))n可得到一组方程:可得到一组方程:btiyNe()10,,i,nin应用最小二乘法可得到参数应用最小二乘法可得到参数NN与与bb的估计值,并得到测试精确度的估计值,并得到测试精确度AcAc。。 测试覆盖率测试覆盖率CvCvn表明在整个测试期间发现软件内潜表明在整个测试期间发现软件内潜在故障的可能性有多大。在故障的可能性有多大。n可通过被测试对象软件内潜在的原可通过被测试对象软件内潜在的原有故障的捕捉率来测定的。有故障的捕捉率来测定的。 n测试过程中测试过程中已发现原有故障总数已发现原有故障总数为为nn00((实测值实测值)),经过相当长时间测试,经过相当长时间测试后后可能发现的原有故障总数可能发现的原有故障总数为为NN00,,n采用平均值函数采用平均值函数mm((tt))的的NHPPNHPP模型模型描述测试发现原有故障的过程描述测试发现原有故障的过程nmm((tt))的收敛值的收敛值mm(())==NcNcn测试覆盖率测试覆盖率CvCv的推测值的推测值::nnn000Cv=Nm()Nc0 n测试开始后,由于测试员对程序和测试开始后,由于测试员对程序和测试环境不熟悉,造成拖期。测试环境不熟悉,造成拖期。n为描述这种情形,对原来为描述这种情形,对原来NHPPNHPP的的指数型平均值函数加以改造:指数型平均值函数加以改造:btd()mt()N(1e)n它是它是把原来的指数型平均值函数在把原来的指数型平均值函数在时间轴上平移而得到的结果时间轴上平移而得到的结果,,是具是具有时间延迟的有时间延迟的NHPPNHPP模型模型。。 n测试员从发现错误征兆到确认错测试员从发现错误征兆到确认错误,需要反复执行程序,以再现错误,需要反复执行程序,以再现错误,造成时间拖延。误,造成时间拖延。n因此,在使用测试结果进行软件质因此,在使用测试结果进行软件质量评价时,量评价时,只用指数型的只用指数型的NHPPNHPP的的平均值曲线平均值曲线((A)A)是不够的是不够的。。实测结果实测结果多是如多是如((B)B)所示的所示的SS型曲线型曲线。。btmt()N((11bte)) n实验表明:实验表明:u对于一般功能单纯的小规模的程对于一般功能单纯的小规模的程序模块,具有时间延迟的序模块,具有时间延迟的NHPPNHPP模型比较合适;模型比较合适;u对于功能比较复杂的程序模块,对于功能比较复杂的程序模块,SS型型NHPPNHPP模型比较合适;模型比较合适;u对于对于8000080000行以上的程序,最基行以上的程序,最基本的指数型本的指数型NHPPNHPP模型比较合适。模型比较合适。 软件配置管理软件配置管理n在软件建立时在软件建立时变更是不可避免的变更是不可避免的,,因为在进行变更前没有仔细分析,因为在进行变更前没有仔细分析,或没有进行变更控制,或没有进行变更控制,变更加剧了变更加剧了项目中软件人员之间的混乱项目中软件人员之间的混乱。。n协调软件开发使得混乱减到最小的协调软件开发使得混乱减到最小的技术叫做配置管理技术叫做配置管理。。n配置管理是一组标识、组织和控制配置管理是一组标识、组织和控制修改的活动,目的是使错误达到最修改的活动,目的是使错误达到最小并最有效地提高生产率。小并最有效地提高生产率。 软件配置管理的概念软件配置管理的概念n软件配置管理,简称软件配置管理,简称SCMSCM,,是一种是一种““保护伞保护伞””活动,它活动,它应用于整个软件应用于整个软件工程过程工程过程。。nSCMSCM活动的目标是为了活动的目标是为了(1)(1)标识变更;标识变更;(2)(2)控制变更;控制变更;(3)(3)确保变更正确地实现;确保变更正确地实现;(4)(4)向其他有关的人报告变更。向其他有关的人报告变更。 n在软件工程过程中产生的所有信息在软件工程过程中产生的所有信息项(文档、报告、程序、表格、数项(文档、报告、程序、表格、数据)据)构成了软件配置构成了软件配置。。n软件配置是软件的具体形态在某一软件配置是软件的具体形态在某一时刻的瞬时影像。时刻的瞬时影像。n随着软件工程过程的进展,随着软件工程过程的进展,软件配软件配置项置项((SCISCI))数目快速增加。系统规数目快速增加。系统规格说明可繁衍出软件项目实施计划格说明可繁衍出软件项目实施计划和软件需求规格说明。它们又依次和软件需求规格说明。它们又依次繁衍出建立信息层次的其它文档繁衍出建立信息层次的其它文档。 基线基线((Baseline)Baseline)n基线是软件生存期中各开发阶段末基线是软件生存期中各开发阶段末尾的特定点,又称里程碑尾的特定点,又称里程碑。。n由正式的技术评审而得到的由正式的技术评审而得到的SCISCI协协议和软件配置的正式文本才能成为议和软件配置的正式文本才能成为基线。基线。n基线的基线的作用是把各阶段工作的划分作用是把各阶段工作的划分更加明确化更加明确化,以便于检验和肯定阶,以便于检验和肯定阶段成果。段成果。 软件开发各阶段的基线软件开发各阶段的基线 项目数据库项目数据库n一旦一旦一个一个SCISCI成为基线成为基线,,就把它存就把它存放到项目数据库中放到项目数据库中。。n当软件组织成员想要当软件组织成员想要对基线对基线SCISCI进进行修改时行修改时,,把它从项目数据库中复把它从项目数据库中复制到该工程师的专用工作区中制到该工程师的专用工作区中。。n例如,把一个例如,把一个名为名为BB的的SCISCI从项目从项目数据库复制到工程师的专用工作区数据库复制到工程师的专用工作区中中。。工程师在工程师在B"B"((BB的副本)上完的副本)上完成要求的变更成要求的变更,,再用再用B"B"来更新来更新BB。。 n有些系统中把这个基线有些系统中把这个基线SCISCI锁定。锁定。n在变更完成、评审和批准之前,不在变更完成、评审和批准之前,不许对它做任何操作。许对它做任何操作。 基线基线SCISCI和项目数据库和项目数据库 软件配置项软件配置项SCISCIn软件配置管理的对象就是软件配置管理的对象就是SCISCI——软软件配置项件配置项。。u系统规格说明系统规格说明u软件项目实施计划软件项目实施计划u软件需求说明软件需求说明u可执行的原型可执行的原型u初步的用户手册初步的用户手册u设计规格说明设计规格说明 u源代码清单源代码清单u测试计划和过程、测试用例和测测试计划和过程、测试用例和测试结果记录试结果记录u操作和安装手册操作和安装手册u可执行程序(可执行程序模块、可执行程序(可执行程序模块、连接模块)连接模块)u数据库描述(模式和文件结构、数据库描述(模式和文件结构、初始内容)初始内容)u正式的用户手册正式的用户手册u维护文档(软件问题报告、维护维护文档(软件问题报告、维护请求、工程变更次序)请求、工程变更次序) n软件工程标准软件工程标准n项目开发总结项目开发总结n除以上所列除以上所列SCISCI以外,许多软件工以外,许多软件工程组织还把程组织还把配置控制之下的软件工配置控制之下的软件工具具列入其中,即列入其中,即编辑程序编辑程序、、编译程编译程序序、、其它其它CASECASE工具的特定版本工具的特定版本。。因为要使用这些工具来生成文档、因为要使用这些工具来生成文档、程序和数据,如果编译程序的版本程序和数据,如果编译程序的版本不同,可能产生的结果也不同。不同,可能产生的结果也不同。 配置对象配置对象n在实现在实现SCMSCM时,把时,把SCISCI组织成配置组织成配置对象对象,在项目数据库中用一个,在项目数据库中用一个单一单一的名字来组织它们的名字来组织它们。。n一个配置对象有一个一个配置对象有一个名字名字和一组和一组属属性性,并通过某些联系,并通过某些联系““连接连接””到其它到其它对象。对象。n每个对象与其它对象的联系用箭头每个对象与其它对象的联系用箭头表示。箭头指明了一种构造关系。表示。箭头指明了一种构造关系。 配置对象配置对象 n双向箭头则表明一种相互关系双向箭头则表明一种相互关系。如。如果对果对““源代码源代码””对象作了一个变更,对象作了一个变更,软件工程师就可以根据这种相互关软件工程师就可以根据这种相互关系确定,其它哪些对象(和系确定,其它哪些对象(和SCISCI))可能受到影响。可能受到影响。 软件配置管理的任务软件配置管理的任务n软件配置管理(软件配置管理(SCMSCM))的任务是:的任务是:u标识单个的标识单个的SCISCIu标识和管理软件各种版本标识和管理软件各种版本u控制变更控制变更u审查软件配置审查软件配置u报告所有加在配置上的变更。报告所有加在配置上的变更。 配置标识配置标识n一方面随着软件生存期的向前推一方面随着软件生存期的向前推进,进,SCISCI的数量不断增多的数量不断增多。。n整个软件生存期的整个软件生存期的软件配置就象一软件配置就象一部不断演变的电影部不断演变的电影,而某一时刻的,而某一时刻的配置就是这部电影的一个片段。配置就是这部电影的一个片段。n为了方便为了方便对软件配置的各个片段对软件配置的各个片段((SCISCI))进行控制和管理进行控制和管理,不致造,不致造成混乱,首先应给它们成混乱,首先应给它们命名命名。。 对象类型对象类型n基本对象基本对象::是由软件工程师在分析、是由软件工程师在分析、设计、编码和测试时所建立的设计、编码和测试时所建立的文本文本单元单元。例如,基本对象可能是需求。例如,基本对象可能是需求规格说明中的一节,一个模块的源规格说明中的一节,一个模块的源程序清单、一组用来测试一个等价程序清单、一组用来测试一个等价类的测试用例。类的测试用例。n复合对象复合对象::是基本对象或其它复合是基本对象或其它复合对象的对象的一个收集一个收集。。 n对象标识:对象标识:(名字、描述、资源、实现)(名字、描述、资源、实现)n对象的对象的名字名字明确地标识对象。明确地标识对象。n对象对象描述描述包括:包括:SCISCI类型类型(如文档、(如文档、程序、数据)、程序、数据)、项目标识项目标识、、变更变更和和/或/或版本信息版本信息。。n资源资源包括由对象包括由对象产生的产生的、、处理的处理的、、引用的引用的或或其它需要其它需要的的一些实体一些实体。。n基本对象的实现基本对象的实现是是指向指向文本单元文本单元的的指针指针,复合对象的实现为,复合对象的实现为nullnull。。 命名对象之间的联系命名对象之间的联系n对象的层次关系:对象的层次关系:一个对象可以一个对象可以是一个复合对象的一个组成部是一个复合对象的一个组成部分,用联系分,用联系<>标识标识。。E-RE-Rdiagramdiagram1.4<1.4>datamodeldatamodel;;datamodelDesigndatamodelDesignSpecificationSpecification;;n就可以建立就可以建立SCISCI的一个层次。的一个层次。 n对象的相互关联关系:对象的相互关联关系:对象跨越对对象跨越对象层次的分支相互关联。这些交叉象层次的分支相互关联。这些交叉的结构联系表达方式如下:的结构联系表达方式如下:datamodeldataflowdatamodeldataflowmodelmodel;;((两个复合对象之间的相互联系两个复合对象之间的相互联系))datamodeltestcasedatamodeltestcaseclassmclassm;;((一个复合对象与一个特定的基本一个复合对象与一个特定的基本对象之间的相互联系)对象之间的相互联系) 演变图演变图n整个软件工程过程中所涉及的软件整个软件工程过程中所涉及的软件对象都必须加以标识。对象都必须加以标识。n在对象成为基线以前可能要做多次在对象成为基线以前可能要做多次变更,在成为基线之后也可能需要变更,在成为基线之后也可能需要频繁地变更。频繁地变更。n对于每一配置对象都可以建立一个对于每一配置对象都可以建立一个演变图演变图,用演变图记叙对象的,用演变图记叙对象的变更变更历史历史。。 演变图演变图 n在某些工具中,当前保持的在某些工具中,当前保持的只是最只是最后版本的完全副本后版本的完全副本。。n为了得到较早时期为了得到较早时期((文档或程序文档或程序))的的版本,可以从最后版本中版本,可以从最后版本中““提取提取””出出((由工具编目的由工具编目的))变更变更,使得,使得当前配当前配置直接可用置直接可用,并使得,并使得其它版本也可其它版本也可用用。。 版本控制版本控制n版本控制是版本控制是SCMSCM的基础,它管理并的基础,它管理并保护开发者的软件资源。保护开发者的软件资源。n版本控制管理在软件工程过程中建版本控制管理在软件工程过程中建立起立起配置对象的不同版本配置对象的不同版本。。n版本管理可以把版本管理可以把一些属性结合到各一些属性结合到各个软件版本个软件版本上。上。n通过通过描述所希望的属性集合描述所希望的属性集合来来确定确定(或(或构造构造))所想要的配置所想要的配置。。n使用使用演变图演变图来表示系统的不同版本。来表示系统的不同版本。 n图中的各个结点都是图中的各个结点都是聚合对象聚合对象,是,是一个一个完全的软件版本完全的软件版本。。n软件的每一版本都是软件的每一版本都是SCISCI((源代码、源代码、文档、数据)文档、数据)的一个收集的一个收集,且各个,且各个版本都可能由不同的变种组成。版本都可能由不同的变种组成。n例如,一个简单的程序版本由例如,一个简单的程序版本由11、、22、、33、、44和和55等部件组成。其中等部件组成。其中部件部件44在在软件软件使用彩色显示器使用彩色显示器时使用,时使用,部件部件55在软件在软件使用单色显示器使用单色显示器时使用。因时使用。因此,可以定义版本的两个变种。此,可以定义版本的两个变种。 版本管理的主要任务版本管理的主要任务n集中管理档案,安全授权机制集中管理档案,安全授权机制::u版本管理的操作版本管理的操作将开发组的档案将开发组的档案集中地存放在服务器上集中地存放在服务器上,,经系统经系统管理员授权给各个用户管理员授权给各个用户。。u用户通过登入(用户通过登入(checkincheckin))和检和检出(出(checkoutcheckout))的方式访问服务的方式访问服务器上的文件,未经授权的用户无器上的文件,未经授权的用户无法访问服务器上的文件。法访问服务器上的文件。 n软件版本升级管理软件版本升级管理::u每次登入时,在服务器上都会生每次登入时,在服务器上都会生成新的版本。成新的版本。u任何版本都可以随时检出编辑,任何版本都可以随时检出编辑,同一应用的不同版本可以像树枝一同一应用的不同版本可以像树枝一样向上增长。样向上增长。 n加锁功能加锁功能::u目的是目的是在文件更新时保护文件在文件更新时保护文件,,避免不同用户更改同一文件时发避免不同用户更改同一文件时发生冲突生冲突。。u某一文件一旦被某一文件一旦被登入登入,,锁即被解锁即被解除除,该文件可被其它用户使用。,该文件可被其它用户使用。u在在更新一个文件之前锁定它更新一个文件之前锁定它,避,避免变更没有锁定的项目源文件。免变更没有锁定的项目源文件。 n在文件登入和检出时,需要注意登在文件登入和检出时,需要注意登入和检出的使用入和检出的使用::u当需要修改某个小缺陷时,应当需要修改某个小缺陷时,应只只检出完成工作必需的最少文件检出完成工作必需的最少文件;;u需要对文件变更时,应登入它并需要对文件变更时,应登入它并加锁加锁,,保留对每个变更的记录保留对每个变更的记录;;u应避免长时间地锁定文件。如果应避免长时间地锁定文件。如果需要长时间工作于某个文件,最需要长时间工作于某个文件,最好能好能创建一个分支创建一个分支,并在分支上,并在分支上做工作。做工作。 u如果需要做较大的变更,可有两如果需要做较大的变更,可有两种选择:种选择:a.a.将需要的所有文件检出并加将需要的所有文件检出并加锁,然后正常处理锁,然后正常处理;;b.b.为需要修改的所有分支创建分为需要修改的所有分支创建分支,把变更与主干支,把变更与主干““脱机脱机””,然后把,然后把结果合并回去。结果合并回去。 变更控制变更控制n软件生存期内全部的软件配置是软软件生存期内全部的软件配置是软件产品的真正代表件产品的真正代表,必须使其保持,必须使其保持精确精确。。n软件工程过程中软件工程过程中某一阶段的变更某一阶段的变更,,均要均要引起软件配置的变更引起软件配置的变更,这种变,这种变更必须严格加以更必须严格加以控制控制和和管理管理,保持,保持修改信息。修改信息。n变更控制包括变更控制包括建立控制点建立控制点和和建立报建立报告与审查制度告与审查制度。。 变更控制变更控制过程过程 n在此过程中,首先用户提交书面的在此过程中,首先用户提交书面的变更请求,详细申明变更的理由、变更请求,详细申明变更的理由、变更方案、变更的影响范围等。变更方案、变更的影响范围等。n然后由变更控制机构确定控制变更然后由变更控制机构确定控制变更的机制、评价其技术价值、潜在的的机制、评价其技术价值、潜在的副作用、对其它配置对象和系统功副作用、对其它配置对象和系统功能的综合影响以及项目的开销、并能的综合影响以及项目的开销、并把评价的结果以变更报告的形式提把评价的结果以变更报告的形式提交给变更控制负责人(最终决定变交给变更控制负责人(最终决定变更状态和优先权的某个人或小组)。更状态和优先权的某个人或小组)。 n对每个批准了的变更产生一个工程对每个批准了的变更产生一个工程变更顺序(变更顺序(ECOECO),),描述进行的变描述进行的变更、必须考虑的约束、评审和审计更、必须考虑的约束、评审和审计的准则等。的准则等。n要做变更的对象从项目数据库中检要做变更的对象从项目数据库中检出(出(checkoutcheckout),),对其做出变更,对其做出变更,并实施适当的质量保证活动。然后并实施适当的质量保证活动。然后再把对象登入(再把对象登入(checkincheckin))到数据库到数据库中并使用适当的版本控制机制建立中并使用适当的版本控制机制建立软件的下一版本。软件的下一版本。 软件变更有两类不同情况:软件变更有两类不同情况:n为改正小错误需要的变更为改正小错误需要的变更。它是必。它是必须进行的,通常不需要从管理角度须进行的,通常不需要从管理角度对这类变更进行审查和批准。但对这类变更进行审查和批准。但是,如果发现错误的阶段在造成错是,如果发现错误的阶段在造成错误的阶段的后面,例如在实现阶段误的阶段的后面,例如在实现阶段发现了设计错误,则必须遵照标准发现了设计错误,则必须遵照标准的变更控制过程,把这个变更正式的变更控制过程,把这个变更正式记入文档,把所有受这个变更影响记入文档,把所有受这个变更影响的文档都做相应的修改。的文档都做相应的修改。 n为了增加或者删掉某些功能、或者为了增加或者删掉某些功能、或者为了改变完成某个功能的方法而需为了改变完成某个功能的方法而需要的变更要的变更。这类变更必须经过某种。这类变更必须经过某种正式的变更评价过程,以估计变更正式的变更评价过程,以估计变更需要的成本和它对软件系统其它部需要的成本和它对软件系统其它部分的影响。分的影响。u如果变更的代价比较小且对软件如果变更的代价比较小且对软件系统其它部分没有影响,或影响系统其它部分没有影响,或影响很小,通常应批准这个变更。很小,通常应批准这个变更。 u如果变更的代价比较高,或者影如果变更的代价比较高,或者影响比较大,则必须权衡利弊,以响比较大,则必须权衡利弊,以决定是否进行这种变更。决定是否进行这种变更。u如果同意这种变更,如果同意这种变更,需要进一步需要进一步确定由谁来支付变更所需要的费确定由谁来支付变更所需要的费用。用。如果是用户要求的变更,则如果是用户要求的变更,则用户应支付这笔费用;否则,必用户应支付这笔费用;否则,必须完成某种成本/效益分析,以须完成某种成本/效益分析,以确定是否值得做这种变更。确定是否值得做这种变更。 n这种变更报告和审查制度,对变更这种变更报告和审查制度,对变更控制来说起了一个安全保证作用。控制来说起了一个安全保证作用。n在一个在一个SCISCI成为基线之前,可以对所成为基线之前,可以对所有合理的项目和技术申请进行非正有合理的项目和技术申请进行非正式的变更;式的变更;n一旦某个一旦某个SCISCI经过正式的技术评审并经过正式的技术评审并得到批准,它就成了基线。以后如得到批准,它就成了基线。以后如果需要对它变更,就必须得到项目果需要对它变更,就必须得到项目负责人的批准,或者必须得到变更负责人的批准,或者必须得到变更控制负责人的批准。控制负责人的批准。 配置状态报告配置状态报告n为了清楚、及时地记载软件配置的为了清楚、及时地记载软件配置的变化,需要变化,需要对开发的过程做出系统对开发的过程做出系统的记录的记录,以反映开发活动的历史情,以反映开发活动的历史情况。这就是配置状态登录的任务。况。这就是配置状态登录的任务。n登录主要登录主要根据变更控制小组会议的根据变更控制小组会议的记录记录,并产生,并产生配置状态报告配置状态报告。。n对于每一项变更,记录:发生了什对于每一项变更,记录:发生了什么?为什么会发生?谁做的?什么么?为什么会发生?谁做的?什么时侯发生的?会有什么影响?时侯发生的?会有什么影响? 配置状态报告信息流配置状态报告信息流 n每次每次新分配一个新分配一个SCISCI,,或或更新一个更新一个已有已有SCISCI的标识的标识,或,或一项变更申请一项变更申请被变更控制负责人批准被变更控制负责人批准,,并给出了并给出了一个工程变更顺序一个工程变更顺序时时,在配置状态,在配置状态报告中就要增加一条变更记录条目。报告中就要增加一条变更记录条目。n一旦进行了配置审计,其结果也应一旦进行了配置审计,其结果也应该写入报告之中。该写入报告之中。 n配置状态报告可以放在一个联机数配置状态报告可以放在一个联机数据库中,以便软件开发人员或者软据库中,以便软件开发人员或者软件维护人员可以对它进行查询或修件维护人员可以对它进行查询或修改。此外在软件配置报告中新登录改。此外在软件配置报告中新登录的变更应当及时通知给管理人员和的变更应当及时通知给管理人员和软件工程师。软件工程师。n配置状态报告对于大型软件开发项配置状态报告对于大型软件开发项目的成功起着至关重要的作用。避目的成功起着至关重要的作用。避免了可能出现的不一致和冲突。免了可能出现的不一致和冲突。 配置审计配置审计n软件的完整性软件的完整性,是指开发后期的,是指开发后期的软软件产品能够正确地反映用户要求件产品能够正确地反映用户要求。。n软件配置审计的目的就是要软件配置审计的目的就是要u证实整个软件生存期中各项产品证实整个软件生存期中各项产品在技术上和管理上的完整性。在技术上和管理上的完整性。u确保所有文档的内容变动不超出确保所有文档的内容变动不超出当初确定的软件要求范围。使得软当初确定的软件要求范围。使得软件配置具有良好的可跟踪性。件配置具有良好的可跟踪性。 n软件配置审计是软件变更控制人员软件配置审计是软件变更控制人员掌握配置情况掌握配置情况、、进行审批的依据进行审批的依据。。n软件的变更控制机制通常只能跟踪软件的变更控制机制通常只能跟踪到工程变更顺序产生为止。为确认到工程变更顺序产生为止。为确认变更是否正确完成变更是否正确完成??一般可以用以一般可以用以下两种方法去审查:下两种方法去审查:u正式技术评审正式技术评审u软件配置审计软件配置审计 n正式的技术评审正式的技术评审着重着重检查已完成修检查已完成修改的软件配置对象的技术正确性改的软件配置对象的技术正确性,,n评审者评审者评价评价SCISCI,,决定它与其它决定它与其它SCISCI的一致性,是否有遗漏或可能引起的一致性,是否有遗漏或可能引起的副作用。的副作用。n正式技术评审应对所有的变更进正式技术评审应对所有的变更进行,除了那些最无价值的变更之外。行,除了那些最无价值的变更之外。n软件配置审计软件配置审计作为正式技术评审的作为正式技术评审的补充,补充,评价在评审期间通常没有被评价在评审期间通常没有被考虑的考虑的SCISCI的特性的特性。。 软件维护的概念软件维护的概念软件维护活动软件维护活动程序修改的步骤及修改程序修改的步骤及修改的副作用的副作用可维护性可维护性提高可维护性的方法提高可维护性的方法 软件维护的概念软件维护的概念n软件维护的定义软件维护的定义n影响维护工作量的因素影响维护工作量的因素n软件维护的策略软件维护的策略n维护成本维护成本 软件维护的定义软件维护的定义n在软件运行/维护阶段在软件运行/维护阶段对软件产品对软件产品进行的修改进行的修改就是所谓的维护。就是所谓的维护。n维护的类型有三种:维护的类型有三种:u改正性维护改正性维护u适应性维护适应性维护u完善性维护完善性维护 改正性维护改正性维护n在软件交付使用后,因开发时测试在软件交付使用后,因开发时测试的的不彻底不彻底、、不完全不完全,必然会有部分,必然会有部分隐藏的错误遗留到运行阶段。隐藏的错误遗留到运行阶段。n这些隐藏下来的错误这些隐藏下来的错误在某些特定的在某些特定的使用环境下就会暴露出来使用环境下就会暴露出来。。n为了为了识别和纠正软件错误识别和纠正软件错误、、改正软改正软件性能上的缺陷件性能上的缺陷、、排除实施中的误排除实施中的误使用使用,应当进行的诊断和改正错误,应当进行的诊断和改正错误的过程就叫做改正性维护。的过程就叫做改正性维护。 适应性维护适应性维护n在使用过程中,在使用过程中,u外部环境外部环境((新的硬、软件配置新的硬、软件配置))u数据环境数据环境((数据库、数据格式、数据库、数据格式、数据输入数据输入//输出方式、数据存储介输出方式、数据存储介质质))可能发生变化。可能发生变化。n为使软件适应这种变化,而去修改为使软件适应这种变化,而去修改软件的过程就叫做适应性维护。软件的过程就叫做适应性维护。 完善性维护完善性维护n在软件的使用过程中,用户往往会在软件的使用过程中,用户往往会对软件提出新的对软件提出新的功能功能与与性能性能要求。要求。n为了满足这些要求,需要修改或再为了满足这些要求,需要修改或再开发软件,以开发软件,以扩充软件功能扩充软件功能、、增强增强软件性能软件性能、、改进加工效率改进加工效率、、提高软提高软件的可维护性件的可维护性。。n这种情况下进行的维护活动叫做完这种情况下进行的维护活动叫做完善性维护。善性维护。 n实践表明,在几种维护活动中,完实践表明,在几种维护活动中,完善性维护所占的比重最大。善性维护所占的比重最大。即大部即大部分维护工作是改变和加强软件,而分维护工作是改变和加强软件,而不是纠错不是纠错。。n完善性维护不一定是救火式的紧急完善性维护不一定是救火式的紧急维修,而可以维修,而可以是有计划、有预谋的是有计划、有预谋的一种再开发活动一种再开发活动。。n事实证明,来自用户要求扩充、加事实证明,来自用户要求扩充、加强软件功能、性能的维护活动约占强软件功能、性能的维护活动约占整个维护工作的整个维护工作的5050%。%。 预防性维护预防性维护n预防性维护是为了预防性维护是为了提高软件的可维提高软件的可维护性护性、、可靠性等可靠性等,为以后进一步改,为以后进一步改进软件打下良好基础。进软件打下良好基础。n预防性维护定义为:预防性维护定义为:采用先进的软采用先进的软件工程方法对需要维护的软件或软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、件中的某一部分(重新)进行设计、编制和测试。编制和测试。 n在整个软件维护阶段所花费的全部在整个软件维护阶段所花费的全部工作量中,工作量中,完善性维护占了几乎一完善性维护占了几乎一半的工作量。半的工作量。n软件维护活动所花费的工作占整个软件维护活动所花费的工作占整个生存期工作量的生存期工作量的70%70%以上以上,这是由,这是由于在漫长的软件运行过程中需要不于在漫长的软件运行过程中需要不断对软件进行修改,以断对软件进行修改,以改正新发现改正新发现的错误的错误、适应新的环境和用户新的、适应新的环境和用户新的要求,这些修改需要花费很多精力要求,这些修改需要花费很多精力和时间,而且有时会引入新的错误。和时间,而且有时会引入新的错误。 维护在软件生维护在软件生三类维护占三类维护占存期所占比例存期所占比例总维护比例总维护比例 影响维护工作量的因素影响维护工作量的因素n在软件的维护过程中,需要花费在软件的维护过程中,需要花费大量的工作量,从而直大量的工作量,从而直接影响了接影响了软件维护的成本软件维护的成本。。n应当考虑应当考虑有哪些因素影响软件维有哪些因素影响软件维护的工作量护的工作量,相应,相应应该采取什么应该采取什么维护策略维护策略,才能,才能有效地维护软件有效地维护软件并并控制维护的成本控制维护的成本。。 n系统大小系统大小:系统越大,理解掌握起:系统越大,理解掌握起来越困难。系统越大,所执行功能来越困难。系统越大,所执行功能越复杂。因而需要更多的维护工作越复杂。因而需要更多的维护工作量。量。n程序设计语言程序设计语言:使用强功能的程序:使用强功能的程序设计语言可以控制程序的规模。语设计语言可以控制程序的规模。语言的功能越强,生成程序的模块化言的功能越强,生成程序的模块化和结构化程度越高,所需的指令数和结构化程度越高,所需的指令数就越少,程序的可读性越好。就越少,程序的可读性越好。 n系统年龄系统年龄::u老系统随着不断的修改,结构越老系统随着不断的修改,结构越来越乱;来越乱;u维护人员经常更换,程序又变得维护人员经常更换,程序又变得越来越难于理解。越来越难于理解。u许多老系统在当初并未按照软件许多老系统在当初并未按照软件工程的要求进行开发,因而没有工程的要求进行开发,因而没有文档,或文档太少。文档,或文档太少。u在长期的维护过程中文档在许多在长期的维护过程中文档在许多地方与程序实现变得不一致,在地方与程序实现变得不一致,在维护时就会遇到很大困难。维护时就会遇到很大困难。 n数据库技术的应用数据库技术的应用:使用数据库,:使用数据库,可以简单而有效地管理和存储用户可以简单而有效地管理和存储用户程序中的数据,还可以减少生成用程序中的数据,还可以减少生成用户报表应用软件的维护工作量。户报表应用软件的维护工作量。n先进的软件开发技术先进的软件开发技术:在软件开发:在软件开发时,若使用能使软件结构比较稳定时,若使用能使软件结构比较稳定的分析与设计技术,及程序设计技的分析与设计技术,及程序设计技术,如面向对象技术、复用技术术,如面向对象技术、复用技术等,可减少大量的工作量。等,可减少大量的工作量。 n其它其它::u应用的类型应用的类型u数学模型数学模型u任务的难度任务的难度u开关与标记、开关与标记、IFIF嵌套深度、索引嵌套深度、索引或下标数等或下标数等对维护工作量都有影响。对维护工作量都有影响。n许多软件在开发时并未考虑将来的许多软件在开发时并未考虑将来的修改,为软件的维护带来许多问题。修改,为软件的维护带来许多问题。 软件维护的策略软件维护的策略n改正性维护改正性维护通常要生成通常要生成100100%可靠的软件并不%可靠的软件并不一定合算,成本太高一定合算,成本太高。。但通过使用但通过使用新技术,可大大减少进行改正性维新技术,可大大减少进行改正性维护的需要护的需要。。这些技术包括:这些技术包括:数据库管理系统数据库管理系统、、软件开发环境软件开发环境、、程序自动生成系统程序自动生成系统、、较高级较高级((第四代第四代))的语言的语言。。以及以及新的新的开发方法开发方法、、软件复用软件复用、、防错程序设防错程序设计计及及周期性维护审查周期性维护审查等等。。 n适应性维护适应性维护这一类维护不可避免,可以控制。这一类维护不可避免,可以控制。(1)(1)在配置管理时,把硬件、操作在配置管理时,把硬件、操作系统和其它相关环境因素的可能变系统和其它相关环境因素的可能变化考虑在内化考虑在内。。(2)(2)把与硬件、操作系统,以及其把与硬件、操作系统,以及其它外围设备有关的程序归到特定的它外围设备有关的程序归到特定的程序模块中。程序模块中。(3)(3)使用内部程序列表、外部文使用内部程序列表、外部文件,以及处理的例行程序包,可为件,以及处理的例行程序包,可为维护时修改程序提供方便。维护时修改程序提供方便。 n完善性维护完善性维护利用前两类维护中列举的方法,也利用前两类维护中列举的方法,也可以减少这一类维护。特别是可以减少这一类维护。特别是数据数据库管理系统库管理系统、、程序生成器程序生成器、、应用软应用软件包件包,可减少维护工作量。,可减少维护工作量。此外,建立软件系统的原型,把它此外,建立软件系统的原型,把它在实际系统开发之前提供给用户。在实际系统开发之前提供给用户。用户通过研究原型,进一步完善他用户通过研究原型,进一步完善他们的功能要求,就可以减少以后完们的功能要求,就可以减少以后完善性维护的需要。善性维护的需要。 维护成本维护成本n有形的软件维护成本有形的软件维护成本是花费了多少是花费了多少钱,钱,无形的维护成本无形的维护成本有更大的影响。有更大的影响。u一些一些合理的修复或修改请求不能合理的修复或修改请求不能及时安排及时安排,使得客户不满意;,使得客户不满意;u变更的结果变更的结果引入新的故障引入新的故障,使得,使得软件整体质量下降;软件整体质量下降;u把软件人员抽调到维护工作中,把软件人员抽调到维护工作中,干扰了软件开发工作。干扰了软件开发工作。 n软件维护的软件维护的代价代价是是降低了生产率降低了生产率,,在做老程序的维护时非常明显。在做老程序的维护时非常明显。n例如,例如,开发每一行源代码耗资开发每一行源代码耗资2525美美元元,,维护每一行源代码需要耗资维护每一行源代码需要耗资10001000美元美元。。n维护工作量包括维护工作量包括生产性活动生产性活动(如分(如分析和评价、设计修改和实现)和析和评价、设计修改和实现)和““轮转轮转””活动活动(如力图理解代码在做(如力图理解代码在做什么、试图判明数据结构、接口特什么、试图判明数据结构、接口特性、性能界限等)。性、性能界限等)。 维护工作量的模型维护工作量的模型cdMpKenMM是维护中消耗的总工作量是维护中消耗的总工作量npp是上面描述的生产性工作量是上面描述的生产性工作量nKK是一个经验常数是一个经验常数ncc是因缺乏好的设计和文档而导致是因缺乏好的设计和文档而导致复杂性的度量复杂性的度量ndd是对软件熟悉程度的度量。是对软件熟悉程度的度量。 n模型指明,如果使用了不好的软件模型指明,如果使用了不好的软件开发方法(未按软件工程要求开发方法(未按软件工程要求做),原来参加开发的人员或小组做),原来参加开发的人员或小组不能参加维护,则工作量(及成本)不能参加维护,则工作量(及成本)将按指数级增加。将按指数级增加。 软件维护活动软件维护活动n为了有效地进行软件维护,应事先为了有效地进行软件维护,应事先就开始做组织工作。就开始做组织工作。u首先首先建立维护的机构建立维护的机构u申明申明提出维护申请报告的过程提出维护申请报告的过程及及评价的过程评价的过程u为每一个维护申请规定为每一个维护申请规定标准的处标准的处理步骤理步骤u建立建立维护活动的登记制度维护活动的登记制度以及规以及规定定评价和评审的标准评价和评审的标准。。 维护机构维护机构n除了较大的软件开发公司外,通常除了较大的软件开发公司外,通常在软件维护工作方面,并不保持一在软件维护工作方面,并不保持一个正式的组织机构。个正式的组织机构。n虽然不要求建立一个正式的维护机虽然不要求建立一个正式的维护机构,但是在开发部门确立一个非正构,但是在开发部门确立一个非正式的维护机构则是非常必要的。式的维护机构则是非常必要的。 软件维护的机构软件维护的机构 n维护申请维护申请提交给提交给维护管理员维护管理员,他把,他把申请交给某个申请交给某个系统监督员系统监督员去去评价评价。。n一旦做出评价,由一旦做出评价,由修改负责人修改负责人确定确定如何进行修改如何进行修改。。n在修改程序的过程中,由在修改程序的过程中,由配置管理配置管理员员严格把关,严格把关,控制修改的范围控制修改的范围,,对对软件配置进行审计软件配置进行审计。。n在维护之前,就把责任明确下来,在维护之前,就把责任明确下来,可以减少维护过程中的混乱。可以减少维护过程中的混乱。 软件维护申请报告软件维护申请报告n维护申请报告或称维护申请报告或称软件问题报告软件问题报告,,由由申请维护的用户申请维护的用户填写填写。。n用户必须用户必须完整地说明产生错误的情完整地说明产生错误的情况况,包括,包括输入数据输入数据、、错误清单错误清单以及以及其它有关材料其它有关材料。。n如果申请的是适应性维护或完善性如果申请的是适应性维护或完善性维护,用户必须提出一份修改说明维护,用户必须提出一份修改说明书,列出所有希望的修改。书,列出所有希望的修改。 n维护申请报告将由维护申请报告将由维护管理员维护管理员和和系统监督员系统监督员来研究处理。来研究处理。n他们应相应地做出他们应相应地做出软件修改报软件修改报告告,指明:,指明:u所需修改变动的性质;所需修改变动的性质;u申请修改的优先级;申请修改的优先级;u为满足某个维护申请报告,所需为满足某个维护申请报告,所需的工作量;的工作量;u预计修改后的状况预计修改后的状况.. n软件修改报告应提交修改负责软件修改报告应提交修改负责人,经批准后才能开始进一步安人,经批准后才能开始进一步安排维护工作。排维护工作。 软件维护软件维护工作流程工作流程 n尽管维护申请的类型不同,但都要尽管维护申请的类型不同,但都要进行同样的技术工作。进行同样的技术工作。u修改软件需求说明修改软件需求说明u修改软件设计修改软件设计u设计评审设计评审u对源程序做必要的修改对源程序做必要的修改u单元测试单元测试u集成测试集成测试((回归测试回归测试))u确认测试确认测试u软件配置评审等软件配置评审等。。 在每次软件维护任务完成后进行情况在每次软件维护任务完成后进行情况评审,对以下问题做一总结:评审,对以下问题做一总结:(1)(1)在目前情况下,设计、编码、测在目前情况下,设计、编码、测试中的哪一方面可以改进试中的哪一方面可以改进??(2)(2)哪些维护资源应该有但没有哪些维护资源应该有但没有??(3)(3)工作中主要的或次要的障碍是什工作中主要的或次要的障碍是什么么??(4)(4)从维护申请的类型来看是否应当从维护申请的类型来看是否应当有预防性维护有预防性维护??情况评审对将来的维护工作如何进行情况评审对将来的维护工作如何进行会产生重要的影响。会产生重要的影响。 维护档案记录维护档案记录n程序名称程序名称n源程序语句条数源程序语句条数n机器代码指令条数机器代码指令条数n所用的程序设计语言所用的程序设计语言n程序安装的日期程序安装的日期n程序安装后的运行次数程序安装后的运行次数n与程序安装后运行次数有关的处与程序安装后运行次数有关的处理故障次数理故障次数 n程序改变的层次及名称程序改变的层次及名称n修改程序增加的源程序语句条数修改程序增加的源程序语句条数n修改程序减少的源程序语句条数修改程序减少的源程序语句条数n每次修改所付出的每次修改所付出的““人时人时””数数n修改程序的日期修改程序的日期n软件维护人员的姓名软件维护人员的姓名n维护申请报告的名称、维护类型维护申请报告的名称、维护类型n维护开始时间和维护结束时间、维护开始时间和维护结束时间、n花费在维护上的累计花费在维护上的累计““人时人时””数数n维护工作的净收益等。维护工作的净收益等。 维护评价维护评价n评价维护活动比较困难评价维护活动比较困难,因为缺乏,因为缺乏可靠的数据。可靠的数据。n如果维护的档案记录做得比较好,如果维护的档案记录做得比较好,可以得出一些维护可以得出一些维护““性能性能””方面的度方面的度量值。量值。u每次程序运行时的平均出错次每次程序运行时的平均出错次数;数;u花费在每类维护上的总花费在每类维护上的总““人时人时””数;数; u每个程序、每种语言、每种维每个程序、每种语言、每种维护类型的程序平均修改次数;护类型的程序平均修改次数;u因为维护,增加或删除每个源因为维护,增加或删除每个源程序语句所花费的平均程序语句所花费的平均““人时人时””数;数;u用于每种语言的平均用于每种语言的平均““人时人时””数;数;u维护申请报告的平均处理时维护申请报告的平均处理时间;间;u各类维护申请的百分比。各类维护申请的百分比。据此可对开发技术、语言选择、据此可对开发技术、语言选择、维护工作计划、资源分配、以维护工作计划、资源分配、以 程序修改的步骤及修改的副作用程序修改的步骤及修改的副作用n在软件维护时,必然会对源程序进在软件维护时,必然会对源程序进行修改。行修改。n通常对源程序的修改不能无计划地通常对源程序的修改不能无计划地仓促上阵,为了正确、有效地修改仓促上阵,为了正确、有效地修改,,需要经历以下三个步骤。需要经历以下三个步骤。F分析和理解程序分析和理解程序F修改程序修改程序F重新验证程序重新验证程序 分析和理解程序分析和理解程序n经过分析,经过分析,全面、准确、迅速地理全面、准确、迅速地理解程序是决定维护成败和质量好坏解程序是决定维护成败和质量好坏的关键的关键。在这方面,软件的可理解。在这方面,软件的可理解性和文档的质量非常重要。性和文档的质量非常重要。u理解程序的功能和目标;理解程序的功能和目标;u掌握程序的结构信息,即从程序掌握程序的结构信息,即从程序中细分出若干结构成分。如程序中细分出若干结构成分。如程序系统结构、系统结构、控制结构、数据结构控制结构、数据结构和输入/输出结构等;和输入/输出结构等; u了解数据流信息,即涉及到的数了解数据流信息,即涉及到的数据来源何处,在哪里被使用;据来源何处,在哪里被使用;u了解控制流信息,即执行每条路了解控制流信息,即执行每条路径的结果;径的结果;u理解程序的操作理解程序的操作((使用使用))要求;要求;n为了容易地理解程序,要求自顶向为了容易地理解程序,要求自顶向下地理解现有源程序的程序结构和下地理解现有源程序的程序结构和数据结构,为此可采用如下几种方数据结构,为此可采用如下几种方法:法: 1.1.分析程序结构图分析程序结构图(1)(1)搜集所有存储该程序的文件,搜集所有存储该程序的文件,阅读这些文件,记下它们包含的过阅读这些文件,记下它们包含的过程名,程名,建立一个包括这些过程名和建立一个包括这些过程名和文件名的清单文件名的清单;;(2)(2)分析各个过程的源代码,分析各个过程的源代码,建立建立一个直接调用矩阵一个直接调用矩阵DD或调用树或调用树。若。若过程过程ii调用过程调用过程jj,,则则DD[[ii][][jj]]==11,,否则否则DD[[ii][][jj]]==00。。 (3)(3)建立过程的间接调用矩阵建立过程的间接调用矩阵II,,即即直接调用矩阵直接调用矩阵DD的传递闭包的传递闭包II==DD11∪∪DD22∪∪DD33∪∪……∪∪DnDn其中,其中,nn是所包含的过程总数是所包含的过程总数..例如,过程例如,过程ii调用调用jj,,jj调用调用kk,,则则DD[[ii][][jj]]==11,,DD[[jj][][kk]]==11,,II[[ii][][kk]]==11。。(4)(4)分析各个过程的接口分析各个过程的接口,,估计更估计更改的复杂性改的复杂性。。 2.2.数据跟踪数据跟踪(1)(1)建立各层次的程序级上的接口建立各层次的程序级上的接口图图,展示各模块或过程的调用方式,展示各模块或过程的调用方式和接口参数;和接口参数;(2)(2)利用数据流分析方法,对过程利用数据流分析方法,对过程内部的一些变量进行跟踪。内部的一些变量进行跟踪。可获得可获得有关数据在过程间如何传递有关数据在过程间如何传递,,在过在过程内如何处理程内如何处理等信息。对于判断问等信息。对于判断问题原因特别有用。在跟踪的过程中题原因特别有用。在跟踪的过程中可在源程序中间插入自己的注释。可在源程序中间插入自己的注释。 3.3.控制跟踪控制跟踪控制流跟踪可采用符号执行或实际控制流跟踪可采用符号执行或实际动态跟踪的方法,动态跟踪的方法,了解数据如何从了解数据如何从一个输入源到达输出点的一个输入源到达输出点的。。4.4.充分阅读和使用源程序清单和文充分阅读和使用源程序清单和文档档,分析现有文档的合理性。,分析现有文档的合理性。5.5.充分使用由编译程序或汇编程序提充分使用由编译程序或汇编程序提供的交叉引用表、符号表、以及其供的交叉引用表、符号表、以及其它有用的信息。它有用的信息。6.6.如有可能,积极参加开发工作。如有可能,积极参加开发工作。 修改程序修改程序n对程序的修改,必须事先做出计对程序的修改,必须事先做出计划,有预谋地、周密有效地实施修划,有预谋地、周密有效地实施修改。改。1.1.设计程序的修改计划设计程序的修改计划程序的修改计划要考虑人员和资源程序的修改计划要考虑人员和资源的安排。小的修改可以不需要详细的安排。小的修改可以不需要详细的计划,而对于需要耗时数月的修的计划,而对于需要耗时数月的修改,就需要计划立案。改,就需要计划立案。 在编写有关问题解决的方案时,必在编写有关问题解决的方案时,必须充分描述修改作业的规格说明。须充分描述修改作业的规格说明。规格说明信息:数据修改、处规格说明信息:数据修改、处理修改、作业控制语言修改、系统理修改、作业控制语言修改、系统之间接口的修改等;之间接口的修改等;维护资源:新程序版本、测试维护资源:新程序版本、测试数据、所需软件、计算机时间等;数据、所需软件、计算机时间等;人员;人员;支持支持:纸面、计算机媒体等。:纸面、计算机媒体等。 通常,可采用自顶向下的方法,在通常,可采用自顶向下的方法,在理解程序的基础上,理解程序的基础上,(1)(1)研究程序的各个模块、模块的接研究程序的各个模块、模块的接口、及数据库口、及数据库,从全局的观点,提,从全局的观点,提出修改计划。出修改计划。(2)(2)依次地把依次地把要修改的要修改的、以及、以及那些受那些受修改影响的模块和数据结构修改影响的模块和数据结构分离出分离出来来。为此,要。为此,要识别受修改影响的数据;识别受修改影响的数据;识别使用这些数据的程序模识别使用这些数据的程序模块;块; 对于上面程序模块,按是产生对于上面程序模块,按是产生数据、修改数据、还是删除数据数据、修改数据、还是删除数据进行分类;进行分类;识别对这些数据元素的外部控识别对这些数据元素的外部控制信息;制信息;识别编辑和检查这些数据元素识别编辑和检查这些数据元素的地方;的地方;隔离要修改的部分;隔离要修改的部分; (3)(3)详细地分析详细地分析要修改的要修改的、以及、以及那些那些受变更影响的模块和数据结构受变更影响的模块和数据结构的内的内部细节,部细节,设计修改计划设计修改计划,标明新逻,标明新逻辑及要改动的现有逻辑。辑及要改动的现有逻辑。(4)(4)向用户提供向用户提供回避措施回避措施。用户的某。用户的某些业务因软件中发生问题而中断,些业务因软件中发生问题而中断,为不让系统长时间停止运行,需把为不让系统长时间停止运行,需把问题局部化,问题局部化,在可能的范围内继续在可能的范围内继续开展业务开展业务。。可以采取的措施有:可以采取的措施有: ①①查找问题原因查找问题原因,可能情况有:,可能情况有:意外停机意外停机安装的期限到期安装的期限到期系统运行中发现错误系统运行中发现错误②②如果弄清了问题的原因,可如果弄清了问题的原因,可通过通过临时修改或改变运行控制以回避在临时修改或改变运行控制以回避在系统运行时产生的问题系统运行时产生的问题。。 2.2.修改代码,以适应变化修改代码,以适应变化在修改时,要求:在修改时,要求:(1)(1)正确、有效地编写修改代码;正确、有效地编写修改代码;(2)(2)要谨慎地修改程序,尽量保持要谨慎地修改程序,尽量保持程序的风格及格式,要在程序清程序的风格及格式,要在程序清单上注明改动的指令;单上注明改动的指令;(3)(3)不要删除程序语句,除非完全不要删除程序语句,除非完全肯定它是无用的;肯定它是无用的;(4)(4)不要试图共用程序中已有的临不要试图共用程序中已有的临时变量或工作区,为了避免冲突时变量或工作区,为了避免冲突或混淆用途,应设置自己的变或混淆用途,应设置自己的变量;量; (5)(5)插入错误检测语句;插入错误检测语句;(6)(6)在修改过程中做好修改的详细在修改过程中做好修改的详细记录,消除变更中任何有害的副作记录,消除变更中任何有害的副作用(波动效应);用(波动效应);3.3.修改程序的副作用修改程序的副作用所谓副作用是指因修改软件而造成所谓副作用是指因修改软件而造成的错误或其它不希望发生的情况。的错误或其它不希望发生的情况。副作用有三种:副作用有三种:修改代码的副作用修改代码的副作用、、修改数据的副作用修改数据的副作用、、文档的副作用文档的副作用。。 (1)(1)修改代码的副作用修改代码的副作用n在修改源代码时,都可能引入错误。在修改源代码时,都可能引入错误。例如,例如,删除或修改一个子程序删除或修改一个子程序、、删删除或修改一个标号除或修改一个标号、、删除或修改一删除或修改一个标识符个标识符、、改变程序代码的时序关改变程序代码的时序关系系、、改变占用存储的大小改变占用存储的大小、、改变逻改变逻辑运算符辑运算符、、修改文件的打开或关闭修改文件的打开或关闭、、改进程序的执行效率改进程序的执行效率,以及,以及把设计把设计上的改变翻译成代码的改变上的改变翻译成代码的改变时,都时,都容易引入错误。容易引入错误。 (2)(2)修改数据的副作用修改数据的副作用n在在修改数据结构修改数据结构时,有可能造成时,有可能造成软软件设计与数据结构不匹配件设计与数据结构不匹配,因而导,因而导致软件出错。致软件出错。n数据副作用就是修改软件信息结构数据副作用就是修改软件信息结构导致的结果。导致的结果。n容易导致设计与数据不相容的错误容易导致设计与数据不相容的错误可以有:可以有:u重新定义局部的或全局的常量重新定义局部的或全局的常量 u重新定义记录或文件的格式重新定义记录或文件的格式u增大或减小一个数组或高层数据增大或减小一个数组或高层数据结构的大小结构的大小u修改全局或公共数据修改全局或公共数据u重新初始化控制标志或指针重新初始化控制标志或指针u重新排列输入/输出或子程序的重新排列输入/输出或子程序的参数参数n数据副作用可以通过数据副作用可以通过交叉引用表交叉引用表加加以控制。把数据元素、记录、文件以控制。把数据元素、记录、文件和其它结构联系起来。和其它结构联系起来。 (3)(3)文档的副作用文档的副作用n对对数据流数据流、、软件结构软件结构、、模块逻辑模块逻辑或或任何其它有关特性任何其它有关特性进行修改时,必进行修改时,必须须对相关技术文档进行相应修改对相关技术文档进行相应修改。。否则会导致否则会导致文档与程序功能不匹文档与程序功能不匹配配,,缺省条件改变缺省条件改变,,新错误信息不新错误信息不正确正确等错误。使得等错误。使得软件文档不能反软件文档不能反映软件的当前状态映软件的当前状态。。n对于用户来说,软件事实上就是文对于用户来说,软件事实上就是文档。档。 n如果对可执行软件的修改不反映在如果对可执行软件的修改不反映在文档里,就会产生文档的副作用。文档里,就会产生文档的副作用。u对交互输入的顺序或格式进行修对交互输入的顺序或格式进行修改,如果没有正确地记入文档改,如果没有正确地记入文档中,就可能引起重大的问题。中,就可能引起重大的问题。u过时的文档内容、索引和文本可过时的文档内容、索引和文本可能造成冲突,引起用户失败和不能造成冲突,引起用户失败和不满。满。n因此,因此,必须在软件交付之前对整个必须在软件交付之前对整个软件配置进行评审软件配置进行评审,以减少文档的,以减少文档的副作用。副作用。 n为了控制因修改而引起的副作用,为了控制因修改而引起的副作用,要做到:要做到:(1)(1)按模块把修改分组;按模块把修改分组;(2)(2)自顶向下地安排被修改模块的自顶向下地安排被修改模块的顺序;顺序;(3)(3)每次修改一个模块;每次修改一个模块;(4)(4)对于每个修改了的模块,在安对于每个修改了的模块,在安排修改下一个模块之前,要确定这排修改下一个模块之前,要确定这个修改的副作用。个修改的副作用。可以使用交叉引可以使用交叉引用表、存储映象表、执行流程跟踪用表、存储映象表、执行流程跟踪等。等。 重新验证程序重新验证程序n在将修改后的程序提交用户之在将修改后的程序提交用户之前,需要进行前,需要进行充分的确认和测充分的确认和测试试,以保证整个修改后程序的正,以保证整个修改后程序的正确性。确性。n静态确认静态确认修改软件,伴随着引起新的错误修改软件,伴随着引起新的错误的危险的危险。为了能够做出正确的判。为了能够做出正确的判断,验证修改后的程序至少需要断,验证修改后的程序至少需要两个人参加。要检查:两个人参加。要检查: (1)(1)修改是否涉及到规格说明修改是否涉及到规格说明??修修改结果是否符合规格说明改结果是否符合规格说明??有没有有没有歪曲规格说明歪曲规格说明??(2)(2)程序的修改是否足以修正软件程序的修改是否足以修正软件中的问题中的问题??源程序代码有无逻辑错源程序代码有无逻辑错误误??修改时有无修补失误修改时有无修补失误??(3)(3)修改部分对其它部分有无不良修改部分对其它部分有无不良影响影响((副作用副作用)?)?对软件进行修改,常常会引发别的对软件进行修改,常常会引发别的问题,有必要检查修改的影响范围问题,有必要检查修改的影响范围。。 n计算机确认计算机确认在进行了以上确认的基础上,用计在进行了以上确认的基础上,用计算机对修改程序进行确认测试:算机对修改程序进行确认测试:(1)(1)确认测试顺序确认测试顺序:先对修改部分:先对修改部分进行测试,然后隔离修改部分,测进行测试,然后隔离修改部分,测试程序的未修改部分,最后再把它试程序的未修改部分,最后再把它们集成起来进行测试。这种测试称们集成起来进行测试。这种测试称为回归测试。为回归测试。(2)(2)准备标准的测试用例准备标准的测试用例。。(3)(3)充分利用软件工具帮助重新验充分利用软件工具帮助重新验证过程证过程。。 (4)(4)在重新确认过程中,需邀请用在重新确认过程中,需邀请用户参加户参加。。n维护后的验收维护后的验收────在交付新软件之在交付新软件之前,维护主管部门要检验:前,维护主管部门要检验:(1)(1)全部文档是否完备,并已更全部文档是否完备,并已更新;新;(2)(2)所有测试用例和测试结果已经所有测试用例和测试结果已经正确记载;正确记载;(3)(3)记录软件配置所有副本的工作记录软件配置所有副本的工作已经完成;已经完成;(4)(4)维护工序和责任已经确定。维护工序和责任已经确定。 从维护角度来看所需测试种类从维护角度来看所需测试种类(1)(1)对对修改事务修改事务的测试;的测试;(2)(2)对对修改程序修改程序的测试;的测试;(3)(3)操作过程操作过程的测试;的测试;(4)(4)应用系统运用过程应用系统运用过程的测试;的测试;(5)(5)系统各部分之间接口系统各部分之间接口的测试;的测试;(6)(6)作业控制语言作业控制语言的测试;的测试;(7)(7)与系统软件接口与系统软件接口的测试;的测试; (8)(8)软件系统之间接口软件系统之间接口的测试;的测试;(9)(9)安全性安全性测试;测试;(10)(10)后备/恢复过程后备/恢复过程的测试。的测试。 软件可维护性软件可维护性n许多软件的维护十分困难,原因在许多软件的维护十分困难,原因在于这于这些软件的文档不全些软件的文档不全、、质量差质量差、、开发过程不注意采用好的方法开发过程不注意采用好的方法,,忽忽视程序设计风格视程序设计风格等。等。n许多维护要求并不是因为程序中出许多维护要求并不是因为程序中出错而提出的,而是为错而提出的,而是为适应环境变化适应环境变化或或需求变化需求变化而提出的。而提出的。n为了使得软件能够易于维护,必须为了使得软件能够易于维护,必须考虑使软件具有考虑使软件具有可维护性可维护性。。 软件可维护性的定义软件可维护性的定义n软件可维护性软件可维护性是指是指纠正软件系统出纠正软件系统出现的错误和缺陷,以及为满足新的现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易要求进行修改、扩充或压缩的容易程度程度。。n可维护性可维护性、、可使用性可使用性、、可靠性可靠性是衡是衡量软件质量的主要质量特性,也是量软件质量的主要质量特性,也是用户十分关心的几个方面。用户十分关心的几个方面。n软件的软件的可维护性可维护性是是软件开发阶段各软件开发阶段各个时期的关键目标个时期的关键目标。。 n目前广泛使用的是用如下的七个特目前广泛使用的是用如下的七个特性来衡量程序的可维护性。性来衡量程序的可维护性。可理解性可理解性可使用性可使用性可测试性可测试性可移植性可移植性可修改性可修改性效率效率可靠性可靠性n而且对于不同类型的维护,这七种而且对于不同类型的维护,这七种特性的侧重点也不相同特性的侧重点也不相同。 在各类维护中的侧重点在各类维护中的侧重点改改正正性性维维护护适适应应性性维维护护完完善善性性维维护护可可理理解解性性可可测测试试性性可可修修改改性性可可靠靠性性可可移移植植性性可可使使用用性性效效率率 n这些质量特性通常体现在软件产品这些质量特性通常体现在软件产品的许多方面的许多方面;;n为使每一个质量特性都达到预定的为使每一个质量特性都达到预定的要求,需要在软件开发的各个阶段要求,需要在软件开发的各个阶段采取相应的措施加以保证。采取相应的措施加以保证。n这些质量要求要渗透到而各开发阶这些质量要求要渗透到而各开发阶段的各个步骤当中段的各个步骤当中。因此,软件的。因此,软件的可维护性是产品投入运行以前各阶可维护性是产品投入运行以前各阶段面向上述各质量特性要求进行开段面向上述各质量特性要求进行开发的最终结果。发的最终结果。 可维护性的度量可维护性的度量n人们一直期望人们一直期望对软件的可维护性做对软件的可维护性做出定量度量出定量度量,但要做到这一点并不,但要做到这一点并不容易。容易。n常用的度量一个可维护的程序的七常用的度量一个可维护的程序的七种特性的方法。就是种特性的方法。就是u质量检查表质量检查表u质量测试质量测试u质量标准质量标准 n质量检查表质量检查表是用于测试程序中某些是用于测试程序中某些质量特性是否存在的一个问题清单。质量特性是否存在的一个问题清单。n评价者针对检查表上的每一个问评价者针对检查表上的每一个问题,依据自己的定性判断,回答题,依据自己的定性判断,回答““YesYes””或者或者““NoNo””。。n质量测试质量测试与与质量标准质量标准则用于定量分则用于定量分析和评价程序的质量。析和评价程序的质量。n由于许多质量特性是相互抵触的,由于许多质量特性是相互抵触的,要要考虑几种不同的度量标准考虑几种不同的度量标准,相应,相应地去度量不同的质量特性。地去度量不同的质量特性。 1.1.可理解性可理解性n可理解性表明人们通过阅读源代码可理解性表明人们通过阅读源代码和相关文档,了解程序功能及其如和相关文档,了解程序功能及其如何运行的容易程度。何运行的容易程度。n一个可理解的程序应具备以下一些一个可理解的程序应具备以下一些特性:特性:模块化模块化,,风格一致性风格一致性,,不使不使用令人捉摸不定或含糊不清的代用令人捉摸不定或含糊不清的代码码,,使用有意义的数据名和过程使用有意义的数据名和过程名名,,结构化结构化,,完整性完整性等。等。 2.2.可靠性可靠性n可靠性表明一个程序按照用户的要可靠性表明一个程序按照用户的要求和设计目标,在给定的一段时间求和设计目标,在给定的一段时间内正确执行的概率。内正确执行的概率。n关于可靠性,度量的标准主要有:关于可靠性,度量的标准主要有:u平均失效间隔时间平均失效间隔时间MTTFMTTFu平均修复时间平均修复时间MTTRMTTRu有效性有效性AA==MTBD/(MTBD+MDT)MTBD/(MTBD+MDT) 度量可靠性的方法度量可靠性的方法u根据程序错误统计数字,进行可靠根据程序错误统计数字,进行可靠性预测性预测。常用方法是利用一些。常用方法是利用一些可靠性可靠性模型模型,,根据程序测试时发现并排除的根据程序测试时发现并排除的错误数预测平均失效间隔时间错误数预测平均失效间隔时间MTTFMTTF。。u根据程序复杂性,预测软件可靠性根据程序复杂性,预测软件可靠性。。用程序复杂性预测可靠性,用程序复杂性预测可靠性,前提条件前提条件是可靠性与复杂性有关是可靠性与复杂性有关。因此可用复。因此可用复杂性预测出错率。程序复杂性度量标杂性预测出错率。程序复杂性度量标准可用于准可用于预测哪些模块最可能发生错预测哪些模块最可能发生错误误,以及,以及可能出现的错误类型可能出现的错误类型。。 3.3.可测试性可测试性n可测试性表明论证程序正确性的容易可测试性表明论证程序正确性的容易程度程度。程序越简单,证明其正确性就。程序越简单,证明其正确性就越容易。而且设计合用的测试用例,越容易。而且设计合用的测试用例,取决于对程序的全面理解。取决于对程序的全面理解。n一个可测试的程序应当是一个可测试的程序应当是可理解的可理解的,,可靠的可靠的,,简单的简单的。。n用于可测试性度量的检查项目如下:用于可测试性度量的检查项目如下:u程序是否模块化程序是否模块化??结构是否良好结构是否良好?? u程序是否可理解程序是否可理解??程序是否可靠程序是否可靠??u程序是否能显示任意中间结果程序是否能显示任意中间结果??u程序是否能以清楚的方式描述它的程序是否能以清楚的方式描述它的输出输出??u程序是否能及时地按照要求显示所程序是否能及时地按照要求显示所有的输入有的输入??u程序是否有跟踪及显示逻辑控制流程序是否有跟踪及显示逻辑控制流程的能力程的能力??u程序是否能从检查点再启动程序是否能从检查点再启动??u程序是否能显示带说明的错误信息程序是否能显示带说明的错误信息?? 4.4.可修改性可修改性n可修改性表明程序容易修改的程度可修改性表明程序容易修改的程度。。n一个可修改的程序应当是一个可修改的程序应当是可理解的可理解的、、通用的通用的、、灵活的灵活的、、简单的简单的。。n通用性是指程序适用于各种功能变通用性是指程序适用于各种功能变化而无需修改。化而无需修改。n灵活性是指能够容易地对程序进行灵活性是指能够容易地对程序进行修改。修改。 n测试可修改性的一种定量方法是测试可修改性的一种定量方法是修改练习修改练习。其基本思想是。其基本思想是通过做通过做几个简单的修改几个简单的修改,,来评价修改的来评价修改的难度难度。。n设设CC是程序中各个模块的平均复杂是程序中各个模块的平均复杂性,性,nn是必须修改的模块数,是必须修改的模块数,AA是是要修改的模块的平均复杂性。要修改的模块的平均复杂性。则则修改的难度修改的难度DD由下式计算:由下式计算:D=A/CD=A/C 5.5.可移植性可移植性n可移植性表明程序转移到一个新的可移植性表明程序转移到一个新的计算环境的可能性的大小计算环境的可能性的大小。或者它。或者它表明程序可以容易地、有效地在各表明程序可以容易地、有效地在各种各样的计算环境中运行的容易程种各样的计算环境中运行的容易程度。度。n一个可移植的程序应具有一个可移植的程序应具有结构良好结构良好、、灵活灵活、、不依赖于某一具体计算机或不依赖于某一具体计算机或操作系统的性能操作系统的性能。。n用于可移植性度量的检查项目如下:用于可移植性度量的检查项目如下: u是否是用高级的独立于机器的语言是否是用高级的独立于机器的语言来编写程序来编写程序??u是否使用广泛使用的标准化的程序是否使用广泛使用的标准化的程序设计语言来编写程序设计语言来编写程序??是否仅使用是否仅使用了这种语言的标准版本和特性了这种语言的标准版本和特性??u程序中是否使用了标准的普遍使用程序中是否使用了标准的普遍使用的库功能和子程序的库功能和子程序??u程序中是否极少使用或根本不使用程序中是否极少使用或根本不使用操作系统的功能操作系统的功能?? u程序在执行之前是否初始化内存程序在执行之前是否初始化内存??u程序在执行之前是否测定当前的程序在执行之前是否测定当前的输入/输出设备输入/输出设备??u程序是否把与机器相关的语句分程序是否把与机器相关的语句分离了出来,集中放在了一些单独的离了出来,集中放在了一些单独的程序模块中,并有说明文件程序模块中,并有说明文件??u程序是否结构化程序是否结构化??并允许在小一些并允许在小一些的计算机上分段的计算机上分段((覆盖覆盖))运行运行??u程序中是否避免了依赖于字母数程序中是否避免了依赖于字母数字或特殊字符的内部位表示字或特殊字符的内部位表示?? 6.6.效率效率n效率表明一个程序能执行预定功能效率表明一个程序能执行预定功能而又不浪费机器资源的程度而又不浪费机器资源的程度。n这些机器资源包括这些机器资源包括内存容量内存容量、、外存外存容量容量、、通道容量通道容量和和执行时间执行时间。。n用于效率度量的检查项目如下用于效率度量的检查项目如下:u程序是否模块化程序是否模块化??结构是否良好结构是否良好??u是否消除了无用的标号与表达是否消除了无用的标号与表达式,以充分发挥编译器优化作用式,以充分发挥编译器优化作用?? u程序的编译器是否有优化功能程序的编译器是否有优化功能??u是否把特殊子程序和错误处理是否把特殊子程序和错误处理子程序都归入了单独的模块中子程序都归入了单独的模块中??u是否以快速的数学运算代替了是否以快速的数学运算代替了较慢的数学运算较慢的数学运算??u是否尽可能地使用了整数运是否尽可能地使用了整数运算,而不是实数运算算,而不是实数运算??u是否在表达式中避免了混合数是否在表达式中避免了混合数据类型的使用,消除了不必要的据类型的使用,消除了不必要的类型转换类型转换?? u程序是否避免了非标准的函数或程序是否避免了非标准的函数或子程序的调用子程序的调用??u在几条分支结构中,是否最有可在几条分支结构中,是否最有可能为能为““真真””的分支首先得到测试的分支首先得到测试??u在复杂的逻辑条件中,是否最有在复杂的逻辑条件中,是否最有可能为可能为““真真““的表达式首先得到测的表达式首先得到测试试?? 7.7.可使用性可使用性n从用户观点出发,从用户观点出发,可使用性定义为可使用性定义为程序方便、实用、及易于使用的程程序方便、实用、及易于使用的程度度。一个可使用的程序应是。一个可使用的程序应是易于使易于使用的用的、、能允许用户出错和改变能允许用户出错和改变,并,并尽可能不使用户陷入混乱状态的尽可能不使用户陷入混乱状态的程程序。序。n用于可使用性度量的检查项目如下:用于可使用性度量的检查项目如下:u程序是否具有自描述性程序是否具有自描述性?? u程序是否能始终如一地按照用户程序是否能始终如一地按照用户的要求运行的要求运行??u程序是否让用户对数据处理有一程序是否让用户对数据处理有一个满意的和适当的控制个满意的和适当的控制??u程序是否容易学会使用程序是否容易学会使用??u程序是否使用数据管理系统来自程序是否使用数据管理系统来自动地处理事务性工作和管理格式动地处理事务性工作和管理格式化、地址分配及存储器组织。化、地址分配及存储器组织。u程序是否具有容错性程序是否具有容错性??u程序是否灵活程序是否灵活?? 其它间接定量度量可维护性的方法其它间接定量度量可维护性的方法n问题识别的时间;问题识别的时间;n因管理活动拖延的时间;因管理活动拖延的时间;n收集维护工具的时间;收集维护工具的时间;n分析、诊断问题的时间;分析、诊断问题的时间;n修改规格说明的时间;修改规格说明的时间;n具体的改错或修改的时间;具体的改错或修改的时间;n局部测试的时间;局部测试的时间;n集成或回归测试的时间;集成或回归测试的时间;n维护的评审时间;维护的评审时间; n这些数据反映了维护全过程中这些数据反映了维护全过程中检错检错-纠错-验证-纠错-验证的周期,即的周期,即从检测出从检测出软件存在的问题开始至修正它们并软件存在的问题开始至修正它们并经回归测试验证这段时间经回归测试验证这段时间。。n可以粗略地认为,可以粗略地认为,这个周期越短,这个周期越短,维护越容易维护越容易。。 提高可维护性的方法提高可维护性的方法n建立明确的软件质量目标和建立明确的软件质量目标和优先级优先级n使用提高软件质量的技术和使用提高软件质量的技术和工具工具n进行明确的质量保证审查进行明确的质量保证审查n选择可维护的程序设计语言选择可维护的程序设计语言n改进程序的文档改进程序的文档 建立明确的软件质量目标和优先级建立明确的软件质量目标和优先级n一个可维护的程序应是一个可维护的程序应是可理解的可理解的、、可靠的可靠的、、可测试的可测试的、、可修改的可修改的、、可可移植的移植的、、效率高的效率高的、、可使用的可使用的。。n要实现这所有的目标,需要付出很要实现这所有的目标,需要付出很大的代价,而且也不一定行得通。大的代价,而且也不一定行得通。n某些质量特性是相互促进的某些质量特性是相互促进的,例如,例如可理解性和可测试性、可理解性和可理解性和可测试性、可理解性和可修改性。可修改性。 n另一些质量特性是相互抵触的另一些质量特性是相互抵触的,如,如效率和可移植性、效率和可修改性效率和可移植性、效率和可修改性等。等。n每一种每一种质量特性质量特性的的相对重要性相对重要性应随应随程序的用途及计算环境的不同而不程序的用途及计算环境的不同而不同同。例如,对编译程序来说,可能。例如,对编译程序来说,可能强调效率;但对管理信息系统来强调效率;但对管理信息系统来说,则可能强调可使用性和可修改说,则可能强调可使用性和可修改性。性。n应当对程序的质量特性,在应当对程序的质量特性,在提出目提出目标标的同时还必须的同时还必须规定它们的优先级规定它们的优先级。。 使用提高软件质量的技术和工具使用提高软件质量的技术和工具n模块化模块化u如果需要改变某个模块的功能,如果需要改变某个模块的功能,则只要改变这个模块,对其它模块则只要改变这个模块,对其它模块影响很小;影响很小;u如果需要增加程序的某些功能,如果需要增加程序的某些功能,则仅需增加完成这些功能的新的模则仅需增加完成这些功能的新的模块或模块层;块或模块层;u程序的测试与重复测试比较容程序的测试与重复测试比较容易;易;u程序错误易于定位和纠正;程序错误易于定位和纠正; n结构化程序设计结构化程序设计u程序被划分成分层的模块结构;程序被划分成分层的模块结构;u模块调用控制必须从模块的入口模块调用控制必须从模块的入口点进入,从其出口点退出。点进入,从其出口点退出。u模块的控制结构仅限于顺序、选模块的控制结构仅限于顺序、选择、重复三种,且没有择、重复三种,且没有GOTOGOTO语语句。句。u每个程序变量只用于唯一的程序每个程序变量只用于唯一的程序目的,而且变量的作用范围应是目的,而且变量的作用范围应是明确的、有限制的。明确的、有限制的。 n使用结构化程序设计技术,提高现使用结构化程序设计技术,提高现有系统的可维护性有系统的可维护性u采用备用件的方法采用备用件的方法────用一个新的用一个新的结构良好的模块替换掉整个要修改结构良好的模块替换掉整个要修改的模块。的模块。u采用自动重建结构和重新格式化采用自动重建结构和重新格式化的工具的工具((结构更新技术结构更新技术))────把非结构把非结构化代码转换成良好结构代码化代码转换成良好结构代码。。u改进现有程序的不完善的文档改进现有程序的不完善的文档────建立或补充系统说明书、设计文档、建立或补充系统说明书、设计文档、模块说明书、以及在源程序中插入模块说明书、以及在源程序中插入必要的注释。必要的注释。 进行明确的质量保证审查进行明确的质量保证审查n质量保证审查质量保证审查对于对于获得和维持软件获得和维持软件的质量的质量,是一个很有用的技术。,是一个很有用的技术。n审查审查可以用来可以用来检测在开发和维护阶检测在开发和维护阶段内发生的质量变化段内发生的质量变化。。n一旦检测出问题来,就可以采取措一旦检测出问题来,就可以采取措施来纠正,以控制不断增长的软件施来纠正,以控制不断增长的软件维护成本,延长软件系统的有效生维护成本,延长软件系统的有效生命期。命期。 1.1.在检查点进行复审在检查点进行复审n保证软件质量的最佳方法是保证软件质量的最佳方法是在软件在软件开发的最初阶段把质量要求考虑进开发的最初阶段把质量要求考虑进去去,并,并在开发过程每一阶段的终在开发过程每一阶段的终点点,,设置检查点进行检查设置检查点进行检查。。n检查的目的是要证实,已开发的软检查的目的是要证实,已开发的软件件是否符合标准是否符合标准,,是否满足规定的是否满足规定的质量需求质量需求。在不同的检查点,检查。在不同的检查点,检查的重点不完全相同。的重点不完全相同。 软件开发期间各个检查点的检查重点软件开发期间各个检查点的检查重点 n在设计阶段,检查重点是在设计阶段,检查重点是可理解性可理解性、、可修改性可修改性、、可测试性可测试性。。n可理解性可理解性检查的重点是检查的重点是程序的复杂程序的复杂性性。对每个模块可用。对每个模块可用McCabeMcCabe环路环路来计算模块的复杂性,若大于来计算模块的复杂性,若大于1010,,则需重新设计。则需重新设计。n可以使用各种可以使用各种质量特性检查表质量特性检查表,或,或用用度量标准度量标准来检查可维护性。来检查可维护性。n审查小组可以采用人工测试一类的审查小组可以采用人工测试一类的方式,进行审查。方式,进行审查。 2.2.验收检查验收检查n验收检查验收检查是一个是一个特殊的检查点特殊的检查点的检的检查,是交付使用前的查,是交付使用前的最后一次检最后一次检查查,,n验收检查验收检查实际上是实际上是验收测试验收测试的一部的一部分,只不过它是从维护的角度提出分,只不过它是从维护的角度提出验收的条件和标准。验收的条件和标准。n验收检查必须遵循的最小验收标准。验收检查必须遵循的最小验收标准。 (1)(1)需求和规范标准需求和规范标准①①需求应当以可测试的术语进行需求应当以可测试的术语进行书写,排列优先次序和定义;书写,排列优先次序和定义;②②区分必须的、任选的、将来的区分必须的、任选的、将来的需求;需求;③③包括对系统运行时的计算机设包括对系统运行时的计算机设备的需求;对维护、测试、操作、备的需求;对维护、测试、操作、以及维护人员的需求;对测试工具以及维护人员的需求;对测试工具等的需求。等的需求。 (2)(2)设计标准设计标准①①程序应设计成分层的模块结程序应设计成分层的模块结构。每个模块应完成唯一的功能,构。每个模块应完成唯一的功能,并达到高内聚、低耦合;并达到高内聚、低耦合;②②通过一些知道预期变化的实通过一些知道预期变化的实例,说明设计的可扩充性、可缩减例,说明设计的可扩充性、可缩减性和可适应性。性和可适应性。 (3)(3)源代码标准源代码标准①①尽可能使用最高级的程序设尽可能使用最高级的程序设计语言,且只使用语言的标准版计语言,且只使用语言的标准版本;本;②②所有的代码都必须具有良好所有的代码都必须具有良好的结构;的结构;③③所有的代码都必须文档化,所有的代码都必须文档化,在注释中说明它的输入、输出、以在注释中说明它的输入、输出、以及便于测试/再测试的一些特点与及便于测试/再测试的一些特点与风格。风格。 (4)(4)文档标准文档标准文档中应说明文档中应说明F程序的输入/输出程序的输入/输出F使用的方法/算法使用的方法/算法F错误恢复方法错误恢复方法F所有参数的范围所有参数的范围F缺省条件等。缺省条件等。 3.3.周期性地维护审查周期性地维护审查n检查点复查检查点复查和和验收检查验收检查,可用来,可用来保保证新软件系统的可维护性证新软件系统的可维护性。。n对已有的软件系统,则应当对已有的软件系统,则应当进行周进行周期性的维护检查期性的维护检查。。n软件在运行期间进行修改,会导致软件在运行期间进行修改,会导致软件质量有变坏的危险,破坏程序软件质量有变坏的危险,破坏程序概念的完整性。概念的完整性。n必须必须定期检查定期检查,对软件做周期性的,对软件做周期性的维护审查,维护审查,以跟踪软件质量的变化以跟踪软件质量的变化。。 n周期性维护审查周期性维护审查实际上是开发阶段实际上是开发阶段检查点复查的继续,并且检查点复查的继续,并且采用的检采用的检查方法查方法、、检查内容都是相同的检查内容都是相同的。。n维护审查的结果维护审查的结果可以同可以同以前的维护以前的维护审查的结果审查的结果,,以前的验收检查的结以前的验收检查的结果果、、检查点检查的结果检查点检查的结果相比较,任相比较,任何一种改变都表明在软件质量上或何一种改变都表明在软件质量上或其它类型的问题上可能起了变化。其它类型的问题上可能起了变化。n对于改变的原因应当进行分析对于改变的原因应当进行分析。。 4.4.对软件包进行检查对软件包进行检查n软件包软件包是一种是一种标准化标准化的,可的,可为不同为不同单位单位、、不同用户使用不同用户使用的软件。的软件。n一般一般源代码和程序文档源代码和程序文档不会提供给不会提供给用户。用户。n对软件包的维护采取以下方法。对软件包的维护采取以下方法。u使用单位的维护人员首先要仔细使用单位的维护人员首先要仔细分析、研究卖主提供的用户手册、分析、研究卖主提供的用户手册、操作手册、培训教程等,以及卖操作手册、培训教程等,以及卖方提供的验收测试报告等。方提供的验收测试报告等。 u在此基础上,深入在此基础上,深入了解本单位的希了解本单位的希望和要求望和要求,,编制软件包的检验程序编制软件包的检验程序。。检查软件包程序所执行的功能是否检查软件包程序所执行的功能是否与用户的要求和条件相一致。与用户的要求和条件相一致。u为了建立这个程序,维护人员可以为了建立这个程序,维护人员可以利用卖方提供的验收测试实例利用卖方提供的验收测试实例,还,还可以自可以自己重新设计新的测试实例己重新设计新的测试实例。。u根据测试结果,检查和验证软件包根据测试结果,检查和验证软件包的参数或控制结构,以完成软件包的参数或控制结构,以完成软件包的维护。的维护。 选择可维护的程序设计语言选择可维护的程序设计语言n程序设计语言的选择,对程序的可程序设计语言的选择,对程序的可维护性影响很大。维护性影响很大。 机器语言机器语言汇编语言汇编语言高级语言高级语言查询语言查询语言((FORTRANFORTRAN、、报表生成语言报表生成语言COBOLCOBOL等等))图象语言图象语言应用生成语言应用生成语言 改进程序的文档改进程序的文档n程序文档是对程序程序文档是对程序总目标总目标、、程序各程序各组成部分之间的关系组成部分之间的关系、、程序设计策程序设计策略略、、程序实现过程的历史数据程序实现过程的历史数据等的等的说明和补充。说明和补充。n即使是一个十分简单的程序,要想即使是一个十分简单的程序,要想有效地、高效率地维护它,也需要有效地、高效率地维护它,也需要编制文档来解释其目的及任务。编制文档来解释其目的及任务。 n对于程序维护人员来说,要想对于程序维护人员来说,要想按程按程序编制人员的意图重新改造程序序编制人员的意图重新改造程序,,并对今后变化的可能性进行估计,并对今后变化的可能性进行估计,缺了文档是不行的。缺了文档是不行的。n因此,为了维护程序,人们必须阅因此,为了维护程序,人们必须阅读和理解文档。读和理解文档。n另外,在软件维护阶段,利用另外,在软件维护阶段,利用历史历史文档文档,可以大大简化维护工作。通,可以大大简化维护工作。通过了解原设计思想,可以判断出错过了解原设计思想,可以判断出错之处,指导维护人员选择适当的方之处,指导维护人员选择适当的方法修改代码而不危及系统的完整性。法修改代码而不危及系统的完整性。 n历史文档有三种:历史文档有三种:u系统开发日志系统开发日志u错误记载错误记载u系统维护日志系统维护日志 n什么是软件工程标准什么是软件工程标准n软件工程标准的层次软件工程标准的层次n中国的软件标准中国的软件标准nISO9000-3ISO9000-3标准及软件质量认证标准及软件质量认证n软件文档的作用与分类软件文档的作用与分类n对文档编制的质量要求对文档编制的质量要求 什么是软件工程标准什么是软件工程标准n软件危机的出路在于软件开发的软件危机的出路在于软件开发的工程工程化化和和标准化标准化。。n程序设计语言的标准化程序设计语言的标准化:为某一程序:为某一程序设计语言规定若干个标准子集,对于设计语言规定若干个标准子集,对于语言的实现者和用户都带来了很大方语言的实现者和用户都带来了很大方便。便。n软件过程的标准化软件过程的标准化:软件生存期各个:软件生存期各个阶段的工作建立标准或规范。阶段的工作建立标准或规范。 软件工程标准的类型软件工程标准的类型n国家标准国家标准GBGB//T15538T15538--19951995《《软件工软件工程标准分类法程标准分类法》给出软件工程标准的》给出软件工程标准的分类。分类。n涉及涉及过程管理过程管理、、产品管理产品管理、、资源管资源管理理,以及,以及确认与验证确认与验证。。 n过程标准过程标准方法、技术、度量方法、技术、度量n产品标准产品标准需求、设计、部件、描述、计划、报需求、设计、部件、描述、计划、报告告n专业标准专业标准职别、道德准则、认证、特许、课职别、道德准则、认证、特许、课程程n记法标准记法标准术语、表示法、语言术语、表示法、语言 n软件工程标准的清单可用软件工程标准的清单可用二维表二维表表示。表示。n表中填入的标准表明了表中填入的标准表明了软件工程标准软件工程标准的工作范围的工作范围和和如何对标准分类如何对标准分类。。n已经制定的标准都可在表中找到相应已经制定的标准都可在表中找到相应的位置,而且它可启发人们去制定新的位置,而且它可启发人们去制定新的标准。的标准。 软件工程标准化的作用软件工程标准化的作用n可提高软件的可提高软件的可靠性可靠性、、可维护性可维护性和和可可移植性移植性;;n可提高软件人员的可提高软件人员的技术水平技术水平,减少差,减少差错和误解;错和误解;n可提高软件人员之间的可提高软件人员之间的通信效率通信效率,提,提高软件的高软件的生产率生产率;;n有利于软件管理;有利于有利于软件管理;有利于降低软件产降低软件产品的成本品的成本和和运行维护成本运行维护成本;;n有利于有利于缩短软件开发周期缩短软件开发周期。。 软件工程标准的层次软件工程标准的层次(1)(1)国际标准国际标准由国际联合机构制定和公布,提供各由国际联合机构制定和公布,提供各国参考的标准。国参考的标准。u国际标准化组织国际标准化组织ISOISO((InternationalInternationalStandardsOrganizationStandardsOrganization))u这一国际机构有着广泛的代表性和权这一国际机构有着广泛的代表性和权威性,它所公布的标准也有较大的影威性,它所公布的标准也有较大的影响。响。 uISOISO建立了建立了““计算机与信息处理技术委计算机与信息处理技术委员会员会””,,简称简称ISOISO//TC97TC97,,专门负责与专门负责与计算机有关的标准化工作。计算机有关的标准化工作。u这一标准通常冠有这一标准通常冠有ISOISO字样,如字样,如ISO8631ISO8631--86Information86Informationprocessing_programconstructsandprocessing_programconstructsandconventionsfortheirrepresentationconventionsfortheirrepresentation《《信息处理信息处理────程序构造及其表示法的程序构造及其表示法的约定约定》。该标准现已由中国收入国家》。该标准现已由中国收入国家标准。标准。 (2)(2)国家标准国家标准由政府或国家级的机构制定或批准,适由政府或国家级的机构制定或批准,适用于全国范围的标准用于全国范围的标准,如:,如:uGBGB────中华人民共和国国家技术监督中华人民共和国国家技术监督局局公布实施的标准,简称公布实施的标准,简称““国标国标””。现已。现已批准了若干软件工程标准。批准了若干软件工程标准。uANSIANSI((AmericanNationalStandardsAmericanNationalStandardsInstituteInstitute))────美国国家标准协会。这美国国家标准协会。这是美国一些民间标准化组织的领导机是美国一些民间标准化组织的领导机构,构, uFIPSFIPS((NBSNBS)){{FederalInformationFederalInformationProcessingStandardsProcessingStandards((NationalNationalBureauofStandardsBureauofStandards))}}────美国商务美国商务部国家标准局联邦信息处理标准。部国家标准局联邦信息处理标准。uBSBS((BritishStandardBritishStandard))────英国国家标英国国家标准。准。uDINDIN((DeutschesInstitutfDeutschesInstitutfüürrNor-Nor-mungmung))────德国标准协会德国标准协会uJISJIS((JapaneseIndustrialStandardJapaneseIndustrialStandard))────日本工业标准日本工业标准 (3)(3)行业标准行业标准由行业机构、学术团体或国防机构制由行业机构、学术团体或国防机构制定,适用于某个业务领域的标准。定,适用于某个业务领域的标准。uIEEEIEEE((InstituteofElectricalandInstituteofElectricalandElectronicsEngineersElectronicsEngineers))────美国电气美国电气与电子工程师学会与电子工程师学会。。该学会有一个该学会有一个软件标准分技术委员会软件标准分技术委员会((SESSSESS)),,负责软件标准化活动。负责软件标准化活动。IEEEIEEE公布的标准常冠有公布的标准常冠有ANSIANSI的字头。例的字头。例如,如,ANSIANSI//IEEEIEEEStrStr828828--19831983《《软软件配置管理计划标准件配置管理计划标准》。》。 nGJBGJB────中华人民共和国国家军用标准。中华人民共和国国家军用标准。这是由这是由中国国防科学技术工业委员会中国国防科学技术工业委员会批准,适合于国防部门和军队使用的批准,适合于国防部门和军队使用的标准。例如,标准。例如,GJB437GJB437--8888《《军用软件军用软件开发规范开发规范》。》。nDOD_STDDOD_STD((DepartmentOfDefenseDepartmentOfDefense__STanDardsSTanDards))────美国国防部标准,适美国国防部标准,适用于美国国防部门。用于美国国防部门。nMIL_SMIL_S((MILitaryMILitary_Standard_Standard))────美国美国军用标准,适用于美军内部。军用标准,适用于美军内部。 (4)(4)企业规范企业规范一些大型企业或公司,由于软件工程一些大型企业或公司,由于软件工程工作的需要,制定适用于本部门的规工作的需要,制定适用于本部门的规范。范。u例如,例如,美国美国IBMIBM公司通用产品部公司通用产品部19841984年制定的《年制定的《程序设计开发指南程序设计开发指南》,仅》,仅供该公司内部使用。供该公司内部使用。(5)(5)项目规范项目规范由某一科研生产项目组织制定,为该由某一科研生产项目组织制定,为该项任务专用的软件工程规范。项任务专用的软件工程规范。 中国的软件标准中国的软件标准从从19831983年起,中国已陆续制定和发布年起,中国已陆续制定和发布了了2020项国家标准。这些标准可分为项国家标准。这些标准可分为44类:类:①①基础标准基础标准uGB/T11457-89GB/T11457-89软件工程术语软件工程术语uGB1526-891GB1526-891((ISO5807-1985ISO5807-1985))信息信息处理处理----数据流程图、程序流程图、系数据流程图、程序流程图、系统结构图、程序网络图和系统资源图统结构图、程序网络图和系统资源图的文件编制符号及约定的文件编制符号及约定 uGB/T15538-1995GB/T15538-1995软件工程标准分类软件工程标准分类法法uGB13502-92GB13502-92((ISO8631ISO8631))信息处理信息处理----程序构造及其表示法的约定程序构造及其表示法的约定uGB/T15535-1995GB/T15535-1995((ISO5806ISO5806))信息信息处理处理----单命中判定表规范单命中判定表规范uGB/T14085-93GB/T14085-93((ISO8790ISO8790))信息处信息处理系统理系统计算机系统配置图符号及其约计算机系统配置图符号及其约定定 ②②开发标准开发标准uGB8566-88GB8566-88软件开发规范软件开发规范uGBGB计算机软件单元测试计算机软件单元测试uGBGB软件支持环境软件支持环境uGBGB((ISO6593-1985ISO6593-1985))信息处理信息处理----按记按记录组处理顺序文卷的程序流程录组处理顺序文卷的程序流程uGB/T14079-93GB/T14079-93软件维护指南软件维护指南③③文档标准文档标准uGB8567-88GB8567-88计算机软件产品开发文件计算机软件产品开发文件编制指南编制指南 uGB9385-88GB9385-88计算机软件需求说明编制计算机软件需求说明编制指南指南uGB9386-88GB9386-88计算机软件测试文件编制计算机软件测试文件编制规范规范uGBGB软件文档管理指南软件文档管理指南④④管理标准管理标准uGB/T12505-90GB/T12505-90计算机软件配置管理计算机软件配置管理计划规范计划规范uGBGB信息技术信息技术软件产品评价软件产品评价----质量特质量特性及其使用指南性及其使用指南 uGB12504-90GB12504-90计算机软件质量保证计计算机软件质量保证计划规范划规范uGB/T14394-93GB/T14394-93计算机软件可靠性和计算机软件可靠性和可维护性管理可维护性管理uGB/T19000-3-94GB/T19000-3-94质量管理和质量保质量管理和质量保证标准证标准第三部分:第三部分:在软件开发、供应和维护中的使在软件开发、供应和维护中的使用指南用指南。。 ISO9000-3ISO9000-3标准及软件质量认证标准及软件质量认证nISO9000ISO9000国际标准发源于欧洲经济共同国际标准发源于欧洲经济共同体,但很快就波及美国、日本及世界各体,但很快就波及美国、日本及世界各国。到目前为止,已有国。到目前为止,已有7070多个国家在它多个国家在它们的企业中采用和实施这一系列标准。们的企业中采用和实施这一系列标准。n中国对此也十分重视,确定对其中国对此也十分重视,确定对其等同采等同采用用,发布了与其相应的,发布了与其相应的质量管理国家标质量管理国家标准系列准系列GBGB//T19000T19000;;同时积极组织实同时积极组织实施和开展质量认证工作。施和开展质量认证工作。 nISO9000ISO9000系列标准系列标准如此迅速地在国际上如此迅速地在国际上广为流行,其原因主要在于:广为流行,其原因主要在于:u市场经济,特别是国际贸易的驱动市场经济,特别是国际贸易的驱动。。ISO9000ISO9000系列标准系列标准客观地对客观地对生产生产者者((也称供方也称供方))提出了全面的提出了全面的质量管理要求质量管理要求、、质量管理办法质量管理办法,并且还规定了,并且还规定了消费者消费者((也称需方也称需方))的的管理职责管理职责,使其得到双方,使其得到双方的普遍认同,从而将符合的普遍认同,从而将符合ISO9000ISO9000标准标准的要求作为的要求作为国际贸易活动中建立互相国际贸易活动中建立互相信任关系的基石信任关系的基石。。 在各国企业中形成了在各国企业中形成了不通过这一标不通过这一标准认证就不具备参与国际市场竞争实准认证就不具备参与国际市场竞争实力力的潮流,并且在国际贸易中,的潮流,并且在国际贸易中,把生把生产者是否达到产者是否达到ISO9000ISO9000质量标准作为质量标准作为购买产品的前提条件购买产品的前提条件,取得,取得ISO9000ISO9000质量标准认证被人们当做进入国际市质量标准认证被人们当做进入国际市场的通行证。场的通行证。 uISO9000ISO9000系列标准适用领域广阔系列标准适用领域广阔。。1)1)硬件硬件:具有特定形状的产品,如:具有特定形状的产品,如机械、电子产品,包括计算机硬件。机械、电子产品,包括计算机硬件。2)2)软件软件:通过媒体表达的信息所构:通过媒体表达的信息所构成的智力产品。包括计算机软件。成的智力产品。包括计算机软件。3)3)流程性材料流程性材料:将原料转化为某一:将原料转化为某一特定状态的产品。如,流体、粒状、线特定状态的产品。如,流体、粒状、线状等,通过瓶装、袋装等或通过管道传状等,通过瓶装、袋装等或通过管道传输交付。输交付。4)4)服务服务:为满足客户需求的更为广:为满足客户需求的更为广泛的活动。泛的活动。 ISO9000ISO9000系列标准的内容系列标准的内容nISO9000ISO9000质量管理和质量保证标准质量管理和质量保证标准────选择和使用的导则选择和使用的导则nISO9001ISO9001质量体系质量体系────设计/开发、生设计/开发、生产、安装和服务中的质量保证模式产、安装和服务中的质量保证模式nISO9002ISO9002质量体系质量体系────生产和安装中的生产和安装中的质量保证模式质量保证模式nISO9003ISO9003质量体系质量体系────最终检验和测试最终检验和测试中的质量保证模式中的质量保证模式nISO9004ISO9004质量管理和质量体系要素质量管理和质量体系要素────导则导则 nISO9000ISO9000系列标准系列标准的主体部分可以分为的主体部分可以分为两组:两组:u一组是用于一组是用于““需方对供方要求质量保需方对供方要求质量保证证””的标准的标准────90019001~~90039003;;u一组是用于一组是用于““供方建立质量保证体系供方建立质量保证体系””的标准的标准────90049004。。n90019001、、90029002和和90039003之间的区别,在于之间的区别,在于其对象的工序范围不同其对象的工序范围不同::u90019001范围最广,包括从设计直到售后范围最广,包括从设计直到售后服务;服务;90029002为为90019001的子集,而的子集,而90039003又又是是90029002的子集。的子集。 ISO9000-3ISO9000-3标准标准nISO9000ISO9000系列标准系列标准原本是为制造硬件原本是为制造硬件产品而制定的标准,不能直接用于软产品而制定的标准,不能直接用于软件制作。件制作。n曾试图将曾试图将90019001改写用于软件开发方改写用于软件开发方面,但效果不佳。面,但效果不佳。n以以ISO9000ISO9000系列标准系列标准的追加形式,另的追加形式,另行制定出行制定出ISO9000-3ISO9000-3标准标准。。nISO9000-3ISO9000-3成为成为““使使90019001适用于软件开适用于软件开发、供应及维护发、供应及维护””的的““指南指南””。。 制定与实施制定与实施ISO9000ISO9000系列标准的系列标准的主导思想主导思想(1)(1)强调质量并非在产品检验中得到,强调质量并非在产品检验中得到,而是形成于生产的全过程。而是形成于生产的全过程。uISO9000-3ISO9000-3叙述了需方和供方叙述了需方和供方应如应如何进行何进行有组织的质量保证活动,才有组织的质量保证活动,才能得到较为满意的软件;规定了能得到较为满意的软件;规定了从从双方签订开发合同到设计双方签订开发合同到设计、、实现以实现以至维护整个软件生存期中至维护整个软件生存期中应当实施应当实施的质量保证活动的质量保证活动 uISO9000-3ISO9000-3没有规定具体的质量管没有规定具体的质量管理和质量检验方法和步骤。理和质量检验方法和步骤。uISO9000-3ISO9000-3的核心思想是的核心思想是““将质量制将质量制作入产品之中作入产品之中””。软件产品的质量。软件产品的质量取取决于软件生存期所有阶段的活动决于软件生存期所有阶段的活动。。(2)(2)为把握产品的质量,为把握产品的质量,ISO9000-3ISO9000-3要要求求““必须使影响产品质量的全部因素必须使影响产品质量的全部因素在生产全过程中始终处于受控状态在生产全过程中始终处于受控状态””。。 u为使软件产品达到质量要求,为使软件产品达到质量要求,ISOISO9000-39000-3要求软件开发机构建立要求软件开发机构建立质量保质量保证体系证体系。。u首先要求首先要求明确供需双方的职责明确供需双方的职责,针对,针对所有可能影响软件质量的各个因素所有可能影响软件质量的各个因素都都要采取有力措施,作出如何加强管理要采取有力措施,作出如何加强管理和控制的决定。和控制的决定。u对与质量有关的人员规定其对与质量有关的人员规定其职责职责和和职职权权,责任落实到人,产品质量真正得,责任落实到人,产品质量真正得到控制。到控制。 (3)(3)ISO9000ISO9000标准标准要求证实:要求证实:““企业具有企业具有持续提供符合要求产品的能力持续提供符合要求产品的能力””。。u质量认证质量认证是取得这一证实的有效方是取得这一证实的有效方法。法。u产品质量若能达到标准提出的要产品质量若能达到标准提出的要求,由求,由不依赖于供方和需方的第三方不依赖于供方和需方的第三方权威机构权威机构对生产厂家审查证实后出具对生产厂家审查证实后出具合格证明。合格证明。u如果认证工作是公正的、可靠的,如果认证工作是公正的、可靠的,其公证的结果应当是可以信赖的。其公证的结果应当是可以信赖的。 u为了达到质量标准,取得质量认为了达到质量标准,取得质量认证,必须多方面证,必须多方面开展质量管理活动开展质量管理活动。。其中,负责人的重视以及全体人员其中,负责人的重视以及全体人员的积极参与是取得成功的关键。的积极参与是取得成功的关键。(4)(4)ISO9000ISO9000标准标准强调强调““质量管理必须质量管理必须坚持进行质量改进坚持进行质量改进””。。u贯彻贯彻ISO9000ISO9000标准标准就是企业加强质就是企业加强质量管理,提高产品质量的过程量管理,提高产品质量的过程,这,这个过程包含许多工作,决非轻而易个过程包含许多工作,决非轻而易举,一蹴而就所能奏效的。举,一蹴而就所能奏效的。 u即使已经取得了质量认证也不能认即使已经取得了质量认证也不能认为一劳永逸而放松质量管理。为一劳永逸而放松质量管理。u实际上认证通常以半年为有效期。实际上认证通常以半年为有效期。取得认证之后尚需接受每年取得认证之后尚需接受每年11--22次次的定期检查,其目的在于促使企业的定期检查,其目的在于促使企业坚持进行质量改进。坚持进行质量改进。 软件文档的作用与分类软件文档的作用与分类u什么是文档什么是文档u软件文档的作用软件文档的作用u文档的分类文档的分类u软件文档的工作软件文档的工作 (1)(1)什么是文档什么是文档u文档文档((documentdocument))是指某种数据媒体是指某种数据媒体和其中所记录的数据。和其中所记录的数据。u它具有它具有永久性永久性,并可以由人或机器,并可以由人或机器阅读,通常仅用于描述人工可读的阅读,通常仅用于描述人工可读的东西。东西。u在软件工程中,文档常常用来表示在软件工程中,文档常常用来表示对对活动活动、、需求需求、、过程过程或或结果结果进行进行描描述述、、定义定义、、规定规定、、报告报告或或认证认证的任的任何书面或图示的信息。何书面或图示的信息。 (2)(2)软件文档的作用软件文档的作用n在软件生产过程中,总是产生和使用在软件生产过程中,总是产生和使用大量的信息。软件文档在产品的开发大量的信息。软件文档在产品的开发过程中起着重要的作用。过程中起着重要的作用。u提高提高软件开发过程的能见度软件开发过程的能见度。把开。把开发过程中发过程中发生的事件发生的事件以某种可阅读以某种可阅读的形式的形式记录在文档中记录在文档中。。u管理人员可把这些记载下来的材料管理人员可把这些记载下来的材料作为检查软件开发进度和开发质量作为检查软件开发进度和开发质量的依据的依据,,实现对软件开发的工程管实现对软件开发的工程管理理。。 n提高开发效率提高开发效率。软件文档的编制,使。软件文档的编制,使得开发人员得开发人员对各个阶段的工作对各个阶段的工作都进行都进行周密思考周密思考、、全盘权衡全盘权衡、、减少返工减少返工。并。并且可且可在开发早期发现错误和不一致在开发早期发现错误和不一致性性,便于及时加以纠正。,便于及时加以纠正。n作为开发人员在一定作为开发人员在一定阶段的阶段的工作成果工作成果和和结束标志结束标志。。n记录开发过程中有关信息,便于记录开发过程中有关信息,便于协调协调以后的软件开发、使用和维护。以后的软件开发、使用和维护。 n提供对软件的提供对软件的运行运行、、维护维护和和培训培训的有的有关信息,关信息,便于管理人员、开发人员、便于管理人员、开发人员、操作人员、用户之间的协作、交流和操作人员、用户之间的协作、交流和了解了解。使软件开发活动更科学、更有。使软件开发活动更科学、更有成效。成效。n便于潜在用户了解软件的功能、性能便于潜在用户了解软件的功能、性能等各项指标等各项指标,为他们选购符合自己需,为他们选购符合自己需要的软件提供依据。要的软件提供依据。 文档的桥梁作用文档的桥梁作用 n从某种意义上来说,从某种意义上来说,文档是软件开发文档是软件开发规范的体现和指南规范的体现和指南。。n按规范要求生成一整套文档的过程,按规范要求生成一整套文档的过程,就是按照软件开发规范完成一个软件就是按照软件开发规范完成一个软件开发的过程。开发的过程。n所以,在使用工程化的原理和方法来所以,在使用工程化的原理和方法来指导软件的开发和维护时,应当充分指导软件的开发和维护时,应当充分注意软件文档的编制和管理。注意软件文档的编制和管理。 (3)(3)文档的分类文档的分类n软件文档从形式上来看,大致可分为软件文档从形式上来看,大致可分为两类:两类:u一类是开发过程中填写的各种图一类是开发过程中填写的各种图表,称之为表,称之为工作表格工作表格;;u一类是应编制的技术资料或技术管一类是应编制的技术资料或技术管理资料,称之为理资料,称之为文档文档或或文件文件。。n软件文档的编制,可以用软件文档的编制,可以用自然语言自然语言,,特别设计的特别设计的形式语言形式语言,介于两者之间,介于两者之间的的半形式语言半形式语言((结构化语言结构化语言)),各类,各类图图形表示形表示、、表格表格来编制文档。来编制文档。 n文档可以书写,也可以在计算机支持文档可以书写,也可以在计算机支持系统中产生,但必须系统中产生,但必须可阅读可阅读。。n按照文档产生和使用的范围,软件文按照文档产生和使用的范围,软件文档大致可分为三类:档大致可分为三类:u开发文档开发文档软件需求说明书软件需求说明书数据要求说明书数据要求说明书概要设计说明书概要设计说明书详细设计说明书详细设计说明书可行性研究报告可行性研究报告项目开发计划项目开发计划 u管理文档管理文档项目开发计划项目开发计划测试计划测试计划测试报告测试报告开发进度月报开发进度月报项目开发总结项目开发总结u用户文档用户文档用户手册用户手册操作手册操作手册维护修改建议维护修改建议软件需求说明书软件需求说明书 (4)(4)软件文档的工作软件文档的工作n国家标准局在国家标准局在19881988年年11月发布了月发布了u《计算机软件开发规范》《计算机软件开发规范》u《软件产品开发文件编制指南》《软件产品开发文件编制指南》n作为软件开发人员工作的准则和规程。作为软件开发人员工作的准则和规程。它们它们基于软件生存期方法基于软件生存期方法,把软件产,把软件产品品从形成概念开始从形成概念开始,,经过开发经过开发、、使用使用和不断增补修订和不断增补修订,,直到最后被淘汰直到最后被淘汰的的整个过程整个过程应提交的文档归于以下十三应提交的文档归于以下十三种。种。 n可行性研究报告可行性研究报告u说明该软件项目的实现在说明该软件项目的实现在技术上技术上、、经济上经济上和和社会因素上社会因素上的的可行性可行性;;u评述为合理地达到开发目标评述为合理地达到开发目标可供选可供选择的择的各种可能的实现方案各种可能的实现方案;;u说明并论证所选定实施方案的理由。说明并论证所选定实施方案的理由。 n项目开发计划项目开发计划为软件项目实施方案制定出的具体计为软件项目实施方案制定出的具体计划。它包括划。它包括u各部分工作的负责人员各部分工作的负责人员u开发的进度开发的进度u开发经费的概算开发经费的概算u所需的硬件和软件资源等所需的硬件和软件资源等项目开发计划应提供给管理部门,并项目开发计划应提供给管理部门,并作为开发阶段评审的基础作为开发阶段评审的基础。。 n软件需求说明书软件需求说明书对目标软件的对目标软件的功能功能、、性能性能、、用户界面用户界面及及运行环境运行环境等等作出详细的说明作出详细的说明。。它是用户与开发人员它是用户与开发人员双方对软件需求双方对软件需求取得共同理解基础上达成的协议取得共同理解基础上达成的协议,也,也是是实施开发工作的基础实施开发工作的基础。。n数据要求说明书数据要求说明书给出给出数据逻辑描述数据逻辑描述和和数据采集数据采集的各项的各项要求要求,,为生成和维护系统的数据文件为生成和维护系统的数据文件做好准备。做好准备。 n概要设计说明书概要设计说明书该说明书是概要设计工作阶段的成果。该说明书是概要设计工作阶段的成果。它应当说明它应当说明u系统的功能分配系统的功能分配u模块划分模块划分u程序的总体结构程序的总体结构u输入输出及接口设计输入输出及接口设计u运行设计运行设计u数据结构设计数据结构设计u出错处理设计等出错处理设计等为详细设计奠定基础。为详细设计奠定基础。 n详细设计说明书详细设计说明书着重描述着重描述每一个模块是如何实现的每一个模块是如何实现的,,包括包括实现算法实现算法、、逻辑流程逻辑流程等。等。n用户手册用户手册n详细描述软件的详细描述软件的功能功能、、性能性能和和用户界用户界面面,使用户了解,使用户了解如何使用该软件如何使用该软件。。n操作手册操作手册n为操作人员提供为操作人员提供软件各种运行情况的软件各种运行情况的有关知识有关知识,特别是操作方法细节。,特别是操作方法细节。 n测试计划测试计划针对针对组装测试组装测试和和确认测试确认测试,需要,需要为组为组织测试制定计划织测试制定计划。计划应包括。计划应包括u测试的内容测试的内容u进度安排进度安排u条件条件u人员人员u测试用例的选取原则测试用例的选取原则u测试结果允许的偏差范围等测试结果允许的偏差范围等 n测试分析报告测试分析报告测试工作完成后,应测试工作完成后,应提交测试计划执提交测试计划执行情况的说明行情况的说明。。对测试结果加以分对测试结果加以分析析,并,并提出测试的结论性意见提出测试的结论性意见。。n开发进度月报开发进度月报该月报是软件人员该月报是软件人员按月向管理部门提按月向管理部门提交的项目进展情况的报告交的项目进展情况的报告。报告应包。报告应包括括进度计划与实际执行情况的比较进度计划与实际执行情况的比较、、阶段成果阶段成果、、遇到的问题和解决的办法遇到的问题和解决的办法以及以及下个月的打算下个月的打算等。等。 n项目开发总结报告项目开发总结报告u软件项目开发完成之后,应当软件项目开发完成之后,应当与项与项目实施计划对照目实施计划对照,,总结实际执行的情总结实际执行的情况况,如,如进度进度、、成果成果、、资源利用资源利用、、成本成本和和投入的人力投入的人力。。u还需还需对开发工作作出评价对开发工作作出评价,,总结经总结经验和教训验和教训。。 n维护修改建议维护修改建议软件产品投入运行之后软件产品投入运行之后,,可能有修正可能有修正、、更改等问题更改等问题,应当,应当对存在的问题对存在的问题、、修修改的考虑改的考虑以及以及修改的影响估计修改的影响估计等等做详做详细的描述细的描述,写成维护修改建议,提交,写成维护修改建议,提交审批。审批。n以上软件文档是在软件生存期中,随以上软件文档是在软件生存期中,随着各个阶段工作的开展适时编制的。着各个阶段工作的开展适时编制的。其中,有的仅反映某一个阶段的工其中,有的仅反映某一个阶段的工作,有的则需跨越多个阶段。作,有的则需跨越多个阶段。 软件生存期各阶段与各种文档编制的关系软件生存期各阶段与各种文档编制的关系软软件件需需求求软软件件编编码码与与单单集集成成与与运运行行与与计计划划分分析析设设计计元元测测试试测测试试维维护护可可行行性性研研究究报报告告项项目目开开发发计计划划软软件件需需求求说说明明书书数数据据要要求求说说明明书书 软软件件需需求求软软件件编编码码与与单单集集成成与与运运行行与与计计划划分分析析设设计计元元测测试试测测试试维维护护测测试试计计划划概概要要设设计计说说明明书书详详细细设设计计说说明明书书用用户户手手册册操操作作手手册册 软软件件需需求求软软件件编编码码与与单单集集成成与与运运行行与与计计划划分分析析设设计计元元测测试试测测试试维维护护测测试试分分析析报报告告开开发发进进度度月月报报项项目目开开发发总总结结程程序序维维护护手手册册((维维护护修修改改建建议议)) n文档最终要向文档最终要向软件管理部门软件管理部门,或向,或向用用户户回答下列问题回答下列问题u哪些需求要被满足哪些需求要被满足((WhatWhat););u软件在什么环境中实现,所需信息软件在什么环境中实现,所需信息从哪里来从哪里来((WhereWhere););u开发时间如何安排开发时间如何安排((WhenWhen););u开发开发((或维护或维护))工作打算由谁来做工作打算由谁来做((WhoWho););u需求应如何实现需求应如何实现((HowHow););u为什么要进行这些软件开发或维护为什么要进行这些软件开发或维护修改工作修改工作((WhyWhy)。)。 文档要回答的问题文档要回答的问题wwhhaattwwhheerreewwhheennwwhhoohhoowwwwhhyy可可行行性性研研究究报报告告项项目目开开发发计计划划软软件件需需求求说说明明书书数数据据要要求求说说明明书书测测试试计计划划 wwhhaattwwhheerreewwhheennwwhhoohhoowwwwhhyy概概要要设设计计说说明明书书详详细细设设计计说说明明书书用用户户手手册册操操作作手手册册测测试试分分析析报报告告开开发发进进度度月月报报 wwhhaattwwhheerreewwhheennwwhhoohhoowwwwhhyy项项目目开开发发总总结结程程序序维维护护手手册册((维维护护修修改改建建议议)) 对文档编制的质量要求对文档编制的质量要求n如果不重视文档编写工作,或是对文档如果不重视文档编写工作,或是对文档编写工作的安排不当,就不可能得到高编写工作的安排不当,就不可能得到高质量的文档。质量的文档。n质量差的文档质量差的文档u使读者难于理解使读者难于理解,,给使用者造成许多给使用者造成许多不便不便u会削弱对软件的管理会削弱对软件的管理(难以确认和评(难以确认和评价开发工作的进展情况价开发工作的进展情况)),,提高软件成提高软件成本本((一些工作可能被迫返工一些工作可能被迫返工))u造成造成误操作误操作 对编制高质量文档的要求对编制高质量文档的要求(1)(1)针对性针对性u文档编制以前文档编制以前应分清读者对象应分清读者对象。按。按不同的类型、不同层次的读者,决定不同的类型、不同层次的读者,决定怎样适应他们的需要。怎样适应他们的需要。u管理文档主要面向管理人员管理文档主要面向管理人员u用户文档主要面向用户用户文档主要面向用户u这两类文档不应像开发文档这两类文档不应像开发文档((面向开面向开发人员发人员))那样过多使用软件的专用术那样过多使用软件的专用术语。语。 (2)(2)精确性精确性u文档的行文应当文档的行文应当十分确切十分确切,,不能出现不能出现多义性的描述多义性的描述。同一课题几个文档的。同一课题几个文档的内容应当是协调一致,没有矛盾的。内容应当是协调一致,没有矛盾的。(3)(3)清晰性清晰性u文档编写应文档编写应力求简明力求简明,如有可能,配,如有可能,配以适当的图表,以增强其清晰性。以适当的图表,以增强其清晰性。 (4)(4)完整性完整性u任何一个文档都应当是任何一个文档都应当是完整的完整的、、独立独立的的,它应,它应自成体系自成体系。。u例如,例如,前言部分应做一般性介绍,正前言部分应做一般性介绍,正文给出中心内容,必要时还有附录,文给出中心内容,必要时还有附录,列出参考资料等。列出参考资料等。u同一课题的几个文档之间可能有些部同一课题的几个文档之间可能有些部分内容相同,这种重复是必要的。分内容相同,这种重复是必要的。u不要在文档中出现转引其它文档内容不要在文档中出现转引其它文档内容的情况的情况。。如,一些段落没有具体描如,一些段落没有具体描述,用述,用““见见××××文档文档××××节节””的方式的方式.. (5)(5)灵活性灵活性各个不同软件项目,其规模和复杂程度各个不同软件项目,其规模和复杂程度有着许多实际差别,不能一律看待。有着许多实际差别,不能一律看待。n应根据具体的软件开发项目,决定编制应根据具体的软件开发项目,决定编制的文档种类。的文档种类。u软件开发的管理部门应该软件开发的管理部门应该根据本单位根据本单位承担的应用软件的专业领域和本单位承担的应用软件的专业领域和本单位的管理能力的管理能力,,制定一个对文档编制要制定一个对文档编制要求的实施规定求的实施规定。。 u对于一个具体的应用软件项目,项目对于一个具体的应用软件项目,项目负责人应根据上述实施规定,确定一负责人应根据上述实施规定,确定一个文档编制计划。其中包括:个文档编制计划。其中包括:F编制哪几种文档,详细程度如何编制哪几种文档,详细程度如何F各文档的编制负责人和进度要求各文档的编制负责人和进度要求F审查审查//批准负责人和时间进度安排批准负责人和时间进度安排F在开发时期内各文档的维护、修改在开发时期内各文档的维护、修改和管理的负责人,以及批准手续和管理的负责人,以及批准手续u有关的开发人员必须严格执行这个文有关的开发人员必须严格执行这个文档编制计划。档编制计划。 n当所开发的软件系统非常大时,一种文当所开发的软件系统非常大时,一种文档可以分成几卷编写。档可以分成几卷编写。例如,例如,u项目开发计划项目开发计划可分写为:可分写为:F质量保证计划质量保证计划F配置管理计划配置管理计划F用户培训计划用户培训计划F安装实施计划等安装实施计划等。。u系统设计说明书系统设计说明书可分写为:可分写为:F系统设计说明书系统设计说明书F子系统设计说明书。子系统设计说明书。 u程序设计说明书程序设计说明书可分写为:可分写为:F程序设计说明书程序设计说明书F接口设计说明书接口设计说明书F版本说明。版本说明。u操作手册操作手册可分写为:可分写为:F操作手册操作手册F安装实施过程。安装实施过程。u测试计划测试计划可分写为:可分写为:F测试计划测试计划 F测试设计说明测试设计说明F测试规程测试规程F测试用例。测试用例。u测试分析报告测试分析报告可分写为:可分写为:F综合测试报告综合测试报告F验收测试报告。验收测试报告。u项目开发总结报告项目开发总结报告也可分写成:也可分写成:F项目开发总结报告项目开发总结报告F资源环境统计。资源环境统计。 n应根据应根据任务的规模任务的规模、、复杂性复杂性、、项目负责项目负责人对该软件的开发过程及运行环境所需人对该软件的开发过程及运行环境所需详细程度的判断详细程度的判断,,确定文档的详细程度确定文档的详细程度。。n对国标对国标GB8567-88GB8567-88《《计算机软件产品开计算机软件产品开发文件编制指南发文件编制指南》所建议的所有条款都》所建议的所有条款都u可以扩展可以扩展,进一步细分,以适应需,进一步细分,以适应需要;要;u如果条款中有些细节并非必需,如果条款中有些细节并非必需,也可也可以根据实际情况压缩合并以根据实际情况压缩合并。。 n程序的设计表现形式程序的设计表现形式,可以使用,可以使用程序流程序流程图程图、、判定表判定表、、程序描述语言程序描述语言((PDLPDL))、、或或问题分析图问题分析图((PADPAD))等。等。n对于对于文档的表现形式文档的表现形式,没有规定或限制。,没有规定或限制。可以使用可以使用自然语言自然语言、也可以使用、也可以使用形式化形式化的语言的语言或或半形式化的语言半形式化的语言。。n当国标《当国标《计算机软件产品开发文件编制计算机软件产品开发文件编制指南指南》中规定的文档种类不能满足某些》中规定的文档种类不能满足某些应用部门的特殊需要时,应用部门的特殊需要时,可以建立一些可以建立一些特殊的文档种类要求特殊的文档种类要求,这些要求可以包,这些要求可以包含含在本单位的文档编制实施规定在本单位的文档编制实施规定中。中。 n为使软件文档能为使软件文档能u起到多种桥梁的作用起到多种桥梁的作用u有助于程序员编制程序有助于程序员编制程序u有助于管理人员监督和管理软件的有助于管理人员监督和管理软件的开发开发u有助于用户了解软件的工作和应做有助于用户了解软件的工作和应做的操作,的操作,u有助于维护人员进行有效的修改和有助于维护人员进行有效的修改和扩充扩充n文档的编制必须保证一定的质量。文档的编制必须保证一定的质量。 n项目管理过程项目管理过程n软件生产率和质量的度量软件生产率和质量的度量n软件项目的估算软件项目的估算n软件项目计划的目标软件项目计划的目标n软件成本和工作量估算软件成本和工作量估算n进度安排进度安排n软件项目的组织与计划软件项目的组织与计划n软件过程与软件过程成熟度模型软件过程与软件过程成熟度模型 项目管理过程项目管理过程n软件项目管理的对象是软件项目管理的对象是软件工程软件工程项目项目。它所涉及的范围。它所涉及的范围覆盖了整覆盖了整个软件工程过程个软件工程过程。。n为使软件项目开发获得成功,为使软件项目开发获得成功,关关键问题键问题是必须对软件项目的是必须对软件项目的工作工作范围范围、、可能风险可能风险、、需要资源需要资源((人人、、硬件硬件//软件软件))、、要实现的任务要实现的任务、、经经历的里程碑历的里程碑、、花费工作量花费工作量((成本成本))、、进度安排进度安排等做到心中有数。等做到心中有数。 n软件项目管理可以提供这些信息。软件项目管理可以提供这些信息。n这种管理在技术工作开始之前就这种管理在技术工作开始之前就应开始,在软件从概念到实现的应开始,在软件从概念到实现的过程中继续进行,当软件工程过过程中继续进行,当软件工程过程最后结束时才终止程最后结束时才终止。 启动一个软件项目启动一个软件项目n在制定软件项目计划之前,必须在制定软件项目计划之前,必须u明确项目的目标和范围明确项目的目标和范围u考虑候选的解决方案考虑候选的解决方案u标明技术和管理上的要求标明技术和管理上的要求n有了这些信息,才能确定有了这些信息,才能确定合理合理、、精确的成本估算精确的成本估算,,实际可行的任实际可行的任务分解务分解以及以及可管理的进度安排可管理的进度安排。。 n软件人员和用户是在软件人员和用户是在系统工程步系统工程步骤骤中中确定项目的目标和范围确定项目的目标和范围。。n目标目标标明了标明了软件项目的目的软件项目的目的但不但不涉及如何去达到这些目的。涉及如何去达到这些目的。n范围范围标明了标明了软件要实现的基本功软件要实现的基本功能能,并尽量以定量的方式界定这,并尽量以定量的方式界定这些功能。些功能。n当明确了软件项目的目标和范围当明确了软件项目的目标和范围后,就应考虑后,就应考虑候选的解决方案候选的解决方案。。 n有了方案,管理人员和技术人员有了方案,管理人员和技术人员就能够据此选择就能够据此选择一种一种““好的好的””方方法法,给出诸如,给出诸如交付期限交付期限、、预算预算、、个人能力个人能力、、技术界面技术界面及其它许多及其它许多因素所构成的限制。因素所构成的限制。 度量度量n进行度量工作,是为了进行度量工作,是为了了解产品了解产品开发的技术过程开发的技术过程和和产品本身产品本身。。u度量度量开发过程开发过程的目的是为了的目的是为了改改进过程进过程,,u度量度量产品产品的目的是为了提高的目的是为了提高产产品的质量品的质量。。n度量的作用是为了度量的作用是为了有效地定量地有效地定量地进行管理进行管理。。 n为有效地度量,常常需要考虑:对为有效地度量,常常需要考虑:对于于过程过程和和产品产品,,u合适的度量是什么?合适的度量是什么?u所收集的数据如何使用?所收集的数据如何使用?u用于比较个人、过程或产品的度用于比较个人、过程或产品的度量是否合理?量是否合理?n管理人员和技术人员可利用这些度管理人员和技术人员可利用这些度量来了解软件工程过程的实际情况量来了解软件工程过程的实际情况和它所生产的产品质量和它所生产的产品质量。。 估算估算n在在软件项目管理过程软件项目管理过程中关键的活中关键的活动就是动就是制定项目计划制定项目计划。。n在做计划时必须就在做计划时必须就需要的人力需要的人力((以人月为单位以人月为单位)、)、项目持续时项目持续时间间((以年份或月份为单位以年份或月份为单位)、)、成成本本((以元为单位以元为单位)做出估算。)做出估算。n这种估算大多是这种估算大多是利用以前的花费利用以前的花费做为参考做为参考而做出的。而做出的。 n如果新项目与以前的一个项目在如果新项目与以前的一个项目在大小大小上和上和功能功能上十分上十分类似类似,则新,则新项目需要工作量、开发持续时间、项目需要工作量、开发持续时间、成本大致与那个老项目相同。成本大致与那个老项目相同。n假使项目背景完全生疏,只凭过假使项目背景完全生疏,只凭过去的经验做出估算可能就不够了。去的经验做出估算可能就不够了。n现在已有了许多用于软件开发的现在已有了许多用于软件开发的估算技术估算技术。其共同特点是:。其共同特点是: u事先建立软件范围事先建立软件范围u以软件度量(以往的度量)为以软件度量(以往的度量)为基础,以做出估算基础,以做出估算u项目被分解为可单独进行估算项目被分解为可单独进行估算的小块的小块n管理人员大多使用不止一种估算管理人员大多使用不止一种估算技术,并用一种估算技术做为另技术,并用一种估算技术做为另一种估算技术的交叉检查。一种估算技术的交叉检查。 风险分析风险分析n每当新建一个程序时,总是存在每当新建一个程序时,总是存在某些不确定性。某些不确定性。u用户要求是否能确切地被理用户要求是否能确切地被理解?解?u在项目最后结束之前要求实现在项目最后结束之前要求实现的功能能否建立?的功能能否建立?u是否存在目前仍未发现的技术是否存在目前仍未发现的技术难题?难题?u在项目出现严重误期时是否在项目出现严重误期时是否会发生一些变更会发生一些变更?等等。?等等。 n风险分析风险分析对于软件项目管理对于软件项目管理是决是决定性的定性的,然而现在还有许多项目,然而现在还有许多项目不考虑风险就着手进行。不考虑风险就着手进行。n所谓所谓风险分析风险分析实际上就是一系列实际上就是一系列风险管理步骤风险管理步骤,其中包括,其中包括风险识风险识别别、、风险估计风险估计、、风险优化风险优化、、风险风险管理策略管理策略、、风险解决风险解决和和风险监督风险监督。。这些步骤贯穿在软件工程过程中。这些步骤贯穿在软件工程过程中。 进度安排进度安排n每一个软件项目都要求制定一个每一个软件项目都要求制定一个进度安排进度安排,但不是所有的进度都,但不是所有的进度都得一样安排。得一样安排。n对于进度安排,需要考虑的是:对于进度安排,需要考虑的是:u预先对进度如何计划?预先对进度如何计划?u工作怎样就位?工作怎样就位?u如何识别定义好的任务?如何识别定义好的任务?u管理人员对管理人员对结束时间如何掌握结束时间如何掌握?? u如何如何识别识别和和监控关键路径监控关键路径以以确保确保结束结束??u对进展如何度量?对进展如何度量?u如何建立如何建立分隔任务的里程碑分隔任务的里程碑。。n软件项目的进度安排与任一个工程软件项目的进度安排与任一个工程项目的进度安排基本相同。首先项目的进度安排基本相同。首先识识别一组项目任务别一组项目任务,再,再建立任务之间建立任务之间的相互关联的相互关联,然后,然后估算各个任务的估算各个任务的工作量工作量,,分配人力分配人力和和其它资源其它资源,,制制定进度时序定进度时序。。 追踪和控制追踪和控制n一旦建立了一旦建立了开发进度安排开发进度安排,就可以,就可以开始着手开始着手追踪和控制活动追踪和控制活动。。n由由项目管理人员负责追踪在进度安项目管理人员负责追踪在进度安排中排中标明的每一个任务。标明的每一个任务。n如果任务实际完成日期滞后于进度如果任务实际完成日期滞后于进度安排,则管理人员可以使用一种自安排,则管理人员可以使用一种自动的项目进度安排工具来确定在项动的项目进度安排工具来确定在项目的中间里程碑上进度误期所造成目的中间里程碑上进度误期所造成的影响。的影响。 n还可还可对资源重新定向对资源重新定向n对对任务重新安排任务重新安排n((做为最坏的结果做为最坏的结果))可以修改交可以修改交付日期以调整已经暴露的问题付日期以调整已经暴露的问题。。用这种方式可以较好地控制软件用这种方式可以较好地控制软件的开发。的开发。 软件生产率和质量的度量软件生产率和质量的度量n生产率与质量的度量是生产率与质量的度量是以投入工作以投入工作量量为依据的为依据的软件开发活动软件开发活动的度量和的度量和开发成果开发成果质量的度量。质量的度量。u为什么要对软件进行度量为什么要对软件进行度量u面向规模的度量面向规模的度量u面向功能的度量面向功能的度量u软件质量的度量软件质量的度量u在软件工程过程中使用度量在软件工程过程中使用度量 为什么要对软件进行度量为什么要对软件进行度量①①表明表明软件产品的质量软件产品的质量;;②②弄清弄清软件开发人员的生产率软件开发人员的生产率;;③③给出使给出使用了新的软件工程方法和用了新的软件工程方法和工具工具所得到的(在生产率和质量两所得到的(在生产率和质量两方面)的方面)的效益效益;;④④建立建立项目估算项目估算的的““基线基线””;;⑤⑤帮助帮助调整对新的工具调整对新的工具和和附加培训附加培训的要求的要求。。 度量的方式度量的方式n在物理世界中的度量有两种方式。在物理世界中的度量有两种方式。u直接度量(例如,度量一个螺直接度量(例如,度量一个螺栓的长度);栓的长度);u间接度量(例如,用次品率来间接度量(例如,用次品率来度量生产出的螺栓质量)。度量生产出的螺栓质量)。n软件度量也同样分为两类:软件度量也同样分为两类:直接直接度量度量与与间接度量间接度量。。 n软件工程过程的直接度量包括软件工程过程的直接度量包括所投所投入的成本入的成本和和工作量工作量。。n软件产品的直接度量包括软件产品的直接度量包括产生的代产生的代码行数码行数((LOCLOC)、)、执行速度执行速度、、存储存储量大小量大小、、在某种时间周期中所报告在某种时间周期中所报告的差错数的差错数。。n软件产品的间接度量包括软件产品的间接度量包括功能性功能性、、复杂性复杂性、、效率效率、、可靠性可靠性、、可维护性可维护性和和许多其它的质量特性许多其它的质量特性。。 n只要事先建立只要事先建立特定的度量规程特定的度量规程,很,很容易做到容易做到直接度量直接度量软件所需要的软件所需要的成成本本和和工作量工作量、、产生的代码行数产生的代码行数等。等。n软件的软件的功能性功能性、、效率效率、、可维护性可维护性等等质量特性却很难用直接度量判明,质量特性却很难用直接度量判明,只有通过间接度量才能推断。只有通过间接度量才能推断。 软件度量域的分类软件度量域的分类 n软件生产率度量的焦点集中在软件生产率度量的焦点集中在软件软件工程过程的输出工程过程的输出;;n软件质量度量则指明了软件质量度量则指明了软件适应明软件适应明确和不明确的用户要求到什么程确和不明确的用户要求到什么程度度;;n技术度量的焦点则集中在技术度量的焦点则集中在软件的某软件的某些特性些特性(如(如逻辑复杂性逻辑复杂性、、模块化程模块化程度度)上而不是软件开发的全过程。)上而不是软件开发的全过程。 另一种分类方法另一种分类方法n面向规模的的度量用于面向规模的的度量用于收集与直接收集与直接度量有关的软件工程输出的信息和度量有关的软件工程输出的信息和质量信息质量信息。。n面向功能的度量提供面向功能的度量提供直接度量的尺直接度量的尺度度。。n面向人的度量则面向人的度量则收集有关人们开发收集有关人们开发计算机软件所用方式的信息计算机软件所用方式的信息和和人们人们理解有关工具和方法的效率的信息理解有关工具和方法的效率的信息。。 面向规模的度量面向规模的度量n面向规模的度量面向规模的度量是对是对软件软件和和软件开软件开发过程发过程的直接度量。的直接度量。n可以建立一个可以建立一个面向规模面向规模的的数据表格数据表格来记录项目的某些信息。来记录项目的某些信息。n该表格列出了该表格列出了在过去几年完成的每在过去几年完成的每一个软件开发项目一个软件开发项目和和关于这些项目关于这些项目的相应面向规模的数据的相应面向规模的数据。。 面向规模的数据表格面向规模的数据表格 n项目项目aaaaaa-01-01u规模规模为为114.1114.1KLOCKLOC((千代码行千代码行))u工作量工作量用了用了2424个人月个人月u成本成本为为168,000168,000元元u文档页数文档页数为为365365u在交付用户使用后第一年内发现在交付用户使用后第一年内发现了了2929个错误,个错误,u有有33个人个人参加了项目参加了项目aaaaaa-01-01的软件的软件开发工作。开发工作。 n需要注意的是,需要注意的是,在表格中记载的工在表格中记载的工作量和成本是整个软件工程的活动作量和成本是整个软件工程的活动(分析、设计、编码和测试),(分析、设计、编码和测试),而而不仅仅是编码活动不仅仅是编码活动。。n对于每一个项目,可以根据表格中对于每一个项目,可以根据表格中列出的基本数据列出的基本数据计算简单的面向规计算简单的面向规模的生产率和质量的度量模的生产率和质量的度量。。 n根据数据表格可以对所有的项目计根据数据表格可以对所有的项目计算出平均值:算出平均值:生产率生产率==KLOCKLOC//PMPM((人月)人月)质量质量==错误数/错误数/KLOCKLOC成本成本==元/元/LOCLOC文档文档==文档页数/文档页数/KLOCKLOC 面向功能的度量面向功能的度量n面向功能的软件度量是对面向功能的软件度量是对软件软件和和软软件开发过程件开发过程的的间接度量间接度量。。n面向功能度量主要考虑面向功能度量主要考虑程序的程序的““功功能性能性””和和““实用性实用性””,,而不是对而不是对LOCLOC计数计数。。n该度量是一种叫做该度量是一种叫做功能点方法功能点方法的生的生产率度量法,利用产率度量法,利用软件信息域软件信息域中的中的一些计数一些计数和和软件复杂性估计软件复杂性估计的的经验经验关系式关系式而导出而导出功能点功能点FPFP。。 面向功能的数据表格面向功能的数据表格 功能点计算功能点计算n确定确定五个信息域五个信息域的特征,并在表格的特征,并在表格中相应位置给出计数。中相应位置给出计数。(1)(1)用户输入数:用户输入数:各个用户输入是各个用户输入是面向不同应用的输入数据面向不同应用的输入数据。。(2)(2)用户输出数:用户输出数:各个用户输出是各个用户输出是面向应用的输出信息面向应用的输出信息,包括,包括报告报告,,屏幕信息屏幕信息,,错误信息错误信息等。等。在在报告报告中中的各个数据项不应再分别计数的各个数据项不应再分别计数。。 (3)(3)用户查询数:用户查询数:查询是一种联机查询是一种联机的交互操作,每次询问的交互操作,每次询问//响应具备应响应具备应计数。计数。(4)(4)文件数:文件数:每一个逻辑主文件都每一个逻辑主文件都应计数。逻辑主文件是指逻辑上的应计数。逻辑主文件是指逻辑上的一组数据,可以是一个大数据库的一组数据,可以是一个大数据库的一部分,可以是一个单独的文件。一部分,可以是一个单独的文件。(5)(5)外部接口数:外部接口数:与系统中其他设与系统中其他设备通过外部接口读写信息次数均应备通过外部接口读写信息次数均应计数。计数。 n一旦收集到上述数据,就可以计算一旦收集到上述数据,就可以计算出出与每一个计数相关的复杂性值与每一个计数相关的复杂性值。。n一个信息域是一个信息域是简单的简单的、、平均的平均的还是还是复杂的复杂的,由使用功能点方法的机构,由使用功能点方法的机构自行确定,从而计算出加权计数。自行确定,从而计算出加权计数。n计算功能点,使用如下的关系式计算功能点,使用如下的关系式::FPFP==总计数总计数××(0.65(0.65+++0.01+0.01××SUMSUM((FiFi))))n总计数是所有加权计数项的和总计数是所有加权计数项的和 nFiFi((ii==1..141..14))是是复杂性校正值复杂性校正值,它,它们应通过逐一回答如下提问来确定。们应通过逐一回答如下提问来确定。nFiFi的取值的取值00..5..5::00没有影响没有影响11偶然的偶然的22适中的适中的33普通的普通的44重要的重要的55极重要的极重要的nSUMSUM((FiFi))是求和函数。是求和函数。 复杂性校正值复杂性校正值FiFi1.1.系统是否需要系统是否需要可靠的备份可靠的备份和和恢复恢复??2.2.是否需要是否需要数据通信数据通信??3.3.是否有是否有分布处理的功能分布处理的功能??4.4.是否是否性能成为关键性能成为关键??5.5.系统是否系统是否运行在既存的高度实用化运行在既存的高度实用化的操作环境中的操作环境中??6.6.系统是否需要系统是否需要联机数据项联机数据项??7.7.联机数据项是否需要联机数据项是否需要建立多重窗口建立多重窗口 显示和操作显示和操作,,以处理输入处理以处理输入处理。。8.8.主文件是否主文件是否联机更新联机更新??9.9.输入输入、、输出输出、、文件文件、、查询查询是否是否复复杂杂??10.10.内部处理过程内部处理过程是否是否复杂复杂??11.11.程序代码程序代码是否是否可复用可复用??12.12.设计中是否包括了设计中是否包括了转移转移和和安装安装??13.13.系统是否设计成可以系统是否设计成可以重复安装在重复安装在不同机构中不同机构中14.14.系统是否设计成系统是否设计成易修改易修改和和易使易使用用?? n一旦计算出一旦计算出功能点功能点,就可仿照,就可仿照LOCLOC的方式的方式度量软件的生产率、质量和度量软件的生产率、质量和其它属性:其它属性:生产率生产率==FPFP//PMPM((人月)人月)质量质量==错误数/错误数/FPFP成本成本==元/元/FPFP文档文档==文档页数/文档页数/FPFP n功能点度量功能点度量是为了是为了商用信息系统应商用信息系统应用用而设计的。而设计的。n特征点度量特征点度量((FeaturePointsFeaturePoints))可以可以用于用于系统系统和和工程软件应用工程软件应用n特征点度量适合于特征点度量适合于算法复杂性高算法复杂性高的的应用。而实时处理、过程控制、嵌应用。而实时处理、过程控制、嵌入式软件应用的算法复杂性都偏入式软件应用的算法复杂性都偏高,因此适合于特征点度量。高,因此适合于特征点度量。 n为了计算特征点,可以象为了计算特征点,可以象功能点计功能点计算算那样,那样,对对信息域值信息域值进行计数和加进行计数和加权权。此外,。此外,特征点度量要对一个新特征点度量要对一个新的软件特征的软件特征““算法算法””进行计数进行计数。。n计算特征点可使用一个计算表格。计算特征点可使用一个计算表格。对于每一个度量参数只使用一个权对于每一个度量参数只使用一个权值,并且使用值,并且使用FPFP==总计数总计数××(0.65(0.65++0.010.01××SUMSUM((FiFi))))来计算总的特征点值。来计算总的特征点值。 特征点度量计算表格特征点度量计算表格 软件质量的度量软件质量的度量n质量度量贯穿于软件工程的全过程质量度量贯穿于软件工程的全过程中中以及以及软件交付用户使用之后软件交付用户使用之后。。n在在软件交付之前软件交付之前得到的度量可作为得到的度量可作为判断设计和测试质量好坏的依据。判断设计和测试质量好坏的依据。这一类度量包括程序复杂性、有效这一类度量包括程序复杂性、有效的模块性和总的程序规模。的模块性和总的程序规模。n在在软件交付之后软件交付之后的度量则把注意力的度量则把注意力集中于还未发现的差错数和系统的集中于还未发现的差错数和系统的可维护性方面。可维护性方面。 n使用得最广泛软件质量的事后度量使用得最广泛软件质量的事后度量包括包括正确性正确性、、可维护性可维护性、、完整性完整性和和可使用性可使用性。。(1)(1)正确性:正确性:一个程序必须一个程序必须正确地运正确地运行行,并,并为它的用户提供某些输出为它的用户提供某些输出。。正确性要求软件执行所要求的功能。正确性要求软件执行所要求的功能。正确性的度量正确性的度量是是每千代码行每千代码行((KLOCKLOC))的差错数的差错数,其中,其中将差错定义为已被将差错定义为已被证实是不符合需求的缺陷证实是不符合需求的缺陷。。 (2)(2)可维护性:可维护性:软件维护比其它的软软件维护比其它的软件工程活动需要更多的工作量。还件工程活动需要更多的工作量。还没有一种方法可以直接度量可维护没有一种方法可以直接度量可维护性,因此性,因此必须采取间接度量必须采取间接度量。。有一种简单的面向时间的度量,叫有一种简单的面向时间的度量,叫做做平均变更等待时间平均变更等待时间MTTCMTTC。。这个时间包括这个时间包括分析变更要求分析变更要求、、设计设计适当的修改适当的修改、、实现变更并测试实现变更并测试、及、及把变更发送给所有的用户把变更发送给所有的用户。。一个可维护的程序与不可维护的程一个可维护的程序与不可维护的程序相比,应有较低的序相比,应有较低的MTTCMTTC。。 (3)(3)完整性:完整性:完整性完整性度量一个系统度量一个系统抗拒对它的安全性攻击抗拒对它的安全性攻击(事故的和(事故的和人为的)人为的)的能力的能力。软件的所有三个。软件的所有三个成分成分程序程序、、数据数据和和文档文档都会遭到攻都会遭到攻击。击。度量度量完整性完整性,需要定义两个附加的,需要定义两个附加的属性:属性:危险性危险性和和安全性安全性。。危险性危险性是是特定类型的攻击将在一给特定类型的攻击将在一给定时间内发生的概率定时间内发生的概率,,安全性安全性是是排排除特定类型攻击的概率除特定类型攻击的概率。。 一个系统的完整性可定义为一个系统的完整性可定义为完整性完整性==∑∑((11-危险性-危险性××(1(1-安全性-安全性))))其中,对每一个攻击的其中,对每一个攻击的危险性危险性和和安全性安全性都进行累加。都进行累加。(4)(4)可使用性:可使用性:如果一个程序不具有如果一个程序不具有““用户友好性用户友好性””,即使它所执行的,即使它所执行的功能很有价值,也常常会失败。功能很有价值,也常常会失败。可使用性量化可使用性量化““用户友好性用户友好性””,并,并依据以下四个特征进行度量:依据以下四个特征进行度量: n为学习系统所需要的为学习系统所需要的体力上的体力上的和和智智力上的力上的技能;技能;n为达到适度有效使用系统所需要的为达到适度有效使用系统所需要的时间;时间;n当软件被某些人适度有效地使用时当软件被某些人适度有效地使用时所度量的所度量的在生产率方面的净增值在生产率方面的净增值;;n用户角度对用户角度对系统的主观评价系统的主观评价(可以(可以通过问题调查表得到)。通过问题调查表得到)。 协调不同的度量方法协调不同的度量方法n代码行数代码行数和和功能点功能点之间的关系依赖之间的关系依赖于用来实现软件的于用来实现软件的程序设计语言程序设计语言和和设计质量设计质量。。n下面给出使用各种程序设计语言建下面给出使用各种程序设计语言建立一个功能点所需要的平均代码行立一个功能点所需要的平均代码行数的粗略估算。数的粗略估算。 建立一个功能点所需平均代码行数建立一个功能点所需平均代码行数程序语言汇编语言COBOLFORTRANPascalLOC/FP30010010090(平均值)程序语言AdaOOPL4GL代码生成器LOC/FP70302015(平均值) 影响软件生产率的重要因素影响软件生产率的重要因素n人的因素:人的因素:软件开发组织的规模和专软件开发组织的规模和专长;长;n问题因素:问题因素:问题的复杂性和对设计限问题的复杂性和对设计限制,以及需求的变更次数;制,以及需求的变更次数;n过程因素:过程因素:使用的分析与设计技术、语使用的分析与设计技术、语言和言和CASECASE工具的有效性,及评审技术;工具的有效性,及评审技术;n产品因素:产品因素:计算机系统的可靠性和性计算机系统的可靠性和性能;能;n资源因素:资源因素:CASECASE工具、硬件和软件资源工具、硬件和软件资源的有效性的有效性。。 在软件工程过程中使用度量在软件工程过程中使用度量n建立基线建立基线u为了将为了将LOCLOC和和FPFP用于软件估算技用于软件估算技术中,必须建立术中,必须建立历史数据基线历史数据基线。。u根据历史经验,根据历史经验,在软件工程过程在软件工程过程的衔接处划出一条基线的衔接处划出一条基线,在此基,在此基线上线上附有一些用于度量的经验目附有一些用于度量的经验目标信息标信息,作为工程过程评估的依,作为工程过程评估的依据,判断工程过程的完成是否达据,判断工程过程的完成是否达到预想的要求到预想的要求。。 n质量度量数据一旦收集到,软件开质量度量数据一旦收集到,软件开发组织就可以发组织就可以根据它们来调整其软根据它们来调整其软件工程项目件工程项目,,以消除那些对软件开以消除那些对软件开发有重大影响的差错产生的根源发有重大影响的差错产生的根源。。n大多数软件开发人员都希望了解:大多数软件开发人员都希望了解:哪些用户需求哪些用户需求可能会可能会变更变更?系统中?系统中哪些模块哪些模块容易容易出错出错?对?对每一个模块每一个模块要要做多少测试做多少测试?在测试时能够?在测试时能够预计预计多少错误多少错误?如果能收集到相关的度?如果能收集到相关的度量数据,就能确定这些问题的答案。量数据,就能确定这些问题的答案。 n为了帮助计划、成本和工作量估为了帮助计划、成本和工作量估算,基线的数据应当具有下列属性:算,基线的数据应当具有下列属性:u数据必须合理、精确,应避免单数据必须合理、精确,应避免单纯根据以往项目进行纯根据以往项目进行““盲目估盲目估算算””;;u应从尽可能多的项目中收集数应从尽可能多的项目中收集数据;据;u数据必须一致;数据必须一致;u基线数据的应用必须与要做估算基线数据的应用必须与要做估算的工作类似。的工作类似。 软件项目的估算软件项目的估算n软件项目管理过程开始于项目计划。软件项目管理过程开始于项目计划。n在做项目计划时,第一项活动就是在做项目计划时,第一项活动就是估算估算。。n在做估算时往往存在某些不确定在做估算时往往存在某些不确定性,使得软件项目管理人员无法正性,使得软件项目管理人员无法正常进行管理而导致产品迟迟不能完常进行管理而导致产品迟迟不能完成。成。n现在已使用的实用技术是现在已使用的实用技术是时间时间和和工工作量估算作量估算。。 估算对风险的影响估算对风险的影响 n项目的复杂性项目的复杂性对于对于增加软件计划的增加软件计划的不确定性影响很大不确定性影响很大。复杂性越高,。复杂性越高,估算的风险就越高。估算的风险就越高。n项目的规模项目的规模对于软件估算的精确性对于软件估算的精确性和功效影响也比较大和功效影响也比较大。随着软件规。随着软件规模的扩大,问题分解会变得更加困模的扩大,问题分解会变得更加困难。难。项目的规模越大项目的规模越大,,开发工作量开发工作量越大越大,,估算的风险越高估算的风险越高。。 n项目的结构化程度项目的结构化程度也影响项目估算也影响项目估算的风险。随着结构化程度的提高,的风险。随着结构化程度的提高,进行精确估算的能力就能提高,而进行精确估算的能力就能提高,而风险将减少。风险将减少。n历史信息的有效性历史信息的有效性也也影响估算的风影响估算的风险险。对过去的项目进行综合的软件。对过去的项目进行综合的软件度量,可借用来比较准确地进行估度量,可借用来比较准确地进行估算,安排进度以避免重走过去的弯算,安排进度以避免重走过去的弯路,而总的风险也减少了。路,而总的风险也减少了。 n如果如果对软件项目的作用范围还不十对软件项目的作用范围还不十分清楚分清楚,或者,或者用户的要求经常变用户的要求经常变更更,都会导致对,都会导致对软件项目所需资源软件项目所需资源、、成本成本、、进度进度的估算频频变动,增加的估算频频变动,增加估算的风险。估算的风险。n计划人员应当要求计划人员应当要求在软件系统的规在软件系统的规格说明中给出完备的功能格说明中给出完备的功能、、性能性能、、接口的定义接口的定义。。 软件项目计划的目标软件项目计划的目标n软件项目管理人员在软件项目管理人员在开发工作一开开发工作一开始始需要进行需要进行定量估算定量估算。。n软件项目计划的目标软件项目计划的目标是是提供一个能提供一个能使项目管理人员对资源使项目管理人员对资源、、成本和进成本和进度做出合理估算的框架度做出合理估算的框架。。n这些估算应当在软件项目开始时的这些估算应当在软件项目开始时的一个有限的时间段内做出,并且随一个有限的时间段内做出,并且随着项目的进展定期进行更新。着项目的进展定期进行更新。 软件的范围软件的范围n软件范围包括软件范围包括功能功能、、性能性能、、限制限制、、接口接口和和可靠性可靠性。。n估算开始时,应对软件的功能进行估算开始时,应对软件的功能进行评价,对其进行适当的细化以便提评价,对其进行适当的细化以便提供更详细的细节。由于供更详细的细节。由于成本和进度成本和进度的估算都与功能有关的估算都与功能有关,因此,因此常常采常常采用某种程度的功能分解用某种程度的功能分解。。 n性能的考虑包括性能的考虑包括处理处理和和响应时间响应时间的的需求。需求。n约束条件则约束条件则标识产品成本标识产品成本、、外部硬外部硬件件、、可用存储可用存储或或其它现有系统其它现有系统对软对软件的件的限制限制。。n功能、性能和约束必须在一起进行功能、性能和约束必须在一起进行评价评价。当性能限制不同时,为实现。当性能限制不同时,为实现同样的功能,开发工作量可能相差同样的功能,开发工作量可能相差一个数量级。一个数量级。 n还要叙述某些还要叙述某些质量因素质量因素(例如,给(例如,给出的算法是否容易理解等)。出的算法是否容易理解等)。n软件与其它系统元素是相互作用的。软件与其它系统元素是相互作用的。要考虑要考虑每个接口的性质和复杂性每个接口的性质和复杂性,,以确定对开发资源、成本和进度的以确定对开发资源、成本和进度的影响。接口的概念可解释为:影响。接口的概念可解释为:u运行软件的硬件运行软件的硬件(如处理机与外(如处理机与外设)设)及间接受软件控制的设备及间接受软件控制的设备(如机器、显示器)(如机器、显示器);; u必须与新软件链接的现有的软件必须与新软件链接的现有的软件(如数据库存取例程、子程序包、(如数据库存取例程、子程序包、操作系统)操作系统);;u通过终端或其它输入/输出设备通过终端或其它输入/输出设备使用该软件的人使用该软件的人;;u该软件运行前后的该软件运行前后的一系列操作过一系列操作过程程。。n对于每一种情况,都必须清楚地了对于每一种情况,都必须清楚地了解通过接口的信息转换。解通过接口的信息转换。 软件开发中的资源软件开发中的资源n软件项目计划的第二个任务是对完软件项目计划的第二个任务是对完成该软件项目所需的资源进行估算。成该软件项目所需的资源进行估算。n软件开发所需的软件开发所需的资源资源有有n现成的用以支持软件开发的工具现成的用以支持软件开发的工具────硬件工具硬件工具及及软件工具软件工具n最基本的资源最基本的资源────人人 软件开发中的资源软件开发中的资源 n通常,对每一种资源,应说明以下通常,对每一种资源,应说明以下四个特性:四个特性:((11)资源的描述)资源的描述;;((22)资源的有效性说明)资源的有效性说明;;((33)资源在何时开始需要)资源在何时开始需要;;((44)使用资源的持续时间。)使用资源的持续时间。n最后两个特性统称为最后两个特性统称为时间窗口时间窗口。。 1.1.人力资源人力资源n在考虑各种软件开发资源时,在考虑各种软件开发资源时,人是人是最重要的资源最重要的资源。在安排开发活动时。在安排开发活动时必须考虑必须考虑人员的技术水平人员的技术水平、、专业专业、、人数人数、以及、以及在开发过程各阶段中对在开发过程各阶段中对各种人员的需要各种人员的需要。。n计划人员首先计划人员首先估算范围估算范围并并选择为完选择为完成开发工作所需要的技能成开发工作所需要的技能。还要在。还要在组织组织和和专业专业两方面做出安排。两方面做出安排。 n对于一些对于一些规模较小的项目规模较小的项目((11个人个人年或者更少),只要向专家做些咨年或者更少),只要向专家做些咨询,也许询,也许一个人就可以完成所有的一个人就可以完成所有的软件工程步骤软件工程步骤。。n对一些对一些规模较大的项目规模较大的项目,在整个软,在整个软件生存期中,件生存期中,各种人员的参与情况各种人员的参与情况是不一样的是不一样的。下面是各类不同的人。下面是各类不同的人员随开发工作的进展在软件工程各员随开发工作的进展在软件工程各个阶段的参与情况的典型曲线。个阶段的参与情况的典型曲线。 2.2.硬件资源硬件资源n硬件是作为软件开发项目的一种工硬件是作为软件开发项目的一种工具而投入的。具而投入的。((11)宿主机)宿主机((HostHost))──软件开发时软件开发时使用的计算机及外围设备使用的计算机及外围设备;;((22)目标机)目标机((TargetTarget))──运行已开运行已开发成功软件的计算机及外围设备发成功软件的计算机及外围设备;;((33)其它硬件设备)其它硬件设备──专用软件开发专用软件开发时需要的特殊硬件资源时需要的特殊硬件资源;; n宿主机宿主机连同连同必要的软件工具必要的软件工具构成构成软软件开发系统件开发系统。通常这样的开发系统。通常这样的开发系统能够能够支持多种用户的需要支持多种用户的需要,且能,且能保保持大量的由软件开发小组成员共享持大量的由软件开发小组成员共享的信息的信息。。n在许多情况下,宿主机与目标机可在许多情况下,宿主机与目标机可以是同一种机型。以是同一种机型。 3.3.软件资源软件资源n软件工程人员在软件开发期间使用软件工程人员在软件开发期间使用了许多软件工具来帮助开发。这种了许多软件工具来帮助开发。这种软件工具集叫做软件工具集叫做计算机辅助软件工计算机辅助软件工程程((CASECASE)。)。((11))业务系统计划工具集业务系统计划工具集((22))项目管理工具集项目管理工具集((33))支援工具支援工具────文档生成工具、文档生成工具、网络系统软件、数据库、电子邮件、网络系统软件、数据库、电子邮件、通报板,以及配置管理工具。通报板,以及配置管理工具。 ((44))分析和设计工具分析和设计工具((55))编程工具编程工具((66))组装和测试工具组装和测试工具((77))原型化和模拟工具原型化和模拟工具((88))维护工具维护工具((99))框架工具框架工具────这些工具能够提这些工具能够提供建立集成项目支撑环境(供建立集成项目支撑环境(IPSEIPSE))的框架。的框架。 4.4.软件复用性及软件部件库软件复用性及软件部件库n为了促成软件的复用,以提高软件为了促成软件的复用,以提高软件的生产率和软件产品的质量,可建的生产率和软件产品的质量,可建立可复用的软件部件库。立可复用的软件部件库。 软件成本和工作量的估算软件成本和工作量的估算n软件软件成本和工作量的估算成本和工作量的估算中变化的中变化的东西太多,人、技术、环境、政东西太多,人、技术、环境、政治,都会影响软件最终成本和工作治,都会影响软件最终成本和工作量。量。n软件项目的估算能够软件项目的估算能够通过一系列系通过一系列系统化的步骤统化的步骤,,在可接受的风险范围在可接受的风险范围内提供估算结果内提供估算结果。。n成本估算必须成本估算必须““事前事前””给出。时间越给出。时间越久,了解得越多,估算中出现的严久,了解得越多,估算中出现的严重误差就越少。重误差就越少。 分解技术分解技术n当一个当一个待解决的问题过于复杂待解决的问题过于复杂时,时,我们可以把它我们可以把它进一步分解进一步分解,直到,直到分分解后的子问题变得容易解决解后的子问题变得容易解决为止。为止。然后,然后,分别解决每一个子问题分别解决每一个子问题,并,并将这些子问题的解答综合起来将这些子问题的解答综合起来,从,从而而得到原问题的解答得到原问题的解答。。 LOCLOC和和FPFP估算估算n在软件项目估算中,在两个方面使在软件项目估算中,在两个方面使用了用了LOCLOC和和FPFP数据:数据:u把把LOCLOC和和FPFP数据当做一个估算数据当做一个估算变量,用于变量,用于量度软件每一个元素量度软件每一个元素的规模的规模。。uLOCLOC和和FPFP数据作为从过去项目数据作为从过去项目中收集到的中收集到的基线数据基线数据,与其它估,与其它估算变量联合使用算变量联合使用,,进行成本和工作进行成本和工作量的估算量的估算。。 nLOCLOC和和FPFP的共性在于的共性在于::u给出一个有界的软件范围的叙述给出一个有界的软件范围的叙述u由此叙述由此叙述把软件分解成一些小的把软件分解成一些小的可分别独立进行估算的子功能可分别独立进行估算的子功能u对每一个子功能对每一个子功能估算估算LOCLOC或或FPFPu把基线生产率度量把基线生产率度量((如如LOCLOC//PMPM或或FPFP//PMPM))用做特定的估算变用做特定的估算变量,量,导出子功能的成本或工作量导出子功能的成本或工作量u综合子功能的估算综合子功能的估算得到得到整个项目整个项目的总估算的总估算。。 n用用LOCLOC做为估算变量时,必须进做为估算变量时,必须进行行功能分解功能分解,,且需要达到很详细的且需要达到很详细的程度。而估算程度。而估算FPFP时需要的数据是时需要的数据是宏观的量,当把宏观的量,当把FPFP当做估算变量当做估算变量时不需分解得很详细。时不需分解得很详细。nLOCLOC是直接估算的是直接估算的,,而而FPFP是通过是通过估计估计输入输入、、输出输出、、数据文件数据文件、、查询查询和和外部接口外部接口的数目,以及的数目,以及1414种复种复杂性校正值间接地确定的。杂性校正值间接地确定的。 n项目计划人员可项目计划人员可对每一个分解的功对每一个分解的功能提出一个有代表性的估算值范围能提出一个有代表性的估算值范围。。n利用历史数据利用历史数据或或凭实际经验凭实际经验(当其(当其它的方法失效时),它的方法失效时),对每个功能分对每个功能分别按别按最佳的最佳的、、可能的可能的、、悲观的悲观的三种三种情况给出情况给出LOCLOC或或FPFP估计值估计值。记作。记作aa、、mm、、bb。。n接着计算接着计算LOCLOC或或FPFP的的期望值期望值EE。。EE==((aa++4m4m++bb)/)/66 n所有子功能的总估算变量值所有子功能的总估算变量值除以除以相相应于该估算变量的平均生产率度量应于该估算变量的平均生产率度量得到得到项目的总工作量项目的总工作量。。n例如,若假定总的例如,若假定总的FPFP估算值估算值是是310310,,基于过去项目的平均基于过去项目的平均FPFP生产生产率率是是5.55.5FPFP//PMPM,,则则项目的总工作项目的总工作量量是:是:工作量工作量==310310//5.55.5==5656PMPM作为作为LOCLOC和和FPFP估算的实例,考察估算的实例,考察一个为一个为CADCAD应用而开发的软件包。应用而开发的软件包。 n系统定义评审指明,系统定义评审指明,软件是在一个软件是在一个工作站上运行,其接口必须使用各工作站上运行,其接口必须使用各种计算机图形设备,包括鼠标器、种计算机图形设备,包括鼠标器、数字化仪、高分辩率彩色显示器和数字化仪、高分辩率彩色显示器和激光打印机。激光打印机。n在这个实例中,使用在这个实例中,使用LOCLOC做为估算做为估算变量。变量。n根据系统规格说明根据系统规格说明,,软件范围软件范围的初步的初步叙述如下叙述如下 ““软件将从操作员那里接收软件将从操作员那里接收22维或维或33维维几何数据几何数据。。操作员通过操作员通过用户界面用户界面与与CADCAD系统系统交互并控制它交互并控制它,这种用户,这种用户界面将表现出很好的人机接口设计界面将表现出很好的人机接口设计特性。所有的几何数据和其它支持特性。所有的几何数据和其它支持信息保存在一个信息保存在一个CADCAD数据库数据库内。要内。要开发一些开发一些设计分析模块设计分析模块以产生在各以产生在各种图形设备上显示的输出。软件要种图形设备上显示的输出。软件要设计得设计得能控制并与能各种外部设能控制并与能各种外部设备备,包括鼠标器、数字化仪、激光,包括鼠标器、数字化仪、激光打印机和绘图仪打印机和绘图仪交互交互。。”” 经过分解经过分解,,识别出下列主要软件功能:识别出下列主要软件功能:u用户界面和控制功能用户界面和控制功能u二维几何分析二维几何分析u三维几何分析三维几何分析u数据库管理数据库管理u计算机图形显示功能计算机图形显示功能u外设控制外设控制PCPCu设计分析模块设计分析模块n通过分解,可得到如下估算表通过分解,可得到如下估算表 估算表 n从历史的基线数据求出生产率度从历史的基线数据求出生产率度量量,即,即行/行/PMPM和和元/行元/行。。n需要需要根据复杂性程度的不同根据复杂性程度的不同,,对各对各功能使用不同的生产率度量值功能使用不同的生产率度量值。。n在表中的成本在表中的成本==LOCLOC的期望值的期望值EE与与元/行元/行相乘,工作量相乘,工作量==用用LOCLOC的期的期望值望值EE与与行/行/PMPM相除。相除。n因此可得,该项目总成本的估算值因此可得,该项目总成本的估算值为为657,000657,000元,总工作量的估算值为元,总工作量的估算值为145145人月(人月(PMPM)。)。 软件开发成本估算软件开发成本估算n软件开发成本主要是指软件开发成本主要是指软件开发过软件开发过程中所花费的工作量及相应的代价程中所花费的工作量及相应的代价。。它不包括原材料和能源的消耗,主它不包括原材料和能源的消耗,主要是人的劳动的消耗。要是人的劳动的消耗。n人的劳动消耗所需代价就是软件产人的劳动消耗所需代价就是软件产品的开发成本。品的开发成本。n软件产品开发成本的计算方法不同软件产品开发成本的计算方法不同于其它物理产品成本的计算。于其它物理产品成本的计算。 n软件的开发成本是软件的开发成本是以一次性开发过以一次性开发过程所花费的代价程所花费的代价来计算的。来计算的。n软件开发成本的估算,应是从软件开发成本的估算,应是从软件软件计划计划、、需求分析需求分析、、设计设计、、编码编码、、单单元测试元测试、、组装测试组装测试到到确认测试确认测试,整,整个软件开发全过程所花费的代价作个软件开发全过程所花费的代价作为依据的。为依据的。 软件开发成本估算方法软件开发成本估算方法n对于一个大型的软件项目,由于对于一个大型的软件项目,由于项项目的复杂性目的复杂性,开发成本的估算不是,开发成本的估算不是一件简单的事,要进行一系列的估一件简单的事,要进行一系列的估算处理。主要靠算处理。主要靠分解分解和和类推类推。。n基本估算方法分为三类。基本估算方法分为三类。u自顶向下的估算方法自顶向下的估算方法u自底向上的估计法自底向上的估计法u差别估计法差别估计法 自顶向下的估算方法自顶向下的估算方法n这种方法的主要思想是这种方法的主要思想是从项目的整从项目的整体出发体出发,,进行类推进行类推。。n估算人员根据估算人员根据以前已完成项目所消以前已完成项目所消耗的总成本耗的总成本((或总工作量或总工作量),),推算推算将要开发的软件的总成本将要开发的软件的总成本((或总工或总工作量作量),然后),然后按比例将它分配到各按比例将它分配到各开发任务单元中去开发任务单元中去,再来检验它是,再来检验它是否能满足要求。否能满足要求。 软件库存情况更新开发者W.Ward日期2/8/82阶段项目任务工作量分布(1/53)小计(1/53)计划和需求软件需求定义5开发计划16产品设计6产品设计初步的用户手册3测试计划110详细PDL描述4详细设计数据定义4过程设计2正式的用户手册212编码与程序编码6单元测试单元测试结果1016组装与编写文档4联合测试组装与测试59总计53 n这种方法的优点是估算工作量小,这种方法的优点是估算工作量小,速度快。速度快。n缺点是对项目中的特殊困难估计不缺点是对项目中的特殊困难估计不足,估算出来的成本盲目性大,有足,估算出来的成本盲目性大,有时会遗漏被开发软件的某些部分。时会遗漏被开发软件的某些部分。 自底向上的估计法自底向上的估计法n这种方法的主要思想是把这种方法的主要思想是把待开发的待开发的软件细分软件细分,,直到每一个子任务都已直到每一个子任务都已经明确所需要的开发工作量经明确所需要的开发工作量,然后,然后把它们加起来把它们加起来,,得到软件开发的总得到软件开发的总工作量工作量。。n它的优点是估算各个部分的准确性它的优点是估算各个部分的准确性高。缺点是缺少各项子任务之间相高。缺点是缺少各项子任务之间相互联系所需要的工作量,还缺少许互联系所需要的工作量,还缺少许多与软件开发有关的系统级工作量多与软件开发有关的系统级工作量.. 差别估计法差别估计法n这种方法综合了上述两种方法的优这种方法综合了上述两种方法的优点,其主要思想是点,其主要思想是把待开发的软件把待开发的软件项目与过去已完成的软件项目进行项目与过去已完成的软件项目进行类比类比,,从其开发的各个子任务中区从其开发的各个子任务中区分出类似的部分和不同的部分分出类似的部分和不同的部分。。n类似的部分按实际量进行计算类似的部分按实际量进行计算,,不不同的部分则采用相应方法进行估算同的部分则采用相应方法进行估算。。 专家判定技术专家判定技术n由多位专家进行成本估算由多位专家进行成本估算n单独一位专家可能会有种种偏见,单独一位专家可能会有种种偏见,最好由多位专家进行估算最好由多位专家进行估算,,取得多取得多个估算值个估算值。。n有多种方法把这些估算值合成一个有多种方法把这些估算值合成一个估算值。估算值。 n一种方法是一种方法是简单地求各估算值的中简单地求各估算值的中值或平均值值或平均值。其优点是简便。缺点。其优点是简便。缺点是可能会由于受一、二个极端估算是可能会由于受一、二个极端估算值的影响而产生严重的偏差。值的影响而产生严重的偏差。n一种方法是一种方法是召开小组会召开小组会,,使各位专使各位专家们统一于或至少同意某一个估算家们统一于或至少同意某一个估算值值。优点是可以摈弃蒙昧无知的估。优点是可以摈弃蒙昧无知的估算值,缺点是一些组员可能会受权算值,缺点是一些组员可能会受权威或政治因素的影响。威或政治因素的影响。 DeiphiDeiphi技术技术n标准标准DeiphiDeiphi技术技术¶组织者发给每位专家一份组织者发给每位专家一份软件系软件系统规格说明书统规格说明书和一张和一张记录估算值记录估算值的表格的表格,请他们进行估算。,请他们进行估算。·专家详细研究软件规格说明书的专家详细研究软件规格说明书的内容,对该软件提出内容,对该软件提出三个规模三个规模的的估算值,即:估算值,即:aaii((最小最小),),mmii((可能可能),),bbii((最大最大),),无记名地填写表格无记名地填写表格 ¸组织者对专家们填在表格中的答组织者对专家们填在表格中的答复复进行整理进行整理::a.a.计算各专家估算的期望值计算各专家估算的期望值EiEi;;b.b.对专家的估算结果分类摘要对专家的估算结果分类摘要。。专家对此估算值另做一次估算专家对此估算值另做一次估算。。¹在综合专家估算结果的基础上,在综合专家估算结果的基础上,组织专家再次无记名地填写表格组织专家再次无记名地填写表格。。比较两次估算的结果。若差异很比较两次估算的结果。若差异很大,要通过查询找出差异的原因。大,要通过查询找出差异的原因。 º上述过程可重复多次。上述过程可重复多次。最终可获最终可获得一个得到多数专家共识的软件规得一个得到多数专家共识的软件规模模(源代码行数)。(源代码行数)。n最后,通过与历史资料进行类比,最后,通过与历史资料进行类比,根据过去完成软件项目的规模和成根据过去完成软件项目的规模和成本等信息,推算出该软件每行源代本等信息,推算出该软件每行源代码所需要的成本。然后再乘以该软码所需要的成本。然后再乘以该软件源代码行数的估算值,就可得到件源代码行数的估算值,就可得到该软件的成本估算值。该软件的成本估算值。 软件开发成本估算的经验模型软件开发成本估算的经验模型n软件开发成本估算是软件开发成本估算是依据开发成依据开发成本估算模型进行估算本估算模型进行估算的。的。n开发成本估算模型通常开发成本估算模型通常采用经验采用经验公式公式来来预测软件项目计划所需要预测软件项目计划所需要的成本的成本、、工作量和进度数据工作量和进度数据。。n用以支持大多数模型的经验数据用以支持大多数模型的经验数据都是都是从有限的一些项目样本从有限的一些项目样本中得中得到的。到的。 IBMIBM模型模型E=5.2×L0.91D=4.1×L0.36=14.47×E0.35S=0.54×E0.6DOC=49×L1.01nLL是是源代码行数源代码行数((KLOCKLOC)),,EE是是工工作量作量((PMPM)),,DD是是项目持续时间项目持续时间((月月)),,SS是是人员需要量人员需要量((人人)),,DOCDOC是是文档数量文档数量((页页))。。 nIBMIBM模型是模型是静态单变量模型静态单变量模型。。n在此模型中,一般指在此模型中,一般指一条机器指令一条机器指令为一行源代码为一行源代码。。n一个软件的源代码行数一个软件的源代码行数不包括程序不包括程序注释注释、、作业命令作业命令、、调试程序在内调试程序在内。。n对于非机器指令编写的源程序,例对于非机器指令编写的源程序,例如汇编语言或高级语言程序,应如汇编语言或高级语言程序,应转转换成机器指令源代码行数换成机器指令源代码行数来考虑。来考虑。 定义定义::转换系数=机器指令条数/非机转换系数=机器指令条数/非机器语言执行步数。器语言执行步数。转换系数表转换系数表语语言言转转换换系系数数简简单单汇汇编编11宏宏汇汇编编11..22~~11..55FFOORRTTRRAANN44~~66PPLL//II44~~1100 PutnamPutnam模型模型nPutnamPutnam模型是一种模型是一种动态多变量模动态多变量模型型。适用于大型项目,但也可以应。适用于大型项目,但也可以应用在一些较小的软件项目中。用在一些较小的软件项目中。n它是它是假定在软件开发的整个生存期假定在软件开发的整个生存期中工作量有特定的分布中工作量有特定的分布。。n大型软件项目的开发工作量分布可大型软件项目的开发工作量分布可以用以用RayleighRayleigh--NordenNorden曲线曲线表示。表示。 n用用RayleighRayleigh--NordenNorden曲线可以导出一曲线可以导出一个个““软件方程软件方程””14LCkK3td3ntdtd是是开发持续时间开发持续时间((年年)),,KK是是软件软件开发与维护在内的整个生存期所花开发与维护在内的整个生存期所花费的工作量费的工作量((人年人年)),,LL是是源代码行源代码行数数((LOCLOC)),,CkCk是是技术状态常数技术状态常数,,因开发环境而异因开发环境而异。。 技术状态常数技术状态常数CCkk的取值的取值C的开发开发环境k典型值环境举例2000差没有系统的开发方法,缺乏文档和复审,批处理方式。8000好有合适的系统开发方法,有充分的文档和复审,交互执行方式。11000优有自动开发工具和技术。 COCOMOCOCOMO模型模型((COnstructiveCOstMOdelCOnstructiveCOstMOdel))n结构型成本估算模型是一种结构型成本估算模型是一种精确精确、、易于使用易于使用的成本估算方法。的成本估算方法。nDSIDSI((源指令条数源指令条数)定义为)定义为代码代码的的源程序行数源程序行数。若一行有两个语句,。若一行有两个语句,则算做一条指令。它则算做一条指令。它包括作业控制包括作业控制语句语句和和格式语句格式语句,,但不包括注释语但不包括注释语句。句。KDSIKDSI==1000DSI1000DSI。。 nMMMM((度量单位为度量单位为人月人月)表示)表示开发开发工作量工作量。。nTDEVTDEV((度量单位为度量单位为月月)表示)表示开发开发进度进度。它由工作量决定。。它由工作量决定。n软件开发项目的分类软件开发项目的分类软件开发项目的软件开发项目的总体类型总体类型::u组织型组织型u嵌入型嵌入型u半独立型半独立型 nCOCOMOCOCOMO模型的分类模型的分类COCOMOCOCOMO模型模型按其详细程度按其详细程度分成分成三级:三级:u基本基本COCOMOCOCOMO模型模型u中间中间COCOMOCOCOMO模型模型u详细详细COCOMOCOCOMO模型模型n基本基本COCOMOCOCOMO模型模型是是静态单变量静态单变量模型模型,用,用源代码行数源代码行数((LOCLOC))为为自变自变量量的经验函数计算软件开发工作量。的经验函数计算软件开发工作量。 n中间中间COCOMOCOCOMO模型模型在用在用LOCLOC为为自自变量变量的函数计算软件开发工作量的函数计算软件开发工作量(称为名义工作量)的基础上,(称为名义工作量)的基础上,用用涉及产品涉及产品、、硬件硬件、、人员人员、、项目等方项目等方面的影响因素调整工作量估算面的影响因素调整工作量估算。。n详细详细COCOMOCOCOMO模型模型包括中间包括中间COCOCOMOCOMO模型的所有特性,但用上述模型的所有特性,但用上述各种影响因素调整工作量估算时,各种影响因素调整工作量估算时,还要考虑对软件工程过程中每一步还要考虑对软件工程过程中每一步骤(分析、设计等)的影响。骤(分析、设计等)的影响。 基本基本COCOMOCOCOMO模型模型n基本基本COCOMOCOCOMO模型的工作量和进模型的工作量和进度公式度公式总体类型工作量进度组织型MM=TDEV==2.4(KDSI)1.05=2.5(MM)0.38半独立MM=TDEV=型=3.0(KDSI)1.12=2.5(MM)0.35嵌入型MM=TDEV==3.6(KDSI)1.20=2.5(MM)0.32 中间中间COCOMOCOCOMO模型模型n进一步考虑进一步考虑1515种影响软件工作量的种影响软件工作量的因素因素,通过,通过定下乘法因子定下乘法因子,,修正修正COCOMOCOCOMO工作量公式和进度公工作量公式和进度公式式,可以更合理地估算软件(各阶,可以更合理地估算软件(各阶段)的工作量和进度。段)的工作量和进度。n中间中间COCOMOCOCOMO模型的名义工作量模型的名义工作量与进度公式如下所示。与进度公式如下所示。 中间中间COCOMOCOCOMO模型的名义工作量模型的名义工作量与进度公式与进度公式总体类型工作量进度组织型MM=TDEV==3.2(KDSI)1.05=2.5(MM)0.38半独立MM=TDEV=型=3.0(KDSI)1.12=2.5(MM)0.35嵌入型MM=TDEV==2.8(KDSI)1.20=2.5(MM)0.32 1515种影响软件工作量的因素种影响软件工作量的因素fifin产品因素:产品因素:软件可靠性、数据库规软件可靠性、数据库规模、产品复杂性模、产品复杂性n硬件因素:硬件因素:执行时间限制、存储限执行时间限制、存储限制、虚拟机易变性、环境周转时间制、虚拟机易变性、环境周转时间n人的因素:人的因素:分析员能力、应用领域分析员能力、应用领域实际经验、程序员能力、虚拟机使实际经验、程序员能力、虚拟机使用经验、程序语言使用经验用经验、程序语言使用经验n项目因素:项目因素:现代程序设计技术、软现代程序设计技术、软件工具的使用、开发进度限制件工具的使用、开发进度限制 n此时,工作量计算公式改成此时,工作量计算公式改成15cMMr(KDEV)fii1n例例1.1.一个一个3232KDSIKDSI的声音输入系统是的声音输入系统是一个输入原型,或是一个可行性表一个输入原型,或是一个可行性表演模型。所需可靠性非常低。把此演模型。所需可靠性非常低。把此模型看做半独立型软件。则有模型看做半独立型软件。则有MMMM==3.03.0((3232))1.121.12==146146又查表知又查表知ff11==0.750.75,,其它其它ffii==1.001.00,,则最终有则最终有MMMM==146146××0.750.75==110.110. n例例14.14.一个规模为一个规模为1010KDSIKDSI的商用微的商用微机远程通信的机远程通信的嵌入型软件嵌入型软件,,使用中使用中间间COCOMOCOCOMO模型模型进行成本估算。进行成本估算。n程序名义工作量程序名义工作量MM=2.8(10)1.20=44.38(MM)n程序实际工作量程序实际工作量15MM=44.38×fii1=44.38×1.17=51.5(MM) 影响工作量因素fi情况取值1软件可靠性只用于局部地区,恢1.00(正常)复问题不严重2数据库规模20000字节0.94(低)3产品复杂性用于远程通信处理1.30(很高)4时间限制使用70%的CPU时间1.10(高)5存储限制64K中使用45K1.06(高)6机器使用商用微处理机1.00(额定值)7周转时间平均2小时1.00(额定值)8分析员能力优秀人才0.86(高)9工作经验远程通信工作3年1.10(低)10程序员能力优秀人才0.86(高)11工作经验微型机工作6个月1.00(正常)12语言使用经验12个月1.00(正常)13使用现代程序设计技术1年以上0.91(高)14使用软件工具基本的微型机软件1.10(低)15工期9个月1.00(正常) n开发所用时间开发所用时间TDEV=2.5(51.5)0.32=8.9(月)月n如果分析员与程序员的工资都按每如果分析员与程序员的工资都按每月月6,0006,000美元计算,则该项目的开美元计算,则该项目的开发人员的工资总额为发人员的工资总额为51.5×6,000=309,000(美元)美元n做为对比,现在用做为对比,现在用IBMIBM模型模型计算计算::PMPM==5.2(10)5.2(10)0.910.91==42.2742.27((人月)人月)DD==4.1(10)4.1(10)0.380.38==9.849.84((月)月)SS==0.54(42.27)0.54(42.27)0.600.60==5.1(5.1(人人)) 详细详细COCOMOCOCOMO模型模型n详细详细COCOMOCOCOMO模型的名义工作量模型的名义工作量公式和进度公式与中间公式和进度公式与中间COCOMOCOCOMO模型相同模型相同。。n工作量因素分级表分层、分阶段给工作量因素分级表分层、分阶段给出。针对每一个影响因素,按出。针对每一个影响因素,按模块模块层层、、子系统层子系统层、、系统层系统层,有三张工,有三张工作量因素分级表,供不同层次的估作量因素分级表,供不同层次的估算使用。算使用。每一张表中工作量因素又每一张表中工作量因素又按开发各个不同阶段给出按开发各个不同阶段给出。。 n例如,关于软件可靠性(例如,关于软件可靠性(RELYRELY))要求的工作量因素分级表(子系统要求的工作量因素分级表(子系统层),如表所示。层),如表所示。n使用这些表格,可以比使用这些表格,可以比中间中间COCOCOCOMOMO模型模型更方便、更准确地估算软更方便、更准确地估算软件开发工作量。件开发工作量。 软件可靠性工作量因素分级表软件可靠性工作量因素分级表((子系统层子系统层)) 进度安排进度安排n软件开发项目的进度安排有两种软件开发项目的进度安排有两种方式:方式:((11)系统)系统最终交付日期已经确最终交付日期已经确定定,软件开发部门必须在规定期,软件开发部门必须在规定期限内完成;限内完成;((22)系统)系统最终交付日期只确定了最终交付日期只确定了大致的年限大致的年限,最後交付日期由软,最後交付日期由软件开发部门确定。件开发部门确定。 n进度安排落空,会导致市场机会的进度安排落空,会导致市场机会的丧失,使用户不满意,而且也会导丧失,使用户不满意,而且也会导致成本的增加。致成本的增加。n因此,在考虑进度安排时,要把工因此,在考虑进度安排时,要把工作量与花费时间联系起来,合理分作量与花费时间联系起来,合理分配工作量配工作量,,利用进度安排的有效分利用进度安排的有效分析方法严密监控软件开发的进展情析方法严密监控软件开发的进展情况,使软件开发进度不致拖延。况,使软件开发进度不致拖延。 软件开发小组人数与软件生产率软件开发小组人数与软件生产率的关系的关系n当几个人共同承担软件开发项目中当几个人共同承担软件开发项目中的某一任务时,的某一任务时,人与人之间必须通人与人之间必须通过交流来解决各自承担任务之间的过交流来解决各自承担任务之间的接口问题接口问题,即所谓,即所谓通信问题通信问题。通信。通信需花费时间和代价,会引起软件错需花费时间和代价,会引起软件错误增加,降低软件生产率。误增加,降低软件生产率。 n若两个人之间需要通信,则称在这若两个人之间需要通信,则称在这两个人之间存在一条通信路径。如两个人之间存在一条通信路径。如果一个软件开发小组有果一个软件开发小组有nn个人,每个人,每两人之间都需要通信,则总的通信两人之间都需要通信,则总的通信路径有路径有nn((nn--1)/21)/2((条条))。。 n设一个人单独开发软件,生产率是设一个人单独开发软件,生产率是50005000行/人年行/人年。若。若44个人个人组成一个组成一个小组共同开发这个软件,则需要小组共同开发这个软件,则需要66条通信路径条通信路径。若在每条通信路径上。若在每条通信路径上耗费的工作量是耗费的工作量是250250行/人年行/人年。则。则小组中每个人的软件生产率降低为小组中每个人的软件生产率降低为50005000--66××250250//44===5000=5000--375375===4625=4625行/人年。行/人年。 n从上述分析可知,从上述分析可知,一个软件任务由一个软件任务由一个人单独开发,生产率最高一个人单独开发,生产率最高;而;而对于一个稍大型的软件项目,一个对于一个稍大型的软件项目,一个人单独开发,时间太长。因此人单独开发,时间太长。因此软件软件开发小组是必要的开发小组是必要的。。n但是,开发小组不宜太大,成员之但是,开发小组不宜太大,成员之间避免太多的通信路径。间避免太多的通信路径。n在开发进程中,切忌中途加人,避在开发进程中,切忌中途加人,避免太多的生产率损失。免太多的生产率损失。 任务的确定与并行性任务的确定与并行性n当参加同一软件工程项目的人数不当参加同一软件工程项目的人数不止一人的时候,开发工作就会出现止一人的时候,开发工作就会出现并行情形。并行情形。n软件开发进程中设置许多里程碑。软件开发进程中设置许多里程碑。里程碑为管理人员提供了指示项目里程碑为管理人员提供了指示项目进度的可靠依据。进度的可靠依据。n软件工程项目的并行性提出了一系软件工程项目的并行性提出了一系列的进度要求。列的进度要求。 n因为并行任务是同时发生的,所以因为并行任务是同时发生的,所以进度计划表必须决定任务之间的从进度计划表必须决定任务之间的从属关系,确定各个任务的先后次序属关系,确定各个任务的先后次序和衔接,确定各个任务完成的持续和衔接,确定各个任务完成的持续时间。时间。n项目负责人应注意构成关键路径的项目负责人应注意构成关键路径的任务,即若要保证整个项目能按进任务,即若要保证整个项目能按进度要求完成,就必须保证这些任务度要求完成,就必须保证这些任务要按进度要求完成。要按进度要求完成。 制定开发进度计划制定开发进度计划n4040--2020--4040规则规则u在整个软件开发过程中,编码工在整个软件开发过程中,编码工作量仅占作量仅占2020%,编码前工作量占%,编码前工作量占4040%,编码后工作量占%,编码后工作量占4040%。%。u4040--2020--4040规则只应用来做为规则只应用来做为一个指南。实际的工作量分配比一个指南。实际的工作量分配比例必须按照各项目的特点来决定。例必须按照各项目的特点来决定。 nCOCOMOCOCOMO模型模型u开发进度开发进度TDEVTDEV与工作量与工作量MMMM的的关系:关系:TDEVTDEV==aa((MMMM))bbu如果想要缩短开发时间,或想要如果想要缩短开发时间,或想要保证开发进度,必须考虑影响工保证开发进度,必须考虑影响工作量的那些因素。按可减小工作作量的那些因素。按可减小工作量的因素取值。量的因素取值。 u按此比例确定各个阶段工作量的分按此比例确定各个阶段工作量的分配,从而进一步确定每一阶段所需配,从而进一步确定每一阶段所需的开发时间,然后在每个阶段,进的开发时间,然后在每个阶段,进行任务分解,对各个任务再进行工行任务分解,对各个任务再进行工作量和开发时间的分配。作量和开发时间的分配。 进度安排的方法进度安排的方法n可以把用于一般开发项目的进度安可以把用于一般开发项目的进度安排的技术和工具应用于软件项目。排的技术和工具应用于软件项目。n为监控为监控软件项目的进度计划和工作软件项目的进度计划和工作的实际进展情况的实际进展情况,为表现,为表现各项任务各项任务之间进度的相互依赖关系之间进度的相互依赖关系,需要采,需要采用图示的方法。用图示的方法。n在图示方法中,必须明确标明:在图示方法中,必须明确标明: u各个任务的各个任务的计划开始时间计划开始时间,,完成完成时间时间;;u各个任务各个任务完成标志完成标志(即(即○○文档编文档编写和写和△△评审);评审);u各个任务与参与工作的人数,各各个任务与参与工作的人数,各个个任务与工作量之间的衔接情任务与工作量之间的衔接情况况;;u完成各个任务所需的物理资源和完成各个任务所需的物理资源和数据资源。数据资源。 (1)(1)甘特图(甘特图(GanttChartGanttChart))n在甘特图中,每一任务完成的标在甘特图中,每一任务完成的标准,不是以能否继续下一阶段任务准,不是以能否继续下一阶段任务为标准,而是为标准,而是以必须交付应交付的以必须交付应交付的文档与通过评审为标准文档与通过评审为标准。因此在甘。因此在甘特图中,文档编制与评审是软件开特图中,文档编制与评审是软件开发进度的里程碑。发进度的里程碑。 (2)(2)PERTPERT技术和技术和CPMCPM方法方法nPERTPERT技术叫做技术叫做计划评审技术计划评审技术,,CPMCPM方法叫做方法叫做关键路径法关键路径法,它们,它们都是安排开发进度,制定软件开发都是安排开发进度,制定软件开发计划的最常用的方法。计划的最常用的方法。n它们都采用网络图来描述一个项目它们都采用网络图来描述一个项目的任务网络,也就是从一个项目的的任务网络,也就是从一个项目的开始到结束,把应当完成的任务用开始到结束,把应当完成的任务用图或表的形式表示出来。图或表的形式表示出来。 三个模块开发的网络图三个模块开发的网络图 n通常用两张表来定义网络图。通常用两张表来定义网络图。n一张表给出一张表给出与一特定软件项目有关与一特定软件项目有关的所有任务的所有任务(也称为任务分解结构(也称为任务分解结构WorkBreakdownWorkBreakdownStructureStructure));;n另一张表给出另一张表给出应当按照什么样的次应当按照什么样的次序来完成这些任务序来完成这些任务(有时称为限制(有时称为限制表表RestrictionListRestrictionList)。)。PERTPERT技术和技术和CPMCPM方法都为项目计方法都为项目计划人员提供了一些定量的工具。划人员提供了一些定量的工具。 ¶确定关键路径确定关键路径,即决定项目开发,即决定项目开发时间的任务链。在关键路径上的各时间的任务链。在关键路径上的各个任务都是时间余量为零的关键任个任务都是时间余量为零的关键任务,不能有任何时间延误。务,不能有任何时间延误。·应用统计模型应用统计模型,对每一个单独的,对每一个单独的任务确定最可能的开发持续时间的任务确定最可能的开发持续时间的估算值。估算值。¸计算边界时间计算边界时间,以便为具体的任,以便为具体的任务定义时间窗口。务定义时间窗口。 项目的追踪和控制项目的追踪和控制软件项目管理一项重要工作就是软件项目管理一项重要工作就是在在项目实施过程中项目实施过程中进行进行追踪追踪和和控制控制::n定期举行项目状态会议。由每位项定期举行项目状态会议。由每位项目成员报告其进展和遇到的问题。目成员报告其进展和遇到的问题。n评价在软件工程过程中所产生的所评价在软件工程过程中所产生的所有评审的结果。有评审的结果。n确定由项目的计划进度所安排的可确定由项目的计划进度所安排的可能选择的正式的里程碑。能选择的正式的里程碑。 n比较在项目资源表中所列出的每一比较在项目资源表中所列出的每一个项目任务的实际开始时间和计划个项目任务的实际开始时间和计划开始时间。开始时间。n非正式地与开发人员交谈,以得到非正式地与开发人员交谈,以得到他们对开发进展和刚冒头的问题的他们对开发进展和刚冒头的问题的客观评价。客观评价。n当问题出现的时候,当问题出现的时候,项目管理人项目管理人员必须员必须实行控制以尽快地排解实行控制以尽快地排解问题。问题。 软件项目的组织与计划软件项目的组织与计划n制定计划制定计划n软件项目组织的建立软件项目组织的建立n人员配备人员配备 制定计划制定计划n软件开发项目的计划涉及到实施项软件开发项目的计划涉及到实施项目的各个环节,带有全局性质。目的各个环节,带有全局性质。n计划的计划的合理性合理性和和准确性准确性往往关系着往往关系着项目的成败。项目的成败。n计划应力求完备。要计划应力求完备。要考虑到一些未考虑到一些未知因素和不确定因素知因素和不确定因素,,考虑到可能考虑到可能的修改的修改。计划应力求准确。。计划应力求准确。尽可能尽可能提高所依据数据的可靠程度提高所依据数据的可靠程度。。 1.1.制定计划目标和进行风险分析制定计划目标和进行风险分析n制定计划的目的就是要回答:这制定计划的目的就是要回答:这个软件项目的范围是什么?需要个软件项目的范围是什么?需要哪些资源?花费多少工作量?要哪些资源?花费多少工作量?要用的成本有多少?以及进度如何用的成本有多少?以及进度如何安排等等一系列问题。安排等等一系列问题。n这步工作应当以系统计划为基这步工作应当以系统计划为基础,以系统规格说明为依据。础,以系统规格说明为依据。 n在开发工作尚未开始之前,准确回在开发工作尚未开始之前,准确回答这些问题是十分困难的。需要通答这些问题是十分困难的。需要通过以往的开发经验做出估算,过以往的开发经验做出估算,很难很难达到准确达到准确。。n从估算出发,项目必然带有一定的从估算出发,项目必然带有一定的风险风险。估算的准确性越差,风险也。估算的准确性越差,风险也就越大。研制的软件项目越复杂,就越大。研制的软件项目越复杂,规模越大,结构化程度越低,资源、规模越大,结构化程度越低,资源、成本、进度等因素的不确定性越成本、进度等因素的不确定性越大,承担这一项目所冒的风险也越大,承担这一项目所冒的风险也越大。大。 n组织软件项目必须事先认清可能构组织软件项目必须事先认清可能构成风险的因素,并研究战胜风险的成风险的因素,并研究战胜风险的对策,只有这样才能避免出现灾难对策,只有这样才能避免出现灾难性的后果,取得项目预期的成果。性的后果,取得项目预期的成果。 2.2.软件计划的类型软件计划的类型n针对不同工作目标,软件计划有:针对不同工作目标,软件计划有:¶项目实施计划项目实施计划((软件开发计划软件开发计划))这是软件开发的综合性计划,通常这是软件开发的综合性计划,通常应包括任务、进度、人力、环境、应包括任务、进度、人力、环境、资源、组织等多个方面。资源、组织等多个方面。·质量保证计划质量保证计划把软件开发的质把软件开发的质量要求具体规定为每个开发阶段可量要求具体规定为每个开发阶段可以检查的质量保证活动。以检查的质量保证活动。 ¸软件测试计划软件测试计划规定测试活动的规定测试活动的任务、测试方法、进度、资源、人任务、测试方法、进度、资源、人员职责等。员职责等。¹文档编制计划文档编制计划规定所开发项目规定所开发项目应编制的文档种类、内容、进度、应编制的文档种类、内容、进度、人员职责等。人员职责等。º用户培训计划用户培训计划规定对用户进行规定对用户进行培训的目标、要求、进度、人员职培训的目标、要求、进度、人员职责等。责等。 »综合支持计划综合支持计划规定软件开发过程规定软件开发过程中所需要的支持,以及如何获取和中所需要的支持,以及如何获取和利用这些支持。利用这些支持。¼软件分发计划软件分发计划软件开发项目完成软件开发项目完成后,如何提供给用户。后,如何提供给用户。 3.3.项目实施计划中任务的划分项目实施计划中任务的划分n如何进行工作划分是实施计划首先如何进行工作划分是实施计划首先应解决的问题。常用的计划结构有:应解决的问题。常用的计划结构有:¶阶段项目计划阶段项目计划按软件生存期,把开发工作划分为按软件生存期,把开发工作划分为若干阶段,对每一阶段工作做出计若干阶段,对每一阶段工作做出计划。再把每一阶段工作分解为若干划。再把每一阶段工作分解为若干任务,做出任务计划。还要把任务任务,做出任务计划。还要把任务细分为若干步骤,做出步骤计划。细分为若干步骤,做出步骤计划。 ·任务分解结构任务分解结构按项目的实际情况进行自顶向下的按项目的实际情况进行自顶向下的结构化分解,形成树形任务结构。结构化分解,形成树形任务结构。进一步把工作内容、所需工作量、进一步把工作内容、所需工作量、预计完成的期限也规定下来。预计完成的期限也规定下来。¸任务责任矩阵任务责任矩阵在任务分解的基础上,把工作分配在任务分解的基础上,把工作分配给相关的人员,用一个矩阵形表格给相关的人员,用一个矩阵形表格表示任务的分工和责任。表示任务的分工和责任。 任务分解结构任务分解结构 任务责任矩阵任务责任矩阵 软件项目组织的建立软件项目组织的建立n开发组织采用什么形式,要针对开发组织采用什么形式,要针对软软件项目的特点件项目的特点来决定,同时也来决定,同时也与参与参与人员的素质有关与人员的素质有关。。11、组织原则、组织原则(1)(1)尽早落实责任:尽早落实责任:在软件项目工在软件项目工作开始时,要尽早作开始时,要尽早指定专人负责指定专人负责。。使他使他有权进行管理有权进行管理,并,并对任务的完对任务的完成负全责成负全责。。 ((22)减少接口:)减少接口:一个组织的一个组织的生产生产率随完成任务中存在的通信路径数率随完成任务中存在的通信路径数目增加而降低目增加而降低。要有合理的人员分。要有合理的人员分工、好的组织结构、有效的通信,工、好的组织结构、有效的通信,减少不必要的生产率的损失。减少不必要的生产率的损失。((33)责权均衡:)责权均衡:软件经理人员所软件经理人员所负的责任不应比委任给他的权力还负的责任不应比委任给他的权力还大。大。 2.2.组织结构的模式组织结构的模式((11)按课题划分的模式)按课题划分的模式把软件开发人员按课题组成小组,把软件开发人员按课题组成小组,小组成员自始至终参加所承担课题小组成员自始至终参加所承担课题的各项任务。他们应负责完成软件的各项任务。他们应负责完成软件产品的定义、设计、实现、测试、产品的定义、设计、实现、测试、复查、文档编制、甚至包括维护在复查、文档编制、甚至包括维护在内的全过程。内的全过程。 ((22)按职能划分的模式)按职能划分的模式把参加开发项目的软件人员按任务把参加开发项目的软件人员按任务的工作阶段划分成若干个专业小组。的工作阶段划分成若干个专业小组。要开发的软件产品在每个专业小组要开发的软件产品在每个专业小组完成阶段加工(即工序)以后,沿完成阶段加工(即工序)以后,沿工序流水线向下传递。例如,分别工序流水线向下传递。例如,分别建立计划组、需求分析组、设计组、建立计划组、需求分析组、设计组、实现组、系统测试组、质量保证组、实现组、系统测试组、质量保证组、维护组等。各种文档资料按工序在维护组等。各种文档资料按工序在各组之间传递。各组之间传递。 ((33)矩阵形模式)矩阵形模式这种模式实际上是以上两种模式的这种模式实际上是以上两种模式的复合。一方面,按工作性质,成立复合。一方面,按工作性质,成立一些专门组,如开发组、业务组、一些专门组,如开发组、业务组、测试组等;另一方面,每一个项目测试组等;另一方面,每一个项目又有它的经理人员负责管理。每个又有它的经理人员负责管理。每个软件人员属于某一个软件人员属于某一个专门组,又专门组,又参加某一项目的工作。参加某一项目的工作。 3.3.程序设计小组的组织形式程序设计小组的组织形式n小组内部人员的组织形式对生产率小组内部人员的组织形式对生产率也有影响。现有的组织形式有三种。也有影响。现有的组织形式有三种。((11)主程序员制小组)主程序员制小组小组的核心由一位小组的核心由一位主程序员主程序员((高级工高级工程师程师))、二至五位、二至五位技术员技术员、一位、一位后援后援工程师工程师组成。主程序员负责小组全组成。主程序员负责小组全部技术活动的计划、协调与审查,部技术活动的计划、协调与审查,设计和实现项目中的关键部分。设计和实现项目中的关键部分。 技术员负责项目的具体分析与开技术员负责项目的具体分析与开发,文档资料的编写工作。后援发,文档资料的编写工作。后援工程师支持主程序员的工作,为工程师支持主程序员的工作,为主程序员提供咨询,也做部分分主程序员提供咨询,也做部分分析、设计和实现的工作。并在必析、设计和实现的工作。并在必要时能代替主程序员工作。要时能代替主程序员工作。主程序员制小组还可以由一些主程序员制小组还可以由一些专专家家((如通信专家或数据库设计专家如通信专家或数据库设计专家))、、辅助人员辅助人员((如打字员和秘书如打字员和秘书))、、软件软件资料员资料员协助工作。协助工作。 ((22)民主制小组)民主制小组在民主制小组中,遇到问题,组内在民主制小组中,遇到问题,组内成员之间可以平等地交换意见。成员之间可以平等地交换意见。工工作目标的制定及做出决定都由全体作目标的制定及做出决定都由全体成员参加。成员参加。虽然也有一位成员当组虽然也有一位成员当组长,但工作的讨论、成果的检验都长,但工作的讨论、成果的检验都公开进行。公开进行。这种组织形式强调发挥这种组织形式强调发挥小组每个成员的积极性。小组每个成员的积极性。有人认为有人认为这种组织形式适合于研制时间长、这种组织形式适合于研制时间长、开发难度大的项目。开发难度大的项目。 ((33)层次式小组)层次式小组在层次式小组中,组内人员分为在层次式小组中,组内人员分为三级:三级:组长(项目负责人)组长(项目负责人)一人负一人负责全组工作,包括任务分配、技术责全组工作,包括任务分配、技术评审和走查、掌握工作量和参加技评审和走查、掌握工作量和参加技术活动。术活动。他直接领导二至三名他直接领导二至三名高高级程序员级程序员,每位高级程序员通过基,每位高级程序员通过基层小组,管理若干位层小组,管理若干位程序员程序员。。 n这种组织结构这种组织结构只允许必要的人际通只允许必要的人际通信信。比较。比较适用于项目本身就是层次适用于项目本身就是层次结构的课题结构的课题。因为这样可以把项目。因为这样可以把项目按功能划分成若干个子项目,把子按功能划分成若干个子项目,把子项目分配给基层小组,由基层小组项目分配给基层小组,由基层小组完成。完成。n这种组织方式比较适合于大型软件这种组织方式比较适合于大型软件项目的开发。项目的开发。 人员配备人员配备n如何合理地配备人员,也是成功地如何合理地配备人员,也是成功地完成软件项目的切实保证。所谓合完成软件项目的切实保证。所谓合理地配备人员应包括:理地配备人员应包括:u按不同阶段适时任用人员按不同阶段适时任用人员u恰当掌握用人标准恰当掌握用人标准。。 1.1.项目开发各阶段所需人员项目开发各阶段所需人员n一个软件项目完成的快慢,取决于一个软件项目完成的快慢,取决于参与开发人员的多少。参与开发人员的多少。n在开发的整个过程中,多数软件项在开发的整个过程中,多数软件项目是以恒定人力配备的。目是以恒定人力配备的。n实际人力需求与开发进度的关系如实际人力需求与开发进度的关系如下图中的曲线所示下图中的曲线所示。。 n按此曲线,需要的人力随开发进展按此曲线,需要的人力随开发进展逐渐增加,在编码与单元测试阶段逐渐增加,在编码与单元测试阶段达到高峰,以后又逐渐减少。达到高峰,以后又逐渐减少。n如果恒定地配备人力,在开发初期如果恒定地配备人力,在开发初期将会有部分人力资源用不上而浪费将会有部分人力资源用不上而浪费掉。在开发中期,需要人力不够,掉。在开发中期,需要人力不够,造成进度的延误。在开发后期就需造成进度的延误。在开发后期就需要增加人力以赶进度。要增加人力以赶进度。n恒定地配备人力将浪费人力资源。恒定地配备人力将浪费人力资源。 2.2.配备人员的原则配备人员的原则n重质量重质量软件项目是技术性很强的软件项目是技术性很强的工作,要任用少量有实践经验、有工作,要任用少量有实践经验、有能力的人员去完成关键性的任务。能力的人员去完成关键性的任务。n重培训重培训培养所需技术人员和管理培养所需技术人员和管理人员是有效解决人员问题的好方法。人员是有效解决人员问题的好方法。n双阶梯提升双阶梯提升人员提升应分别按技人员提升应分别按技术职务和管理职务进行,不能混在术职务和管理职务进行,不能混在一起。一起。 3.3.对项目经理人员的要求对项目经理人员的要求n软件经理人员是工作的组织者,软件经理人员是工作的组织者,他他的管理能力的强弱是项目成败的关的管理能力的强弱是项目成败的关键键。他应具有以下能力:。他应具有以下能力:¶把用户提出的非技术性要求加以把用户提出的非技术性要求加以整理提炼整理提炼,,以技术说明书的形式转以技术说明书的形式转告给分析员和测试员。告给分析员和测试员。·能说服用户放弃一些不切实际的能说服用户放弃一些不切实际的要求要求,,以保证合理的要求得以满足。以保证合理的要求得以满足。 ¸能够把表面上似乎无关的要求集中能够把表面上似乎无关的要求集中在一起在一起,,归结为归结为““需要什么需要什么””,,““要解要解决什么问题决什么问题””。这是一种综合问题。这是一种综合问题的能力。的能力。¹要懂得心理学要懂得心理学,,能说服上级领导和能说服上级领导和用户,让他们理解什么是不合理的用户,让他们理解什么是不合理的要求。但又要使他们毫不勉强要求。但又要使他们毫不勉强,,乐乐于接受,并受到启发。于接受,并受到启发。 4.4.评价人员的条件评价人员的条件n软件项目中人的因素越来越受重视。软件项目中人的因素越来越受重视。在评价和任用软件人员时,必须掌在评价和任用软件人员时,必须掌握一定的标准。握一定的标准。人员素质的优劣常人员素质的优劣常常影响到项目的成败常影响到项目的成败。。¶牢固掌握计算机软件的基本知识牢固掌握计算机软件的基本知识和技能。和技能。·善于分析和综合问题,具有严密善于分析和综合问题,具有严密的逻辑思维能力。的逻辑思维能力。 ¸工作踏实、细致工作踏实、细致,,不靠碰运气,遵不靠碰运气,遵循标准和规范,具有严格的科学作循标准和规范,具有严格的科学作风。风。¹工作中表现出有耐心、有毅力、有工作中表现出有耐心、有毅力、有责任心。责任心。º善于听取别人的意见,善于与周围善于听取别人的意见,善于与周围人员团结协作,建立良好的人际关人员团结协作,建立良好的人际关系。系。»具有良好的书面和口头表达能力。具有良好的书面和口头表达能力。 软件过程与过程成熟度模型软件过程与过程成熟度模型n软件过程是软件生存期中的一系软件过程是软件生存期中的一系列相关过程。列相关过程。n过程是活动的集合;过程是活动的集合;n活动是任务的集合;活动是任务的集合;n任务是将输入变换为输出的操任务是将输入变换为输出的操作;作;n活动的执行可以是顺序的,重复活动的执行可以是顺序的,重复的,并行的、嵌套的;的,并行的、嵌套的; n为了得到满足要求的软件产品,不为了得到满足要求的软件产品,不但需要有好的开发方法,还需要有但需要有好的开发方法,还需要有好的工程支持和工程管理。好的工程支持和工程管理。 基本过程基本过程u获取过程获取过程u供应过程供应过程u开发过程开发过程u运行过程运行过程u维护过程维护过程 获取过程获取过程n是是需方需方为了为了获得获得一个一个软件产品软件产品所进所进行的一系列活动:该过程从为获取行的一系列活动:该过程从为获取该软件产品的需求定义开始,经过该软件产品的需求定义开始,经过招标准备,合同的准备和修改,对招标准备,合同的准备和修改,对供方的监督,直到验收完成。供方的监督,直到验收完成。 供应过程供应过程n是是供方供方为向需方为向需方提供软件产品提供软件产品所进所进行的一系列活动:该过程从理解软行的一系列活动:该过程从理解软件的需求开始,经过投标准备,签件的需求开始,经过投标准备,签订合同,制定计划,实施计划及控订合同,制定计划,实施计划及控制,进行评审和评价,直至完成交制,进行评审和评价,直至完成交付。付。 开发过程开发过程n是是软件开发者软件开发者根据合同根据合同开发开发和和交付交付软件软件的一系列活动。包括的活动有:的一系列活动。包括的活动有:过程的实施准备过程的实施准备系统需求分析系统需求分析系统结构设计系统结构设计软件需求分析软件需求分析软件体系结构设计软件体系结构设计软件详细设计软件详细设计 程序编码和单元测试程序编码和单元测试软件集成软件集成软件确认测试软件确认测试系统集成系统集成系统确认测试系统确认测试软件安装软件安装软件验收支持软件验收支持 运行过程运行过程n软件开发完成后,软件从开发环境软件开发完成后,软件从开发环境转移到用户的实际运行环境。在运转移到用户的实际运行环境。在运行时对用户的要求提供帮助和咨行时对用户的要求提供帮助和咨询,对运行效果进行评价。询,对运行效果进行评价。实施过程的准备实施过程的准备运行测试运行测试系统向实际运行环境转移系统向实际运行环境转移系统运行系统运行 对用户运行的支持对用户运行的支持系统运行评价系统运行评价用户运行评价用户运行评价 维护过程维护过程u过程的实施准备过程的实施准备u问题分析和修改分析问题分析和修改分析u修改的实施修改的实施u对维护进行评审/验收对维护进行评审/验收u移植移植u软件退役软件退役 支持过程支持过程u文档过程文档过程u配置管理过程配置管理过程u质量保证过程质量保证过程u验证过程验证过程u确认过程确认过程u联合评审过程联合评审过程u审计过程审计过程u问题解决过程问题解决过程 文档过程文档过程n文档过程是一个记录由某一过程或文档过程是一个记录由某一过程或活动所产生的信息的过程。它由以活动所产生的信息的过程。它由以下活动组成下活动组成::u过程的实施准备过程的实施准备u设计与开发设计与开发u制作与发行制作与发行u维护维护 配置管理过程配置管理过程u过程的实施准备过程的实施准备u配置的确定配置的确定u配置的控制配置的控制u配置情况报告配置情况报告u配置的评价配置的评价u发行管理和提交发行管理和提交 质量保证过程质量保证过程n这是一个为使软件过程和软件产品这是一个为使软件过程和软件产品符合规定需求,并按预定计划按时符合规定需求,并按预定计划按时完成提供适当保证的过程。完成提供适当保证的过程。u过程的实施准备过程的实施准备u软件产品的质量保证软件产品的质量保证u软件过程的质量保证软件过程的质量保证 验证过程验证过程n确定系统或软件的需求是否完备和确定系统或软件的需求是否完备和正确正确,,以及每一阶段的软件产品是否以及每一阶段的软件产品是否达到前一阶段对它的要求和条件。达到前一阶段对它的要求和条件。u过程的实施准备过程的实施准备验证验证u合同验证合同验证过程验证过程验证u需求验证需求验证设计验证设计验证u代码验证代码验证集成验证集成验证u文档验证文档验证 确认过程确认过程n确认需求和最终建立的系统或软件确认需求和最终建立的系统或软件是否满足原计划的特定应用。是否满足原计划的特定应用。u过程的实施准备过程的实施准备u确认确认 联合评审过程联合评审过程n这是评价项目的某个活动或阶段的这是评价项目的某个活动或阶段的执行情况执行情况,,以及产品是否合乎要求以及产品是否合乎要求的过程。的过程。u过程的实施准备过程的实施准备u项目管理评审项目管理评审u技术评审技术评审 审计过程审计过程n这一过程是要审计确定合作的另一这一过程是要审计确定合作的另一方遵照需求、计划合同到什么程度方遵照需求、计划合同到什么程度的过程。的过程。u过程的实施准备过程的实施准备u审计审计 问题解决过程问题解决过程n这是一个用于分析和排除在开发、这是一个用于分析和排除在开发、运行、维护或其它过程中发现的问运行、维护或其它过程中发现的问题和不一致的过程。题和不一致的过程。u过程实施准备过程实施准备u问题解决问题解决 组织过程组织过程u管理过程管理过程u基础设施过程基础设施过程u改进过程改进过程u培训过程培训过程 管理过程管理过程n管理包括进度管理、成本管理、质管理包括进度管理、成本管理、质量管理、人员管理、资源管理、标量管理、人员管理、资源管理、标准化管理。准化管理。n管理的对象是进度、系统规模及工管理的对象是进度、系统规模及工作量估算、经费、组织机构很人员、作量估算、经费、组织机构很人员、风险、质量、作业和环境配置等。风险、质量、作业和环境配置等。 u过程的实施准备过程的实施准备u管理计划的制定管理计划的制定u计划的实施与控制计划的实施与控制u评审和评价计划的完成程度评审和评价计划的完成程度u编写管理文档。编写管理文档。 基础设施过程基础设施过程n该过程建立、维护各个过程所需的该过程建立、维护各个过程所需的基础设施。基础设施。n基础设施包括硬件、软件、工具、基础设施包括硬件、软件、工具、技术、标准技术、标准,,以及开发、运行、维以及开发、运行、维护所需的设施。护所需的设施。 改进过程改进过程n该过程建立、评估、度量、控制和该过程建立、评估、度量、控制和改进软件生存期的过程。主要活动改进软件生存期的过程。主要活动是制定一组组织计划是制定一组组织计划,,评估相关过评估相关过程程,,实施分析、改进过程。实施分析、改进过程。 培训过程培训过程n该过程为系统或软件产品提供人员该过程为系统或软件产品提供人员培训。主要活动有制定所需人员用培训。主要活动有制定所需人员用人计划和培训计划人计划和培训计划,,开发培训资料开发培训资料,,实施培训活动等。实施培训活动等。 软件过程的度量软件过程的度量软件过程成熟度软件过程成熟度n是指对过程计划或定义水平、过是指对过程计划或定义水平、过程实施水平、过程管理和控制水程实施水平、过程管理和控制水平、过程改善潜力等指标的综合平、过程改善潜力等指标的综合评价。评价。n分为分为55级级::初始级初始级、、可重复级可重复级、、可可定义级定义级、、可管理级可管理级、、可优化级可优化级。。 评估软件过程时遵循的原则评估软件过程时遵循的原则n在很大程度上,软件产品的质量取在很大程度上,软件产品的质量取决于生产该产品的过程质量。决于生产该产品的过程质量。n软件过程是一个可管理、可测量和软件过程是一个可管理、可测量和可改进的过程。可改进的过程。n软件过程的质量受其支持技术的影软件过程的质量受其支持技术的影响。响。n用于软件工程的技术水平应与过程用于软件工程的技术水平应与过程的成熟度相适应。的成熟度相适应。 11初始级初始级n特点特点过程执行杂乱无序过程执行杂乱无序n关键问题关键问题项目计划管理、配置管项目计划管理、配置管理、软件质量保证理、软件质量保证n达标标准达标标准过程活动无一定秩序,过程活动无一定秩序,开发过程的可重复性差开发过程的可重复性差 22可重复级可重复级n特点特点过程管理工作依赖管理人员过程管理工作依赖管理人员的技能的技能n关键问题关键问题培训、技术评审、标准培训、技术评审、标准n达标标准达标标准使项目管理处于严格控使项目管理处于严格控制之下,包括严格的项目计划和追制之下,包括严格的项目计划和追踪、子合同管理、需求变更和产品踪、子合同管理、需求变更和产品基线控制基线控制 33可定义级可定义级n特点特点过程可定义、可执行过程可定义、可执行n关键问题关键问题过程度量、过程分析、过程度量、过程分析、质量计划质量计划n达标标准达标标准定义一个适合该组织的定义一个适合该组织的软件过程,有正规的文档化的规软件过程,有正规的文档化的规范,并能根据不同项目的要求裁剪范,并能根据不同项目的要求裁剪和优化这个软件过程和优化这个软件过程 44可管理级可管理级n特点特点过程成为可度量的过程成为可度量的n关键问题关键问题改善技术、问题分析、改善技术、问题分析、防止出错防止出错n达标标准达标标准为定义好的过程建立一套为定义好的过程建立一套详细的度量机制,为产品和过程设详细的度量机制,为产品和过程设立质量目标,度量软件过程和产品立质量目标,度量软件过程和产品 55可优化级可优化级n特点特点通过反馈来改善过程通过反馈来改善过程n关键问题关键问题自动化、反馈技术自动化、反馈技术n达标标准达标标准用第用第44级建立的度量机级建立的度量机制,不断地指导过程改善,技术革制,不断地指导过程改善,技术革新和防止出错新和防止出错 关键过程领域关键过程领域KPAKPA((KeyProcessAreaKeyProcessArea))n除去初始级以外,其它除去初始级以外,其它44级都有若级都有若干个引导软件机构改进软件过程的干个引导软件机构改进软件过程的要点,称为关键过程领域。要点,称为关键过程领域。n每一个关键过程领域是一组相关的每一个关键过程领域是一组相关的活动,成功地完成这些活动,将会活动,成功地完成这些活动,将会对提高过程能力起重要作用。对提高过程能力起重要作用。 关键过程域11初初始始级级22可可重重复复级级需需求求管管理理软软件件项项目目计计划划软软件件项项目目跟跟踪踪与与监监督督软软件件分分包包合合同同管管理理软软件件质质量量管管理理软软件件配配置置管管理理 33可可定定义义级级软软件件机机构构过过程程关关注注点点软软件件机机构构过过程程定定义义培培训训计计划划整整体体化化软软件件管管理理软软件件产产品品工工程程组组间间合合作作同同行行评评审审44可可管管理理级级定定量量过过程程管管理理软软件件质质量量管管理理55可可优优化化级级过过程程变变更更管管理理预预防防故故障障技技术术变变更更管管理理'