软件工程的定义
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 “(2) the study of approaches as in (1).” – IEEE Standard 610.12
软件工程是,系统化、规范化、可度量化的方法在软件开发、运行和维护中的应用,即工程化方法在软件中的应用,以及对这些方法的研究。
解释导致software crisis本质原因、表现,述说克服软件危机的方法
本质原因
导致软件危机的本质原因是计算机硬件的飞速发展。根据软件构造性成本模型COCOMO(Constructive Cost Model),软件的成本与代码行的数量成指数关系。计算机的能力越强大,软件编程就越复杂,软件成本呈指数爆炸式增长,软件开发的效率也逐渐变低。传统的软件开发方法不能适应硬件的高速发展,导致了软件危机的出现。
表现
- 项目运行超出预算
- 项目运行超出时间
- 软件效率低
- 软件质量差
- 软件不匹配需求
- 项目难以管理和维护
- 软件无法交付
方法
克服软件危机的方法有:构建软件工程知识体系(SWEBoK)、对企业的能力成熟度进行评估、制定软件工程管理标准、使用实践管理工具总结实践经验等等。
软件生命周期
在软件工程中,软件生命周期是指将软件开发工作在时间维度上分割成不同部分,来提高设计、产品管理和项目管理水平的过程,也称为软件开发过程,其各个阶段实现了软件的需求定义与分析、设计、实现、测试、交付和维护。常见的过程模型有瀑布模型、螺旋模型、敏捷的模型等等。其具体过程有:
- 问题定义:确定解决的具体问题是什么。
- 可行性研究:从经济、技术、法律等多方面进行可行性分析。
- 需求分析:详细分析项目的需求和约束条件。
- 开发阶段
- 概要设计:设计整体框架,定义模块和接口。
- 详细设计:设计每个模块的具体要求。
- 实现:具体的代码实现。
- 测试
- 维护:包含改正性维护、适应性维护、完善性维护、预防性维护等方面。
SWEBoK的15个知识域
- 实践知识域(11个)
- 软件需求:为解决真实问题,软件产品所需的要求和约束。
- 软件设计:软件设计包含了需求分析、架构设计、成分设计、接口设计等设计过程以及设计的结果。
- 软件构建:结合详细设计、编码、单元测试、集成测试等过程,对软件进行具体的构建和调试。
- 软件测试:评估产品质量并通过识别缺陷来改进产品质量。具体包括测试的基础知识、测试技术、人机交互接口测试、测试手段和现状分析等。
- 软件维护:提升性能、更新软件和错误修正,分别对应完善性、适应性和改正性维护。
- 软件配置管理:是在不同时间点识别系统配置的规则,用于系统地控制配置的改变,以及在整个软件生命周期中维持配置的完整性和可追溯性。
- 软件工程管理:涉及计划、协调、测量、报告和控制项目,以确保软件的开发和维护是系统化、规范化和量化的。
- 软件工程过程:也叫软件生命周期,涵盖其定义、实施、评估、测量、管理和改进。
- 软件工程模型和方法:也叫软件开发模型,覆盖多个软件生命周期阶段。能直观表达软件开发的全过程。
- 软件质量:包括软件质量基础知识、质量管理的流程和现实考虑。
- 软件工程专业实践:软件工程师必备的软件工程知识、技能和态度,要求工程师做到专业化、负责任和符合道德准则。
- 教育需求知识域(4个)
- 软件工程经济学:关注的是在软件业务环境中的决策,是商业决策与技术决策的统一。
- 计算基础:覆盖了计算机科学的基础知识,例如算法、抽象、编程基础、计算机组成、操作系统和网络等。
- 数学基础:数学基础知识,包括线性代数、离散数学、概率论、数论等。
- 工程基础:工程化技术的基础知识,例如统计方法、测量方法、仿真与建模等。
简单解释CMMI的五个级别
- Level 1 – Initial:无序,自发生产模式。
- Level 2 – Managed:有活力,项目级管理模式。
- Level 3 – Defined:受控,企业级组织方式。
- Level 4 – Quantitatively Managed:量化,数据化管理模式,精准管理。
- Level 5 – Optimizing:优化,大型企业运行方式,高效率完成大项目开发。
用自己语言简述SWEBok或CMMI
CMMI(Capability Maturity Model Integration),能力成熟度模型集成,是度量一个企业或组织在开发、服务、采购等层面上的成熟度的集成方法,最早主要面向软件工程领域。CMMI的目的在于帮助企业进行能力评估,并协助提升企业的绩效。在不同的成熟度中,CMMI给出了对应的过程区域,这些过程区域有助于企业维持最佳的运作效率,同时有利于企业向更高的成熟度进步。许多企业在进行CMMI评价的过程中,了解了自己所处的位置,也发现了自己发展的潜力所在。
CMMI存在持续和分阶段两种表现方式。其中,分阶段式中有五个等级,对应的等级有不同的过程区域。CMMI一共有16个核心过程区域,覆盖了企业开发、服务、采购等层面的大部分内容。