习题答案第一章题目略1、答答:讨论时,重点围绕程序设计与软件开发的不同点开展讨论。两者主要的不同点体现在,程序设计更多关注程序的代码,软件开发不光关注程序代码,也关注代码产生的过程,与代码有关的文档等方面。2、答答:一个软件从定义到废弃,中间有问题定义,可行性研究,需求分析,概要设计,详细设计,编码,测试,运行维护这八个阶段。3、答答:结构化方法中总的指导思想:软件是由一个一个相对独立的模块组成的,每个模块完成一个相对独立的功能,多个模块互相协同工作完成任务。4、答衡量一个软件开发成功与否的最重的标准是:在指定的开发时间,指定的开发成本下,开发出的软件满足用户的功能性,可靠性,可用性,效率,可维护性,可移植性等方面的要求。这样,这个软件开发是成功的。5、答无论是哪种生存周期模型,都必须经过软件开发过程的八个阶段,这是所有开发模型的共同点。不同模型的不同点在于:不同的模型完成软件开发过程中八个工作阶段的时间顺序不同,每个工作阶段花费的时间,成本不同,每个阶段完成的任务也可以不同,采用不同模型时,得到的工作产品也会不同。这也是不同生存周期模型的最大的不同。比较熟悉的任务,当任务不大,不复杂时,采用瀑布模型,比较简单。对于那些具有明显功能划分的系统,可采用演化模型,对那些具备明确需求的系统,可采用增量模型。对于大型复杂的软件系统开发则应该采用RUP模型。第二章题目略1、答RUP有四个阶段,区分四个阶段最重要的特征是初始阶段识别了重大的风险,细化阶段形成了稳定的架构,构造阶段得到一个可执行版本,移交阶段得到一个正式的产品。2、答这个是讨论题,每个同学可根据自己的经验谈谈这个问题,最主要的是,五个核心工作流在不同阶段迭代的次数是不同的,每个阶段五个核心工作流的重要性不同。3、答(1)根据这几张UML图,可以对订票系统进行很全面的了解。(2)不同的同学对系统的理解差别应该不会太大。(3)不同的图实际上都是同一个系统不同方面的描述。(4)根据自己的常识能理解的信息应该在60%以上。(5)能够根据这些模型图设计出订票系统的。4、答建议同学们在自己的电脑上,安装前面提到的几种软件中的一种来试用。第三章题目略1.答软件过程是开发和维护软件及其相关产品(例如项目计划、设计文档、代码、测试用例、用户手册等等)所涉及的一系列活动、任务和变换。软件过程不是局限于传统意义上的软件开发和管理问题。根据IEEE对软件过程的解释,软件过程包括软件采购、软件开发、软件维护、软件运作、软件获取、软件管理和软件支持七大类的活动;而ISO12207将软件过程分为基本过程、支持过程和组织过程三大类活动。2.答又称为软件工程开发模型或软件生命周期模型,是软件开发全部过程、资源和任务的结构框架。过程模型包括组织、功能、行为以及其它各方面。软件过程模型能清楚、直观地表达软件开发过程,明确规定要完成的主要活动和任务。3.答度量是对被对象进行量化处理,简单地理解,就是采集数据和分析数据,软件过程度量,是软件过程改进的基础。分析过程行为,是对过程稳定性进行测试和评价,找出异常过程行为模式,发现和纠正可归属的原因,从而达到改进过程的目的4.答关键过程域是CMM的概念。CMM的五个成熟度等级中,除了等级1以外,每级均包含几个关键过程域。每个关键过程域都有一些目标及相应于目标的关键实践。只有与目标相应的所有关键实践都得到有效实施,这个目标才算实现。只有一个关键过程域的全部目标都达到时,该关键过程域才算实现。5.答略6.答一个高效的软件工程团体通常具有以下共同特征:·成员训练有素。·团体目标是重要的、定义好的、可见的和现实的。·团体有足够的资源完成这个目标。·可以激励成员去努力实现团体目标。·成员之间互相协作、互相支持。·团体成员在工作中纪律严明。第四章题目略1、答进行这个项目的可行性分析,就是从技术,法律,经济三个方面说明它是否可行。如果所在学校现有局域网,那么不用在硬件上增加投资,有教师或同学掌握了网络程序设计技术,于是就具备了技术可行性,师生互动学习园地没有法津上的问题,至于经济上的问题,如果学校肯出资,所出的资能为开发者接受,则项目是可行的,否则,就不可行,这个项目的主要可行性在是否有懂相关编程技术的人员和资金的多少。2、答请参见附录B3、请参见附录B4、答可能提出的问题:问:请问是什么年龄的人在使用该系统?问:使用该系统的人下棋的水平如何,是所有使用该软件的人都具有相同的水平,还是不同的玩家水平会有不同?问:如果水平有区别的话,水平设计成多少等级比较合理?问:是用鼠标移动棋子,还是用键盘操作来移动棋子?问:走棋的规则是什么?问:要进行记分吗?需要设计水平升级吗?对用户提出的这些问题就是想知道,使用系统的主要用户,每类主要用户使用系统的方式,使用系统时完成的任务以及完成任务的过程。根据这些可以得到系统主要的用例,每个主要用例的活动图,顺序图等。第五章题目略3、答软件开发过程方法学就是研究软件开发的过程,即过程的组织、管理。个体软件过程是对软件开发工程师个人在开发过程中的行为进行规范和指导。群组软件开发过程指导和规范是小组开发行为。CMM则是对软件开发组织的开发行为进行规范、指导、重复开发能力评估。4、答在第一章里对瀑布模型和统一软件开发过程模型作了介绍。第二章又单讲解了统一软件开发过程模型。瀑布模型,软件开发过程按照:可行性研究——需求分析——概要设计——详细设计——编码——测试等步骤,一次得到一个包含所有功能的最终产品。统一软件开发过程模型,将开发过程分成初始阶段,细化阶段,构造阶段,移交阶段四个阶段,每个阶段都是由多次迭代构成,每一次迭代都由需求分析——系统分析——系统设计——系统实现——系统测试五个核心工作流组成,都是一次小型的瀑布模型。5、答构化方法的设计中有概要设计和详细设计两个阶段,在面向对象方法的设计中有系统分析与系统设计,概要设计和系统分析都是从总体上考虑系统实现的方案,详细设计和系统设计都是从更加细节上考虑系统实现的方案。但由于结构化方法与面向对象方法固有的不同,两种方法最大的不同在于看待系统的方式不同,结构化方法认为系统由不同功能模块组成,每个模块完成一部分功能,系统中所有的功能都有某个模块与之对应。面向对象方法认为系统由对象和对象间的交互组成。4答构件图和部署图都是软件架构的一种表现形式,构件图从设计的角度表示出系统由哪些部件组成,相互间如何联成一个整体。部署图反映了系统运行时,由哪些部件组成及相互间的关系。5答软件的结构图就是架构的概括性表示。6、答系统的架构无需发生大的变动,通过继承和重载能解决问题时,应选择复用,当系统的架构需要发生改变,或者通过继承和重载无法进行功能改变时,应选择重新开发。7、答choose()的活动图如图(1)AddRecord()的活动图如图(2)Printing()的活动图如图(3)Searching()的活动图如图(4)图(1)choose()的活动图产生一个随机数查询中奖记录随机数在中奖记录中随机数不在中奖记录中增加一条中奖记录显示重复号窗体允许重复不允许重复中奖显示等待抽奖窗体显示产生了一个中奖号码图(2)AddRecord()的活动图打开LuckyRecord.txt在文件未尾增加一条记录关闭LuckyRecord.txt图(3)Printing()的活动图打开LuckyRecord.txt逐条记录打印关闭LuckyRecord.txt图(4)Searching()的活动图打开LuckyRecord.txt逐条读出记录存于临时变量关闭LuckyRecord.txt比较记录中的号码与查询的号码相等不相等显示查询结果窗体之一显示查询结果窗体之二第六章题目略1、答例如对参数的书写规整问题:voidSetvalue(intwidth,intheight);良好的风格voidSetvalue(int,int);不良的风格floatGetValue(void);良好的风格floatGetValue();不良的风格总之,要将这些规则牢记在心,并体现在日常的编程工作中。1、答在讨论时主要围绕指针必须经过正确初始化后才能使用,删除指针时要确保没有删除其它不应该删除的对象(主要是指不小心连同指针所指向的对象也删除了),野指针是导致内存泄露的罪魁祸首,当有内存泄露时,程序运行会导致系统运行速度变慢直到资源耗尽而崩溃。2、答编程时内存耗尽了,考虑选择一个不太重要的进程杀死它,以期获取一些内存。或想办法改进算法,以降低内存需求,或者考虑牺牲运行速度来换取内存。4、答成员函数的重载与覆盖,重载与隐藏很容易混淆。这些错误有一些会被编译器发现,有一些会通过编译器留在程序中,在运行的时候产生一些奇怪的现象,会得故障难以定位和排除。函数内联能提高函数的执行效率,但内联是以代码彭胀为代价的,它会程序的内存开销增加。类的构造和析构函数可能会产生一些付作用,如“偷偷地”执行了基类或成员对象的构造函数和析构函数,所以不要随便地将构造和析构函数的定义体放在类声明中。第七章题目略1.答越早发现错误,纠正错误的难度就越小、牵涉的范围就越小、工作量和复杂性也就越小、需要付出的代价也就越小;并且,由于错误而引起的错误也越少。有统计数据说明:如果在分析阶段发现错误的改正成本为1(货币单位),则在设计编码阶段发现一个错误的改正成本为6.5,在系统测试时发现一个错误的改正成本为15,在产品发布后发现一个错误的改正成本为60至100。研究还表明,缺陷存在放大趋势。如果在开发的前一阶段漏过一个错误,该错误就可能在下一阶段引起n个错误,n称为放大系数。经验表明,从概要设计到详细设计,n为1.5;从详细设计到编码,n为3。2.答动态测试(DynamicTesting)。是通过执行被测试软件的手段来进行软件测试。动态测试包括单元/模块测试、集成/联调测试、控制测试、系统测试、压力/容量测试等。静态测试(StaticTesting)。是不通过执行测试对象来对一个系统进行测试。静态测试包括走读(又称走查)、正规检视、项目评审等。3.答需求测试和设计测试有很多种方法,最常用的是采用文档的同行评审、模型测试、原型测试等。4.答CMM是又卡内基.梅隆大学软件工程研究所开发的,用于评价软件组织的能力成熟度,是由Illinois技术学院开发的,用于评价软件组织的测试能力,它类似于软件能力成熟度模型CMM,是作为对CMM的补充。5.答程序分析视角有:文本视角、数据流视角、控制流视角、句法视角、计算流视角、功能视角。6.答略。7.答略。第八章题目略1、答软件过程的输出信息可以分成三类:计算机程序(源代码及可执行程序)、描述计算机程序的文档(针对开发者和用户)、数据(包含在程序内或程序外部)。所有这些在软件过程中产生的信息,总称为软件配置。软件配置管理就是开发过程中对软件配置进行管理,即对正在开发的软件的代码、数据、文档的修改进行标识、保存、组织和控制。2、答基线是一组配置项,这些配置项不能被随便修改和变更。3、答进行版本控制的关键是建立版本控制规则,所有项目成员都必须遵循这个规则来处理和操作配置。配置项未经评审确认的为草稿。评审确认后为发布。发布后如果要加以修改,须按变更控制规则进行。4、答开发的软件交付给客户投入运行后,为了改正错误或满足新的要求,必须对软件进行修改,这个过程称为软件维护。5、答软件维护应该有严格的文档,每次维护都要适时详细记录。这方面的工作不做好,必然给以后的维护工作造成混乱,带来麻烦。6、答略。第九章题目略1、答项目经理通常由精通技术的人来出任,但这不是一定的,技术高手不一定适合做项目经理,好的项目经理,也不一定要本人精通专业技术,关键是他要能让技术高手很好地发挥他们的所长。2、答质量保证人员对软件的质量负责;测试人员复杂发现软件中的缺陷、错误等,测试是质量保证的重要措施;开发人员负责开发出程序并排除程序的错误,修正程序的缺陷。3、答任何软件组织在进行软件项目时,都可能遇到比较关键,可能影响项目进度的技术问题,这些问题有的是项目立项的时候对技术的细节和难度估计不足造成的,