简答题
软件工程的定义
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。
软件工程:1. 将系统化、规范化、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。2. 对1中所述方法的研究。
软件工程是指导计算机软件开发和维护的学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
本质原因:
软件危机是计算机科学早期的一个术语,指在需要的时间内编写有用而高效的计算机程序的困难。软件危机是由于计算机能力的迅速增长和无法解决的问题的复杂性造成的。随着软件复杂度的增加,由于现有方法的不足,出现了很多软件问题。
表现:
-
项目运行超过预算
-
项目运行的加班时间
-
软件效率很低
-
软件质量很差
-
软件常常不能满足需求
-
项目是不可管理的,代码很难维护
-
软件从未交付
克服软件危机的方法:
开发了各种各样的过程和方法来改进软件质量管理,例如过程编程和面向对象编程。
应该彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。**一个软件必须由一个完整的配置组成,**事实上,**软件是程序、数据及相关文档的完整集合。**其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当的处理信息的数据结构;文档是开发、使用和维护所需要的图文资料。
***应该推广使用在实践总结出来的开发软件的成功的技术和方法,***并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的错误观念和做法。
**应该开发和使用更好的软件工具。**正如机械工具可以“放大”人类体力一样,软件工具可以“放大”人类的智力。
软件生命周期
三个时期:
-
定义期
-
开发期
-
部署期
八个阶段:
- 可行性研究阶段(定义期)
- 需求分析阶段
- 概要设计阶段(开发期)
- 详细设计阶段
- 开发实现阶段
- 测试阶段
- 部署阶段(部署期)
- 维护阶段
简单总结就是
问题的定义及规划 需求分析 软件设计 软件编码 软件测试 运行维护
SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)
中文 | 英文 | 简短说明 |
---|---|---|
软件需求 | Software Requirements | 软件需求KA涉及软件需求的引出、协商、分析、规范和验证。 |
软件设计 | Software Design | 设计被定义为定义系统或组件的体系结构、组件、接口和其他特性的过程,以及[该]过程的结果(IEEE 1991)。 |
软件构造 | Software Construction | 软件建设是指通过详细设计、编码、单元测试、集成测试、调试和验证相结合,对工作软件进行详细的创建。 |
软件测试 | Software Testing | 测试是一种通过识别缺陷来评估产品质量和改进产品质量的活动。 |
软件维护 | Software Maintenance | 软件维护包括增强现有的功能,使软件适应新的和修改过的操作环境,以及纠正缺陷。 |
软件配置管理 | Software Configuration Management | 系统的配置是硬件、固件、软件或这些的组合的功能和/或物理特性。 |
软件工程管理 | Software Engineering Management | 软件工程管理包括计划、协调、度量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。 |
软件工程过程 | Software Engineering Process | 软件工程KA涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。 |
软件工程工具和方法 | Software Engineering Tools and Methods | 软件工程模型和方法KA解决了包含多个生命周期阶段的方法;特定于特定生命周期阶段的方法由其他ka覆盖。 |
软件质量 | Software Quality | 软件质量是一个普遍存在的软件生命周期问题,许多SWEBOK V3 ka都解决了这个问题。 |
软件工程专业实践 | Software Engineering Professional Practice | 软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以便以专业、负责任和合乎道德的方式实践软件工程。 |
软件工程经济学 | Software Engineering Economics | 软件工程经济学KA关注的是在业务上下文中做出决策,使技术决策与组织的业务目标保持一致。 |
计算基础 | Computing Foundations | 计算基础KA涵盖了为软件工程实践提供必要的计算背景的基本主题。 |
数学基础 | Mathematical Foundations | 数学基础KA涵盖了为软件工程实践提供必要的数学背景的基本主题。 |
工程基础 | Engineering Foundations | 工程基础KA涵盖了为软件工程实践提供必要的工程背景的基本主题。 |
简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成,能增强软件企业的开发与改进能力,帮助企业对软件工程过程进行管理和改进,从而能按时地、不超预算地开发出高质量的软件。
第一级别:初始级。首先,软件的过程有序性程度不高,甚至会出现混乱的情况,软件是否能够成功主要取决于研发人员本身的实力和努力,项目可能会成功,但是任务的完成中存在很大的偶然性。也就是说企业不能担保在实施同一类项目的时候还能按时按期完成任务,研发人员是这一个级别最关键的因素,企业占到的作用不甚明显。
第二级别:可管理级。公司在管理上已经具备了一定的能力,能够建立比较基础的项目管理规范,对于项目的实施能够列出相应的计划和流程,并且随着流程的进行可以对此实施监控和控制。从一级到二级,最大的差别就是企业的管理有了相当程度的进步,利用管理手段排除了企业在第一级别完成任务时候的随机性与不确定性,保证企业的项目都能得到成功。
第三级别:已定义级。在第三级别的情况下,企业不仅能够把软件管理和工程管理两个过程都实现标准化和文档化,而且软件产品的整个生产过程,都是可见可控的。也就是说,企业根据自身的情况以及自己的流程能够建立一套规范制度的管理体系与流程,从而保证在同类或者是不同类的项目上都能够得到成功的实施。在这一阶段,企业的科学管理已经形成企业文化,更是企业内涵。
第四级别:量化管理级。是第三级别的升级版,在第四级别的时候,企业的项目管理首先是已经形成了完善的制度,而且根据名称,可以平判处,这一级别最关键的两个字就是“量化”。对项目流程的管理做到量化、数字化、具体化,对软件过程和产品精度都有定量的控制,实现管理更加细致化,精细化,项目的质量也能因此保证相对的高质量和稳定性。
第五级别:优化管理级。第五级别优化管理级是软件企业项目管理目前来说的最高境界。企业能够非常主动的来对流程进行一定程度的改善,将更加先进的技术运用到其中,让流程优化上升到一个更高的层次。在第四级别的基础上,还能够利用当前的信息资料来对项目过程中出现的问题进行预防,让每一个项目都能有非常高的质量。
用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI全称是Capability Maturity Model Integration,又叫做能力成熟度模型集成(也有称之为:软件能力成熟度集成模型) ,是美国国防部的一个设想。美国国防部联合CMU还有一所软件工程研究中心共同研制开发的。他们的计划是把目前已经有的各种能力成熟模型或者之后会有的集中到一个框架中去。SEI和CMMI和有很大的关联,SEI(software engineering institute)也就是软件工程学院,也是提出的准备之一。
CMMI创立的目的是什么,是为了帮助软件企业对软件工程的过程进行有效的管理和改进,以能开发出高质量,按时的软件。总结来说就是 质量 时间表 成本 现在的CMMI开发模型已经到了1.3版本。
PSP 2.1 (不需要提交)
阅读《现代软件工程》的 PSP: Personal Software Process 章节
按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据?
- 计划阶段:要估计这个任务所需时间
- 开发阶段:进行分析需求、生成设计文档、设计复审 (和同事审核设计文档)、代码规范 (为目前的开发制定合适的规范)、具体设计、具体编码、代码复审、测试(包括自我测试,修改代码,提交修改)
- 记录时间花费
- 测试报告
- 计算工作量
- 事后总结
- 提出过程改进计划
关于PSP2.1的数据统计,可以小范围针对一个班级的课程项目来统计,也可以针对一个企业的众多项目组进行数据分析,或者扩大到具有相同特征的群体,比如各个专业的毕业后第一年平均年薪的调查。然后对收集到的数据进行统计和记录并分析。SDE在需求分析和测试要花更多的时间,在编码上会少花很多时间