软件工程部分要点
这里的文章除了特别说明为 [转载] 之外,均为本人原创,转载请说明出处。
1
1.1软件工程的定义。
(1)将系统化的,规范化的,可度量的方法应用于软件的开发,运行和维护的过程,也就是将工程化应用于软件中。(2)对(1)所述方法的研究。软件工程是指导计算机软件开发和维护的工程学科。
1.2阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
Software Crisis 六十年代以来,随着计算机应用需求的驱动,系统软件和应用软件发展迅速,如操作系统,编译系统和大型应用软件等。由于软件生产的复杂性和高成本,大型软件的生产出现了很大的困难,即出现软件危机。主要表现为:软件开发进度难以预测,软件开发成本难以控制,用户对产品功能难以满足,软件产品质量无法保证,软件产品难以维护,软件缺少适当的文件资料。
COCOMO 模型 Constructive Cost Model构造性成本模型,一种精确的,易于使用的,基于模型的成本估算方法,从本质上说是一种参数化的软件规模估算方法。 在该模型中使用的基本量有以下几个: (1)DSI( 源指令条数 ) ,定义为代码行数,包括除注释行以外的全部代码。 (2)MM( 度量单位为人月 ) 表示开发工作量。 (3)TDEV( 度量单位为月 ) 表示开发进度,由工作量决定。 (4)COCOMO 模型重点考虑 15 种影响软件工作量的因素,并通过定义乘法因子,从而准确、合理地估算软件的工作量。
COCOMO用3个不同层次的模型来反映不同程度的复杂性,他们分别为: 基本模型 (Basic Model)。是一个静态单变量模型,它用一个以已估算出来的源代码行数(LOC)为自变量的函数来计算软件开发工作量。 中间模型 (Intermediate Model)。则在用 LOC 为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。 详细模型 (Detailed Model)包括中间 COCOMO 模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。 通过基础COCOMO的计算可以得出每个开发者需要投入的时间,整个项目的开发时间以及需要的人数,所需要的输入是软件的大小(以代码的行数(千行)为单位,记做SLOC)。
1.3软件生命周期。
软件生命周期是软件的产生直到报废或停止使用的生命周期,从时间角度,把整个周期划分为若干个阶段。划分的原则:各阶段的任务彼此间尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。受软件规模,性质,种类,开发方法等因素的影响。软件生命周期典型划分:GB8567,4个时期7个阶段。 (1)软件分析时期:问题定义,可行性研究,需求分析; (2)软件设计时期:总体设计,详细设计; (3)编码与测试时期:编码,测试; (4)运行与维护时期。
1.4按照 SWEBOK 的 KA划分,本课程关注哪些 KA 或知识领域?
根据已发布的SWEBOK版本3所定义的KA划分,由于本课程培养具有客户思维的软件工程设计师,因此本课程关注以下KA:软件需求,软件设计,软件构建,软件工程管理,软件工程过程,软件工程模型和方法。
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(能力成熟度模型集成)描述了各个进程的一些关键元素,描述了那些成功实施了过程改进的组织的特性,提供了一个可供公众使用的准则。CMMI具有五个等级:初始级,管理级,定义级,量化管理级,以及优化级,可以说是一个从无序的,不成熟的活动向成熟的,规范的过程进化的指南。 CMMI的每个等级都由相应的过程域PA组成,这些过程域共同形成一种软件过程能力。CMMI是一个评估当前实践的标准,不局限于单一学科,用于组织的评估而不是认证,一个组织能通过CMMI来进行评估,从而有针对性地完善自己的开发过程。
2、解释 PSP 各项指标及技能要求:
- 阅读《现代软件工程》的 PSP: Personal Software Process 章节。
- 按表格 PSP 2.1,了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)
1.大块估算:先针对该任务的大过程大方向先进行一个占比的大致估算,如PSP中的计划,开发,报告这三大块; 2.过程细分:列出该过程的具体任务,根据每个细分任务的大致时间 来估计该过程所需时间; 3.类比法:如做过类似的项目,类比以前的经验估计此次任务的时间; 4.考虑风险:考虑这个项目的风险,列出可能会遇到的问题,在某些过程增加缓冲时间和缓冲任务; 5.平均法:通过最佳和最差方案来估计时间; 6.其他因素:对这个任务的了解程度,开发人员的技术水平和严谨程度,对这个程序的擅长程度,这段时间的个人状态。