目前公认的解释认为软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。⑵在学者通常的论述中,计算机软件一词经常与计算机程序混用。但是,根据世界知识产权组织(WIPO)1978年公布的《计算机软件保护标准条款》中对计算机软件的定义,计算机软件包括三部分:(1)计算机程序:包括附者于任何媒介上的原始码、目的码、微码等以任何语言、文字或符号所完成之计算机程序;(2)程序描述:包括资料结构、演绎法则、流程图;(3)辅助资料:包括程序规格书、操作手册、使用手册。在我国,计算机软件是指计算机程序及其有关文档。计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。文档,是指用来描述程序的内容、组成、设计、功能、规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。⑶因此,计算机软件包含了计算机程序并且不局限于计算机程序,还包括与之相关的程序描述和辅助资料。 计算机软件具有以下特点:
1. 计算机软件是一种逻辑实体,而不是具体的物理实体。计算机软件具有抽象性,与计算机硬件和其他工程对象有着明显的差别。人们可以把他记录在纸面上或者保存在计算机的存储器内部,也可以保存在磁盘、磁带和光盘上,但却无法看到软件本身的形态,而必须通过专业人士的观察、分析、思考、判断,才能够了解其功能、性能和其他特性。
2. 计算机软件的产生与硬件不同。计算机软件开发没有明显的制造过程,也不象硬件那样,一旦研制成功,可以重复制造,并在制造过程中进行质量控制。软件是通过人的智力活动,把知识与技术转化成信息产品。一旦某一软件项目研制成功,即可大量复制,所以对软件的质量控制,必须着重在软件开发方面先工夫。也正是由于软件的复制非常容易,因此才出现了对软件产品的保护问题。
3. 计算机软件的运行和使用不会出现硬件的机械磨损、老化问题。任何机械、电子设备在使用过程中,其失效率大都遵循“浴盆曲线”:在刚投入使用时,各部件尚未作到配合良好、运转灵活,容易出现问题,经过一段时间的运行,即可稳定下来。而当设备经历了相当长的时间运转,就会出现磨损、老化,使失效率越来越大,当达到一定程度时,就达到了寿命的终点。而软件不存在磨损和老化问题只存在退化问题。在软件的生命周期中,为了使他能够克服以前没有发现的问题使他能够适应硬件、软件环境的变化以及用户的新的要求,必须多次修改(维护)软件,而每次修改又不可避免引入新的错误,导致软件失效率升高,从而使软件逐步退化。
4. 计算机软件的开发和运行常常受到计算机系统的限制,很多软件对计算机系统都有着不同程度的依赖性。软件不能完全摆脱硬件而单独活动。有些软件依赖性大,常常为某个型号的计算机所专用,有些软件依赖于某个操作系统。
5. 计算机软件的开发至今尚未摆脱手工艺的开发方式。软件产品大多是“定作”的,很少能作到利用现成的部件组装所需的软件。近年来,软件技术虽然取得了很大进展,提出很多新的开发方法,例如利用现成软件的复用技术、自动生成系统研制了一些有效的软件开发工具和软件开发环境,但在软件项目中采用的比率仍然很低。由于传统的手工艺开发方式仍然占统治地位,软件开发的效率自然受到很大限制。
6.软件本身是非常复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,例如,它所反映的自然规律,或是人类社会的事物,都具有一定的复杂性;另一方面,也可能来自程序逻辑结构的复杂性。软件开发,特别是应用软件的开发常常涉及到其它领域的专门知识,这对软件开发人员提出了很高的要求。软件的复杂性与软件技术的发展不相适应的状况越来越明显。
7.软件的开发成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,因此其成本比较高,美国每年投入软件开发的费用要高达几百亿美元。
8.相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到人的观念和心理。⑷
计算机软件按功能区分,包括系统软件和应用软件两大类。
系统软件的功能在于提供人与计算机的沟通桥梁,将使用者的命令转换成计算机的可执行程序,驱使计算机执行工作,之后把结果输出给使用者,系统软件主要包括作业系统、翻译程序、连结程序、载入程序、公用程序、程序语言、资料库管理系统及监督程序。
应用软件主要是用于解决某些特定问题,种类和用途年繁多。