1.简答题
软件工程的定义
软件工程是研究将系统化的、规范的、可度量的方法应用于软件工程的开发、运行和维护,即将工程化方法应用于软件的一门学科
解释 software crisis、COCOMO 模型
software crisis
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
来自 百度百科
在上世纪60年代之前,计算机刚刚投入使用,那时候软件设计往往只是为了一个特定的功能,采用密切依赖于计算的机器代码或汇编语言,软件的规模比较小,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本是个人设计、个人使用、个人操作。
进入60年代以后,随着高性能的计算机出现,大型软件的开发需求越来越多,然后缺少系统性的工程方法,导致软件开发进度难以预测、成本难以控制、需求难以满足,正是在这样的背景下,1968年,NATO提出了软件危机这一概念。
COCOMO模型
COCOMO 是 constructive cost model,中文译为构造性成本模型。它是一种精确、易于使用的,基于模型的成本估算方法,最早由勃姆 (Boehm) 于 1981 年提出。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本。
COCOMO通过3个不同层次的模型来反映不同程度的复杂性:
- 基本模型
是一个静态单变量函数,通过已估算出来的源代码行数为自变量的函数来计算软件开发工作量 - 中间模型
用 LOC 为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算 - 详细模型
包括中间 COCOMO 模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响
软件生命周期
从概念提出的那一刻开始,软件产品就进入了软件生命周期。在经历需求、分析、设计、实现、部署后,软件将被使用并进入维护阶段,直到最后由于缺少维护费用而逐渐消亡。这样的一个过程,称为“生命周期模型”(Life Cycle Model)。
软件生命周期包含以下6个阶段:
可行性分析与计划阶段
确定软件开发的总体目标,给出功能、性能、可靠性以及接口 等方面的要求,进行完成可行性分析
估计可利用的资源 (硬件、软件、人力等)、成本、效益、开发
进度,进行投资-收益分析,制订开发计划
提交可行性分析报告、开发计划等文档
需求分析阶段
- 分析用户提出的要求,给出需求详细定义,确定软件系统的各 项功能、性能需求和设计约束,确定对文档编制的要求
设计阶段
- 提交结构设计说明、详细设计说明和测试计划初稿等文档
实现阶段
- 完成源程序的编码、编译 (或汇编) 和排错调试,得到没有语法 错误的程序清单。程序结构良好、清晰易读,且与设计相一致
测试阶段
- 全面测试目标软件系统,并检查审阅已编制的文档,提交测试 分析报告。逐项评价所生产的程序、文档以及开发工作本身, 提交项目开发总结报告
运行与维护阶段
- 软件提交给用户后,在运行使用中得到持续维护,根据用户新 提出的需求进行必要而且可能的扩充、删改、更新和升级
软件生命周期模型
描述的是软件生存期各个阶段的联系,跨越整个软件生存期的软件开发、运行和维护所实施的全部过程、活动和任务的结构框架。常用的软件生命周期模型有以下:
- 瀑布模型 (Waterfall Model)
- V-W 模型 (V Model and W Model)
- 快速应用开发模型 (RAD Model)
- 原型模型 (Prototype Model)
- 增量/演化/迭代模型 (Incremental Model)
- 螺旋模型 (Spiral Model)
- 喷泉模型 (Fountain Model, Object-Oriented Model)
- 基于构件的开发模型 (CBSD Model)
- 等等。。
按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
- Software Requirements
- Software design
- Software construction
- Software enginerring management
- Software enginerring process
- Software engineering models and methods
解释 CMMI 的五个级别
- Level 1 - Initial:无序,自发生产模式
- Level 2 - Managed: 可管理级,建立了基本的项目管理过程来追踪费用、进度和功能特性。
- Level 3 - Defined: 已定义级,已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程
- Level 4 - Quantitatively Managed:量化管理级,分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。
- Level 5 - Optimizing:优化管理级,专注于提升流程的优化
用自己的语言简述SWEBok或CMMI
SWEBok是国际标准ISO/IEC TR 19759:2005,这项标准制定了一个通用的软件工程知识体系。一个职业在核心知识体系上达成一致,是所有学科的关键里程碑,IEEE认为这个知识体系是软件工程向职业状态演化的关键。这个知识体系囊括了软件工程涉及到的15个知识领域,包含需求分析、软件设计、软件测试、软件维护、软件质量评估等方面。在我看来,这更像是软件工程内的一套完善的方法论,为企业以及学生指引了方向,也对分工的细化提供了指导。
2.解释PSP各项指标及技能要求
一个软件工程师在接到一个任务之后要做什么:
- 计划
估计这个任务需要多少时间 - 开发
- 需求分析
- 生成设计文档
- 设计复审
- 确定代码规范
- 具体设计
- 具体编码
- 代码复审
- 测试(自我测试、修改代码、提交修改)
- 报告
- 测试报告
- 计算工作量
- 事后总结,并提出过程改进方案
需要哪些技能:
- 对具体技术的掌握、动手能力
- 对问题领域的知识和经验的积累
- 通用的软件设计思想、软件工程的提高
- 职业技能
自我管理的能力; 表达和交流的能力; 与人合作的能力; 把任务按质按量完成的执行力; - 软件测试相关知识
将上面的内容整理成表格:
阶段 | 具体的工作 | 需要的技能 |
---|---|---|
计划阶段 | 估计这个任务需要多少时间 | 对问题领域的知识和经验的积累、通用的软件设计思想、软件工程的提高 |
开发阶段 | 需求分析 | 对市场情况的了解,与客户的沟通能力,调研能力 |
生成设计方案 | 系统分析的能力 | |
设计复审 | 系统分析的能力 | |
确定代码规范 | 对具体技术的掌握、对问题领域的知识和经验 | |
具体设计 | UML、系统分析的能力、设计模式等 | |
具体编码 | 对具体技术的掌握、团队协作能力 | |
代码复审 | 对具体技术的掌握、逻辑思维能力 | |
测试 | 软件测试的相关知识、对软件测试工具的掌握 | |
报告阶段 | 测试报告 | 写作能力、对软件测试的了解 |
计算工作量 | 管理能力、经验 | |
事后总结 |
我打算如何统计每项数据:
PSP2.1 链接中统计方法是每项工作耗时所占的比例。不过我认为除了时间以外,还需要具体考虑完成某项工作时所耗费的体力,比如一小时轻松的工作与一小时紧张的工作就不能划上等号。