移动应用软件测试技术与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 软件的定义及发展史

1.1.1 软件的定义

软件是一系列按照特定顺序组成的计算机数据和指令,是计算机中的非有形部分。计算机中的有形部分称为“硬件”,由计算机的各个部件及电路所组成;计算机软件需通过硬件才能运行。

软件包括所有计算机运行的程序,可执行文件、库及脚本语言等。软件不分架构,有其共同的特性,即可以让硬件实现设计时要求的功能。软件存储在存储器中,不是可以碰触到的实体。

软件并不只限于可以在计算机中运行的计算机程序,与计算机程序相关的文档一般也被认为是软件的一部分,简单说软件就是程序加文档的集合体。

一般来说,计算机软件分为系统软件、应用软件和介于这两者之间的中间件。系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据所服务的领域提供不同的功能。

1.1.2 软件的发展史

计算机软件技术发展很快,70多年前,计算机只能被专业人员使用,今天甚至学龄前儿童都可以灵活地操作;50多年前,文件在两台计算机之间交换仍很麻烦,甚至在同一台计算机的两个不同的应用程序之间进行交换也很困难,今天网络在两个平台和应用程序之间提供了方便的文件传输;40多年前,多个应用程序不能方便地共享相同的数据,今天数据库技术使得多个用户、多个应用程序可以互相间灵活地共享数据。了解计算机软件的发展史对理解计算机软件在计算机系统中的作用至关重要。

1.第1代软件(1946—1953年)

第1代软件是由机器语言编写的,机器语言是计算机的中央处理器能执行的基本指令,由0和1的机器代码组成。

【案例】计算2+6的机器语言指令及其说明。

指令说明:第1-2条指令表示将6送到寄存器AL中;第3-4条指令表示将2与寄存器AL中的内容相加,结果仍在寄存器AL中;第5-6条指令表示将AL中的内容送到地址为5的单元中。

不同的计算机使用不同的机器语言,程序员必须记住每条语言指令的二进制数字形式。因此只有少数专业人员能够为计算机编写程序,这就大大限制了计算机的使用和效率。用机器语言进行程序设计不仅枯燥费时,而且容易出错。

在这个时代的末期出现了汇编语言,它使用助记符(用字母的缩写来表示指令)表示每条机器语言指令。例如,ADD表示加、SUB表示减、MOV表示移动数据等。相对于机器语言,用汇编语言编写程序就容易多了。

【案例】计算2+6的汇编语言指令及其说明。

指令说明:第1条指令表示将6送到寄存器AL中;第2条指令表示将2与寄存器AL中的内容相加,结果仍在寄存器AL中;第3条指令表示将AL中的内容送到地址为5的存储器单元中。

由于程序最终在计算机中执行时采用的都是机器语言,所以需要用一种称为“汇编器”的翻译程序把用汇编语言编写的程序翻译成机器代码。编写汇编器的程序员简化了程序设计,是最初的系统程序员。

2.第2代软件(1954—1964年)

当硬件变得更强大时,就需要更强大的软件使计算机更高效地运行。汇编语言向正确的方向前进了一大步,但程序员还是必须记住很多汇编指令,编写程序依旧很麻烦、易错。第2代软件开始使用高级程序设计语言(简称为“高级语言”,相应地,机器语言和汇编语言则被称为“低级语言”)编写。高级语言的指令形式类似自然语言和数学语言(例如,计算2+6的高级语言指令就是“2+6”),不仅容易学习,方便编程,也提高了程序的可读性。

IBM公司从1954年开始研发高级语言,同年发明了第1个用于科学与工程计算的FORTRAN语言。1958年,麻省理工学院的麦卡锡(John MaCarthy)发明了第1个用于人工智能的LISP语言。1959年,宾州大学的霍普(Grace Hopper)发明了第1个用于商业应用程序设计的COBOL语言。1964年,达特茅斯学院的凯梅尼(John Kemeny)和卡茨(Thomas Kurtz)发明了BASIC语言。

高级语言可使多台计算机运行同一个程序,每种高级语言都有配套的翻译程序(称为“编译器”),编译器可以把高级语言编写的语句翻译成等价的机器指令。系统程序员编写诸如编译器这样的辅助工具,使用这些工具编写应用程序的人被称为“应用程序员”。随着程序涉及的功能越来越复杂,应用程序员涉及的计算机硬件越来越少。那些仅仅使用高级语言编程的人不需要懂得机器语言或汇编语言,这就降低了对硬件及机器指令方面的要求,因此这个时期有更多计算机应用领域人员的工作转为专职程序员。

由于高级语言程序需要转换为机器语言程序来执行,因此高级语言对软硬件资源的消耗更多,运行效率也相对较低;另外由于汇编语言和机器语言可以根据计算机的所有硬件特性直接控制硬件,并且运行效率较高,因此在实时控制和实时检测等领域的许多应用程序仍然使用汇编语言和机器语言来编写。

在第1代和第2代软件时期,计算机软件都是规模较小的程序,程序的编写者和使用者往往是同一个(或同一组)人。由于规模小,程序编写起来比较容易,所以也没有系统化的方法对软件的开发过程进行管理。这种个体化的软件开发环境使得软件设计往往只是在人们头脑中隐含进行的一个模糊过程,除了程序清单之外,没有其他文档资料。

3.第3代软件(1965—1970年)

在这个时期集成电路的出现使得处理器的运算速度得到了大幅度的提高,即处理器总是在等待运算器准备下一个作业时“无所事事”。为此需要编写一种软件,使所有计算机资源处于整体的控制中,这种软件就是操作系统。由于计算机终端的出现,所以使用户能够直接访问计算机;同时不断发展的系统软件则使计算机运转得更快。但是从键盘输入和屏幕输出数据是个很慢的过程,比在内存中执行指令慢得多,这就遇到了如何利用计算机越来越强大的功能和速度的问题。解决方法就是分时运行,即众多用户用各自的终端同时与一台计算机通信。控制这一进程的是分时操作系统,它负责组织和安排各个作业。

1967年,塞缪尔(A.L.Samuel)发明了第1个下棋程序,开始了人工智能的研究。1968年,荷兰计算机科学家狄杰斯特拉(Edsgar W.Dijkstra)发表论文“GOTO语句的害处”指出调试和修改程序的难度与程序中包含GOTO语句的数量成正比。从此,各种结构化程序设计理念逐渐确立起来。

20世纪60年代,计算机管理的数据规模越来越庞大,应用越来越广泛。为满足多用户、多应用共享数据的需求,使数据尽可能多地为应用程序服务,出现了数据库技术,即统一管理数据的软件系统——数据库管理系统(DBMS)。随着计算机应用的日益普及,软件数量急剧膨胀,在计算机软件的开发和维护过程中出现了一系列严重问题。例如,用户有了新的需求必须相应地修改程序,以及硬件或操作系统更新时通常需要修改程序以适应新的环境等。更严重的是,由于许多程序的个体化特性使其最终不可修改,因此“软件危机”开始出现。1968年,北大西洋公约组织在联邦德国召开国际会议讨论“软件危机”问题,在这次会议上正式提出并使用了“软件工程”这个名词。

4.第4代软件(1971—1989年)

20世纪70年代出现了结构化程序设计技术,例如Pascal语言和Modula-2语言都是采用结构化程序设计规则编制的,BASIC这种编程语言也被升级为具有结构化的版本;此外还出现了灵活且功能强大的C语言。为IBM PC开发的PC-DOS(或MS-DOS)成为微型计算机的标准操作系统,Macintosh机的操作系统的图形界面彻底改变了人机交互的方式。20世纪80年代,随着微电子和数字化声像技术的发展,计算机开始处理图像、声音等多媒体信息,由此出现了多媒体计算机。多媒体技术的发展使计算机的应用进入了一个崭新阶段。

这个时期出现了许多多用途的应用软件,这些应用软件面向没有任何计算机使用经验的用户,典型的应用软件就是电子制表软件、文字处理软件和数据库管理软件。Lotus1-2-3是代表性的商用电子制表软件,WordPerfect是代表性的商用文字处理软件,dBase Ⅲ是代表性的数据库软件。

5.第5代软件(1990年—至今)

第5代软件时期到来的3个标志性事件为美国Microsoft公司的崛起、面向对象的程序设计方法的出现,以及万维网(World Wide Web)的普及。

在这个时期,Microsoft公司的Windows操作系统在PC市场占有显著优势。尽管WordPerfect仍在继续改进,但Microsoft公司的Word成了最常用的文字处理软件。20世纪90年代中期,Microsoft公司将文字处理软件Word、电子制表软件Excel、数据库管理软件Access和其他应用软件捆绑在一个软件包中,称之为“办公自动化软件”。

面向对象的程序设计方法最早是在20世纪70年代开始使用的,当时主要是用在Smalltalk语言中。20世纪90年代,面向对象的程序设计逐步代替了结构化软件设计,成为最流行的程序设计技术。面向对象程序设计尤其适用于规模较大、具有高度交互性、反映现实世界中动态内容的应用程序,Java、C++、C#等都是面向对象程序设计语言。

1990年,英国研究员提姆·柏纳李(Tim Berners-Lee)提出了一个全球Internet概念,并创建格式化文档的HTML语言及一套技术规则,以及能让用户访问全世界站点上信息的浏览器。此时的浏览器还很不成熟,只能显示文本。

软件体系结构从集中式的主机模式转变为分布式的客户机/服务器模式(C/S)或浏览器/服务器模式(BIT/S),并且专家系统和人工智能软件从实验室走出进入了实际应用;同时完善的系统软件、丰富的系统开发工具和商品化的应用软件的大量出现,以及通信技术和计算机网络的飞速发展使得计算机进入了一个大发展的阶段。

在计算机软件的发展史上,需要注意“计算机用户”这个概念的变化。起初计算机用户和程序员是一体的,程序员编写程序来解决自己或他人的问题,程序的编写者和使用者是同一个(或同一组)人。在第1代软件末期,编写汇编器等辅助工具的程序员的出现带来了系统程序员和应用程序员的区分,但是计算机用户仍然是程序员。20世纪70年代早期,应用程序员使用复杂的软件开发工具编写应用程序,这些应用程序由没有计算机背景的从业人员使用。计算机用户不仅是程序员,还包括使用这些应用软件的非专业人员。随着微型计算机、计算机游戏、教育软件,以及各种界面友好的软件包的出现,更多人成为计算机用户。万维网的出现,使网上冲浪成为一种娱乐方式,更多的人成为计算机的用户。今天,计算机用户可以是在学习阅读的学龄前儿童、在下载音乐的青少年、在准备毕业论文的大学生、在做家庭预算的女主人,以及在安度晚年的退休人员等,所有使用计算机的人都是计算机用户。