简答题
软件工程的定义
软件工程:(1)将系统化、规范化、可度量的方法应用与软件的开发、运行和维护的过程,即将工程化应用于软件中。(2)对(1)中所述方法的研究。——IEEE[IEE93]
软件工程:是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
software crisis:软件危机,20 世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。
60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发 。
COCOMO模型:构造性成本模型(Constructive Cost Model)是由巴里·勃姆提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。
构造性成本模型由三个不断深入和详细的层次组成。第一层,“基本COCOMO”,适用对软件开发进行快速、早期地对重要的方面进行粗略的成本估计,但因其缺少不同的项目属性(“成本驱动者”)的因素,所以准确性有一定的局限性。“中级COCOMO”中考虑进了这些成本驱动者。“详细COCOMO”加入了对不同软件开发阶段影响的考量。
软件生命周期
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。但随着新的面向对象的设计方法和技术的成熟,软件生命周期设计方法的指导意义正在逐步减少。 生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。软件工程要求每一周期工作的开始只能必须是建立在前一个周期结果“正确”前提上的延续;因此,每一周期都是按“活动 ── 结果 ── 审核 ── 再活动 ── 直至结果正确”循环往复进展的。
按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
- 软件需求 Software Requirements
- 软件设计 Software Design
- 软件构造 Software Construction
- 软件工程过程 Software Engineering Process
解释 CMMI 的五个级别。
- Level 1 - Initial:无序,自发生产模式。
- Level 2 - Managed. Processes characterized for projects and is often reactive
- Level 3 - Defined. Processes characterized for the organization and is proactive.
- Level 4 - Quantitatively Managed. Processes measured and controlled.
- Level 5 - Optimizing. Focus on process improvement.
用自己语言简述 SWEBok 或 CMMI
CMMI:Capability Maturity Model Integration,即能力成熟度模型集成。CMMI可以看作是成功企业如何做好软件的一些习惯、做法、准则等的集合,是如何做好软件的最佳实践的集合。
CMMI依据所有软件组织的软件能力成熟度划分为5个等级:(1)初始级;(2)受管理级;(3)已定义级;(4)定量管理级和(5)持续优化级。数字越大,成熟度越高,高成熟度等级代表比较强的综合软件能力。
CMMI的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其所依据的想法是:只要集中精力持续努力去建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件开发中的困难。CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。
解释PSP各项指标及技能要求
一个软件工程师在接到一个任务之后要做
- 计划
- 估计这个任务需要多少时间
- 开发
- 需求分析(包括学习新技术)
- 生成设计文档
- 设计复审(和同事审核设计文档)
- 代码规范(为目前的开发制定合适的规范)
- 具体设计
- 具体代码
- 代码复审
- 测试(自我测试、修改代码、提交修改)
- 报告
- 测试报告
- 计算工作量
- 事后总结,并提出过程改进计划
需要的技能
- 学习能力,分析、解决问题的能力,总结的能力
- 团队精神和协作能力
- 需求理解能力
- 复用性,模块化思维能力
- 交流和表达能力
- 主动性
如何统计每项数据
- 将任务进行分解,确定各阶段的任务目标。
- 根据实际情况,记录达成各阶段任务目标的所花费的时间。