第三章 学习目标
★ 理解计算机软件的定义及性质、软件系统的基本概念、软件系统的分类;
★ 了解“软件定义”时代的主要特征;
★ 理解操作系统的任务及功能;
★ 了解应用软件的概念及分类、软件技术的发展及重要事件、常用应用软件。
§3.1 软件的性质及发展史


1. 对“软件”的理解
从广义上讲,软件定义是
(1)能够完成预定功能和性能的可执行的指令(计算机程序);
(2)使得程序能够适当地操作信息的数据结构;
(3)描述程序的操作和使用的文档。
简单的说,软件包括程序、相关数据和文档(例:软件使用手册)。

2. 软件的性质
1.表现形式不同:可以把软件记录在纸张、内存、磁盘和光盘等物理存储介质上,但却无法看到软件本身的形态,必须通过运行、使用、观察和判断,才能了解它的功能、性能等特性。
2.生产方式不同:软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率较低。
3.维护方式不同:软件没有磨损、老化的问题. 但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改又可能(或不可避免地)引入新的错误,导致软件失效率升高,从而使软件退化。
4.软件复杂性和规模不断增加:Windows系统5000多万行代码。
5.软件定义一切:本质是在硬件资源虚拟化的基础上,可编写应用程序,满足访问资源的多样性的需求(计算、网络、安全、基础)。
3. 软件技术的进化史
机器语言:是计算机能够直接识别和执行的二进制代码;汇编语言:用助记符代替机器指令的低级语言;高级语言:是以人类的日常语言为基础的一种编程语言。例如:C、Pascal、Basic、Java、Fortran等。
1.软件技术发展的初期(20世纪50—70年代)
20世纪50年代前后:使用机器语言或汇编语言进行编程。
20世纪60年代中期至70年代末期:以Pascal、COBOL和C等过程化编程语言,数据库技术经历了层次数据库、网状数据库和关系数据库等阶段。软件曾出现严重危机,为提高软件的质量出现了软件工程方法。
2.软件技术发展的中期(20世纪80年代)
20世纪80年代:图形用户界面(GUI)普及与流行,图形用户界面(GUI)的出现使用户摆脱了枯燥的字符界面,有利于PC机的推广。1985年微软发行了Windows 1.0,PC平台GUI的尝试,Unix系统上的图形界面X Window也蓬勃地发展。
结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化,于是面向对象技术开始浮出水面,如C++。
20世纪80年代最重要的进展就是苹果公司发布运用图形用户界面的Macintosh系列计算机和PC机上微软Windows操作系统的出现。
3.网络计算时代的开始 (20世纪90年代21世纪初)
进入20世纪90年代以来,随着Internet的普及,世界范围的信息网提供了一个基本的网络计算结构,计算模式迅速地从集中的主机环境转变为分布式的浏览器/服务器(B/S)环境。
互联网的迅速发展普及,使信息获得的手段变得越来越简单。搜索引擎则彻底改变了人类获取信息和知识的方式,Google“谷歌”和“百度”是人们最常用的搜索引擎。
Linux出现开创了自由软件和开放源代码的新时代发展,Android是以Linux为基础的开放源码操作系统,它引领便携设备的操作系统发展。
4.软件定义的时代已经到来
目前正在进入一个新的时代:从基础设施角度可称为“互联网+时代”,从计算模式的角度可叫“云计算时代”,从信息资源的视角则是“大数据时代”或者“人工智能时代”,从最基本的使能技术的角度可称之为“软件定义的时代”。
国家“十三五”规划纲要中指出:要重点突破大数据和云计算关键技术、自主可控操作系统、高端工业和大型管理软件、新兴领域人工智能技术。这个纲要指出了未来我国软件业发展的方向和重点。
«中国制造2025»、« 国务院关于积极推进“互联网+”行动的指导意见»、« 国务院关于深化制造业与互联网融合发展的指导意见»、« 促进大数据发展行动纲要»和« 国家信息化发展战略纲要»等一系列国家战略的制定,必将使软件和信息技术服务业迎来更大发展机遇。
5.软件定义时代的主要特征
网络化:网络将成为软件开发、部署、运行和服务的主流平台 。
服务化:服务导向的业务创新、商业模式创新推动了产业的转型升级. 以用户为中心,按照用户需求动态提供计算资源、存储资源、数据资源、软件应用等服务成为软件服务的主要模式。
融合化:
1、数据驱动信息技术产业变革,通过软件定义硬件、存储、网络、系统等加速跨界融合和创新发展,带来更多的新产品、服务和模式创新。
2、加速各行业领域的融合创新和转型升级。软件定义制造、服务等方面激发了创新活力并催生了一批新的产业主体、业务平台、融合性业态、新型消费和众多新型网络经济模式。
智能化
社会信息化的一个主要趋势是向智能化时代演进,计算机软件技术智能化的发展将使软件开发技术发生质的飞跃,制造业等各行各业向智能化发展也需要智能化的软件支持和帮助,所有行业的发展都与软件的辅助分不开。软件技术正在构建智能化的生产模式和产业结构,新一代信息技术和制造业深度融合,将引发影响深远的产业变革,形成新的资产方式、产业形态和增长方式. 由人工智能驱动的下一代解决方案,能从完全不同的系统中收集前所未有的巨量数据,通过将系统、数据和人交织到一起,来根本性地改变组织的形态、功能和运作方式。
6. 软件系统的分层结构
计算机软件系统是一个分层的软件结构,包括系统软件层、支持软件层和应用软件层,其最底层是计算机硬件。l
1.系统软件:指本身不提供或提供很少的应用层面功能,主要为其他软件提供服务的软件。
2.支持软件:介于系统软件层和应用软件层之间,其功能是为应用层软件及最终用户处理自己的程序或者数据提供服务。
3.应用软件:指在操作系统和支持软件的支持下,软件厂商为用户开发的通用或专用软件,以及用户开发的应用程序等。是最终用户使用的界面。


1、安迪-比尔定理 (Andy and Bill’s Law)

安迪-比尔定理(Andy and Bill’s Law)是对IT产业中软件和硬件升级换代关系的一个概括。原话是 “Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。)” 安迪指英特尔前CEO安迪·格鲁夫,比尔指微软前任CEO比尔·盖茨,这句话的意思是, 硬件提高的性能, 很快被软件消耗掉了。
2、软件工程
20世纪60年代,随着计算机技术的发展和计算机应用的日益普及,软件系统的规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽,开发者和用户有了明确的分工,社会对软件的需求量剧增。但软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,从而导致了“软件危机”的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件产生进入了软件工程时代。软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。软件工程开发可分成六个阶段:
一、项目计划阶段(可行性分析阶段)
确定了一个软件以目前的条件可以完成,主要是经济,技术和社会条件,撰写可行性分析报告。需求方和开发方共同探讨项目中的问题的解决方案;需要的资金,人力,物力;对项目的进度和预期效益进行估计。
二、项目需求分析阶段
对用户需求进行分析。将用户的需求用逻辑的软件工程语言表达出来,设计好功能和数据库模型,编写软件需求设计书。这个阶段要注意的是行业的术语以及行业规则,开发的软件难免遇到不同行业,我们不是那个行业里面的人,所以对用户所在行业的需求分析的时候要正确理解他们的术语和规则。
三、项目设计阶段
概要设计就是设计软件的结构,包括组成模块,模块的层次结构,模块的调用关系,每个模块的功能等等。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。
详细设计阶段就是为每个模块完成的功能进行具体的描述,要把功能描述转变为精确的、结构化的过程描述。
概要设计阶段通常得到软件结构图。
详细设计阶段常用的描述方式有:流程图、N-S图、PAD图、伪代码等。
四、编码阶段
为程序员分配好编码任务,将软件的设计具体为软件代码。这里注意的是编码语言,工具,环境和编码规范。统一、标准的编码规范可让程序可读和易维护。
五、软件测试阶段
软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。
测试,目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例。如何才能设计出一套出色的测试用例,关键在于理解测试方法。不同的测试方法有不同的测试用例设计方法。两种常用的测试方法是白盒法和黑盒法,白盒法测试对象是源程序,依据的是程序内部的的逻辑结构来发现软件的编程错误、结构错误和数据错误。结构错误包括逻辑、数据流、初始化等错误。用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果。黑盒法依据的是软件的功能或软件行为描述,发现软件的接口、功能和结构错误。其中接口错误包括内部/外部接口、资源管理、集成化以及系统错误。
六、维护阶段
对软件正式交付使用过程中出现的软件的bug进行修复,调整软件以适应正式环境,编写软件的维护报告。

