软件工程试题及答案页)
--本页仅作为文档封面,使用时请直接删除即可-- --内页可以根据需求调整合适字体及大小--
较详细)共5
((一. 判断题:
1.
2. 3. 4. 5. 6. 7. 8.
如果决定将软件全部包给第三方公司开发。 (×)
有了对系统的目标有了大致的了解,就可以开始开发项目,以后的在开发中继续了解。 (×) 对于一个成功的软件项目,可执行程序是唯一交付的东西。 (×) 直到程序运行,才评估软件系统的质量。 (×)
如果未能按时完成任务,我们可以通过增加程序员来加快完成任务。 (×) 虽然软件需求不断变更,但因软件比硬件有弹性,所以我们经常可以变更它。(×) 软件工程将导致我们产生大量的无用文档,降低工作效率。 (×)
在面向对象建模中,主题划分提供了在更高一层上描述。(主题划分是指UML中将一组关联比较强的类的集合。则上百个类可划分为几个主题) (√)
9. 面向对象的开发,对象分解取代功能分解。 (√) 10. 软件中80%的错误存在20%的模块中。 (√)
11. 结构化分析方法在建立系统模型时,使用一般――特殊结构(实际上没有这种关系)来处理信息。
(×)
12. 开发软件就是编程。 (×) 13. 需求规格说明书说明了 (√)
14. 结构化方法,建立系统模型时使用一般连接组织信息。 (×) 15. 敏捷过程模型选用小而高激励的团队使用而不适用于大团队。 (√)
二. 简答题
1. 软件工程是层次化的,其四个层次是
答:方法,工具,过程,质量保证
软件工程是一种层次化的技术(如图2-1所示)。任何工程方法(包括软件工程)必须以有组织的质量保证为基础。全面的质量管理和类似的理念刺激了不断的过程改进,正是这种改进导致了更加成熟的软件工程方法的不断出现。支持软件工程的根基就在于对质量的关注。
软件工程的基层是过程层。软件工程过程是将技术层结合在一起的凝聚力,使得计算机软件能够被合理地和及时地开发出来。过程定义了一组关键过程区域的框架(KPAs)[PAY93],这对于软件工程技术的有效应用是必须的。关键过程区域构成了软件项目的管理控制的基础,并且确立了上下各区域之间的关系,其中规定了技术方法的采用、工程产品(模型、文档、数据、报告、表格等)的产生、里程碑的建立、质量的保证及变化的适当管理。
软件工程的方法层提供了建造软件在技术上需要“如何做”。方法涵盖了一系列的任务:需求分析、设计、编程、测试和维护。软件工程方法依赖于一组基本原则,这些原则控制了每一个技术区域,且包含建模活动和其他描述技术。
软件工程的工具层对过程和方法提供了自动的或半自动的支持。当这些工具被集成起来使得一个工具产生的信息可被另外一个工具使用时,一个支持软件开发的系统就建立了,称为计算机辅助软件工程(CASE)。CASE集成了软件、硬件和一个软件工程数据库(一个仓库,其中包含了关于分析、设计、编程和测试的重要信息),从而形成了一个软件工程环境,它类似于硬件的CAD/CAE(计算机辅助设计/工程)。 软件工程必须以有组织的质量保证为基础
软件质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 2. 软件工程的框架是? 3. 4.
答:沟通,策划,建模,构建,部署 通用过程框架
通用过程框架可适用于绝大多数的软件项目,该框架由沟通、策划、建模、构造和部署5个通用框架活动组成。
(1) 沟通。这项框架活动包含系统分析员与客户之间大量的交流和协作,还包括需求获取以及其他相关活动。 (2) 策划。策划活动协助软件开发团队定义全局目标,并为后续的软件工程工作制定计划。策划活动包括一系
2
列管理和技术实践,如描述需要执行的技术任务、可能的风险、资源需求、工作产品和工作进度计划。 (3) 建模。建模的目的是为了更好地理解需要构建的实体。 在软件工程中,要创建两类模型:分析模型和设计模型。
分析模型通过描述软件的信息域、功能域及行为域来表达客户的需求;
设计模型描述软件架构、用户界面及构件细节,从而帮助开发者高效地开发软件。
(4) 构造。构造活动包括一系列构件组装、编码和测试任务,从而为向客户和最终用户交付可运行软件做好准备。
(5) 部署。部署活动是将软件(全部或者完成的部分)交付给用户,用户对其进行评测并给出反馈意见。 部署活动包括三个动作:交付、支持和反馈。 5. 一个模块的三个基本要素有哪些?
答:功能,状态,逻辑(程序流程图描述逻辑的一个方法)
功能:指模块实现什么功能(包括所调用的子模块的功能),做什么事情 逻辑:描述模块内部怎么做
状态:指该模块使用时的环境和条件
6. 不同的对象收到同一个消息,产生不同的结果这种现象叫多态。
多态性含义
把相同的操作施加于不同类型的对象,获得不同的行为效果和结果。 在C++中,多态性是通过虚函数(Virtual)实现的。 动态联编(Dynamic binding),滞后联编。
7. 模块的基本要素:功能,状态,逻辑 8. 面向对象建模需要识别五个层次:
a. 类与对象层 b.属性层 c.结构层(类与类之间的关系) d.方法层 e.主题层(为多个类划分主题) 主题层:它相当于高层的模块或子系统
类与对象层:它们是对问题域概念的抽象,可以从用户需求或其它规格说明书中找到。 结构层:描述类之间的整体与部分、一般与特殊的关系。
属性层:它们是类所保存的信息,同时要给出各个类之间的实例连接。
服务层:它们是类可提供的操作,同时要根据需要的功能给出各个操作之间的消息连接。
软件测试的四个阶段:
a.单元测试 b.集成测试 c.确认测试 d.系统测试
单元测试(模块测试):目的是保证每个模块作为一个单元能正确运行。主要测试编码和详细设计阶段的错误。
子系统测试:把经过单元测试的模块放在一起形成子系统。注重模块接口。
系统测试(集成测试):测试由子系统组成的整个系统,不仅测试模块间的协调和通信能力。还要测试设计错误、需求说明中的功能错误。
验收测试:确认系统能够满足用户的需求,方法同系统测试,主要强调用户的参与(alpha测试),测试需求说明中的功能错误。 平行运行、beta测试
测试过程按4个步骤进行,即单元测试、组装测试、确认测试和系统测试。
开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。
• 组装测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。
• 确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。
• 系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。
• 单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。
3
• 单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
• 组装测试 (集成测试、联合测试)
• 通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:
• 在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失; • 一个模块的功能是否会对另一个模块的功能产生不利的影响;
• 确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。
• 对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。
• 确认测试一般采用黑盒测试,其测试范围与系统测试略有不同,如弱化一些技术性的测试,强化用户所关心的功能和性能测试等。 确认测试一般包括
• 有效性测试(强调由专家进行) • 软件配置复查 • α测试和β测试
• 验收测试(强调由用户进行)
– 功能测试
– 性能测试(响应时间、处理速度、容量开销等) – 强度测试(对强负荷的承受能力) – 对文档配置的复审
• 系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬
件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
• 系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛
盾的地方。
将软件周期化为8个阶段(瀑布模型):
a.可行性研究 b.需求分析 c.概要测试 d.详细测试 e.编码 f.测试 g.维护 h.问题定义
正确的顺序为:h a b c d e f g
P 12-14页书上。
9. 对于一个流图(程序流程图退化为流图),它的基本路径的独立之路的上限是V(G)。(V(G):强连
通图中线性无关的环的个数) P157页书上
10. 自上往下集成测试:不需要编写驱动程序;自下往上集成测试:不需要编写桩程序
P147-148书上。
11. 单元测试针对模块哪些方面?
接口信息,主要功能,边界,错误处理,主要路径。P143页
12. 题目:比较经典的软件工程开发过程模型(是对这三个模型化比较分析)——瀑布模型、原型模型、螺旋
模型。
瀑布模型从可行性研究开始,逐步进行阶段性变换,直至通过确认测试并得到用户确认的软件产品为止。瀑布模型上一阶段的变换结果是下一阶段变换的输入,相邻两个阶段具有因果关系,紧密联系。一个阶段的失误将蔓延到以后的各个阶段。为了保障软件开发的正确性,每一阶段任务完成后,都必须对它的阶段性产品进行评审,确认之后再转入下一阶段的工作。评审过程发现错误和疏漏后,应该及时反馈到前面的有关阶段修正错误或弥补疏漏,然后再重复前面的工作,直至某一阶段通过评审后再进入下一阶段。
瀑布模型的优点:有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。
4
瀑布模型的缺点:(1)开发过程一般不能逆转,否则代价太大;(2)实际的项目开发很难严格按该模型进行;(3)客户往往很难清楚地给出所有的需求,而该模型却要求如此。(4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。
瀑布模型的使用范围:(1)用户的需求非常清楚全面,且在开发过程中没有或很少变化;(2)开发人员对软件的应用领域很熟悉;(3)用户的使用环境非常稳定;(4)开发工作对用户参与的要求很低。
原型模型又称演化模型,主要是针对事先不能完整定义需求的软件项目开发而言的。许多软件开发项目由于人们对软件需求的认识模糊,很难一次开发成功,返工再开发难以避免。因此,人们对需开发的软件给出基本需求,作第一次试验开发,其目标仅在于探索可行性和弄清需求,取得有效的反馈信息,以支持软件的最终设计和实现。通常我们把第一次实验性开发出的软件称为原型(prototype)。这种开发模型可以减少由于需求不明给开发工作带来的风险,有较好的效果。相对瀑布模型来说,原型模型更符合人类认识真理的过程和思维,是目前较流行的一种实用的软件开发方法。
原型模型的优点:(1)开发人员和用户在“原型”上达成一致。这样一来,可以减少设计中的错误和开发中的风险,也减少了对用户培训的时间,而提高了系统的实用、正确性以及用户的满意程度。(2)缩短了开发周期,加快了工程进度。(3)降低成本。
快速原型模型的缺点:(1)客户与开发者对原型理解不同;(2) 准确的原型设计比较困难;(3) 不利于开发人员的创新。
快速原型模型的使用范围:(1)对所开发的领域比较熟悉而且有快速的原型开发工具;(2)项目招投标时,可以以原型模型作为软件的开发模型;(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。
螺旋模型是瀑布模型与原型模型相结合,并增加两者所忽略的风险分析而产生的一种模型,该模型通常用来指导大型软件项目的开发,它将开发划分为制定计划、风险计划、实施开发和客户评估四类活动。沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本。如果开发风险过大,开发机构和客户无法接受,项目有可能就此中止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。
螺旋模型的优点: 1)设计上的灵活性,可以在项目的各个阶段进行变更。2)以小的分段来构建大型系统,使成本计算变得简单容易。3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。4)随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
螺旋模型的缺点:(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;(2)过多的迭代次数会增加开发成本,延迟提交时间。
螺旋模型的适用领域:1)适合于大型软件的开发。 2)对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。
13. 计算机语言不断发展,提高了软件工程的开发效率,围绕计算机语言,分析计算机语言在软件工程的作用
以及软件工程的本质。
计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。
从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语
言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1954年,第一个完全脱离机器硬件的高级语言--FORTRAN问世了,40 多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、VC、VB、JAVA等。
随着c,pascal,fortran,等结构化高级语言的诞生,使程序员可以离开机器层次,在更抽象的层次上表达意图。由此诞生的三种重要控制结构,以及一些基本数据类型都能够很好的开始让程序员以接近问题本质的方式去思考和描述问题。随着程序规模的不断扩大,在60年代末期出现了软件危机,在当时的程序设计模型中都无法克服错误随着代码的扩大而级数般的扩大,以至到了无法控制的地步,这个时候就出现
5
了一种新的思考程序设计方式和程序设计模型-----面向对象程序设计,由此也诞生了一批支持此技术的程序设计语言,比如eiffel,c++,java,这些语言都以新的观点去看待问题,即问题就是由各种不同属性的对象以及对象之间的消息传递构成。面向对象语言由此必须支持新的程序设计技术,例如:数据隐藏,数据抽象,用户定义类型,继承,多态等等。
结构化语言比非结构化语言更易于程序设计,用结构化语言编写的程序的清晰性使得它们更易于维护。这已是人们普遍接受的观点了。比如作为结构化语言的C语言主要结构成分是函数C的独立子程序。在C语言中,函数是一种构件(程序块),是完成程序功能的基本构件。函数允许一个程序的诸任务被分别定义和编码,使程序模块化。可以确信,一个好的函数不仅能正确工作且不会对程序的其它部分产生副作用。
面向对象语言是只一切操作都以对象为基础,它是由面向过程语言发展而来的,但正是它的这个特性使得面向对象语言对底层的操作不是很方便。例如:java语言。
面向过程语言是以过程或函数为基础的,这种语言对底层硬件,内存等操作比较方便,但是写代码和调试维护等会很麻烦。例如:c语言:从低级语言到高级语言发展。从非结构化语言――――结构化语言 面向过程语言―――面向对象语言(各自的特点)
《计算机科学技术百科全书》中的定义:软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
软件工程的本质:从需求分析道最后的可执行代码有一个语言断层,我们的任务就是消除这个断层。
本质特性:
软件工程关注于大型程序的构造; 软件工程的中心课题是控制复杂性;
——许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节造成的。
软件经常化;
开发软件的效率非常重要; 和谐地合作是开发软件的关键; 软件必须有效地支持它的用户;
在软件工程领域中是由一种文化背景的人替具有另一种文化背景的人创造产品。 14. 题目:在需求分析建立模型统称为需求模型。
在设计阶段建立模型统称为设计模型。
从需求模型到设计模型的映射。(即需求模型中的模型在设计模型中对应什么位置)
答:(需求模型定义+分类(功能,对象,动态模型);设计模型定义+体系结构用什么模型+借口设计模型+构建级设计)
需求分析应该建立3种模型他们分别是数据模型、功能模型、行为模型。
实体-联系图,描述数据对象及数据对象之间的关系,是用于建立数据模型的图形。
数据流图:描绘当数据在软件系统中移动时被变换的逻辑过程,指明系统具有的变换数据的功能,因此数据流图是建立功能模型的基础。
状态转换图,指明了作为外部事件结果的系统行为。为此,状态转换图描绘了系统的各种行为模式和在不同状态间转换的方式 状态转换图是行为建模的基础。
设计模型包括:体系结构设计、子系统的抽象描述(如包图)、接口设计、组件设计
数据结构设计、算法设计(体系结构设计、数据及类设计模型、接口设计、构件级设计(NS图))
体系结构设计的一般过程:系统结构化,将系统分解成一系列基本子系统(是一个独立的软件单元),并识别它们之间的通信。
控制建模,建立系统各部分之间控制关系的一般模型。
模块分解,将子系统进一步分解成模块,并确定模块之间的关联。
6
软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。
对象模型:描述系统的数据结构 表示方法:类图
动态模型:描述系统的控制结构
作用:着重于系统的控制逻辑和时序关系。
表示:由状态图和事件跟踪图、顺序图、协作图、活动图表示。 功能模型:描述系统的功能
表示方法:数据流图,用例图
作用1、从不同的角度对对象模型和行为模型的补充2、 定义“处理”,强调系统应该“做什么”
活动图映射到构件级设计 从数据流图到软件结构图 类图映射到体系结构设计
• 静态结构——对象模型——WHO
– 其作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,
以及它们之间的联系。 – 对象模型包括类图
• 交互次序——动态模型——WHEN
– 其作用是描述系统的控制逻辑,主要涉及系统中各个类和对象的时序及变化情
况。
• 数据变换——功能模型——WHAT
– 它着重于描述系统内部数据的传送与处理,它由多个数据流图组成。
7
因篇幅问题不能全部显示,请点此查看更多更全内容