计算机软件 :计算机系统中的程序及文档

更新时间:2024-09-21 14:51

计算机软件(计算机 软件,也称软件)是系统中的程序及其文档,程序是计算任务的处理对象和处理规则的描述。文档主要是为了便于了解程序所需的阐明性资料。程序在计算机平台之上运行,文档一般是给人看的,软件通常通过解决用户的问题而表现出其价值。

含义

计算机软件的含义有三,一为个体含义,二为整体含义,三为学科含义。个体含义之计算机软件是指任一计算机系统中的任一程序及其有关的文档(程序是软件之主体,文档之作用是为了便于理解程序)。整体含义之计算机软件是指任一计算机系统中所有个体含义之计算机软件所构成之集合。学科含义之计算机软件是指以整体含义之计算机软件为研究对象的学科,或者也可以说学科含义之计算机软件是指在实施个体含义之计算机软件过程中所涉及的理论、原则、方法、技术所构成的学科。

发展过程

软件的发展受到应用和硬件发展的推动和制约,其发展过程大致可分为三个阶段。

第一阶段

从第一台计算机上的第一个程序的出现到实用的高级程序设计语言出现以前为第一阶段(1946~1956年),计算机的工作是由储存在其内部的程序指挥的,这是冯􀅰诺依曼式计算机的重要特色。当时计算机的应用领域较窄,主要是科学计算,就一项计算任务而言,输入、输出量并不大。但计算量却较大,主要处理一些数值数据,机器结构以中央处理器为中心,存储容量较小。编制程序(简称编程)所用的工具是低级语言,即以机器基本指令集为主的机器语言和在机器语言基础上稍加符号化的汇编语言。突出的问题是,程序的设计和编制工作复杂繁琐、费时和易出差错,衡量程序质量的标准主要是功效,即运行时间省、占用内存小,很少考虑到结构清晰、易读性和易维护性。设计和编制程序采用个体工作方式,强调编程技巧。主要研究科学计算程序、服务性程序和程序库,研究对象是顺序程序。当时人们对和程序有关的文档的重要性尚认识不足,重点考虑程序本身,尚未出现软件一词,但毕竟由于程序是软件的主体。从发展的连续性来看,故将其归为第一阶段。

第二阶段

从实用的高级程序设计语言出现以后到软件工程出现以前为第二阶段(1956—1968年)。随着计算机应用领域的逐步扩大,除了科学计算继续发展以外,出现了大量的数据处理问题。其性质和科学计算有明显区别,就一项计算任务而言,计算量不大,但输入、输出量却较大。这时,机器结构转向以存储控制为中心,出现了大容量的存储器。外围设备发展迅速,为了提高程序人员的工作效率,出现了实用的高级程序设计语言。为了充分利用系统资源,出现了操作系统。为了适应大量数据处理问题的需要,开始出现数据库及其管理系统。在20世纪50年代后期,人们逐渐认识到和程序有关的文档的重要性,从而到了60年代初期,出现了软件一词,融程序及其有关的文档为一体。这时,软件的复杂程度迅速提高,研制周期变长,正确性难以保证,可靠性问题相当突出。到了60年代中期,出现了人们难以控制的局面,即所谓软件危机。为了克服这一危机,人们进行了以下三个方面的工作:①提出结构程序设计方法。②提出用工程方法开发软件。③从理论上探讨程序正确性和软件可靠性问题。这一阶段的研究对象增加了并发程序,着重研究高级程序设计语言、编译程序、操作系统以及各种应用软件。计算机系统的处理能力得到加强,设计与编制程序的工作方式逐步转向合作方式。

第三阶段

软件工程出现以后迄今为第三阶段1968年以来)。由于大型软件的开发是一项工程性任务,采用个体或合作方式不仅效率低,产品可靠性差,甚至很难完成,只有采用工程方法才能适应。从而在1968年的大西洋公约学术会议上提出了软件工程,40多年来,软件领域工作的主要特点是:第一,随着微型化、并行化、网络化硬件平台的快速发展。资源化、服务化、泛在化应用形态的不断拓广,各类新型应用模式与应用系统不断出现。如普适计算、服务计算、云计算嵌入式系统、混成系统、信息物理系统等。对计算机软件提出了挑战,出现了嵌入式软件与应用、网络软件与应用、分布式软件与应用、自治式软件与应用、“软件作为服务”与应用等各种软件与应用形态,促进了软件理论、方法与技术的发展。第二,开发方式逐步由个体合作方式转向工程方式。软件工程发展迅速,出现了计算机辅助软件工程、软件开发过程的规范化管理、基于Internet的软件协同开发等。除了开发各类工具与环境,用以支撑软件的开发与维护外,还出现了一些实验性的软件自动化系统。第三,软件复杂性控制问题颇受关注。致力研究软件开发过程本身,在主流的功能分解风范与模型、面向对象风范与模型基础上,开始探索新型软件开发风范与模型,如资源开放联盟、网构软件风范与模型等。研究软件体系结构、基于构件的软件以及中间件等。第四,除了软件传统技术继续发展外。人们着重研究以智能化、自动化、集成化、网络化、信息化以及自然化等为标志的软件开发与运行新技术。开始探索情景驱动的软件自适应方法、技术与系统等。第五,注意研究软件理论与非经典的软件模型,特别是软件开发过程的本质、量子程序语言与系统等。

分类

计算机软件系统通常分为系统软件、应用软件、支撑软件三类。

系统软件

系统软件是计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。它与具体的应用领域无关,如编译程序和操作系统等。编译程序将程序人员用高级语言书写的程序翻译成与之等价的、可执行的低级语言程序,操作系统则负责管理系统的各种资源、控制程序的执行,在任何计算机系统的设计中,系统软件都要予以优先考虑。

应用软件

应用软件是特定应用领域中用以解决实际计算问题的软件。例如,人口普查用的软件就是一种应用软件,对于具体的应用领域,应用软件的质量往往成为影响计算机实际效果的决定性因素。20世纪70年代出现的嵌入式应用与近年来兴起的信息物理系统,其相应软件的复杂程度高,开发工作量大,促进了软件的发展。模拟应用导致模拟语言(simula)的出现,随着计算机应用水平的不断提高,各类应用模式不断出现,促进了计算机软件的发展,应用软件的作用越来越大。

支撑软件

支撑软件是软件开发、维护与运行的软件。随着计算机科学技术的发展,软件的开发、维护与运行的代价在整个计算机系统中所占的比重很大,远远超过硬件。因此,支撑软件的研究具有重要意义,直接促进软件的发展。当然,数据库管理系统、网络软件等也可算作支撑软件。但是20世纪70年代中后期发展起来的软件开发环境以及后来开发的中间件则可看成现代支撑软件的代表。软件开发环境主要包括环境数据库、各种接口软件和工具组,三者形成整体,协同支撑软件的开发与维护。

组成部分

计算机软件包括软件语言、软件方法学软件工程、软件系统。

软件语言

软件语言是用以书写程序(或设计规约、功能规约、需求规约)和文档的语言。又可分为实现级语言(书写程序及其文档之语言)、设计级语言(书写设计规约及其文档之语言)、功能级语言(书写功能规约及其文档之语言,以及需求级语言(书写需求规约及其文档之语言)。

软件方法学

软件方法学是以软件方法为研究对象的学科,着重研究诸如自顶向下方法、自底向上方法、面向对象方法、软件自动化方法、形式方法等。

软件工程

软件工程是应用计算机科学与数学原理开发与维护软件的工程,或者可以说软件工程的学科含义是用工程化方法研究、开发、维护软件的学科,如软件开发环境、领域工程、需求工程以及软件自动化等。

相关系统

软件系统包括各种用于软件开发与维护之系统以及应用软件系统,如操作系统、语言处理系统、数据库管理系统、计算机安全系统等。

软件开发

软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉,需求分析,设计,实现和测试的系统工程。

软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。

软件许可

不同的软件一般都有对应的软件许可,软件的使用者必须在同意所使用软件的许可证的情况下采能够合法的使用软件。从另一方面来讲,某种特定软件的许可条款也不能够与法律相抵触。

未经软件版权所有者许可的软件拷贝将会引发法律问题,一般来讲,购买和使用这些盗版软件也是违法的。

难点与展望

难点

软件是智力产品,软件开发是智力活动。其难点是:第一,如何从软件科学的角度加深对软件开发过程本质的认识,“变是不变的真理”在软件领域表现突出。软件在使用过程中必须不断维护,其中包括:①纠错性维护,使用中一旦发现存在错误,便及时纠正。②预见性维护,指预防检测与改正软件中存在的潜在错误。③适应性维护,随着环境的改变,使原有软件适应新的环境。④完善性维护,原有软件在设计时难免有不完善之处,在使用中需要逐步完善。变动性是软件的重要特征,软件开发风范与模型均和领域有关。领域不同,合适的风范与模型可能也不同。但软件开发过程的本质是否也和领域有关,目前尚难断定。共性为何,个性为何,这些都是有待研究的问题。软件主要是由人开发的,各人思考问题的习惯、方式不尽相同,思维规律也不尽相同。但软件开发过程的本质是否也和思维规律有关,亦亟待研究。此外,软件开发过程的复杂性研究对软件开发的作用巨大影响深远。

第二,如何从开发与运行的角度,使得计算机软件能够更加适应开放环境的需要,即功能与性能更加智能化。“智能”含义,众说纷纭。然而,多数人认为,智能是指洞察、学习、理解、推理的能力。其中学习是核心,如果软件智能化指的是使软件本身具备智能,则事实表明,软件是能智能化的。如果软件智能化指的是使软件具备人类智能,则当然是有条件的。目前流行的归纳学习、分析学习、联接学习以及遗传学习等途径各有利弊,应视具体情况,酌情采用,或另创新途径。另一方面,需要从软件方法学的角度,提出新的软件范型、结构模型与相应的开发方法与运行机理。对智能化的软件给以系统化的支持。

第三,如何从保证软件产品质量的角度来保证程序正确性与软件可信性。程序正确性总是相对某一基准而言的,一般说来,程序(实现级)是正确的。指的是它能全部体现相应设计规约中的功能,设计规约的正确性。指的是它能体现功能规约中的全部功能。功能级程序(即功能规约)是正确的,则指它能体现需求定义中的全部需求,过去考虑较多的是实现级程序的正确性,今后宜更多考虑设计级与功能级程序的正确性。理论上的正确性与实际的正确性从理论上说应该是一致的,但实际上又往往不能完全一致。问题在哪里,是理论原因还是实际原因,有待研究。此外,开发过程不正确,则任何级别的程序正确性均无法保证。在这种意义上说,开发过程的正确性就显得格外重要,许多开放环境下的复杂软件系统的正确性没有绝对的基准,而只能以用户满意度或“足够正确”来刻画。如何处理此类系统的正确性问题是亟待研究的问题。更进一步,如何保证开放环境下软件系统高可信也是一个挑战性的问题。

第四,如何从服务用户的角度来提高用户友善性。软件质量优劣的最终评判者是用户,对用户不友善的软件,用户当然不会乐于使用。为使软件对用户友善,人与系统的接口界面应尽可能采用自然语言与图形语言,这一点颇为重要。采用自然语言与图形语言还只是接口界面的表示问题,更重要的还是接口界面的结构。结构宜简明,力戒烦琐,最后随着非经典计算如量子计算等的研究进展,也需研究如何开发软件。

展望

展望未来,挑战与机遇并存。随着对软件开发过程本质认识的深入,软件开发与运行的功效越来越高。软件的智能化水平得到不断的提升,能够不断适应开放、动态与多变环境的需要。软件产品的质量能够从多个方面得到综合化的保障,软件系统的可信性将得到大幅度的提升。软件系统的用户友善性越来越好,能够更好地服务广大用户的需求。总之,软件系统将能够更好地满足信息化社会的需要。

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: