系统分析与设计 Homework(lesson 1)
1. 简答题
(1) 软件工程的定义。
答:软件工程是一门研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
(2) 阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
答:(1)software crisis(软件危机)是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
(2)COCOMO模型(构造性成本模型),是一种精确、易于使用的,基于模型的成本估算方法。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本
(3) 软件生命周期。
答:软件生命周期是软件的产生直到报废或停止使用的生命周期。典型划分GB8567分为4个时期7个阶段:
- 软件分析时期:问题定义、可行性研究、需求分析
- 软件设计时期:总体设计、详细设计
- 编码与测试时期:编码、测试
- 运行与维护时期
每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
(4) 按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
答:SWEBok 的 KA 的知识领域分为
- 软件需求(Software Requirements)
- 软件设计(Software Design)
- 软件构造(Software Construction)
- 软件测试(Software Testing)
- 软件维护(Software Maintenance)
- 软件配置管理(Software Configuration Management)
- 软件工程管理(Software Engineering Management)
- 软件工程过程(Software Engineering Process)
- 软件工程工具和方法(Software Engineering Tools and Methods)
- 软件质量(Software Quality)
本课程(系统设计与分析)关注的知识领域是软件需求、软件设计、软件构造、软件工程工具和方法。
(5) 解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
答:CMMI(Capability Maturity Model Integration/能力成熟度模型集成)的五个级别:
1.初始级(Initial)
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
2.可管理级(Managed)
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
3.已定义级(Defined)
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
4.量化管理级(Quantitatively Managed)
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
5.优化管理级(Optimizing)
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
(6) 用自己语言简述 SWEBok 或 CMMI (约200字)
答:CMMI是一个过程改进方法,其目的是帮助组织改进他们的绩效。在软件工程和组织发展中的CMMI是一个过程改进方法,它向组织提供用于有效的过程改进的基本元素。按照软件工程研究所(SEI)说法,CMMI帮助“集成传统独立的组织功能,设置过程改进目标和优先级,为质量过程提供指引,并为评价当前过程提供一个参考点”。
CMMI目前致力于三个感兴趣的区域:产品和服务开发,服务创建、管理和交付以及产品和服务采购。
2. 解释 PSP 各项指标及技能要求:
阅读《现代软件工程》的 PSP: Personal Software Process 章节。http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html
按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)
答:
PSP2.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 | 提出过程改进计划 |
软件工程师需要完成的工作:计划、 代码规范(为目前的开发制定合适的规范)、具体设计、具体编码、代码复审、测试(包括自我测试,修改代码,提交修改)、测试报告、提出过程改进计划
软件工程师所需的技能:编码,测试
统计数据的方法:
- 计划:估计任务需要多少时间,通过文档以及日历安排大致的规划,尽可能详细安排(日程表)。
- 记录时间花费&计算工作量:需要项目中的每个人每周写开发日记,记录自己本周的工作时间和工作量,然后从中记录时间的花费,记录不同开发过程所占的比例,并且计算每个人在项目中的工作百分比用来衡量工作量。