软件工程的定义
IEEE:在软件工程术语汇编中的定义:软件工程是:1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1中所述方法的研究
BarryBoehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
FritzBauer:在NATO会议上给出的定义:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
本质原因
软件危机是由于计算机硬件性能的快速提高以及软件解决问题效率逐渐低下而产生的。19世纪60年代,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率。
表现
- 软件开发成本太高,开发难度太大,开发周期太长
- 软件效率很低,质量较差
- 软件通常难以达到用户需求,用户的满意度低下
- 软件产品难以管理,代码难以维护
克服软件危机的方法
- 研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。从硬件工程和其他人类工程中吸收成功的经验,发展了软件开发与维护阶段适用的技术和方法,并应用于软件工程实践。
- 研制和使用软件工具,用以辅助进行软件项目管理与技术生产,将各阶段使用的软件工具有机地集合成为一个整体,形成能够连续支持软件开发与维护全过程的集成化软件支援环境,以期从管理和技术两方面解决软件危机问题。
- 通过人工智能与软件工程的结合,将目光投向基于程序变换、自动生成和可重用软件等软件新技术研究,把程序设计自动化的进程向前推进一步。
软件生命周期
软件生命周期(Software Life Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
SWEBoK 的 15 个知识域
- Software Requirements 软件需求
关注软件需求的启发,协商,分析,规范和验证。软件需求表达了对软件产品的需求(needs)和限制,有助于解决一些现实问题。 - Software Design 软件设计
定义系统或组件的体系结构,组件,接口和其他特征的过程以及该过程的结果。 - Software Construction 软件构建
指通过结合详细设计,编码,单元测试,集成测试,调试和验证来详细创建工作软件。 - Software Testing 软件测试
测试是一项旨在通过识别缺陷来评估产品质量并改进产品质量的活动。 - Software Maintenance 软件维护
软件维护包括增强现有功能,调整软件以在新的和修改的操作环境中运行,以及纠正缺陷。这些类别称为完善,自适应和纠正性软件维护。 - Software Configuration Management 软件配置管理
软件配置管理是在不同时间点识别系统配置的规训,用于系统地控制配置的改变,以及在整个软件生命周期中维持配置的完整性和可追溯性。 - Software Engineering Management 软件工程管理
软件工程管理涉及规划,协调,测量,报告和控制项目或程序,以确保软件的开发和维护是系统化的,规范化的和量化的。 - Software Engineering Process 软件工程过程
关注软件生命周期过程的定义,实施,评估,测量,管理和改进。 - Software Engineering Models and Methods 软件工程模型和方法
解决了涵盖多个生命周期阶段的方法。 - Software Quality 软件质量
是许多SWEBOK V3 KAs中普遍存在的软件生命周期关心问题。 - Software Engineering Professional Practice 软件工程专业实践
关注软件工程师要专业、负责、道德地实践软件工程所必须具备的知识,技能和态度。 - Software Engineering Economics 软件工程经济学
软件工程经济学KA关注的是在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。 - Computing Foundations 计算基础
计算基础KA涵盖了提供软件工程实践所需的计算背景的基础主题。 - Mathematical Foundations 数学基础
数学基础KA涵盖了提供软件工程实践所必需的数学背景的基础主题。涵盖的主题包括集合,关系和功能;基本命题和谓词逻辑;证明技巧;图论和树;离散概率;语法和有限状态机;数论。 - Engineering Foundations 工程基础
工程基础KA涵盖了提供软件工程实践所必需的工程背景的基础主题。涵盖的主题包括经验方法和实验技术;统计分析;测量和指标;工程设计;仿真与建模;根本原因分析。
简单解释 CMMI 的五个级别
-
初始级(Initial)
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。 -
可管理级(Managed)
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。 -
已定义级(Defined)
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。 -
量化管理级(Quantitatively Managed)
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。 -
优化管理级(Optimizing)
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
用自己语言简述 SWEBok 或 CMMI
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成 ,是美国国防部的一个设想,1994年由美国国防部与卡内基-梅隆大学下的软件工程研究中心以及美国国防工业协会共同开发和研制的,他们计划把现在所有现存实施的与即将被发展出来的各种能力成熟度模型,集成到一个框架中去,申请此认证的前提条件是该企业具有有效的软件企业认定证书。
其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其所依据的想法是:只要集中精力持续努力去建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件开发中的困难。CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。