软件

软件
    软件
  软件,是一系列按照特定顺序组织的计算机数据和指令的集合,或者说,是计算机系统中的程序和有关的文件。软件一般被划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。

简介

  软件并不只是包括可以在计算机上运行的计算机程序,与这些计算机程序相关的文档,一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体。软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响。  程序是计算任务的处理对象和处理规则的描述;文件是为了便于了解程序所需的资料说明。程序必须装入机器内部才能工作,文件一般是给人看的,不一定装入机器。程序作为一种具有逻辑结构的信息,精确而完整地描述计算任务中的处理对象和处理规则。这一描述还必须通过相应的实体才能体现。记载上述信息的实体就是硬件。  软件是用户与硬件之间的接口界面。使用计算机就必须针对待解的问题拟定算法,用计算机所能识别的语言对有关的数据和算法进行描述,即必须编程序和有软件。用户主要是通过软件与计算机进行交往。软件是计算机系统中的指挥者,它规定计算机系统的工作,包括各项计算任务内部的工作内容和工作流程,以及各项任务之间的调度和协调。软件是计算机系统结构设计的重要依据。为了方便用户,在设计计算机系统时,必须通盘考虑软件硬件的结合,以及用户的要求和软件的要求。  发展计算机科学技术,软件和硬件都是不可缺少的重要方面。二者既有分工,又有配合。硬件是物质基础,软件担负指挥功能。软件的发展以硬件为基础,其发展也促进了硬件、计算机科学技术和其他科学技术的发展。它在社会信息化和人类文化的发展中具有重要的作用。

发展过程

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

·第一阶段(1946~1956年) 

    从第一台计算机上的第一个程序的出现到实用的高级程序设计语言出现以前。计算机的工作是由储存在其内部的程序指挥的。这是诺伊曼式计算机的重要特色,当时计算机的应用领域较窄,主要是科学计算。就一项计算任务而言,输入、输出量并不大,但计算量却比较大,主要是处理一些数值数据。机器结构以中央处理器为中心,存储容量较小。编制程序(简称编程)用的工具是低级语言,即以机器基本指令集为主的机器语言和在机器语言基础上稍加符号化的汇编语言。突出的问题是,程序的设计和编制工作复杂、烦琐、费时和易出差错。衡量程序质量的标准主要是功效,即运行时间省,占用内存小,很少考虑到结构清晰、易读性和易维护性。设计和编制程序采用个体工作方式,强调编程技巧,主要研究科学计算程序、服务程序和程序库。研究对象是顺序程序。

·第二阶段(1956~1968年) 

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

·第三阶段(1968年以来) 

    软件工程出现以后。由于大型软件的编制是一项工程性任务,采用个体或合作方式不仅效率低,产品可靠性差,而且很难完成。只有采用工程方法才能适应。在这一阶段中,应用领域迅速扩大,出现了嵌入式应用,其特点是受制于它所嵌入的宿主系统,而不是受制于功能要求。为了适应计算机网的需要,出现了网络软件。随着微型计算机的出现,分布式应用和分布式软件得到发展。同时,也开始了有关方法学的研究工作。这一阶段的研究对象增加了嵌入式软件、网络软件和分布式软件。编制方法主要是结构程序设计方法和软件工程方法。这一阶段普遍采用现代高级语言,即具有并行成分和实时成分的模块化语言。编制软件的工作方式逐步转向工程化。

分类

·系统软件

  居于计算机系统中最靠近硬件的一层。系统软件使得计算机用户和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。其他软件一般都通过系统软件发挥作用。它与具体的应用领域无关,如编译程序和操作系统等。编译程序把程序人员用高级语言书写的程序翻译成与之等价的、可执行的低级语言程序;操作系统则负责管理系统的各种资源、控制程序的执行。在任何计算机系统的设计中,系统软件都要优先予以考虑。  一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具)。

·支援软件

  支援其他软件的编制和维护的软件。随着计算机科学技术的发展,软件的编制和维护代价在整个计算机系统中所占的比重很大,远远超过硬件。因此,支援软件的研究具有重要意义,直接促进软件的发展。当然,编译程序、操作系统等系统软件也可算作支援软件。但是,70年代中期和后期发展起来的软件支援环境,可看成为现代支援软件的代表,主要包括环境数据库、各种接口软件和工具组。三者形成整体,协同支援其他软件的编制。

·应用软件

  特定应用领域专用的软件,是为了某种特定的用途而被开发的。它可以是一个特定的程序,比如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统,比如数据库管理系统。例如,人口普查用的软件就是一种应用软件。对于具体的应用领域,应用软件的质量往往成为影响实际效果的决定性因素。  70年代出现的嵌入式应用,其相应软件的复杂程度高,编制工作量大,促进了软件的发展。模拟应用导致模拟语言(SIMULA)的出现。应用软件的作用越来越大。上述分类不是绝对的,而是互相交叉和变化的。有些软件如编译程序和操作系统,既可看作是系统软件,又可看作是支援软件。它们在一个系统中是系统软件,而在另一个系统中却是支援软件;也可以在同一系统中既是系统软件,又是支援软件。系统软件和应用软件之间也有类似情况。有的软件如数据库管理系统、网络软件和图形软件,原来算作应用软件,后来又被看作为系统软件。而且系统软件、支援软件和应用软件三者的编制技术基本相同。因此,这三者既有分工,又有结合,并不截然分开。  较常见的有:  字处理软件 如WPS Office、Microsoft Office、OpenOffice.org等  信息管理软件 如Microsoft Access数据库  辅助设计软件 如AutoCAD  实时控制软件  教育与娱乐软件  图形图像软件 Adobe Photoshop、CorelDRAW、painter、GIMP、3DS MAX、MAYA、Blender、xsi、lightwave、cineme 4d、Houdini 、Krita  后期合成软件 after effects、combustion、digital fusion、shake、flame  网页浏览软件 Internet Explorer 浏览器、Firefox、Google浏览器、Safari、Opera、Konqueror  网络通信软件 ICQ、MSN、UUcall、Skype、Yahoo! Messenger、QQ、AOL Instant Messenger  影音播放软件 KMPlayer、GOM Player、WMP、暴风影音、风雷影音
千千静听软件
 千千静听软件
  音乐播放软件 Winamp、Foobar2000、千千静听、酷我音乐、酷狗音乐  下载管理软件 Orbit、迅雷、FlashGet、超级旋风  邮件管理软件 Windows Mail、Outlook Express、Foxmail、The Bat!、Dreammail、KMail  信息安全软件 德国小红伞、卡巴斯基、PC-cillin、诺顿防毒、BitDefender、瑞星杀毒、金山毒霸  虚拟化平台软件 汉邦极通EWEBS、vmware、思杰、VirtualBox

·编程语言

  软件可以由以下这些编程语言写成:  低级语言:汇编语言,为硬件间各设备沟通的桥梁软件,又称为固件(例如BIOS)。   高级语言:Basic、C语言、C++语言……等,为编辑操作系统和应用软件的语言。   脚本语言:例如 Shell Script、Javascript、PHP、Python。

·源代码

  源代码又称为源代码或源码。是指以编程语言所撰写的一系列人类可阅读的计算机指令,以实现出软件的行为和功能。

软件开发

  软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉,需求分析,设计,实现和测试的系统工程。  软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。

使用许可

  不同的软件一般都有对应的软件授权,软件的用户必须在同意所使用软件的许可证的情况下才能够合法的使用软件。从另一方面来讲,特定软件的许可条款也不能够与法律相抵触。  依据许可方式的不同,大致可将软件区分为几类:  专属软件:此类授权通常不允许用户随意的复制、研究、修改或散布该软件。违反此类授权通常会有严重的法律责任。传统的商业软件公司会采用此类授权,例如微软的 Windows 和办公软件。专属软件的源码通常被公司视为私有财产而予以严密的保护。  自由软件:此类授权正好与专属软件相反,赋予用户复制、研究、修改和散布该软件的权利,并提供源码供用户自由使用,仅给予些许的其它限制。以 Linux、Firefox 和 OpenOffice 可做为此类软件的代表。  共享软件:通常可免费的取得并使用其试用版,但在功能或使用期间上受到限制。开发者会鼓励用户付费以取得功能完整的商业版本。  免费软件:可免费的取得和散布,但并不提供源码,也无法修改。  公共软件:原作者已放弃权利,著作权过期,或作者已不可考的软件。使用上无任何限制。

发展趋势

   60年代中期,软件的复杂程度增加, 不仅研制周期长,而且更为严重的是正确性难以保证。导致这种情况的一个重要原因,就是由于软件的研制和维护本身是工程性的任务,但软件人员所采取的方式却未能工程化。这样,便促使人们开始考虑采用工程方法和工程途径来研制和维护软件。于是,1968年提出了软件工程这个概念。软件工程发展迅速。虽然软件工程的对象和方法与传统工程差别很大,对“软件工程”一词还有异议,但是,应该采用工程方法研制和维护软件却是公认的。从现实和发展来看,软件工程不仅对软件发展,而且对计算机科学技术的发展所起的作用都是巨大的。软件工程的研究内容涉及对象、结构、方法、工具和管理等方面。  20世纪60年代以来,软件发展极为迅速。但是,发展状况仍远远不能适应社会信息化的要求。核心问题是改进功能,提高质量和生产率。  软件与计算机系统结构、超大规模集成电路技术、智能工程相结合,有助于研制第五代、第六代计算机系统和软件系统。第五代计算机的重要标志是智能化和知识化。为此,就必须研制智能化、知识化的软件系统。第六代计算机的重要标志是仿生,不仅能模拟人脑的正常功能,而且能模拟生物的特异功能。为此,必须研制具备特异功能的软件。  软件技术与软件理论相结合奠定软件理论基础,以发展新型软件技术。为了从根本上解决软件问题,必须建立理论基础。  工程化和形式化相结合,将推进软件自动研制系统。为了从根本上提高软件生产率,软件研制和维护过程中尽量多的工作将由机器来承担,发展软件自动研制系统。为此,工程化与形式化将紧密结合。在软件工程中采用形式方法,使得软件生存周期中各阶段的规格说明都能用合适的形式体系表示出来。再根据合适的变换规则,通过专用软件进行自动变换,产生出所需的软件。