软件工程课本习题答案Word格式文档下载.docx
《软件工程课本习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件工程课本习题答案Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
典型表现:
(1)对软件开发成本和进度的估计常常很不准确。
(2)用户对“已完成的”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。
产生软件危机的原因:
除了软件本身的特点,其原因主要有以下几个方面:
(1)缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。
(2)软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。
(3)软件开发过程不规范。
如,没有真正了解用户的需求就开始编程序。
(4)随着软件规模的增大,其复杂性往往会呈指数级升高。
需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。
(5)缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。
1.5什么是软件工程?
软件工程是指导计算机软件开发和维护的工程学科。
采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
1.6简述软件生存期由哪些主要的阶段组成,每一阶段的主要任务是什么?
(1)问题定义与可行性研究:
问题定义必须回答的关键问题是:
“要解决的问题是什么”。
可行性研究要回答的关键问题是:
“在成本和时间的限制条件下能否解决问题?
是否值得做?
”。
(2)需求分析:
这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。
(3)软件设计:
本阶段要回答的关键问题是“目标系统如何做?
”为此,必须在设计阶段中制定设计方案,把已确定的各项需求转换成相应的软件体系结构。
结构中的每一组成部分都是意义明确的构件,此即所谓概要设计。
进而具体描述每个构件所要完成的工作,为源程序编写打下基础,此即所谓详细设计。
(4)程序编码和单元测试:
本阶段要解决的问题是“正确地实现已做的设计”,为此,需要选择合适的编程语言,把软件设计转换成计算机可以接受的程序代码,并对程序结构中的各个模块进行单元测试,然后运用调试的手段排除测试中发现的错误。
要求编写出的程序应当是结构良好、清晰易读的,且与设计相一致的。
(5)集成测试和系统测试:
集成测试的任务是将已测试过的模块按设计规定的顺序组装起来,在组装的过程中检查程序连接的问题。
系统测试的任务是根据需求规格说明的要求,对必须实现的各项需求,逐项进行确认,判定已开发的软件是否符合用户需求,能否交付用户使用。
为了更有效地发现系统中的问题,通常这个阶段的工作由开发人员、用户之外的第三者承担。
(6)运行维护:
已交付的软件投入正式使用,便进入运行维护阶段。
这一阶段可能持续若干年。
软件在运行中可能由于多方面的原因,需要对它进行维护。
通常有四种类型的维护:
改正性维护、适应性维护、完善性维护和预防性维护。
1.7常见的软件生存期模型主要有哪些?
每种模型的优缺点是什么?
常见的软件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型和统一过程。
(1)瀑布模型
优点:
可强迫开发人员采用规范化的方法;
严格地规定了每个阶段必须提交的文档;
要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
缺点:
由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要;
用户往往需要等待很长时间才能看到可以运行的程序;
适应需求变更的能力比较差。
适用范围:
瀑布模型只适用于项目开始时需求已确定的情况。
(2)快速原型模型
有助于满足用户的真实需求;
原型系统已经通过与用户的交互而得到验证,据此产生的规格说明文档能够正确地描述用户需求。
要求开发人员快速建立原型。
适用于需求不明确的软件项目。
(3)增量模型
●能在较短时间内向用户提交可完成一些基本功能的产品,即从第一个构件交付之日起,用户就能做一些有用的工作。
●逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击。
●项目失败的风险较低,虽然在某些增量构件中可能遇到一些问题,但其他增量构件将能够成功地交付给客户。
●优先级最高的服务首先交付,然后再将其他增量构件逐次集成进来。
因此,最重要的系统服务将接受最多的测试。
●在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。
●软件体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。
适用于工期紧张、功能可以划分、比较复杂的软件项目。
软件工程师必须有较高的技术水平,能够设计出开放的软件体系结构。
(4)螺旋模型
●对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
●减少了过多测试或测试不足所带来的风险;
●在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:
当项目实际上正在走向灾难时,开发人员可能还以为一切正常。
适用于内部开发的大型软件(开发周期长、比较容易受到社会因素影响的软件项目),软件开发人员具有丰富的风险评估知识和经验。
(5)喷泉模型
在开发过程中使用统一的概念和方法,各阶段之间没有明显的界限,容易实现各个开发过程的多次反复迭代,达到了认识的逐步深化,降低了出错的可能性。
由于各个阶段之间的界线不明确,容易造成软件开发过程的无序。
适用于面向对象的软件开发。
(6)统一过程
提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。
它建立了简洁和清晰的过程结构,为开发过程提供了较大的通用性。
RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;
此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。
适用于基于构件的软件开发。
2软件工程方法与工具
2.1软件工程的三种基本要素是什么,各自的作用是什么?
软件工程的三种基本要素是方法、工具和过程。
(1)软件工程方法(method)为建造软件提供技术上的解决方法(“如何做”)。
目前使用得最广泛的方法是传统方法(结构化方法)和面向对象方法。
(2)工具为方法的运用提供自动的或半自动的软件支撑环境。
(3)过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
2.2简述传统方法和面向对象方法的特点。
(1)传统方法的特点
传统方法也称为生命周期方法或结构化范型。
它采用结构化技术来完成软件开发的各项任务。
这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地逐步完成每个阶段的任务。
每一个阶段的开始和结束都有严格的标准,对于任何两个相邻的阶段而言,前一个阶段的结束标准就是后一阶段的开始标准。
传统方法的主要缺点是在适应需求变化方面不够灵活,另外,结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制。
(2)面向对象方法的特点
面向对象方法把数据和行为看成同等重要,是将数据和对数据的操作紧密地结合起来的方法,这也是面向对象方法与传统方法的重要区别。
面向对象方法的出发点和基本原则,是尽量模拟人类习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识问题和解决问题的方法与过程,从而使描述问题的问题空间与其解空间在结构上尽可能一致。
对于大型、复杂及交互性比较强的系统,使用面向对象方法更有优势。
2.3形式化方法的特点是什么?
形式化方法的主要特点是:
(1)软件需求规格说明被细化为用数学记号表达的详细的形式化规格说明;
(2)设计、实现和单元测试等开发过程由一个变换开发过程代替。
通过一系列变换将形式的规格说明细化成为程序。
2.5安装RationalRose2000/2002/2003,并练习基本操作。
略。
3软件需求获取与结构化分析方法
3.1为什么结构化分析要叫“结构化”?
有其他可替代的术语吗?
“结构化”一词应来源于“结构化程序设计”,先有“结构化程序设计”的思想,后有结构化设计及结构化分析。
有时称传统的分析方法,指的就是结构化分析方法。
3.2顶层数据流图或称环境图的作用是什么?
顶层数据流图(或称环境图)仅包括一个数据处理过程,也就是要开发的目标系统。
其作用如下:
(1)确定系统在其环境中的位置,与系统有联系的外部实体(包括硬件、软件、组织机构及人)有哪些。
(2)通过确定系统的输入和输出与外部实体的关系确定系统的边界,也就是要确定哪些功能或处理属于系统范围之内,哪些属于系统范围之外,需要由其他系统处理或人工处理。
3.3在对数据流图进行分解时需要注意哪些问题?
在对数据流图进行分解时,需要注意以下两个问题:
(1)当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入/输出数据流必须相同。
(2)注意分层细化时对编号的处理方法。
3.4银行存款业务如下:
客户到银行柜台存款时,首先填写存款单(包括帐号、姓名、存款金额、存款类型),如果还没有开户,则需要先开户,填写开户单(包括姓名、身份证号、地址、电话、是否留密码)。
填写完存款单或开户单后,交给营业员,营业员将存款单或开户单信息输入计算机,系统记录开户信息或存款单信息,如果是开户并选择留密码,则需要客户输入密码。
最后印出开户单或存款单给用户。
请画出银行存款业务的分层数据流图(至少画出两层)。
(1)识别外部实体及输入输出数据流
外部实体:
储户、业务员。
输入数据流:
存款单,开户单,密码。
可以将存款单和开户单抽象为事务。
输出数据流:
存款单,开户单。
(2)顶层数据流图
(3)一层数据流图
对银行储蓄系统进行分解,从大的方面分解为接收事务、处理开户、处理存款三部分,得到一层数据流图。
(4)二层数据流图
对“处理存款”及“处理开户”进行进一步分解,得到二层数据流图,即处理存款的数据流图和处理开户的数据流图。
处理存款的数据流图
处理开户的数据流图
3.5按照以下描述,画出ER图。
一本教材由许