1.概念
1.1软件工程的定义:
(1)将系统化、规范化、可度量的方法应用与软件的开发、运行和维护的过程,即将工程化应用于软件中。
(2)对(1)中所所述方法的研究。
也即:
软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
1.2从“人月神话”中理解software crisis、COCOMO 模型
(1)software crisis:指落后的软件生产方式无法满足软件日益增长的需求,导致软件开发、运行、维护过程中出现一系列严重问题,主要有如下几种问题
- 软件开发的成本日益增长
- 软件开发进度难以控制
- 用户对”已完成“系统不满意的现象经常发生
- 软件产品的质量不可靠
- 软件的可维护程度低
- 软件开发生产率跟不上硬件的发展和人们需求的增长
(2)COCOMO模型:构造性成本模型。它是一种精确、易于使用的,基于模型的成本估算方法。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本。
根据不同层次的复杂性可以分为三个层次:
·基本模型 (Basic Model): 是一个静态单变量模型,它用一个以已估算出来的源代码行数 (LOC) 为自变量的函数来计算软件开发工作量。
·中间模型 (Intermediate Model):则在用 LOC 为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。
·详细模型 (Detailed Model) :包括中间 COCOMO 模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。
1.3软件生命周期
·从时间角度,把整个周期划分为若干个阶段
·划分的原则:各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。受软件规模、性质、种类、开发方法等因素的影响。
·典型划分GB8567(4个时期7个阶段):
1)软件分析时期:问题定义、可行性研究、需求分析
2)软件设计时期:总体设计、详细设计
3) 编码与测试时期:编码、测试
4) 运行与维护时期
1.4按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
- Software requirements
- Software design
- Software construction
- Software engineering models and methods
1.5解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
- Level 1 - Initial 初始级:软件过程是无序的,对过程几乎没有定义,成功与否取决于个人努力,管理是反应式的
- Level 2 - Managed 管理级:开发过建立项目管理过程监督费用、进度和功能特性。制定必要过程纪律,可以重复早些的类似项目成功经理
- Level 3 - Defined 定义级:已经量软件管理和工程两方面的过程文档化、标准化,并综合成组织软件的标准软件过程。所以项目均通过批准的标准软件过程来开发和维护,软件产品的生产在软件开发过程是可见的
- Level 4 - Quantitatively Managed 量化管理级: 分析软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解和控制。管理有一个做出结论的客观依据,管理能够在定量的范围内预测性能
- Level 5 - Optimizing 优化管理级:量化反馈和先进的新思想、新技术促使过程不断改进
1.6用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成,计划把现在所有现存实施的和即将被发展出来的各种能力成熟度模型集成到一个框架中去,为改进一个组织的各种过程提供了一个单一的集成化框架。帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。CMMI主要分为初始级,可管理级,已定义级,量化管理级,优化管理级五个等级。2.解释 PSP 各项指标及技能要求
2.1阅读《现代软件工程》的 PSP: Personal Software Process 章节
2.2按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?
Personal Software Process Stages | 技能要求 |
---|---|
计划 | 熟悉开发流程,有规划能力 |
估计这个任务需要多少时间 | 对整个项目以及各个阶段有大致的时间观 |
开发 | 编程能力 |
需求分析 | 分析用户需求的能力 |
生成设计文档(设计软件的框架) | 软件结构设计能力,表达能力,设计工具的使用 |
设计复审 (和同事审核设计文档) | 协同合作能力 |
代码规范 (为目前的开发制定合适的规范) | 代码规范方面的知识 |
具体设计 | 设计能力 |
具体编码 | 编程能力 |
代码复审 | 审查debug能力 |
测试(自我测试,修改代码,提交修改) | 测试能力 |
报告 | 表达能力 |
测试报告 | 表达能力 |
计算工作量 | 计算能力 |
事后总结, 并提出过程改进计划 | 总结能力,自我反省完善自我的自觉 |
如何统计每项数据:
1.项目/任务有多大?
衡量项目的大小,计算在实际产品中写了多少代码
2.花了多少时间?
计算实际花在项目上的时间。
3.质量如何?
主要是看测试出的不合要求地方,包括性能(不仅仅是bug)
4.是否按时交付?
看每个阶段是否按时完成。