《软件工程》作业参考答案作业一1.与硬件相比,软件具有哪些特点?答:与硬件相比,软件具有以下不同的特点:(1)软件是逻辑的,而不是物理的产品。逻辑往往实际只存在于人的头脑当中,软件的开发过程极难加以控制。(2)软件是由开发或工程化而形成的,没有明显的制造过程。软件成本集中于开上,意味着软件项目不能象硬件制造项目那样来管理。(3)软件在运行和使用期间,不存在硬件那样的磨损和老化问题,但它存在退化问题,开发人员必须维护软件。(4)大多数软件是自定的,而不是通过已有构件组装而成的。迄今为止,软件的开发尚未完全摆脱手工的方式。(5)软件成本相当昂贵。(6)软件本身是复杂的。软件比任何其他人类制造的结构更复杂,甚至硬件的复杂性和软件相比也是微不足道的。软件本质上的复杂性是软件产品难以理解,影响软件过程的管理,并使维护过程十分复杂。2.系统工程过程主要包含哪些基本阶段?各阶段主要完成什么工作?答:系统工程过程主要包括:系统需求定义阶段、系统设计阶段、子系统开发阶段、系统整合(集成)阶段、系统安装阶段、系统运行与进化阶段、系统退役阶段。(1)系统需求定义阶段,通过与系统各类用户协商讨论,确定系统整体的需求。包括系统必须提供的基本功能,非功能的系统总体特性(可用性、性能、安全性等),系统的边界及限制条件等。(2)系统设计阶段,要做的是如何将不同的组件整合成一个能提供所需功能的系统。(3)子系统开发阶段,实现在系统设计阶段识别出来的那些子系统,若这个子系统本身又是一个大系统,则可能又进入另一个系统工程过程中。若子系统是一个软件系统,那么包括需求、设计和实现等这样的一个软件过程就启动了。(4)系统整合阶段,将一个个独立开发的子系统整合为一个完整的大系统。(5)系统安装阶段,系统进入实际的工作环境。(6)系统运行与进化阶段,一旦系统安装完毕就进入运行阶段,运行一个系统可能包括组织操作人员培训并且改变正常的工作过程以适应新的系统,因为系统描述可能包含错误或遗漏,所以未被发现的问题可能在这个阶段出现。(7)系统退役阶段,指系统在它的有效生存期结束之后从系统服务中退出。3.软件工程专家B.W.Boehm认为在软件开发过程中为确保软件产品质量和开发效率应坚持软件工程的哪些基本原理?答:B.W.Boehm认为应坚持七条基本原理,分别是:(1)用分阶段的生命周期计划严格管理;(2)坚持进行阶段评审;(3)实行严格的产品控制(推迟实现的原则);(4)使用现代程序设计技术;(5)结果应能清楚地审查;(6)开发小组的人员应少而精;(7)承认不断改进软件工程实践的必要性。作业二1.需求的获取主要有何方法?简要说明之。答:获取需求的方法主要有:系统调查和快速原型获取和验证需求。(1)系统调查。系统调查工作是以系统分析人员为核心,成立调查组织,吸收原系统业务骨干和管理人员参加。可以有多个调查组同时工作,互相介绍情况。调查组织要拟定调查计划和提纲,要明确调查的目的、范围、对象、方法和分工。系统调查的一般方法有:发调查表征询意见、访问、开调查会、直接参加业务活动、请用户领导和业务骨干讲课、查阅文献资料。(2)快速原型获取和验证需求。在需求工程过程中,开发人员根据对软件的理解,利用快速开发工具先快速地建立一个系统原型,然后让用户对原型进行评估,并提出修改意见,最终达到全面、准确地确定软件系统的外部行为和特征。2.需求开发主要分为哪些部分?简要说明之。答:需求开发分为可行性研究、需求导出和分析、编写规格说明书和需求验证四个部分。(1)可行性研究。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的实质,在较高层次上以较抽象的方式进行的系统分析和设计的过程。在这一阶段分析员要导出系统的逻辑模型,然后从逻辑模型出发寻找若干种可供选择的解法(即系统实现方案),对每种方案都要研究它的可行性,一般方案的可行性主要有四个方面:技术可行性、经济可行性、法律可行性、操作可行性。(2)需求导出和分析。决定系统应该提供什么服务,系统应该具有什么样的性能以及硬件约束等等。这一阶段可分为以下两步工作:①需求获取:通过与用户的交流,对现有系统的观察及对任务进行分析,从而开发、捕获和修订用户的需求。②需求建模:为最终用户所看到的系统建立一个概念模型,作为对需求的抽象描述,并尽可能多的捕获现实世界的语义。(3)编写规格说明书需求规格说明是生成需求模型构件的精确的形式化的描述,软件需求规格说明阐述一个软件系统必须提供的功能和性能以及它所要考虑的限制条件,它不仅是系统测试和用户文档的基础,也是所有子系列项目规划、设计和编码的基础。(4)需求验证需求验证是以需求规格说明为输入,通过符号执行、模拟或快速原型等途径,分析需求规格的正确性和可行性;审查需求文档、依据需求编写测试用例、编写用户手册、确定合格的标准。3.数据流图具有哪些特性?并作简单说明。答:数据流图具有抽象性、概括性和层次性等特性。(1)抽象性:数据流图中只有四种基本符号组成,没有任何具体的物理部件,只描绘数据在软件中流动和被处理的逻辑过程,是系统逻辑功能的表示,这种抽象性有助于系统的功能分析和进一步的总体设计。(2)概括性:数据流图作为信息交流的工具,由简单的符号组成,不包含任何物理实现的细节,便于用户理解和评价它。(3)层次性:数据流图可以按照功能分解的方法逐层来画,从整个系统的基本模型开始,逐步的分解,每分解一次,系统的处理就增多一些,每个处理的功能也更加具体。作业三1.UML图的构成成分中定义了哪五类十种模型图?答:UML图的构成成分,UML的定义了5类10种模型图。(1)用例图:这是一种用户模型视图,用例图是系统功能的描述。它从用户的角度描述系统的功能,并指出各个功能的操作者。(2)静态图:这是一种结构模型视图,这种图描述系统的静态结构。有类图、对象图、包图。类图用于定义系统的类,包括描述类之间的联系,以及类的内部结构(类的属性和操作)。类图描述的是一种静态关系。对象图是类图的一个实例,它使用了与类图几乎相同的符号。对象图只能在系统的某一时间段存在。包图则由包或者类组成,包图描述系统的分层结构。(3)行为图:这是一种行为模型视图,这种图描述系统的动态行为和组成系统的对象之间的交互关系。行为图有状态图和活动图。(4)实现图:这是一种实现模型视图,这种图描述系统实现的信息,有构件图和配件图。(5)交互图:这是一种环境模型视图,表示系统的环境结构和行为,这种图描述系统对象之间的交互关系,有顺序图和合作图。2.使用用例开发系统的一般过程是什么?答:使用用例开发系统的一般过程:(1)在开发过程的初始阶段,可以根据具体的项目特点,制订开发各个视图之间的关联原则,指导规范。在开发的过程中,视图的组织原则应不断进行维护、更新。(2)识别角色来识别系统与外界交互的实体。(3)识别用例。同角色一样,用例具有不同层次,对较为概括的用例,需要细化。(4)当用例细化到可以被理解的层次,需要基于用例进行下一步的开发。如前面提到的,用例主要用来描述交互。因此,存在交互的实体和交互的细节。交互的实体采用类图来描述;而交互的细节,采用顺序图来描述。(5)当系统复杂到一定层次时,类图和顺序图可能不能足以描述其复杂程度。在该情况下,需要使用状态图来辅助阐述。作业四1.结构图中主要有哪四种类型的模块?答:结构图中可能出现以下四种类型的模块:(1)传入模块:从下属模块取得数据,经过某些处理,再将其传送给上级模块。(2)传出模块:从上级模块取得数据,进行某些处理,传送给下属模块。(3)变换模块:从上级模块取来数据,进行特定处理后,送回原上级模块。(4)协调模块:对其下属模块进行控制和管理的模块。2.结构图和程序流程图的主要区别表现在哪些方面?答:结构图和程序流程图的主要区别:(1)结构图着重反映的是模块间的隶属关系,即模块间的调用关系和层次关系;而程序流程图着重表达的是程序执行的顺序以及执行顺序所依赖的条件。(2)结构图则着眼于软件系统的总体结构,它并不涉及模块内部的细节,只考虑模块的作用,以及它和上、下级模块的关系;而程序流程图则用来表达执行程序的具体算法。作业五1.按照Rumbaugh等人提出的对象建模技术,面向对象设计过程主要由哪些步骤组成?答:按照Rumbaugh等人提出的对象建模技术(ObjectModelingTechnique,OMT),面向对象设计过程主要由以下步骤组成:(1)系统设计。主要完成系统整体结构的设计,包括将子系统分配到处理器和任务中,选择实现数据管理、界面支持和任务管理的设计策略,为系统设计合适的控制机制。(2)对象设计。对OOA模型中的类对象模型具体化、详细化,包括用传统设计方法中过程设计的方法设计对象的每个操作,定义实现系统所需的内部类,为类属性设计内部数据结构等。(3)消息设计。使用对象间的协作和对象-关系模型,设计消息模型。(4)复审设计模型。设计过程是递进的,从需求和实现两个角度对设计模型进行复审,并伴随着附加的OOA活动。图1黑盒子2.领域对象设计是领域分析的继续,它一般要完成哪些工作?答:领域对象设计是领域分析的继续,一般要完成以下工作:(1)调整需求。对于不能实现的类和方法应当重新分析整个问题域,并对需求进行适当的调整。(2)重用已有的组件。根据功能分类确定所需要的组件,如有现成可用的组件则可考虑直接采用该组件,而不再重新开发。(3)引入父类,分组管理领域类。利用继承的特点,首先创建一个具有抽象功能的父类,对于特定的领域应用,可以从父类派生出相应的子类。(4)增添一般化类建立协议。(5)调整OOA模型。调整后的OOA模型最终要反映到领域对象的设计上。(6)设计复审。在领域对象设计完成后,通过设计复审检查设计结果。将设计结果反馈给用户或交给专家审查,查找存在的问题。作业六1.编程阶段主要要完成的三大任务是什么?答:编程阶段主要要完成的三个任务为:明确程序的控制结构、确定程序所使用的算法、制定程序所需的数据结构。(1)明确程序的控制结构。编码阶段无论采用哪种控制结构来实现,都要严格遵从以下原则:代码应避免使用跳转语句;保持设计所制定的模块性;模块应具有通用性,即不应将只调用一次的代码放在模块中。(2)确定程序所使用的算法。在算法的使用上,人们往往一味地追求运行的速度而采用复杂的算法,这时取得的运行速度特性是以下列付出为代价的:在实现这样的代码时需要付出比普通算法更多的时间;检验代码的正确性需要时间;代码读者可能是读懂代码需要很长时间;修改代码需要的额外时间。因此,在为程序选择算法时应在开发时间与运行时间上进行充分的比较。(3)制定程序所需的数据结构。编写程序时,需要考虑如何安排数据的组织和存储形式,即数据结构。2.为使数据说明易于理解和维护,在编写程序时应注意哪些问题?答:在编写程序时,为使数据说明易于理解和维护,须注意:(1)数据说明的次序应当规范化,使数据属性容易查找;(2)当多个变量名用一个语句说明时,应对这些变量按字母的顺序排列;(3)如设计了一个复杂的数据结构,应用使用注释说明数据结构的固有特点。作业七1.试举例说明不论是黑盒测试,还是白盒测试,都不可能把所有可能的输入数据都拿来进行穷举测试。答:不论是黑盒测试,还是白盒测试,都不可能把所有可能的输入数据都拿来进行所谓的穷举测试。因为可能的测试输入数据数目往往达到天文数字。如以下两个例子。例1:假设一个程序P有输入X和Y及输出Z,参看图1。在字长为32位的计算机上运行。如果X、Y只取整数,考虑把所有的X、Y值都做为测试数据,按黑盒测试方法进行穷举测试,力图全面、无遗漏地“挖掘”出程序中的所有错误。这样做可能采用的测试数据组(Xi,Yi)的最大可能数目为:232×232=264。如果程序P测试一组X、Y数据需要1毫秒,且一天工作24小时,一年工作365天,要完成264组测试,需要5亿年。图2白盒测试中的穷举测试例2:而对一个具有多重选择和循环嵌套的程序,不同的路径数目也可能是天文数字。设给出一个如图2所示的小程序的流程图,其中包括了一个执行达