软件工程
上QQ阅读APP看书,第一时间看更新

第1章 概论

软件(Software)是一系列按照特定顺序组织的计算机数据和指令的集合。软件一般被划分为系统软件、应用软件和介于这两者之间的中间件软件。软件并不是只包括可以在计算机(这里的计算机是指广义的计算机)上运行的程序,与这些程序相关的文档、数据等元素一般也被认为是软件的一部分。

随着计算机技术的迅速发展和广泛应用,社会对软件的需求也与日俱增,软件在计算机系统中的比重不断增大。现代社会已经离不开软件。国家基础设施和公共建设,工业制造、金融、交通等行业,软件已经成为必不可少的一部分。软件可以将劳动生产率水平进一步提高,促进经济全球化、经济增长集约化、环保经济绿色化、军事技术信息化,甚至影响和改变着人类的生活方式。软件从最初的计算机硬件的附属品,仅仅作为计算机硬件的运行和做一些简单的计算与数据处理的程序,发展到今天大规模的封闭或开放式的系统软件和应用软件。有的软件的源代码甚至超过千万行。例如,美国阿波罗计划的软件长达1000万行,航天飞机计划的软件更是长达4000万行,桌面操作系统为千万级量级规模。如今,物联网技术、云计算、大数据、移动互联网融合发展,为生产生活、社会管理带来深刻变化。现代软件技术结合物联网、大数据、云计算和移动互联网、虚拟现实、大规模并行计算等一系列技术让“智慧城市”与“智慧交通”的美好画卷正在变成现实。

软件是抽象的,是人类逻辑思维的产物,它不受物质材料的限制,也不受物理定律或加工过程的制约,这一特性使软件工程得以简化,因为软件的潜能不受物理因素的限制;另外一方面,由于缺乏自然约束,软件系统的实现在实施过程中,容易变得极为复杂,理解它会很困难、改变它付出的代价更加高昂。软件规模的增长,使其复杂度也随之大大增加,而高复杂度和高可靠性的不相容性,使得软件可靠性随着其规模的增长而降低,质量难以保证,维护愈加困难,投资预算很难控制,传统的软件研制开发方法已无法适应大规模软件的开发需求。

为了解决在软件开发和维护过程中遇到的一系列软件危机的严重问题,1968年,北大西洋公约组织(NATO)的科学家和官员们在原德意志联邦共和国召开的国际会议上讨论并首次提出了软件开发要工程化。当时,单个的程序开发技术已经不能扩展并应用到大型的、复杂的软件系统中。软件项目有时甚至要推迟几年才能完成,不仅比预计的费用高且难以维护。软件工作者开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科——计算机软件工程学(Software Engineering),简称软件工程。软件工程是一门工程学科,涉及软件生产过程中的各个方面,从最初的问题提出一直到投入使用后的系统维护,都属于其学科研究范畴。