简单题
软件工程的定义
将系统化、规范化、可度量的方法应用与软件的开发、运行和维护的过程,即将工程化应用于软件中。
研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
软件危机是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短甚至夭折。软件危机的根源是软件的大量需求与软件生产力效率之间的矛盾和软件系统的复杂性与软件开发方法之间的矛盾。软件危机的原因主要是用户需求不明确、软件开发过程缺乏正确的理论指导、软件开发的规模越来越大且软件开发的复杂度越来越高。软件工程的表现形式有项目运行超出预算、项目运行超过时间、软件质量低落、软件通常不匹配需求和项目无法管理且代码难以维护。软件危机的解决途径主要是正确认识计算机软件的内涵、充分认识到软件开发是一种组织良好、管理严密、协同配合的工程活动、采用成熟的软件开发技术和方法、开发和使用适当的软件工具。
构造性成本模型是由巴里·勃姆(Barry Boehm)提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。COCOMO模型是最早的软件开发模型。相比于早期自发的软件开发过程,COCOMO模型为多开发者的开发模式提供了指导。具体来说,它在开发前通过合理预测(代码量,人均工作量,开发需求人数等)来合理分配工作,从而实现了多人的通力合作的目的,避免了工程进行到一半时发现人手不足而增加人手,培养新员工的问题,大大提升了软件开发效率。
软件生命周期
在软件的开发过程中,各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。受软件规模、性质、种类、开发方法等因素的影响。典型划分GB8567(4个时期7个阶段):
软件分析时期:问题定义、可行性研究、需求分析
软件设计时期:总体设计、详细设计
编码与测试时期:编码、测试
运行与维护时期
按照SWEBok的KA划分,本课程关注哪些KA或知识领域?
ACM与IEEE Computer Society联合修定的SWEBOK(Software Engineering Body of Knowledge)提到,软件工程领域中的核心知识包括:
软件需求(Software requirements)
软件设计(Software design)
软件建构(Software construction)
软件测试(Software test)
软件维护与更新(Software maintenance)
软件构型管理(Software Configuration Management, SCM)
软件工程管理(Software Engineering Management)
软件开发过程(Software Development Process)
软件工程工具与方法(Software Engineering Tools and methods)
软件质量(Software Quality)
本课程关注软件设计、软件测试、软件构型管理、软件工程管理、软件开发过程、软件质量等核心知识。
解释CMMI的五个级别。例如:Level 1-Initial:无序,自发生产模式。
初始级 软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
可管理级 建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
已定义级 已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
量化管理级 分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
优化管理级 过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
用自己语言简述SWEBok或CMMI(约200字)
CMMI( Capability Maturity Model Integration)的本质是软件管理工程的一个部分。软件过程改善是当前软件管理工程的核心问题, 50多年来计算的发展使人们认识到要高效率、高质量和低成本地开发软件,必须改善软件生产过程。基於模型的过程改进是指用采用能力模型来指导组织的过程改进,使之过程能力稳定的进行改善,该组织也能变得更加成熟。
然而,软件组织形成一套完整而成熟的软件过程不是一蹴而就的事情,需要经历一系列的成熟度。软件组织首先要进行差异分析,评定自己比较接近哪一个成熟度,然后再根据自身的情况来决定要采取哪些改进活动,来更有效地改进自己的软件过程。这就对软件过程的评定提出了一个客观的标准。美国卡内基梅隆大学软件工程学院於1987年研究成功的SW-CMM(Capability Maturity Model for Software)就是这样的一个理论模型,其目的在於帮助软件组织改善软件生产流程,以探索一个保证软件产品质量、缩短开发周期、提高工作效率的软件工程模式与标准规范。
CMMI目标: 1. 为提高组织过程和管理产品开发、发布和维护能力的提供保障。 2. 帮助组织客观评价自身能力成熟度和过程域能力,为过程改进建立优先级以及执行过程改进。
CMMI的方法: 1 决定哪个CMMI模型等级最适合组织过程改进需要。 2 选择模型的表示法是连续式还是阶段式。 3 决定组织需要用到的模型中的知识领域。 4 类似CMM提出的过程改进6步,集成化过程改进分成:开始集成过程改进,建造集成改善平台,集成传统过程,启动新过程,进行改 进评估。
解释 PSP 各项指标及技能要求:
按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)
计划
估计这个任务需要多少时间
计划的数据,将以文档的方式展现,因此在进行数据统计时,只需要将具体文档的页数和花费时间等进行统计即可
开发
分析需求、生成设计文档、设计复审 (和同事审核设计文档)、代码规范 (为目前的开发制定合适的规范)、具体设计、具体编码、代码复审、测试(包括自我测试,修改代码,提交修改)
开发阶段的主要产出是代码,因此需要考虑代码量,以及修改的次数,解决的代码问题数目,在编码上耗费的时间以及完成的模块数和模块大小等因素来进行数据的统计;涉及到文档的内容,可以考虑用文档的质量和数量进行评估和统计
记录时间花费
测试报告
计算工作量
事后总结
提出过程改进计划
统计方法:按照每个部分所花费的小时数进行统计计算。