第一周
本周学习了软件工程的部分要点,以下是第一周的作业内容。
目录
- 简单题
- 解释 PSP 各项指标及技能要求
简单题
1. 软件工程的定义
(1)将系统化、规范化、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。(2)对(1)中所述方法的研究。——IEEE[IEE93]
软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
2. software crisis、COCOMO 模型
阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
software crisis (软件危机)
基本定义
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
六十年代以来,随着计算机应用需求的驱动,系统软件和应用软件有很大的发展,如操作系统,编译系统和大型应用软件等。由于软件生产的复杂性和高成本,使大型软件的生产出现了很大的困难,即出现软件危机。
软件工程正是为克服软件危机而提出的一种概念,并在实践中不断地探索它的原理,技术和方法。在此过程中,人们研究和借鉴了工程学的某些原理和方法,并形成了一门新的学科─软件工程学。
危机实例
1995年,Standish Group研究机构以美国境内8000个软件项目作为调查样本,调查结果显示,有84%软件计划无法于既定时间、经费中完成,超过30%的项目于运行中被取消,项目预算平均超出189%。
-
IBMOS/360
IBMOS/360操作系统被认为是一个典型的案例。到现在为止,它仍然被使用在360系列主机中。这个经历了数十年,极度复杂的软件项目甚至产生了一套不包括在原始设计方案之中的工作系统。OS/360是第一个超大型的软件项目,它使用了1000人左右的程序员。佛瑞德·布鲁克斯在随后他的大作《人月神话》中曾经承认,在他管理这个项目的时候,他犯了一个价值数百万美元的错误。
-
美国银行信托软件系统开发案
美国银行1982年进入信托商业领域,并规划发展信托软件系统。项目原订预算2千万美元,开发时程9个月,预计于1984年12月31日以前完成,后来至1987年3月都未能完成该系统,期间已投入6千万美元。美国银行最终因为此系统不稳定而不得不放弃,并将340亿美元的信托账户转移出去,并失去了6亿美元的信托生意商机。
COCOMO模型
简介
COCOMO模型——常见的软件规模估算方法。代码行分析方法作为一种度量估计方法,在20世纪80和90年代得到非常广泛的发展,在业界开发中有许多种估算工作量和进度的参数模型,其中最著名的就是COCOMO模型,它的最新版本是COCOMO II模型。
在COCOMO模型中,工作量调整因子(Effort Adjustment Factor, EAF)代表多个参数的综合效果,这些参数使得项目可以特征化和根据COCOMO数据库中的项目规格化。每个参数可以定为很低,低,正常,高,很高。每个参数都作为乘数,其值通常在0.5到1.5之间,这些参数的乘积作为成本方程中的系数。
模型
COCOMO用3个不同层次的模型来反映不同程度的复杂性,他们分别为:
-
基本模型 (Basic Model)
是一个静态单变量模型,它用一个以已估算出来的源代码行数 (LOC) 为自变量的函数来计算软件开发工作量。
-
中间模型 (Intermediate Model)
则在用 LOC 为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。
-
详细模型 (Detailed Model)
包括中间 COCOMO 模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。
同时根据不同应用软件的不同应用领域,COCOMO模型划分为如下3种软件应用开发模式:
-
组织模式(Organic Mode)
这种应用开发模式的主要特点是在一个熟悉稳定的环境种进行项目开发,该项目与最近开发的其他项目有很多相似点,项目相对较小,而且并不需要许多创新。
-
嵌入式应用开发模式 (Embedded Mode)
在这种应用开发模式种,项目受到接口要求的限制。接口对整个应用的开发要求非常高,而且要求项目有很大的创新,例如开发一种全新的游戏。
-
中间应用开发模式 (Semidetached Mode)
这时介于组织模式和嵌入式应用开发模式之间的类型。
3. 软件生命周期
软件的生命周期,亦称软件的生存周期。它是按开发软件的规模和复杂程度,从时间上把软件开发的整个过程(从计划开发开始到软件报废为止的整个历史阶段)进行分解,形成相对独立的几个阶段,每个阶段又分解成几个具体的任务,然后按规定顺序依次完成各阶段的任务并规定一套标准的文档作为各个阶段的开发成果,最后生产出高质量的软件。
-
问题的定义及规划
此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
-
需求分析
在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。”唯一不变的是变化本身。”,同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。
-
软件设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。
-
程序编码
此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。
-
软件测试
在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
-
运行维护
软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。
4. KA 划分
按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
- 软件需求
- 软件设计
- 软件工程管理
- 软件工程过程
- 软件工程工具和方法
- 软件质量
5. CMMI 的五个级别
解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
-
Level 1 - 初始级别
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
-
Level 2 - 已管理级
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
-
Level 3 - 已定义级
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
-
Level 4 - 量化管理级
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
-
Level 5 - 优化管理级
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
6. SWEBok 或 CMMI
用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI是软件能力成熟度集成模型,是一套融合多学科、可扩充的产品集合。目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。这一模型依据的想法是:只要集中精力持续努力取建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件开发中的困难。CMMI的主要关注点在于:成本效益、明确重点、过程集中、灵活性。
解释 PSP 各项指标及技能要求
1. 阅读
阅读《现代软件工程》的 PSP: Personal Software Process 章节
2. 表格PSP 2.1
按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)
做什么
按表中描述的过程:
-
计划
估计任务用时。
-
开发
包括项目前期的需求分析,设计文档生成,设计文档审核,制定代码规范,具体设计,具体编码,代码复审,测试这一系列过程。
- 记录时间花费
- 测试报告
- 计算工作量
- 事后总结
- 提出过程改进计划
需要的技能
-
良好的编码能力
把用户的需求用编码方式做出具体实现是一个软件工程师的基本职责,编码能力直接决定了项目开发的效率。
-
自觉的规范意识和团队精神
仅仅依靠个人无法完成大规模的项目,团队合作在软件开发过程中有着越来越重要的意义,编程规范和合作的能力也成为了软件工程师应有的重要技能之一。
-
具有软件工程的概念
软件工程师要运用软件工程的概念,清楚理解从项目需求分析开始到安装调试这个整体过程中的每一个环节,要能够准确把握并胜任各个环节的具体工作。
-
求知欲和进取心
软件行业是一个不断变化不断创新的行业,新的技术层出不穷,这要求软件工程师有较强的学习总结能力,保持对需求和技术的敏感程度,不断提升自己并努力保持保持良好的工作状态。
统计数据的方法
对软件工程产品的测试和评估已经有相关确定的标准,其他需要统计的数据可以采用如下办法:
-
对任务时间估计,时间花费的统计
确定单位时间(如天数,标准工作日或小时)并以此度量时间总量的大小。
-
工作量的计算
可以以时间为基本单位,结合工作人数,能力水平和效率,最终统计出总工作量。