一、软件的内涵
什么是软件?
著名的美国软件工程教材作者R.S.Pressman的定义是:软件是能够完成预定功能和性能的可执行的计算机程序,包括使程序正常执行所需要的数据,以及有关描述程序操作的和使用文档。简而言之,可表述为:软件 = 程序 + 文档。
1.1 软件的定义
计算机系统中的程序及其文档。
程序是计算任务的处理对象和处理规则的描述;
文档是为了便于了解程序所需的阐明性资料。
1.2 软件的特点
软件是无形的、不可见的逻辑实体
软件是设计开发的,而不是生产制造的
软件在使用过程中没有磨损、老化问题
软件是定制开发的
软件是复杂的
软件开发成本高
软件易于复制
软件质量要求较高
软件的开发与运行都离不开相关的计算机系统环境
软件开发工作牵涉到很多社会因素
软件开发依赖于开发人员的业务素质、智力,以及人员的组织、合作和管理,而硬件设计与人的关系相对小。
软件开发的实际开发成本只是整个工程成本的一小部分,而软件测试、系统维护等任务将占据工程的很大一部分成本。
1.3 软件的种类
按照软件的功能划分,软件一般可分为:
系统软件、支撑软件和应用软件。
二、操作系统
1.什么是操作系统
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,用户和计算机的接口,同时也是计算机硬件和其他软件的接口。 其能管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,并使计算机系统所有资源最大限度地发挥作用。此外其还提供了各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口。
2.操作系统的功能
(1)服务
例如操作系统对用户和应用提供服务(I/O服务、声卡、网卡的访问等等...)。操作系统也使得我们使用计算机更加方便。
(2)控制
操作系统控制了计算机中软件与硬件的运行方式,它也限制了这些不同的应用程序所占用的资源。
(3)管理
操作系统从对内部对象管理的层面上说,是一个资源分配器。为了使得不同的程序能够尽可能的同时运行,操作系统需要在不同时刻对 不同程序适当的分配资源达到程序协调运行的目的。
以上几点可由下面的几个特性概括:
a.用户角度上,操作系统是一个控制软件
b.管理应用程序
c.为应用程序提供服务
d.杀死应用程序
e.资源管理
f.管理外设,分配资源
3.操作系统的特点
(1)并发性
计算机系统中同时运行着多个程序。体现在:用户程序和用户程序之间兵法执行,或者用户程序和操作系统程序并发执行
(2)共享性:操作系统的程序和多个用户程序共用系统中的资源。 共享的方式:互斥共享:一段时间内只能执行一个用户程序,如打印机。 同时共享:在一段时间里可以被多个程序访问,如硬盘
(3)随机性:对不可预测发生的事件做出响应,也无法预知每个进程的快慢。
(4)不确定性:由共享和并发引起,比如程序运行的时间,资源是独占还是共享的等
4.操作系统架层次结构:
操作系统起到承上(上承应用程序)启下(下接硬件)的作用,直接面向各种硬件。
5.操作系统在软件中的位置:
软件分为应用软件和系统软件,造作系统隶属于系统软件,它位于应用软件之下,为应用软件提供服务支撑。
三、软件工程
什么是软件工程?
从上世纪90年代初起,计算学科的发展远远超越了计算机科学的边界,形成了计算机科学、计算机工程、软件工程、信息系统与信息技术等若干独立学科。计算机工程从电子工程学科中分离出来,旨在研究计算机硬件的相关工程问题,而软件工程从计算机科学中的一个学科方向发展成为与之并重的一门独立学科,重点研究如何以系统的、可控的、高效的方式开发和维护高质量软件的问题。
1.软件工程的定义
软件工程学科诞生后,人们为软件工程给出了不同的定义,例如最早的定义是由F.L. Bauer给出的,即“软件工程是为了经济地获得能够在实际机器上高效运行的、可靠的软件而建立和应用一系列坚实的软件工程原则”。而美国梅隆卡耐基大学软件工程研究所(SEI)给出的定义则是软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题。但目前普遍使用的软件工程定义是由IEEE给出的,即软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护。
软件工程概念实际存在两层含义,从狭义概念看,软件工程着重体现在软件过程中所采用的工程方法和管理体系,例如,引入成本核算、质量管理和项目管理等,即将软件产品开发看作是一项工程项目所需要的系统工程学和管理学。从广义概念看,软件工程涵盖了软件生命周期中所有的工程方法、技术和工具,包括需求工程、设计、编程、测试和维护的全部内容,即完成一个软件产品所必备的思想、理论、方法、技术和工具。
2.软件工程的内涵
软件工程学科包含为完成软件需求、设计、构建、测试和维护所需的知识、方法和工具。软件工程不局限在理论之上,更重要在实践上,能够帮助软件组织协调团队、运用有限的资源,遵守已定义的软件工程规范,通过一系列可复用的、有效的方法,在规定的时间内达到预先设定的目标。针对软件工程的实施,无论是采用什么样的方法和工具,先进的软件工程思想始终是最重要的。只有在正确的工程思想指导下,才能制定正确的技术路线,才能正确地运用方法和工具达到软件工程或项目管理的既定目标。
3.软件工程是一门交叉性学科
软件工程是一门交叉性的工程学科,它是将计算机科学、数学、工程学和管理学等基本原理应用于软件的开发与维护中,其重点在于大型软件的分析与评价、规格说明、设计和演化,同时涉及管理、质量、创新、标准、个人技能、团队协作和专业实践等。从这个意义上看,软件工程可以看作由下列3部分组成:
(1)计算机科学和数学用于构造软件的模型与算法;
(2)工程科学用于制定规范、设计范型、评估成本以及确定权衡等;
(3)管理科学用于计划、资源、质量、成本等管理。
例如,计算机辅助软件工程(Computer Aided Software Engineering,CASE)是一组工具和方法的集合,可以辅助软件生命周期各阶段进行的软件开发活动。CASE吸收了CAD(计算机辅助设计)、软件工程、操作系统、数据库、网络和许多其他计算机领域的原理和技术。这个例子也体现了这一点——软件工程是学科交叉的、集成和综合的领域。
4.软件工程学科范围
如果从知识领域看,软件工程学科是以软件方法和技术为核心,涉及计算机的硬件体系、系统基础平台等相关领域,同时还要涉及一些应用领域和通用的管理学科、组织行为学科。例如,通过应用领域的知识帮助我们理解用户的需求,从而可以根据需求来设计软件的功能。 在软件工程中必然要涉及组织中应用系统的部署和配置所面临的实际问题,同时又必须不断促进知识的更新和理论的创新。为了真正解决实际问题,需要在理论和应用上获得最佳平衡。
四、程序设计语言的发展
计算机程序设计语言,通常简称为编程语言,是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
在过去的几十年间,大量的程序设计语言被发明、被取代、被修改或组合在一起。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而有许多语言并对新手来说太难学;还有,不同程序之间的运行成本(runtime cost)各不相同。
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl更适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)。
高级程序设计语言(也称高级语言)的出现使得计算机程序设计语言不再过度地倚赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言之一FORTRAN的一个主要目标,就是实现平台独立。
软件的产生始于早期的机械式计算机的开发。从19世纪起,随着机械式计算机的更新,出现了穿孔卡片,这种卡片可以指导计算机进行工作。但是直到20世纪中期现代化的电子计算机出现之后,软件才真正得以飞速发展。在世界上第一台计算机ENIAC上使用的也是穿孔卡片,在卡片上使用的是专家们才能理解的语言,由于它与人类语言的差别极大,所以我们称之为机器语言。也就是第一代计算机语言。这种语言本质上是计算机能识别的唯一语言,但人类却很难理解它,以后的计算机语言就是在这个基础上,将机器语言越来越简化到人类能够直接理解的、近似于人类语言的程度,但最终送入计算机的工作语言,还是这种机器语言。高级语言的任务就是将它翻译成易懂的语言,而这个翻译工作可以由计算速度越来越高、工作越来越可靠的计算机自己来完成。
计算机语言发展到第二代,出现了汇编语言。比起机器语言,汇编语言大大前进了一步,尽管它还是太复杂,人们在使用时很容易出错误,但毕竟许多数码已经开始用字母来代替。简单的“0、1”数码谁也不会理解,但字母是人们能够阅读并拼写的。第二代计算机语言仍然是“面向机器”的语言,但它已注定要成为机器语言向更高级语言进化的桥梁。
当计算机语言发展到第三代时,就进入了“面向人类”的语言阶段。你可以阅读、并直接用人类的语言来输入。对我们汉语来说,目前还不能用中文汉字来输入指令,这主要是因为中文的输入还没有一个非常好的手段。第三代语言也被人们称之为“高级语言”。高级语言是一种接近于人们使用习惯的程序设计语言。它允许用英文写解题的计算程序,程序中所使用的运算符号和运算式子,都和我们日常用的数学式子差不多。例如用BASIC高级语言,要想计算7×6的结果,只需写出 PRINT7*6即可,送入计算机后将自动进行计算并打印出结果。一般人都能很快学会使用计算机,并且完全可以不了解机器指令,也可以不懂计算机的内部结构和工作原理,就能编写出应用计算机进行科学计算和事务管理的程序。
高级语言容易学习,通用性强,书写出的程序比较短,便于推广和交流,是很理想的一种程序设计语言。
高级语言发展于50年代中叶到70年代,有些流行的高级语言已经被大多数计算机厂家采用,固化在计算机的内存里。如 BASIC语言,现在已有128种不同的 BASIC语言在流行,当然其基本特征是相同的。
除了BASIC语言外,还有FORTRAN(公式翻译)语言、 COBOL(通用商业语言)、 C语言、 DL/I语言、 PASCAC语言、ADA语言等250多种高级语言。
高级语言是一种动用语言,要完成某一个简单的计算步骤,你必须详细准确地给出每一条指令。如解决经营管理活动中天天都要碰到的财务清账、库存等问题,就须编无数条程序,而情况一经变化,原有的设计程序则要修改,这样就使错误的可能性增大,工作效率大大降低。为了解决这个问题,第四代计算机语言,即“实用语言”出现了。
第四代语言是使用第二代第三代语言编制而成的,每一种语言都有其特定的应用范围。实际上,实用语言发展到今天已出现了一些有运用性质的第四代语言,如“LO- TOS1—2—3”。第四代语言的特点就是它们只需要操作人员输入原始数据,并命令它们执行。至于怎样执行则由它们本身来决定的,它已经在相当程度上替代了人脑的工作。