软件的本质与软件工程科学

软件工程的定义

​ 软件工程指的是应用系统化的、规范的、可量化的方法来开发、操作与维护软件这样一项应用于软件的工程(与方法的研究)。

软件危机的本质原因、表现及克服的方法

​ 软件危机是指在软件开发及维护的过程中遇到的一系列可能导致软件的寿命缩短甚至夭折的严重问题。其本质原因在于开发软件的复杂性、期望(需求)以及改变,软件开发过程的进展情况、质量是比较难衡量的。它关乎写出正确、可理解且可验证的计算机程序的困难性。

​ 软件危机主要表现在这几个方面:

  • 项目运行超出预算

  • 项目运行超过时间

  • 软件质量低落

  • 软件通常不匹配需求

  • 项目无法管理、代码难以维护

​ 为了克服软件危机,必须认识到软件开发这项工作不是某个个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合共同完成的工程项目。既要有技术措施(方法和工具),又要有良好的组织管理措施,才可能克服软件危机。

软件生命周期

​ 软件开发的生命周期是在开发和构建系统时应该遵循的步骤,常包含软件的需求定义与分析、设计、实现、测试、交付与维护等阶段,常见的有瀑布模型、螺旋模型、敏捷模型等。

SWEBoK 的 15 个知识域

  1. 软件需求

    软件需求包含需求的提出、协商、分析、规范和验证,表达了对软件产品的需求和约束,它们有助于解决一些现实问题。

  2. 软件设计

    软件设计指的是对整个架构及组成、接口和一些其他特性的设计过程和其对应的结果,即包含设计的过程和设计的成果。

  3. 软件构造

    软件构造指的是通过一系列详尽的设计、编码、测试、调试及验证的过程来具体的构造软件的过程。

  4. 软件测试

    软件测试指的是评估软件质量并优化缺陷这样一项工作,它包含对软件在有限的测试集上的表现的动态测试。

  5. 软件维护

    软件维护包括优化软件现有的功能;调整软件以适应更多的运行环境;以及发现软件的缺陷之处。

  6. 软件配置管理

    软件配置管理是在不同时间点识别系统配置的规则,用于系统地控制配置的改变,以及在整个软件生命周期中维持配置的完整性和可追溯性

  7. 软件工程管理

    软件工程管理涉及工程的规划、协调、衡量、报告以及管控一个项目或程序来确保软件的开发维护是系统、规范、可量化的。

  8. 软件工程过程

    关乎软件生命周期过程的定义、实施、评估、衡量、管理与改进,具体包括流程的实施和变更、流程定义、过程评估模型和方法、衡量阶段与软件过程工具。

  9. 软件工程模型与方法

    软件工程模型与方法涵盖了多个生命周期阶段的方法,包括建模、模型类型和软件开发方法。

  10. 软件质量

    软件质量包括软件质量的基础知识(特性、价值等)、软件质量管理流程和实际考虑(缺陷表征、软件质量工具等)。

  11. 软件工程专业实践

    其关注软件工程师必须具备的负责的态度、专业道德及软件工程知识。其涵盖专业性、道德准则和沟通技巧。

  12. 软件工程经济学

    其关注的是在业务环境中做出决策,以使得技术决策和组织的业务目标保持一致。主要涵盖了软件工程经济学的基本原理、成本效益优化分析、经济风险和不确定性以及多属性决策。

  13. 计算基础

    计算基础涵盖了软件工程实践所需的计算背景,包括问题解决的技术,算法、编程基础,以及关于并行、分布式计算、计算机组织等方面的基础知识。

  14. 数学基础

    数学基础涵盖了软件工程实践所需的数学背景。它包括集合、关系、函数、基本命题与谓词逻辑、证明、图论以及其他一些数学知识。

  15. 工程基础

    工程基础关乎软件工程实践所必需的工程背景,包括经验方法与实验技术、统计分析与测量技术、工程设计、原因分析、仿真与建模和其他的一些工程知识。

CMMI的五个级别

​ CMMI包含五个级别:

  • Level 1

    完成级,在这一级别,项目的目标得以实现但具有很大的偶然性,无法保证在将来进行同类项目时仍能完成,这一级别的项目实施对人员有很大依赖性。

  • Level 2

    管理级,建立了基本的项目管理过程来跟踪费用、进度和功能特性,制定了必要的过程纪律,可重复早先类似应用项目取得的成功经验。

  • Level 3

    定义级,已经将软件管理与工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发与维护软件,软件产品的生产在整个软件过程是可见的。

  • Level 4:

    量化管理级,分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解和控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

  • Level 5:

    优化管理级,过程的量化反馈与先进的新思想、新技术促使整个过程不断地改进。

CMMI总结

​ CMMI,全称为Capability Maturity Model Integration,即软件能力成熟度模型。它的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与优化能力,从而能够快速、不超预算地开发出高质量的软件。并不断进行管理的实践和过程的改进,以克服软件开发中的困难。

​ CMMI为改进一个组织的各种软件工程过程而提供了一个单一的集成化框架,这个框架消除了各模型的不一致性,减少了模型间的重复,增加透明度和理解,因而能从总体上改进软件工程过程的质量和效率。其主要关注点就在于成本效益、明确重点、过程集中和灵活性四个方面。

​ 总的来说,CMMI提供的五个级别能够很好的评估企业的各种软件能力,迎合企业发展的需求,它可以给出企业能力提升的路径,以帮助企业变得越来越成熟。