一、软件及软件工程
1. 软件的本质
计算机软件 指计算机系统中的程序、数据及其相关文档

三要素:

程序:按照特定顺序组织的计算机数据和指令的集合。

数据:使程序能正常执行的数据结构

文档:为了便于理解程序所需的与开发、维护和使用有关的资料

软件 = 程序 + 文档 + 数据

软件的特点

软件是设计开发的,而不是传统意义上生产制造的。

软件不会“磨损”,但会退化。

大多数软件还是用户定制的。

计算机软件可分为七个大类:

系统软件
应用软件
工程/科学软件
嵌入式软件
人工智能软件
产品线软件
WebApp
移动App
另一种分类

系统软件:
位于计算机系统中最靠近硬件的一层,其它软件一般都通过系统软件发挥作用,它与具体的应用领域无关。如操作系统、编译程序等。

支持软件:
支持软件的开发和维护的软件。如数据库管理系统、网络软件、软件开发环境等。

应用软件:
特定应用领域专用的软件。如实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件等。

2. 软件危机
软件危机(Software Crisis):计算机软件的开发和维护过程所遇到的一系列严重问题。

软件危机的表现:

对软件开发成本和进度的估算很不准确,甚至严重拖期和超出预算;
无法满足用户需求,导致用户很不满意;
质量很不可靠,经常失效;
难以更改、调试和增强;
没有适当的文档;
软件成本比重上升;
软件开发生产率跟不上计算机应用迅速深入的趋势。
软件为什么要更新和迭代?

软件必须适应新的计算环境或技术的需要。
必须增强软件来实现新的业务需求。
软件必须扩展到与其他更现代的系统或数据库进行互操作。
必须重新构建软件,使其在网络环境中可行。
为什么会产生软件危机?

与软件本身的特点有关 (难于维护, 逻辑复杂)
与软件开发与维护的方法不正确有关
3. 软件工程定义
1993年IEEE进一步给出了一个更全面更具体的定义:

软件工程是:
(1)将系统化的、规范化、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
(2)在(1)中所述方法的研究

《计算机科学技术百科全书》中的定义:

软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等。

软件工程的内容

软件工程是一种层次化的技术。任何工程方法必须构建在质量承诺的基础上。
软件工程的基础是过程。软件过程将各个技术层次结合在一起,使得合理及时地开发计算机软件成为可能。
软件工程方法为构建软件提供技术上的解决方法。
软件工程工具为过程和方法提供自动化或半自动化的支持。

软件工具是指能支持软件生存周期中某一阶段(如系统定义、需求分析、设计、编码、测试或维护等)的需要而使用的软件工具。

 

4. 软件生命周期
软件生命周期, 又称为软件生存周期,是软件从产生直到报废的整个时期。

 

思考

什么是计算机软件?软件的特点是什么?
何谓“软件危机”?
主要有哪些软件工程方法?软件工程有哪三个要素?
软件生命周期主要包含哪几个阶段?