1
 软件工程
1.3.1.1 1.1.1 软件的定义和特点

1.1.1 软件的定义和特点

1.软件的定义

软件是计算机系统中与硬件相互依存的另一部分,是程序、数据及其相关文档的完整集合。一种公认的传统的软件定义为

软件=程序+数据+文档

其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能够正确地处理信息的数据结构;文档是与程序开发、维护和使用有关的图文资料。

为了更全面、正确地理解计算机和软件,必须了解软件的特点。软件是整个计算机系统中的一个逻辑部件,而硬件是一个物理部件。因此,软件具有与硬件完全不同的特点。

2.软件的特点

1)形态特性

软件是一种逻辑实体,不具有具体的物理实体形态特性。软件具有抽象性,可以存储在介质中,但是无法看到软件本身的形态,必须经过观察、分析、思考和判断去了解它的功能、性能及其他的特性。

2)生产特性

软件与硬件的生产方式不同。与硬件或传统的制造产品的生产不同,软件一旦设计开发出来,如果需要提供给多个用户,它的复制十分简单,其成本也极为有限,正因为如此,软件产品的生产成本主要是设计开发的成本,同时也不能采用管理制造业生产的办法来解决软件开发的管理问题。

3)维护特性

软件与硬件的维护不同。硬件是有耗损的,其产生的磨损和老化会导致故障率增加甚至使得硬件损坏,其失效率曲线大致如图1-1(a)所示。软件不存在磨损和老化的问题,但是却存在退化的问题。在软件的生存期中,为了使它能够克服以前没有发现故障、适应软件和软件环境的变化及用户新的要求,必须要对其进行多次修改,而每次的修改都有可能引入新的错误,导致软件失效率升高,从而使软件退化,其失效率曲线大致如图1-1(b)所示。

img1

图1-1 失效率曲线

4)复杂特性

软件的复杂性一方面来自它所反映的实际问题复杂性,另一方面也来自程序结构的复杂性。软件技术的发展明显落后于复杂的软件需求,这个差距日益加大。软件复杂性与时间曲线如图1-2所示。

img2

图1-2 软件技术的发展落后于需求

5)智能特性

软件是复杂的智力产品,它的开发凝聚了人们大量的脑力劳动,它本身也体现了知识、实践经验和人类的智慧,具有一定的智能。它可以帮助我们解决复杂的计算、分析、判断和决策问题。

6)质量特性

软件产品的质量控制存在着一些实际困难,难以克服,表现在以下方面。

(1)软件产品的需求在软件开发之初常常是不确切的,也不容易确切地给出,并且需求还会在开发过程中变更,这就使软件质量控制失去了重要的可参照物。

(2)软件测试技术存在不可克服的局限性。任何测试都只能在极大数量的应用实例数据中选取极为有限的数据,致使我们无法检验大多数实例,也使我们无法得到完全没有缺陷的软件产品。没有在已经长期使用或反复使用的软件中发现问题,并不意味着今后的使用也不会出现问题。

这一特性提醒我们:一定要警惕软件的质量风险,特别是在某些重要的应用场合需要提前准备好应对策略。

7)环境特性

软件的开发和运行都离不开相关的计算机系统环境,包括支持它的开发和运行的相关硬件和软件。软件对计算机系统的环境有着不可摆脱的依赖性。

8)软件的管理特性

上述的几个特点,使得软件的开发管理显得更为重要,也更为独特。这种管理可归结为对大规模知识型工作者的智力劳动管理,其中包括必要的培训、指导、激励、制度化规程的推行、过程的量化分析与监督,以及沟通、协调,甚至是软件文化的建立和实施。

9)软件的废弃特性

等到软件的运行环境变化过大,或是用户提出了更大、更多的需求变更,再对软件实施适应性维护已经不划算,说明该软件已走到它的生存期终点而将废弃(或称为退役),此时用户应考虑采用新的软件代替。因此,与硬件不同,软件并不是由于“用坏”而被废弃的。

10)应用特性

软件的应用极为广泛,如今它已渗透到国民经济和国防的各个领域,现已成为信息产业、先进制造业和现代服务业的核心,占据了无可取代的地位。

11)软件成本比较高

软件的研制工作需要投入大量、复杂、高强度的脑力劳动,研制成本比较高。在20世纪50年代末,软件的开销大约占总开销的百分之十几,大部分成本花在硬件上。但今天,这个比例完全颠倒过来,软件的开销远远超过硬件的开销。软、硬件成本随时间变化而变化的比例如图1-3所示。

img3

图1-3 软、硬件成本比例的变化