软工-期中测试简答题
软件危机的具体表现?
1)成本难以估计、成本高。
2)软件开发进度估计不准确,项目延期比比皆是。
3)软件质量得不到保证(功能和性能)。
4)用户对“已完成的”软件系统不满意的现象经常发生。
5)维护非常困难(多样性 、复杂性、 副作用)。
6)软件通常没有适当的文档。
7)软件产品供不应求,跟不上计算机普及速度。
产生软件危机的原因?
(1)软件日益复杂和庞大
(2)软件开发管理困难和复杂
(3)软件开发技术落后
(4)生产方式落后
(5)开发工具落后
(6)软件开发费用不断增加
软件工程的特性?
1. 软件工程关注于大型程序的构造(传统的程序设计技术和工具是支持小型程序设计的)
2. 软件工程的中心课题是控制复杂性(问题分解)
3. 软件经常变化(考虑将来要发生的变化)
4. 开发软件的效率非常重要(寻求更好、更有效的工具)
5. 和谐地合作是开发软件的关键(运用标准和规程)
6. 软件必须有效地支持它的用户(软件要服务于用户)
7. 在软件工程领域中通常是由具有一种文化背景的人替
具有另一种文化背景的人创造产品
软件工程七条基本原理?
1.用分阶段的生命周期计划严格管理
不成功的软件项目中有一半左右是由于计划不周造成的。
2.坚持进行阶段评审
大部分错误是编码之前造成的;错误发现与改正得越早,所付出的代价越低。
3.实行严格的产品控制
不应随意改需求,否则代价很高,若要改变,应采用科学的产品控制技术。
4.采用现代程序设计技术
提高软件开发和维护的效率,提高软件产品的质量。
5.结果应能清楚地审查
规定开发组织的责任和产品标准。
6.开发小组的人员应该少而精
提高软件开发质量和降低通信开销。
7.承认不断改进软件工程实践的必要性
注意不断总结经验,以评价新的软件技术的效果等。
面向对象方法和传统方法学的特点?
传统方法学:
也称为生命周期方法学或结构化范型。
该方法把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务(如瀑布模型作为软件工程的基本模型,把软件开发和运行过程划分为六个阶段:软件计划、需求分析、软件设计、程序编码、软件测试、运行和维护等,强调各阶段的完整性和先后顺序,根据不同阶段的工作特点,运用不同的手段完成各阶段的任务)。
从技术和管理两个方面对阶段开发成果进行检查,通过检查之后该阶段才算结束,否则,必须进行必要的返工,再审查(审查的主要标准是每阶段必须提交高质量的文档资料)。
前一个阶段的完成是开始进行后一个阶段工作的前提和基础,而后阶段任务的完成通常是使用前一阶段提出的解法更进一步具体化,加进更多的实现细节。
采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的应用。
优点:
软件生命周期划分成若干阶段,每个阶段的任务相对独立,比较简单,便于不同人员分工协作,降低软件开发的难度。
在每个阶段采用科学的管理和良好的技术方法,每个阶段都从技术和管理两个方面进行严格审查,保证软件的质量。
提高了软件的可维护性,提高开发成功率。
面向对象方法学:
面向对象方法的基本思想是从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。
面向对象方法学的出发点和基本原则是:尽可能模拟人类所习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识世界、解决问题的方法和过程,即使描述问题的问题域与实现解法的求解域在结构上尽可能一致。
面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的平滑(无缝)过渡。用面向对象方法开发软件的过程是:主动地、多次反复迭代的演化过程。
优点:
符合人们通常的思维方式,提高了软件的可理解性。
重用性好(对象是相对独立的实体 )。
可维护性好。
可行性分析的主要工作?
用最小的代价在尽可能短的时间内确定问题是否能够解决。
(1) 技术可行性
(2) 经济可行性
(3) 操作可行性
(4) 法律可行性等
可行性分析的过程
1. 复查系统规模和目标(分析员访问关键人员,研读相关资料,纠正含糊和不正确的叙述,清晰地描述对目标系统的一切限制和约束)
2. 研究目前正在使用的系统(了解系统能做什么,而不是了解它是怎样做这些工作)
3. 导出新系统的高层逻辑模型(数据流图和数据字典)
4. 进一步定义问题:(分析员要与用户就数据流图和数据字典再次复查问题定义、工程规模和目标)
5. 导出和评价供选择的解法(分析从逻辑模型出发,导出供选择的解法的最简单途径,从技术角度出发考虑解决问题的不同方案)
6. 推荐行动方针(是否继续进行该项目的开发工程,分析员清楚地表明态度,如果值得研究下去,则给出一种最好的解法)
7. 草拟开发计划:(软件开发人员、各种资源的需要情况,使用多久)
8. 书写文档提交审查
需求分析的主要工作?
3.1.1 确定对系统的综合要求
1、功能需求:划分出系统必须完成的所有功能。
2、性能需求:包括响应时间、信息量的速率、主存容量、磁盘容量、安全性等方面内容。
3、可靠性和可用性需求
4、出错处理需求:说明系统对环境错误应该怎样响应。
5、接口需求:用户接口需求、通信接口需求、软件/硬件接口需求。
6、约束:如精度、工具和语言约束、设计约束、应该使用的标准和平台。
7、 逆向需求:说明系统不应该做什么。
8、将来可能提出的要求:以便将来扩充和修改。
3.1.2 分析系统的数据要求:建立数据模型,用图形化的工具描述数据结构(如层次方框图和warnier图)。
3.1.3 导出系统的逻辑模型:数据流图、实体-联系图、状态转换图、数据字典等。
3.1.4 修正系统开发计划:由分析过程准确地估计系统的成本和进度,修正以前制定的开发计划。
3.1.5 撰写需求规格说明书
获取需求的方法有哪些?
3.2.1 访谈
3.2.2 面向数据流自顶向下逐步求精
3.2.3 简易的应用规格说明技术
3.2.4 快速建立软件原型(它应该实现用户看得见的功能,原型要具有快速并容易修改的特点)
模块化的好处?
1、可以降低软件开发的难度;
2、可以使程序结构清晰,增加易读性和易修改性;
3、模块化还有利于提高代码的可重用性及团队合作开发大型软件的可行性。
如何度量模块的独立性?
模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。
模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准。
独立性可以从两个方面来度量:即模块本身的内聚和模块之间的耦合。
过程设计的工具?
程序流程图,
N-S图(盒图),
PAD图(Problem Analysis Diagram 问题分析图),
判定表/判定树,
PDL(Program
Design Language)伪代码
详细设计的主要工作?
为每个模块确定采用的算法;
确定每一模块使用的数据结构;
确定模块接口的细节;
编写过程设计说明书;
设计每一模块的测试用例。
概要设计的主要工作?
总体设计过程通常由两个主要阶段组成:
系统设计阶段:确定系统的具体实现方案;
结构设计阶段:确定软件结构。
1. 设想供选择的方案
在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。
数据流图是总体设计的极好的出发点。
2. 选取合理的方案
通常至少选取低成本、中等成本和高成本的三种方案。
对每个合理的方案分析员都应该准备下列4份资料:系统流程图;组成系统的物理元素清单;成本/效益分析;实现这个系统的进度计划。
3. 推荐最佳方案
综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。
在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段——结构设计。
4.功能分解
为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。
5. 设计软件结构
设计软件的体系结构需要在对需求分析阶段生成的数据流图进一步分析和精化的基础上:
(1)将系统按照功能划分为模块;通常程序中的一个模块完成一个适当的子功能。
(2)确定模块之间的调用关系及其接口;应该把模块组织成良好的层次系统。
(3)对划分的结果进行优化和调整。良好的软件结构设计对详细设计及编码阶段的工作都是至关重要的。
6. 设计数据库
对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。
7. 制定测试计划
在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。
8. 书写文档
应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种:
系统说明:数据流图、成本/效益分析,用层次图等描述的软件构件,用IPO图简要描述各个模块的算法,模块的接口等。
用户手册:根据总体设计阶段的结果,修改在需求阶段产生的初步的用户手册。
测试计划:包括测试策略、测试方案、预期的测试结果,测试进度计划等。
详细的实现计划
数据库设计结果:由数据模型(E-R图)转换成数据库的设计结果。
9. 审查和复审
最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。
---
消除软件危机
消除软件即程序的错误观念和急于求成的心态。开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样(狗窝和高楼大厦)。
消除各自为阵的理念:软件开发是一个组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
使用和推广在实践中总结出来的成功的经验,探索更有效的技术和方法。
开发和使用更好的软件工具。