软件工程简答题
作者:互联网
软件工程简答题
1、软件工程的概念
软件工程是指导计算机软件开发和维护的一门学科,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济有效的开发出高质量的软件并有效维护它。
2、软件工程的基本原则
-
用分阶段的生命周期计划严格管理
-
坚持进行阶段评审
-
采用严格的产品控制
-
采用现代程序设计技术
-
应能清楚审查结果
-
合理安排开发小组的成员
3、软件生命周期模型
软件生命周期模型是跨越整个生命周期的系统开发、运作、维护所实施的全部工作和任务的结构框架
4、瀑布模型的优缺点以及适用范围
-
优点:
-
阶段间具有顺序性和依赖性
-
保证了软件产品及时交付并达到预期的质量要求
-
-
缺点:
-
缺乏灵活性
-
开发过程一般不能逆转
-
规格说明很难理解
-
软件的实际情况必须到项目开发的后期客户才能看到
-
-
适用范围:
-
在开发时间内需求没有或很少变化;
-
分析设计人员应对应用领域很熟悉;
-
低风险项目(对目标、环境很熟悉);
-
用户使用环境很稳定;用户除提出需求以外,很少参与开发工作。
-
5、螺旋模型的优缺点以及适用范围
-
优点
-
容易确定什么时候以及对某一阶段的产品测试完毕
-
维护与开发之间没有本质上的差别
-
-
缺点
-
需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,会造成重大损失;
-
-
适用范围
-
螺旋模型只适合于大规模的软件项目。
-
6、原型模型的优缺点以及适用范围
-
优点
-
原型模型可作为培训环境,有利于用户的开发和培训同步
-
可以低风险的开发较大的计算机系统
-
更易维护、生成对用户更友好的系统
-
使总的费用降低、开发时间缩短
-
-
缺点
-
对于开发者不熟悉的领域,可能会把次要部分当做主要框架,从而作出不切实际的原型
-
原型迭代不收敛于开发者预先定义的目标,为了消除错误,每次更改,次要部分越来越大,淹没了主要部分
-
原型过快收敛于集合,忽略了一些基本点
-
资源规划和管理较为困难,随时更新文档也会带来麻烦
-
长期在原型上开发,只注意得到满意的原型,容易遗忘用户环境和原型的差异
-
-
适用范围
-
对所开发的领域比较熟悉而且有快速的原型开发工具;
-
项目招投标时,可以以原型模型作为软件的开发模型;
-
进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。
-
8.增量模型的优缺点以及适用范围
-
优点:
-
每个阶段交付一个可用的产品
-
减少一个全新产品给用户带来的心理上的影响
-
分阶段的交付产品,不需要大的资金支出
-
需求经常变化,增量模型的灵活性使其具有更加优越的适用性
-
-
缺点
-
需要一个开放的结构,方便构件的加入
-
增量模型本身就是一个矛盾的名词
-
-
适用范围
-
进行已有产品升级或新版本开发,增量模型是非常适合的;
-
对完成期限严格要求的产品,可以使用增量模型;
-
对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。
-
9、软件开发方法
-
结构化方法:强调结构的合理性,以及所开发软件的合理性,由此提出了一组提高软件结构合理性的准则,如抽象和分解,模块的独立性,信息屏蔽等,针对不同的开发活动,有结构化分析,结构化设计,结构化编程和结构化测试等
-
分析步骤:
-
进行系统分析,作出反映当前物理模型的数据流图
-
推导出等价的逻辑模型的数据流图
-
设计新的逻辑系统,生成数据词典描述
-
建立人机接口界面,提出可供选择的目标系统的物理模型数据流图
-
确定各种方案的成本和风险等级,据此对各种方案进行分析
-
选择一种方案,建立完整的需求规约
-
-
结构化设计的步骤
-
评审和细化数据流图
-
确定数据流图的类型
-
把数据流图映射到软件模块结构,设计出模块结构的上层
-
基于对数据流图逐步分析到高层模块,设计中下层模块
-
对软件结构进行优化,得到更为合理的软件结构
-
描述模块结构
-
-
面向对象方法:
-
从问题陈述入手,构造系统模型
-
逐层分解成各级子系统
-
10、需求的定义以及分类
-
需求是指明系统必须实现什么的规格说明,它描述系统的行为、特性或属性,是在开发过程中对系统的约束
-
需求的类别:
-
功能需求
-
性能需求
-
可靠性和可用性需求
-
出错处理需求
-
接口需求
-
约束
-
逆向需求
-
将来可能提出的要求
-
11、软件结构的目标
软件设计过程最终目标是产生一个设计规约,该规约包括描述数据,体系结构,接口和构件的设计模型
12、软件设计包括的内容
-
数据设计
-
体系结构设计
-
接口设计
-
过程设计
13、软件设计的任务
分两个阶段完成
-
概要设计,即总体设计,目标是解决“从总体上看,系统怎样实现”这个问题
-
详细设计阶段,即过程设计,根本目标是解决”系统怎样具体实现“这一问题
14、模块独立性的定义
-
概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准,同时也是模块化及信息隐藏概念的直接产物
-
独立性可以从两方面度量,即模块本身的内聚和模块之间的耦合,后者指模块之间相对独立性的度量,模块的独立性越高,则内聚越强,耦合越弱
15、软件程序结构的启发式准则与优化
-
改进软件结构,降低耦合提高内聚,以提高模块的独立性
-
控制模块规模,模块规模应该适中(10-100)(30-60)
-
保持适当的扇入和扇出
-
模块的作用域应该控制在作用域内
-
降低模块接口的复杂程度冗余并提高一致性
-
定义功能可以预测的模块,但要避免过分限制性的模块
-
设计单入口单出口的模块
16、软件设计说明书的定义以及包括的内容
-
定义:是软件设计的最终成果,既可作为软件设计阶段编码人员书写源程序的依据,也可作为软件测试阶段及维护阶段的一个指南
-
包括内容:
-
作用范围
-
参考文档
-
数据设计
-
体系结构设计
-
接口设计
-
模块的过程设计
-
需求与模块的相互对照表
-
测试准备
-
其他
-
17、设计复审
-
对设计文档的复审
18、数据流与事物流
-
数据流:将具有明显的输入、变换和输出的数据流图称为变换型数据流图
-
事物流:具有某个加工将它的输入分离成一串的数据流,形成许多活动路径并根据输入的值选择其中一条路径的特征的数据流图称为事务性数据流图
19、测试概念
-
执行程序或程序片段发现程序中尚存错误的过程
20、软件测试概念
-
用人工或自动方法执行的执行并评价软件产品或其部件的过程,以验证他是否满足规定的要求,或是识别期望结果与实际结果有无差别
21、软件测试的意义
-
当今一个软件产品,如果没有经过测试是不能交付使用的
-
软件测试能够有效的发现软件中的绝大多数错误,是保证软件质量的关键技术之一
-
随着人们对软件测试重要性的认识越来越深。软件测试阶段在整个开发周期所占的比重也日益增加
-
现在有些软件开发机构将研发力量的40%以上投入到软件测试中,对于某些性命攸关的软件,其测试费用甚至高达所有其他软件工程阶段费用的3到5倍
22、软件测试的目的
希望以最低代价,以尽可能的找出软件中潜在的各种错误和缺陷
23、软件测试原则
-
尽早地,不断地进行测试
-
严格的执行测试计划,排除测试的随意性
-
妥善保存测试计划,测试用例,出错统计和最终分析报告,为影虎提供方便
-
一个好的测试用例往往是具有较高的发现至今尚未发现的错误的能力,而不是那些表明程序能够正常工作的测试用例
-
测试中一个很困难的问题是要判定合适可以终止测试
-
避免让程序员测试自己的程序
-
每个阶段的测试用例都必须包含测试输入数据和对应预期输出的描述
-
设计测试用例应当包含合法的输入条件和非法的输出条件
-
全面彻底的检查每一个测试结果
24、测试方法
-
静态测试:审阅(结构化走通)和检查(fagan检查)
-
动态测试:黑盒测试和白盒测试
-
白盒测试:逻辑覆盖喝条件测试
-
逻辑覆盖:语句覆盖、判定覆盖、条件组合覆盖、判定-条件覆盖
-
软件测试过程:单元测试、集成测试、确认测试、系统测试
25、软件维护
-
系统软件交付使用后,为了改正软件运行错误或者因满足新的需求而加入新功能的修改软件的过程
-
类型:
-
纠错性维护
-
适应性维护
-
完善性维护
-
预防性维护
-
-
影响软件维护成本的主要因素
-
系统的规模
-
开发的条件
-
系统的年龄
-
开发的方法和技术
-
其他
-
26、软件可维护性
指维护人员为纠正软件系统出现的错误和缺陷,以及为满足新的要求而理解,修改和完善软件系统的难易程度
27、软件可维护性的质量特性·
-
可理解性
-
可测试性
-
可修改性
-
可靠性
-
可以执行
-
可使用性
-
效率
28、软件可维护性的度量
-
易分析性
-
易修改性
-
稳定性
-
易测试性
-
依从性
29、提高软件可维护性的方法
-
建立明确的软件质量目标和优先级
-
使用提高软件质量的技术和工具
-
进行明确的质量保证审查
-
选择可维护的程序设计语言
-
改进程序的文档
30、软件维护的副作用
-
代码的副作用
-
数据的副作用
-
文档的副作用
40.软件再工程
对既存软件系统进行调查,并将其重构为新形式代码的开发过程
41、软件再工程的方法
-
大爆炸方法
-
增量方法
-
演化方法
42、软件再工程过程
-
库存目录分析
-
文档重构
-
逆向工程
-
代码重构
-
数据重构
-
正向工程
标签:模块,简答题,模型,开发,软件工程,测试,数据流,软件 来源: https://www.cnblogs.com/huangdongdong/p/15796506.html