简单题
- 软件工程的定义
Software engineering is
“(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software,” and
– IEEE Standard 610-1990 - 阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机是落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维 护过程中出现一系列严重问题的现象。这些严重的问题阻碍着软件生产的规模化、商品化以及生产效率,让软件的开发和生产成为制约软件产业发展的“瓶径”。
COCOMO,英文全称为constructive cost model,中文为构造性成本模型。它是一种精确、易于使用的,基于模型的成本估算方法,最早由勃姆 (Boehm) 于 1981 年提出。从本质上说是一种参数化的项目估算方法,参数建模是把下那个目的某些特征作为参数,通过建立一个数字模型预测项目成本(类似于居住面积作为参数计算的整体的住房成本)。在COCOMO模型中,工作量调整因子(Effort Adjustment Factor, EAF)代表多个参数的综合效果,这些参数使得项目可以特征化和根据COCOMO数据库中的项目规格化。每个参数可以定位很低,低,正常,高,很高。每个参数都作为乘数,其值通常在0.5到1.5之间,这些参数的乘积作为成本方程中的系数。 - 软件生命周期
软件的生命周期,亦称软件的生存周期。它是按开发软件的规模和复杂程度,从时间上把软件开发的整个过程(从计划开发开始到软件报废为止的整个历史阶段)进行分解,形成相对独立的几个阶段,每个阶段又分解成几个具体的任务,然后按规定顺序依次完成各阶段的任务并规定一套标准的文档作为各个阶段的开发成果,最后生产出高质量的软件。
软件生命周期六个阶段:
1、问题的定义及规划
2、需求分析
3、软件设计
4、程序编码
5、软件测试
6、运行维护 - 按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
软件需求分析Software requirements
软件设计Software design
软件开发过程Software construction
软件工程工具和方法software engineering tools and - 解释 CMMI 的五个级别
1.初始级Level 1 - Initial:
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
2.可管理级 Level 2 - Managed:
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
3.已定义级 Level 3 - Defined:
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
4.量化管理级Level 4 - Quantitatively Managed:
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
5.优化管理级Level 5 - Optimizing:
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。 - 用自己语言简述CMMI
CMMI全称是Capability Maturity Model Integration,能力成熟度模型集成,它的本质是软件管理工程的一部分。我认为CMMI就像是一个指南一样指导企业如何做好软件的做法、准则等的集合。CMMI通过不同方面对企业进行评级,相应的,企业也可以根据CMMI来进行有效的改善,改进质量和效率。在模型中,所有软件组织的软件能力成熟度划分为5个等级(1-5),数字越大,成熟度越高,高成熟度等级代表比较强的综合软件能力,每个阶段都是下一阶段改进的基础。企业可以根据CMMI不断改进,CMMI帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。
解释 PSP 各项指标及技能要求
- 阅读《现代软件工程》的 PSP: Personal Software Process 章节。
- 按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?
计划
· 估计这个任务需要多少时间
开发
· 分析需求
· 生成设计文档
· 设计复审 (和同事审核设计文档)
· 代码规范 (为目前的开发制定合适的规范)
· 具体设计
· 具体编码
· 代码复审
· 测试(包括自我测试,修改代码,提交修改)
记录时间花费
测试报告
计算工作量
事后总结
提出过程改进计划
一个软件工程师接到任务后应该按照PSP2.1的顺序来完成工作。所以作为一个软件工程师,要有的不仅仅是编程技能,时间规划技能也很必要,当然也要有一定的分析能力,对需求进行分析得到具体的要实现的内容,文字表达能力也要有,这样自己的文档才可以被人简单理解,编码前也要制定合适规范,有利于同组人员合作编程,要有自我测试的能力,从而可以改善自己的代码,善于总结也是一种必须技能,在完成工作后总结反思有利于提高自己的水平。
我打算在最初就做一个计划,将工作划分为不同的阶段,然后尽量每次作业按照计划执行。每次工作时都记录相应阶段的时间,将各个阶段所用时间汇总,最后完成作业后再进行总结分析。