软件工程的定义:
将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。
阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型:
software crisis指的是随着计算机性能的急剧上升以及待解决问题的复杂度的增加,在规定时间内编写出可用并且高效的软件出现了很大的困难。随着软件复杂性的增加,现有的方法是不足以应对,导致许多软件出现了问题。
COCOMO,即constructive cost model,构造性成本模型。它是一种精确、易于使用的,基于模型的成本估算方法。本质上来说,它是一种参数化的项目估算方法,是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本的回归分析公式。
COCOMO模型中,考虑开发环境,软件开发项目的类型可以分为三种:组织型,嵌入型和半独立型
软件生命周期
软件生命周期(Software Development LifeCycle)是指软件的产生直到成熟的全部过程,是人们为开发更好的软件而归纳总结的软件生命周期的典型实践参考。它主要包括6个阶段:
- 可行性分析与计划阶段
- 确定软件开发的总体目标,给出功能、性能、可靠性以及接口等方面的要求,进行完成可行性分析。
- 估计可利用的资源 (硬件、软件、人力等)、成本、效益、开发进度,进行投资-收益分析,制订开发计划。
- 提交可行性分析报告、开发计划等文档。
- 需求分析阶段
- 分析用户提出的要求,给出需求详细定义,确定软件系统的各项功能、性能需求和设计约束,确定对文档编制的要求。
- 提交软件需求说明、软件规格说明、数据要求说明等文档和初步的用户手册。
- 设计阶段
- 概要设计:把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。
- 详细设计:对每个模块所要完成的工作进行具体的描述,提供源程序编写的直接依据。
- 提交结构设计说明、详细设计说明和测试计划初稿等文档。
- 实现阶段
- 完成源程序的编码、编译 (或汇编) 和排错调试,得到没有语法错误的程序清单。程序结构良好、清晰易读,且与设计相一致。
- 编写进度日报、周报和月报 (取决于项目的重要性和规模)。
- 提交用户手册、操作手册等面向用户的文档的编写工作。
- 编制测试计划。
- 测试阶段
- 全面测试目标软件系统,并检查审阅已编制的文档,提交测试分析报告。逐项评价所生产的程序、文档以及开发工作本身,提交项目开发总结报告。
- 在整个开发过程中 (即前五个阶段中),开发集体需要按月编写开发进度月报。
- 运行与维护阶段
- 软件提交给用户后,在运行使用中得到持续维护,根据用户新提出的需求进行必要而且可能的扩充、删改、更新和升级。
- 软件维护包括改正性维护 (发现错误)、适应性维护 (适应运行环境变化) 和完善性维护 (增强功能)。
按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
本课程关注的有:软件需求,软件设计,软件工程管理,软件工程过程,软件工程工具与方法
解释 CMMI 的五个级别
- Level 1——初始级。软件过程是无序甚至是混乱的,自发生产模式。
- Level 2——可管理级。建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
- Level 3——已定义级。已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
- Level 4——量化管理级。分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
- Level 5——优化管理级。过程的量化反馈和先进的新思想、新技术促使过程持续不断改进
用自己语言简述 SWEBok 或 CMMI (约200字)
SWEBok,即SoftWare Engineering Body Of Knowledge,软件工程知识体系,是由多个行业成员和团体合作建立的一种国际标准,用于说明软件工程知识体系指南。 该体系全面地描述了软件工程实践所需的知识,包括软件需求,软件设计,软件构造,软件测试,软件维护,软件配置管理,软件工程管理,软件工程过程,软件工程工具和方法,软件质量等。软件工程知识体系从2004年建立开始,经过了数次的版本迭代,其体系下知识领域也在不断细化与扩展。 知识体系在软件工程领域内定义了许多知识领域,到目前为止的版本一共定义了15个KAs。同时知识体系内也有已提及但未定义到的相关领域,包括计算机工程、系统工程、项目管理、数学等专业领域。
解释 PSP 各项指标及技能要求
要做什么 | 需要什么技能 | 如何统计数据 |
估计任务时间 | 对任务的难易程度有所认知 | 利用经验估计 |
需求分析 (包括学习新技术) | 需求分析能力 | 自己去调研,多去询问 |
生成设计文档 | 写作能力 | |
设计复审 (和同事审核设计文档) | 谨慎的审查力 | |
代码规范 (为目前的开发制定合适的规范) | 熟悉代码标准规范 | |
具体设计 | 掌握整体框架的能力 | |
具体编码 | 熟练运用编程语言、代码能力 | 以合格代码量为基准 |
代码复审 | 细心调试的能力 | |
测试(自我测试,修改代码,提交修改) | 熟悉测试工具的使用 | |
测试报告 | 良好的写文书能力 | |
计算工作量 | 准确记录并收集所需数据 | 在开发和测试过程中注意记录工作量,以时间或者代码量为基准 |
事后总结, 并提出过程改进计划 | 总结反省能力 |