1、简单题
- 软件工程的定义。
(1) 将系统化、规范化、可度量的方法应用与软件的开发、运行和维护的过程,即将工程化应用于软件中。
(2) 对(1)中所述方法的研究。——IEEE[IEE93]
- 阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
软件危机(Software Crisis)是早期计算机科学的一个术语,是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短、甚至夭折。六十年代以来,随着计算机应用需求的驱动,系统软件和应用软件有很大的发展,如操作系统,编译系统和大型应用软件等。由于软件生产的复杂性和高成本,使大型软件的生产出现了很大的困难,即出现软件危机。《人月神话》作者认为大型软件开发的成本随着规模指数性增加,在缺乏一定的方法论的情况下开发大型软件可能会导致难以预料的后果,可能导致软件极端复杂,难以按时交付,bug百出等情况,而加入更多的人力往往是火上浇油,非但不能使开发难度下降,还可能会让进度变得更加延后。
构造性成本模型(Constructive Cost Model, COCOMO)是一种精确、易于使用的,基于模型的成本估算方法,最早由勃姆 (Boehm) 于 1981 年提出。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本(类似于居住面积作为参数计算的整体的住房成本)。
- 软件生命周期。
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
软件生命周期存在多种模型,如瀑布模型,快速原型模型,螺旋模型等。
- 按照SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
软件需求 Software requirements
软件设计 Software design
软件质量 Software quality
软件工程工具与方法 Software engineering models and methods
- 解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
1. 初始级Level 1 - Initial
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
2.可管理级 Level 2 - Managed
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
3.已定义级 Level 3 - Defined
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
4. 量化管理级Level 4 - Quantitatively Managed
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
5. 优化管理级Level 5 - Optimizing
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
- 用自己语言简述 SWEBok 或 CMMI (约200字)
SWEBok是一个国际标准,它将软件工程所需的知识分成了多个KA(即知识领域),提供了基本的引导,描述在软件工程中需要掌握的知识主体。以下几个KA与我们的课程相关联:
软件需求 Software requirements,探知用户需要软件去做什么,有什么需求要得到满足。
软件设计 Software design,考虑软件的健壮性,易用性,正确性等要求。
软件质量 Software quality,考虑软件是否满足用户的功能需求和性能需求。
软件工程工具与方法 Software engineering models and methods,考虑软件工程中采用的模型和方法论,用什么样的思想知道软件开发。
SWEBok为软件工程人员刻画了一副知识的蓝图,告诉开发人员他们需要学习那些方面的知识,哪里还有欠缺,对新手开发人员有指导意义。同时SWEBok作为一个国际标准,并非一成不变,现在SWEBok已经是version 3,因为软件工程本身也是一个知识飞速增加的领域,SWEBok的KA也在增加。
2、解释 PSP 各项指标及技能要求:
阅读《现代软件工程》的 PSP: Personal Software Process 章节。
http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)
1、待做事项
计划:估计这个任务需要多少时间
开发:分析需求、生成设计文档、设计复审(和同事审核设计文档)、代码规范(为目前的开发制定合适的规范)、具体设计、具体编码、代码复审、测试(包括自我测试,修改代码,提交修改)
记录时间花费
测试报告
计算工作量
事后总结
提出过程改进计划2、所需技能
时间管理和自我管理能力
表达和交流的能力
编程测试的能力
与人合作的能力
把任务按质按量完成的执行力3、统计方式
拿到任务后,开始将任务分成多个阶段,确定每个阶段的工作任务和结束指标;
当一个阶段的工作开始,就记录下当下的时间,并在完成之后,记录这个阶段总共花费的时间,然后开始下一个阶段的任务和计时;
当所有任务完成之后,就能将之前记录的结果合起来做统计分析。