软件工程复习题
- 格式:doc
- 大小:1.14 MB
- 文档页数:25
一、
1)什么是软件
软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及其相关文档的完整集合。以开发语言作为描述语言,可以认为:软件=程序+数据+文档。
其它版本参考:
1.运行时,能够完成预定功能和性能的可执行指令。
2.程序能够满意地处理信息的数据结构。
3.描述程序功能需求以及程序如何操作和使用所要求的文档。
2)什么是软件工程
运用工程学的原理和方法来组织和管理软件的生产和维护,以保证软件产品开发,运行和维护的高质量和高生产率。
软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理
3)什么是软件危机
落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。软件开发中存在的问题即是软件危机
4)什么是软件危机的表现形式
主要表现:
1、人们对软件开发的成本和进度的估计常常不够准确。软件开发费用和进度失控。
2、用户对已完成的软件不满意的现象时有发生。
3、软件常常是不可维护的。生产出来的软件难以维护。
4、软件产品的质量往往不可靠。
5、软件开发生产率提高的速度远远跟不上日兼增长的软件需求,满足不了社会发展的需要
别的表现:
盗版、资金、竞争等
5) 软件工程包括哪几个关键的元素?
答:方法、语言、工具、过程
二、
1)什么是软件开发模式
软件开发模型是软件开发全部过程、活动和任务的结构框架。它能自管表达软件开发的全过程,明确规定要完成的活动、任务和开发策略。
软件开发模型也常称为:软件过程模型、软件生存期模型、软件工程规范。
2) 软件开发主要有哪些模型,有生命特点?
答:主要有瀑布模型、原型开发模型、增量模型、螺旋模型、软件生产线
瀑布模型的特点:
①.阶段间具有顺序性和依赖性 ②.推迟实现的观点
③.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。
瀑布模型的来源:
1)是把硬件工程模式应用到软件工程中得来;2)是一种最古老和使用最广泛的传统工程模式
瀑布模型的实质:
1)是面向阶段的和线性的开发策略; 2)把一个项目开发分几个阶段:由系统需求分析开始,然后是软件需求分析、设计、编码、测试、维护; 3)除了确认和验证外,其它所有阶段都是当它的前一阶段完成后才开始; 4)而实际上大多数情况是难以做到甚至不可能的。
关于原型法
原型开发的实质:
就是允许失败。即人类不论在开发实践活动中如何小心谨慎,也不可能经一次努力就能开发完成正确的软件,所以也说原型是确定需求的一种机制。
原型开发方法:
借鉴硬件工程的方法,在项目的早期尽快生产出一个简化且便宜的可运行的软件版本,作为开发人员和用户评价和学习的一种系统。
原型存在的问题:
1)为了快和省,原型版本经常采用一些折衷的解决方法,所以质量问题较多; 2)原型版本只是一个临时版本,用户并不了解。
根据应用不同,原型开发可分为:
1、抛弃式原型 最大用处是辅助分析和确定用户需求,及解决系统任何部位的不确定性问题
2、演化式原型 可以作为一种开发方法,用于对付系统频繁更改最有效的方法。与抛弃式原型不同,利用演化能成为最终系统 3、增量式原型开发 与演化式原型不同,它是建立在软件总体设计基础上的。可以作为瀑布模型开发的补充
3)瀑布模型
4)原型模式
5)增量、螺旋(只做了解)
三、设计的基本原理
答:(1)、抽象
(2)、细化
(3)、模块化
(4)、软件体系结构
(5)、控制层次
(6)、数据结构
(7)、软件过程
(8)、信息隐藏
四、分析
1)画出数据流图 0、1、2层
2)E-R和状态图(面向对象中的类图)
主要画数据流图
五、设计
1)设计是最关键的模块化设计
2)什么是模块?什么是模块化?为什么要模块化?模块化程序设计的优点?模块化程序设计的重要性?
答:(1)、模块: 是单独命名和可编址的构建,以满足问题的需求
(2)、模块化:模块化就是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
(3)、为什么要模块化:模块化是软件设计的一个重要属性,它使一个程序易于为人们所理解、设计、测试和维护。如果一个软件就是一个模块,它很难让人理解,因为要人们了解、处理和管理这么多的控制路径和大量的变量几乎是不可能的,所以要进行模块化。 (4)、模块化程序设计有以下几个优点:如果是一个人或者是很小的软件,他们没有任何的优越性,反而显得更加复杂。但是如果是许多人协同作业,或者软件工程非常大是,它就会有非常明显的优越性,因为其他人不需要知道你这个工作组究竟是怎样写的,只是需要知道你这部分所实现的功能,知道他所拥有的接口就可以了,这样程序设计就会更加简便,而且你还可以把某个部分外包,可以集中人力、物力先完成其中一部分的模块,等等
(5)、模块化程序设计的重要性
①.有利于程序服用
②.利于系统开发集成
③.有利于调试、后续功能扩展
④.代码结构清晰易读
3)什么是模块独立性?模块独立性为什么重要?
答:(1)、模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单. 模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。
(2)、模块独立性为什么重要:具有独立的模块的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。 独立的模块比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够"插入"模块。总之,模块独立是优秀设计的关键,而设计又是决定软件质量的关键环节。
(1)具有独立的模块软件比较容易开发。
(2)独立的模块比较容易测试和维护。
(3)模块独立是优秀设计的关键,设计又是决定软件质量的关键环节。
4)模块的内聚性分为哪几种类型?把它们按从低到高进行排序。
答:(偶然,逻辑,时间,过程,通信,顺序,功能)内聚。
5)模块的偶合性分为哪几种类型?把它们按从高到低进行排序。
答:(内容,公共,控制,数据,无直接)耦合。
6)软件的生存周期一般分成哪几个阶段?
答:三个时期:软件定义,软件开发,运行和维护。
八个阶段:问题定义,可行性研究,需求分析,概要设计,详细设计,编码,测试,维护
7)聚合与耦合的意思?
答:聚合:是模块功能相对强度的度量
耦合:耦合是模块之间相对独立性的度量
五、体系结构
1、分别叙述“瀑布模型”和“快速原型模型”的优缺点.
1)瀑布模型:
优点:可强迫开发人员采用规范的方法;严格的规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
缺点:瀑布模型是文档驱动的。
2)快速原型模型:
优点:软件产品的开发基本上是按线性顺序进行的。 缺点:所选用的开发技术和工具不一定符合主流的发展;
• 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下;
3)体系结构设计的内容和原理
答:体系结构设计目标是开发一个模块化的程序结构,并给出各个模块之间的控制关系。
体系结构设计遵循以下设计原则:
(1)、模块大小:一个模块最好只包含50—60条语句
(2)、深度/宽度与扇入/扇出
深度与宽度在一定程度上表示系统的大小和系统的复杂程度。深度表示控制的层数,宽度表示同一层上控制的最大模块数目。扇出是对某一模块直接控制的模块数目的度量,即一个模块直接调用的模块数目。扇入是对给定模块被多少个模块直接控制的度量,即调用一个给定模块的模块数。
(3)、判定的作用域和模块的控制域
六、面向对象
1)画用例图
2)画类图
3)画顺序图
4)画状态图
5)面向对象设计的准则是什么?有哪五个层次和4个部分?
答:面向对象设计的准则:模块化、抽象、信息隐蔽、低耦合、高内聚(操作内聚、类内聚、一般内聚---具体内聚),在面向对象方法中,信息隐蔽通过对象的封装来实现。类结构分离了与现实,从而支持了信息隐蔽。
七、软件质量
1)保证软件质量的措施和策略
2)简述软件工程的目标和面临的问题?
答:软件工程是一门工程性学科,其目标主要是成功地建造一个大型软件系统,包括:付出较低的开发成本达到要求的软件功能,取得较强的软件性能,开发的软件的易于移植,需要较低的维护费用,能按时完成开发任务,及时交付使用,开发的软件可靠性高。
面临的主要问题是:软件费用、软件可靠性、软件维护、软件生产率、软件重用。
3)简述软件生命周期开发方法的基本过程及每个阶段的任务
答:基本过程:可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护。
基本任务:
1.问题定义:要求解决的问题是什么
2.可行性研究:确定问题是否值得解,技术可行性、经济可行性、操作可行性
3.需求分析:系统必须做什么
4.总体设计:系统如何实现,包括系统设计和详细设计
5.详细设计:具体实现设计的系统
6.实现:编码和测试
7.运行维护:保证软件正常运行
4)软件质量保证的策略 答:质量保证的策略
质量保证策略主要分三个阶段:
以检测为重:产品制成之后进行检测,只能判断产品质量,不能提高产品质量。
以过程管理为重:把质量的保证工作重点放在过程管理上,对制造过程中的每一道工序都要进行质量控制。
以新产品开发为重:在新产品的开发设计阶段,采取强有力的措施来消灭由于设计原因而产生的质量隐患。
8、软件测试
1)测试的两个图
测试的过程
e-r
2)UML的含义?
答:UML是近年来拖出的面向对象方法的建模图形语言,用于对软件系统进行说明、构造、可规范化和文档的建立。
UML由UML的基本构造块、把这些构造块放在一起的规则及使用整个语言的一些公共机制组成。
3)什么是软件测试?软件测试的目标和原则是说明?它包括哪几种测试?
答:使用人工或自动手段来运行或测定某个系统的过程,其母的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
软件测试的目标:
(1)、测试是一个程序的执行过程,其目标在于发现错误。
(2)、一个好的测试用例是能够发现至今尚未察觉的错误的用例
(3)、一个成功的测试则是发现至今尚未察觉的错误的测试。
4) 软件测试有两种测试:黑盒测试和白盒测试
黑盒测试:黑盒测试着眼于软件的外部特征,二不考虑软件的内容逻辑结构。指在软件的接口上进行测试,即看它能否满足功能要求输入能否正确地接收,并正确地输出结果,以及能否保持外部信息的完整性等。
白盒测试:是已知产品的内部逻辑结构,以仔细检查过程的细节为基础,测试他的内部活动是否都符合设计要求而进行的测试。