Fritz Bauer曾在NATO会议上给出软件工程的定义:
  软件工程 是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。
  1983年,IEEE(Institute of Electrical & Electronic Engineers,电气与电子工程师协会)给出了一个更为全面的定义:
  软件工程 是研究和应用如何以系统化的、规范的、可度量的方法去开发、运行和维护软件,即把工程化应用到软件上。

  Bauer的定义给出了软件工程的基线,但忽略了软件质量的技术方面和软件度量的重要性。除以上定义外,软件工程还有许多其他的定义,但其基本思想都是强调在软件开发过程中应用工程化原则,解决软件的整体质量较低、最后期限和费用没有保证等问题。
  软件工程是一种层次化的技术,如图1.4所示,其中过程、方法和工具是软件工程的三个要素。

图1.4 软件工程的层次

  (1) 软件工程必须以有组织的质量保证为基础,全面质量管理和过程改进使得更加成熟的软件工程方法的不断出现。
  (2) 软件工程过程是进行一系列有组织的活动,从而能够合理地和及时地开发出计算机软件。过程定义了技术方法的采用、工程产品(包括模型、文档、数据、报告、表格等)的产生、里程碑的建立、质量的保证和变更的管理。
  (3) 软件工程方法为软件开发提供"如何做"的技术,它涵盖了项目计划、需求分析、系统设计、程序实现、测试与维护等一系列的任务。
  (4) 软件工具为过程和方法提供自动的或半自动的支持。这些软件工具被集成起来,建立起一个支持软件开发的系统,称之为计算机辅助软件工程(CASE,Computer Aided Software Engineering)。CASE集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境。