1. 简单题
- 软件工程的定义
软件工程的定义包为将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。
- 阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型
软件危机(Software Crisis)是早期计算机科学的一个术语,是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短、甚至夭折。软件开发是一项高难度、高风险的活动,由于它的高失败率,故有所谓“软件危机”之说。软件危机的本源是复杂、期望和改变。这个术语用来描述正急遽增加之电脑的力量带来的冲击和可能要处理的问题的复杂性。从本质上来说,它谈到了写出正确、可理解、可验证的计算机程序的困难。
在《人月神话》中作者谈论到大型软件开发的成本随着规模指数性增加,在缺乏一定的方法论的情况下开发大型软件可能会导致难以预料的后果,可能导致软件极端复杂,难以按时交付,bug百出等情况,而加入更多的人力往往是火上浇油,非但不能使开发难度下降,还可能会让进度变得更加延后。
构造性成本模型(Constructive Cost Model)最初发表于1981年巴里·勃姆《软件工程经济学》一书中,做为一种在软件项中估算工作量、成本以及时间表的模型。构造性成本模型由三个不断深入和详细的层次组成。第一层,“基本COCOMO”,适用对软件开发进行快速、早期地对重要的方面进行粗略的成本估计,但因其缺少不同的项目属性(“成本驱动者”)的因素,所以准确性有一定的局限性。“中级COCOMO”中考虑进了这些成本驱动者。“详细COCOMO”加入了对不同软件开发阶段影响的考量。
- 软件生命周期
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
软件生命周期存在多种模型,如瀑布模型,快速原型模型,螺旋模型等。
按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
- Software requirements
- Software design
- Software construction
- Software engineering models and methods
- 按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
SWEBok Version3在软件工程方面有15个KA,2004版的SWEBok在软件工程方面有10个KA,本课程关注的KA:软件需求、软件设计
- 解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
Level2 - Managed:具有项目管理规范,能重复之前类似项目的成功经验
Level3 - Defined:能自定义管理体系与流程
Level4 - Quantitatively Managed:量化控制管理
Level5 - Optimizing:优化
用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI:软件能力成熟度集成模型,1994年由美国国防部和卡内基梅隆大学下的软件工程研究中心共同开发和研制的,计划把现在所有现存实施的和即将被发展出来的各种能力成熟度模型集成到一个框架中去,是软件行业十分必要的一个资质认证,为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时的、不超出预算的开发出高质量的软件。
2. 解释 PSP 各项指标及技能要求:
- 阅读《现代软件工程》的 PSP: Personal Software Process 章节。
按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)
Planning
- Estimate
- Development
- Analysis
- Design Spec
- Design Review
- Coding Standard
- Design
- Coding
- Code Review
- Test
- Record Time Spent
- Test Report
- Size Measurement
- Postmortem
Process Improvement Plan
即:计划
- 估计这个任务需要多少时间
- 开发
- 分析需求
- 生成设计文档
- 设计复审 (和同事审核设计文档)
- 代码规范 (为目前的开发制定合适的规范)
- 具体设计
- 具体编码
- 代码复审
- 测试(包括自我测试,修改代码,提交修改)
- 记录时间花费
- 测试报告
- 计算工作量
- 事后总结
- 提出过程改进计划
统计方法:按照每个部分所花费的小时数进行统计计算。