模块一 软件工程概述
一、选择题
1.软件与程序的区别是()。
选择一项:
A. 程序价格便宜、软件价格昂贵。
B. 软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序是软件的一部分。 
C. 程序是用高级语言编写的,而软件是由机器语言编写的。
D. 程序是用户自己编写的,而软件是由厂家提供的。
正确答案是:软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序是软件的一部分。
2.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。
选择一项:
A. 软件周期
B. 软件产生
C. 软件工程
D. 软件危机 
正确答案是:软件危机
3.瀑布模型本质上是一种( )模型。
选择一项:
A. 线性顺序 
B. 线性迭代
C. 早期产品
D. 顺序迭代
正确答案是:线性顺序
4.瀑布模型存在的问题是( )。
选择一项:
A. 适用可变需求
B. 用户与开发者易沟通
C. 缺乏灵活性 
D. 用户容易参与开发
正确答案是:适用可变需求
5.用户要看到软件产品的模样,最早也要到()以后。
选择一项:
A. 在单元测试之后
B. 程序代码编写完成之后
C. 用户需求基本确定 
D. 验收
正确答案是:程序代码编写完成之后
6.螺旋模型是一种将瀑布模型和()结合起来的软件开发模型。
选择一项:
A. 喷泉模型
B. 变换模型
C. 专家系统
D. 增量模型 
正确答案是:增量模型
7.原型化方法是用户和设计者之间执行的一种交互构成,适用于()系统。
选择一项:
A. 实时
B. 需求确定的
C. 管理信息
D. 需求不确定性高的 
正确答案是:需求不确定性高的
8.原型化方法是一种()型的设计过程。
选择一项:
A. 自外向内 
软件开发编程语言有哪些
B. 自顶向下
C. 自内向外
D. 自底向上
正确答案是:自外向内
9.下列有关软件工程的标准,属于国际标准的是( )
选择一项:
A. DIN
B. IEEE 
C. GB
D. ISO
正确答案是:ISO
10.结构化方法是一种基于()的方法。
选择一项:
A. 程序结构
B. 数据结构
C. 算法
D. 数据流 
正确答案是:数据流
二、简答题
1.什么是软件危机?软件危机表现在哪几个方面?
由于软件具有上述这些特点,长期以来一直没有发明一种高效的开发方法,从而导致软件生产效率非常低,交付期一拖再拖,最终交付的软件产品在质量上很难保障。这种现象早在20
世纪60年代被定义为“软件危机”。它的具体表现如下:
1)  “已完成”的软件不满足用户的需求。
2)  开发进度不能保障,交付时间一再拖延。
3)  软件开发成本难以准确估算,开发过程控制困难造成开发成本超出预算。
4)  软件产品的质量没有保证,运算结果出错、操作死机等现象屡屡出现。
5)  软件通常没有适当的文档资料,或文档与最终交付的软件产品不符,软件的可维护程度非常低。
2.试述产生软件危机的主要原因?
软件的特点是导致软件危机的客观因素,而软件开发和软件维护过程中使用的不正确方法是主观因素,主要表现为:忽视软件开发前期的调研和分析工作,没有统一的、规范的方法论指导,文档资料不齐全,忽视人员之间的交流,忽视测试工作,轻视软件的维护。
3.什么是软件工程?软件工程的目标是什么?
软件工程是:① 将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,也就是说将工程化应用于软件开发和管理之中;② 对①中所选方法的研究”。
软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:
a)  实现预期的软件功能,达到较好的软件性能,满足用户的需求。
b)  增强软件过程的可见性和可控性,保证软件的质量。
c)  提高所开发软件的可维护性,降低维护费用。
d)  提高软件开发生产率,及时交付使用。
e)  合理预算开发成本,付出较低的开发费用。
4. 软件工程为什么要强调规范化和文档化?
软件工程强调规范化和文档化。规范化的目的是使众多的开发者遵守相同的规范,使软件生
产摆脱个人生产方式,进入标准化、工程化的生产方式。文档化是将软件的设计思想、设计过程和实现过程完整地记录下来,以便于后人的使用和维护,在开发过程中各类相关人员借助于文档进行交流和沟通。另外,在开发过程中产生的各类文档使得软件的生产过程由不可见变为可见,便于管理者对软件生产进度和开发过程进行管理。在用户最终验收时可以通过对提交的文档进行技术审查和管理审查,保证软件的质量。
5.软件工程层次是如何划分的?
软件工程的研究内容具有层次化结构,它的最底层是质量保证层,中间是过程层和方法层,最上层是工具层。
 
全面的质量管理和质量需求是推动软件工程过程不断改进的动力,正是这种改进的动力导致了更加成熟的软件工程方法不断涌现。过程层定义了一组关键过程域,目的是保证软件开发过程的规范性和可控性。方法层提供了软件开发的各种方法,包括如何进行软件需求分析和设计,如何实现设计,如何测试和维护等方法。工具层为软件工程方法和过程提供了自动或半自动的支撑环境。目前市场上已经有许多不错的软件工程工具,应用效果良好。
6.什么是软件生存周期模型?
软件生命周期模型反映的是软件开发过程、活动和任务的结构框架。它能够清晰、直观地表达软件开发全过程,明确规定要完成的主要活动和任务。对于不同的软件系统,可能采用不同的开发方法,使用不同的程序设计语言、不同的管理方法和手段、以及各种具有不同技能的人员参与工作,但是对于软件生命周期模型来说都应该是稳定有效和普遍适用的。到目前为止,已经提出了多种模型,主要有瀑布模型、演化模型、喷泉模型、螺旋模型、智能模型。模型的选择是基于软件的特点和应用领域。
7.软件工程的发展至今为止经历了哪几个阶段?各阶段的特征是什么?
在20世纪70年代基本形成了软件工程的概念、框架、方法和手段,被称之为第一代软件工程,即传统软件工程。结构化分析、结构化设计和结构化编程方法是这个时期的代表。
80年代出现的Smalltalk 80程序设计语言标志着面向对象程序设计进入了实用阶段,从80年代中到90年代中,研究的重点转移到面向对象分析和设计上来,从而演化成软件工程的第二代,称之为对象工程。
90年代后期,软件工程的一个重要进展就是基于组件的开发方法。为了提高软件生产力,避免草率地开发应用程序,尽可能地利用可复用组件来组装成新的应用软件系统。到目前为止,组件技术的研究和发展形成了新一代软件工程,即第三代软件工程,也有不少人称之为组件工程。
软件工程至今还在不断发展,无论是组件工程还是对象工程都在不断发展,即使是传统软件工程的一些基本概念、框架,也随着技术的进步在发生变化。总之,软件工程代与代之间并没有鸿沟,它们不仅交叉重叠,也携手并进。
8.指出瀑布模型中下列任务的顺序:验收测试,项目计划,单元测试,需求评审,成本估计,概要设计,详细设计,系统测试,设计评审,编码,需求规格说明书。
项目计划->成本估计->需求规格说明书->需求评审->概要设计->详细设计->设计评审->编码->单元测试->系统测试->验收测试
9.请比较软件生命周期瀑布模型和螺旋模型的特点。
瀑布模型最重要的特点:只有当一个阶段的任务完成、交付相应的文档、通过审查小组的审
查合格后,才能开始下一个阶段的工作。瀑布模型的优点:有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。瀑布模型的缺点:(1)开发过程一般不能逆转,否则代价太大;(2)实际的项目开发很难严格按该模型进行;(3)客户往往很难清楚地给出所有的需求,而该模型却要求如此。(4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。
螺旋模型的主要优势在于它是风险驱动的,每个方案在实施前都要经过风险分析。如果风险过大,则项目应该停止,或改变方案。螺旋模型的优点:(1)设计上的灵活性,可以在项目的各个阶段进行变更;(2)以小的分段来构建大型系统,使成本计算变得简单容易;(3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;(4) 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。 螺旋模型的缺点:(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;(2)过多的迭代次数会增加开发成本,延迟提交时间。
10.什么叫职业化?职业化软件工程师的必备条件是什么?
所谓职业化,简单说就是能胜任工作,让人放心。“能胜任工作”,就需要具备相应的专业技能、知识和经验;“让人放心”意味着很多,包括遵守行业成文的或未成文的规则和规范,积极有效地和同事沟通,确保自己的工作产品是大家所期望的,尽可能地向客户提供最专业的服务和产品。自律、沟通和技能是成为职业化软件工程师的必要条件。
自律:软件区别于其它传统产品,软件只有安装运行后,人们才看见它的界面;开发进度也是肉眼看不见的,很难准确判断开发任务完成了80%还是30%;质量更是不可见的,只有通过非常认真、全面的测试和度量,才能了解代码的质量。一个程序员认真思考问题时的模样和他发呆时的表现一样,外人很难判断。因此说,“自律”对软件工程师来说更为重要。
沟通:软件的规模越来越大,而且处在不断的变化过程中。因此需要软件工程师进行大量书面的、口头的、或面对面的沟通。大到产品的整体功能和性能要求,小到程序的结构,甚至一个函数、一个变量的含义都需要沟通。沟通有标准化的、可视化的工具语言,如UML。软件工程强调文档的重要性就是以文档作为沟通的工具,与客户沟通明确用户需求;工程师之间沟通明确设计方案,市场人员和工程师沟通确定产品特征。软件工程的实践表明,缺乏主动沟通,往往导致整个团队的技术方案出现偏差,使整个项目的进度受到影响。
技能:软件工程师常常强调自己掌握的编码技术,往往忽视用户需求和软件开发的规范。作为职业化软件工程师,需求分析、软件设计、软件构造、软件测试、软件维护、配置管理、软件项目管理、软件过程改进、软件工具和方法以及软件质量保证等是更为重要的技能。
11.职业化软件工程师十大忌讳是哪些?
行为一:对外交付半成品。
行为二:不遵守标准和规范。
行为三:不积极帮助他人。
行为四:版权意识不敏感。
行为五:对待计划不严肃。
行为六:公事私事相混淆。
行为七:不注意知识更新。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。