1.简单题
软件工程的定义
1.将系统化、规范化、可度量的方法应用与软件的开发、运行、和维护的过程,即将工程化应用于软件中。
2.建立和使用合理的工程原理,以便经济地获得可靠的并且能在机器上高效运行的软件。
3.一个涉及软件生产各个方面的学科。阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
1.software crisis: 软件危机是在计算科学的早期阶段使用的术语,是指在软件开发及维护过程中遇到的一系列严重问题,这些问题皆可能导致产品的寿命缩短,甚至夭折。软件危机的出现是由计算机能力的快速增长以及无法解决的问题的复杂性引起的,许多软件方面的问题随着软件复杂性的增加以及现有的解决方法不够充分而涌现出来。此外,大型软件开发的成本随着规模指数性增加,在缺乏一定的方法论的情况下开发大型软件可能会导致难以预料的后果,可能导致软件极端复杂,难以按时交付,bug百出等情况,而加入更多的人力往往是火上浇油,非但不能使开发难度下降,还可能会让进度变得更加延后。
2.COCOMO模型: 即构造性成本模型。它是一种精确的,易于使用的,基于模型的成本估计方法,最早由勃母于1981年提出。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本(类似于居住面积作为参数计算的整体的住房成本)。软件生命周期
软件生命周期是指软件的产生直到成熟的全部过程,是人们为开发更好的软件而归纳总结的软件生命周期的典型实践参考。它主要包括以下阶段:
1.问题定义: 要求系统分析员与用户进行交流,弄清“用户需要计算机解决什么问题”然后提出关于“系统目标与范围的说明”,提交用户审查和确认。
2.可行性研究: 一方面在于把待开发的系统的目标以明确的语言描述出来,另一方面从经济、技术、法律等多方面进行可行性分析。
3.需求分析: 弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审。
4.开发阶段: 由设计,实现,测试三个阶段组成。
5.维护: 包括改正性维护,适应性维护,完善性维护和预防性维护四个阶段。按照SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
软件需求 Software requirements
软件设计 Software design
软件质量 Software quality
软件工程工具与方法 Software engineering models and methods解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
1.初始级 Level 1 - Initial
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
2.可管理级 Level 2 - Managed
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
3.已定义级 Level 3 - Defined
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
4.量化管理级 Level 4 - Quantitatively Managed
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
5.优化管理级 Level 5 - Optimizing
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI:CMMI是把现在所有现存实施的与即将被发展出来的各种能力成熟度模型,集成到一个框架中去的一个设想,其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。CMMI 为企业的构建和改进提供了指导和框架作用,同时为企业评审自己的过程提供了可参照的行业基准。CMMI 模型的五个成熟度级是综合评价一个企业当前过程中软件生产能力的重要指标。此外,CMMI 可以推动软件企业在产品的研发、生产、服务和管理上不断成熟和进步,其存在可以使企业持续提升并且完善企业的自身能力。
2.解释 PSP 各项指标及技能要求:
- 按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?
需要做的有:
1、计划(包括估计这个任务需要花费多长时间)
2、开发(包括分析需求、生成设计文档、设计复审、代码规范、具体设计、具体编码、代码复审、测试)
3、记录时间花费
4、测试报告
5、计算工作量
6、事后总结
7、提出过程改进计划
我认为需要的技能有编程能力,撰写文档能力,测试能力,合理记录数据的能力,设计能力,总结能力,观察能力,掌握软件开发流程的能力等等。
我打算有计划的定期统计数据,在每一个阶段都完成对应的数据统计,做出一个总结。