软件的定义

根据《软件工程》的规定,

软件 = 文档 + 数据 + 程序

我们能了解到,程序只是软件的一部分。

我们也可以获得软件的定义:

软件是采用了适当的算法与数据结构,并拥有完备的软件描述信息的一套指令的集合。

软件工程的关注点

我们都知道,(一套高质量的)程序是软件工程的最终目标,但是,程序并不是软件工程的关注点,文档与过程才是。

软件过程的开始

当项目立项后,可行性分析认为**“可行”**时,就正式的进入了软件工程过程。
(在这里,我不将可行性分析阶段算入软件工程过程,因为若可行性分析的结果是“不可行”,那么软件将不会存在)

软件过程的核心文档

《需求分析说明书》将成为了软件的第一个部分。它是软件工程过程中,最重要,也是最容易出现问题的部分。

当进入了需求分析阶段时,以最普遍的W模型来看,意味着测试工程师可以开始工作了,也即整个软件团队的成员都需要开始工作了。《需求分析说明书》就像一块凝结核,软件会在这个“凝结核”的基础上逐渐生长,慢慢成为坚固的“晶体结构”。

程序与软件的对比

我们再反观程序。程序就不一样了,在程序中,一定要有可运行的计算机代码,如果没有可运行的计算机代码,那么程序只能叫做算法,或是PDL。相比较于软件的“晶体结构”,程序就是一盘”散沙”,虽然掺点水可以做成沙堡,但是非常脆弱

广义化的软件

那么站在软件工程过程上来说,我们就可以这样广义化描述:

当文档开始进入了软件工程过程时,即可被称之为软件。

在这种描述下,软件可以(在软件过程中)脱离程序而独立存在,也可以结合程序达到最终目标,但软件绝对不等价于程序