admin 管理员组

文章数量: 1087139


2024年12月30日发(作者:idea过期了打不开怎么弄)

第一章习题

1.1 什么是计算机软件?软件的特点是什么?

答:

计算机软件(Computer Software,也称软件,软体)是指计算机系统中的程序及

其文档,程序是计算任务的处理对象和处理规则的描述;文档是为了便于了解程序所

需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装

入机器。

软件的特点:

1.软件是一种逻辑实体而不是有形的系统元件,其开发成本和进度难以准确的估算。

2.软件是被开发的或设计的,没有明显的制作工程,一旦开发成功,只需复制即可,

但其维护的工作量大。

3.软件的使用没有硬件那样的机械磨损和老化问题。

1.2 简述软件的分类,并举例说明。

答:软件分为系统软件,支撑软件和应用软件3类。

系统软件居于计算机系统中最靠近硬件的一层其他软件一般都通过系统软件发挥作

用。例如:编译程序,操作系统等。

支撑软件是支撑软件的开发和维护的软件。例如:数据库管理系统,网络软件,软件

工具,软件开发环境等。

应用软件是特定应用领域专用软件。例如:工程/科学计算软件,嵌入式软件,产品

线软件,Web应用软件,人工智能软件等。

1.3 简述软件语言的分类,并举例说明。

答:软件语言是用于书写计算机软件的语言主要包括:需求定义语言,功能性语言,

设计性语言,实现性语言和文档语言。

需求定义语言用以书写软件需求定义,软件需求定义是软件功能需求和非功能需

求的定义性描述。软件功能需求刻画“做什么”,软件非功能需求刻画诸如功能性限

制、设计限制、环境描述、数据预通信规程以及项目管理等。。

功能性语言用以书写软件功能规约,软件功能规约是软件功能的严格而完整的陈

述。软件功能规约通常只刻画软件系统“做什么”的外部功能,而不涉及系统“如何

做”的内部算法,因此,功能性语言通常又称为功能规约语言。

设计性语言用以书写软件设计规约。软件设计规约是软件设计的严格而完整的陈

述。一方面,它是软件功能规约的算法性细化,刻画了软件“如何做”的内部算法;

另一方面,它又是软件实现的依据从。

实现性语言,即一般的程序设计语言,用于计算机程序、处理对象和规则的描述。

程序设计语言有高级语言和低级语言之分。

文档语言用以书写软件文档。以上的软件需求定义,软件功能规约,软件设计

规约等都是软件文档。此外还可能有一些其他阐明性的资料,这些也是软件文档。

需求定义语言例如: PSL/PSA等;

功能性语言例如:广谱语言,Z语言等;

设计性语言例如:PDL等;

实现性语言例如:FORTRAN,C Java等;

文档语言通常用自然语言或半形式化语言书写。

1.4 什么是软件工程?

答:软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自

己的定义:

BarryBoehm

运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这

些程序所必需的相关文件资料。

IEEE

在软件工程术语汇编中的定义:软件工程是:1.将系统化的、严格约束的、

可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1

中所述方法的研究

FritzBauer

在NATO会议上给出的定义:建立并使用完善的工程化原则,以较经济的手

段获得能在实际机器上有效运行的可靠软件的一系列方法。

计算机科学技术百科全书

软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的

工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计

算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型

(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管

理。

目前比较认可的一种定义认为:软件工程是研究和应用如何以系统性的、规

范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证

明正确的管理技术和当前能够得到的最好的技术方法结合起来。

1.5 简述软件工程的基本原则。

答:

软件工程围绕工程设计、工程支持以及工程管理已提出了以下四条基本原则:

(1)软件工程选取适宜的开发模型

该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其它因素间是相互制约和

影响的,经常需要权衡。因此,必需认识需求定义的易变性,采用适当的开发模型,保证软

件产品满足用户的要求。

(2)软件工程采用合适的设计方法

在软件设计中,通常需要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性

等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。

(3)软件工程提供高质量的工程支撑

在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直

接取决于对软件工程所提供的支撑质量和效用。工欲善其事,必先利其器。

(4)软件工程重视软件工程的管理

软件工程的管理直接影响可用资源的有效利用,生产满足目标的软件产品以及提高软件组织

的生产能力等问题。因此,仅当软件过程予以有效管理时,才能实现有效的软件工程。

1.6 软件生成周期分哪几个阶段?分别简述各个阶段的任务。

答:软件生存的周期大致可分为:计算机系统工程,需求分析,设计,编码,

测试,运行和维护。

计算机系统工程:计算机系统工程的任务是确定待开发软件的总体要求和范围,

以及该软件与其他计算机系统元素之间的关系,进行成本估算,做出进度按排,并进

行可行性分析。

需求分析:需求分析主要解决待开发软件要“做什么”的问题,确定软件的功能,

性能,数据,界面等要求生成软件需求规约。

设计:软件设计主要解决“怎么做”的问题,通常分为系统设计和详细设计。

编码:编码阶段的任务是用某种程序设计语言,将设计的结果转换成可执行的程

序代码。

测试:测试阶段的任务是发现并纠正软件中的错误和缺陷。

运行和维护:软件运行期间需对投入运行的软件进行维护当发现了软件中潜藏的

错误或需要增加新的功能或使软件适应外界的变化等情况出现时,对软件进行修改。

1.7 简述CMM的5个等级。

答:

1. 初始级

软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努

力。

2. 可重复级

建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,

能重复早先类似应用项目取得的成功经验。

3. 已定义级

已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。

所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个

软件过程是可见的。

4. 已管理级

分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控

制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

5. 优化级

可集中精力改进过程,采用新技术、新方法。拥有防止出现缺陷、识别薄弱环节以及

加以改进的手段。可取得过程有效性的统计数据,并可据进行分析,从而得出最佳方法。

每个等级都被分解为过程域,特殊目标和特殊实践,通用目标、通用实践和共同特性

1.8 简述CMMI的连续式模型和阶段式模型。

答:连续式模型关注每个过程域的能力,包括24个过程域,过程管理(5) 项目管

理(7) 工程(6) 支持(6)。

阶段式模型关注组织成熟度,共分为有5个等级,包含24个过程域。

阶段型最主要的特点是转换组织的“思维方式”。阶段型表现方式在每提高一个

成熟度级别时,组织都要经历一次文化的转变。

连续型表达方式,换一种说法,感觉在强制进行重新定义。在不同特征的领域和

需求方面应用时有时会显得太过死板。但不可否认的是:连续型表达方式具有很强的

可调节性,它能根据不同组织机构特征及独特的运作环境进行优化改进策略。

1.9 简述各类软件过程模型的特点。

瀑布模型的特点是:

1,接受上一阶段活动的结果作为本阶段活动的输入。

2,依据上一阶段活动的结果实施本阶段应完成的活动。

3,对本阶段的活动进行评审。

4将本阶段活动的结果作为输出,传递给下一阶段。

5,不适用于需求经常变化的软件开发。

增量模型的特点:

1适用于需求将常发生变化的软件开发。

2适用于市场急需而开发人员和资金都不能在设定的市场期限之前实现一个完善的产

品的情况。

3 有计划地管理技术风险

原型模型的特点:

1适用于需求将常发生变化的软件开发。

2 能快速、低成本的构建原型。

3 使用废弃策略和追加策略。

螺旋模型的特点:

1 结合原型的迭代特征和瀑布模型中控制的和系统化,体现了两大模型的优点。

2 增加风险分析。

喷泉模型的特点:

1 面向对象开发

2 迭代特征和无间隙特性

基于构件的开发模型的特点:

1 提高软件生产率

2 提高软件质量

3降低成本

4 提早上市时间

5软件复用

形式化方法模型的特点:

建立在严格数学基础上

1.10 敏捷软件开发的特点是什么?

答:(1) 测试驱动开发

(2)持续集成:版本不断丰富,持续改进。

(3)结对编程

(4)站立会议

(5)以合作为中心

(6)可调整计划

1.11 简述敏捷软件开发的价值观。

答:(1)个人和交互高于过程和工具

(2)可运行软件高于详尽的文档

(3)与客户协作高于合同谈判

(4)对变更及时作出反应高于遵循计划

1.12 简述敏捷软件开发的原则。

答: (1)我们最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。

(2)即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优

势。

(3)经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时

间间隔越短越好。

(4)在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。

(5)围绕被激励起来的个人来构建项目。给他们提供所需的环境和支持,并且信任他

们能够完成工作。

(6)在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。

(7)可以工作的软件是首要的进度度量标准。

(8)敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期

的、恒定的开发速度。

(9)不断地关注优秀的技能和好的设计会增强敏捷能力。

(10)简单——把无需做的工作最大化的艺术——是最根本的。

(11)最好的构架、需求和设计出于自我组织的团队。

(12)每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自

己的行为进行调整。

1.13 通过本章的学习,请对敏捷软件开发作简要评价。

答:在敏捷方法其独特之处以外,他和其他的方法也有很多共同之处,比如迭代开发,

关注互动沟通,减少中介过程的无谓资源消耗。通常可以在以下方面衡量敏捷方法的

适用性:从产品角度看,敏捷方法适用于需求萌动并且快速改变的情况,如系统有比

较高的关键性、可靠性、安全性方面的要求,则可能不完全适合;从组织结构的角度

看,组织结构的文化、人员、沟通则决定了敏捷方法是否适用。跟这些相关联的关键

成功因素有:

组织文化必须支持谈判人员彼此信任,人少但是精干,开发人员所作决定得到认

可,环境设施满足成员间快速沟通之需,要最重要的因素恐怕是项目的规模。规模增

长,面对面的沟通就愈加困难,因此敏捷方法更适用于较小的队伍,20、40人或者更

少。大规模的敏捷软件开发尚处于积极研究的领域。

另外的问题是项目初期的大量假定或者快速收集需求可能导致项目走入误区,特

别是客户对其自身需要毫无概念的情况下。与之类似,人之天性很容易造成某个人成

为主导并将项目目标和设计引入错误方向的境况。开发者经常能把不恰当的方案授予

客户,并且直到最后发现问题前都能获得客户认同。虽然理论上快速交互的过程可以

限制这些错误的发生,但前提是有效的负反馈,否则错误会迅速膨胀。

随着软件开发方法的不断演进,混合的开发方法在各软件企业和团队中应用越来越广

泛。每一种开发方法都有其优点,如传统的瀑布式方要求有详细的项目计划和文档,部署、

测试和交付过程严谨。敏捷开发是针对传统的瀑布开发模式的弊端而产生的一种新的开发模

式,目标是提高开发效率和响应能力。敏捷方法的优点体现在能够快速迭代,更多的强调人

员在整个开发过程中所发挥的作用。在敏捷开发中,软件项目的构建被切分成多个子项目,

各个子项目的成果都经过测试,具备集成和可运行的特征。


本文标签: 软件 过程 需求 开发