关于软件工程

以下解释来自 维基百科

软件工程的由来

软件工程(英语:Software Engineering)1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算器科学家和工业界巨头,讨论和制定摆脱 “软件危机” 的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。

在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。

软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析师、系统架构师、软件设计师、程序员、测试工程师、界面与交互设计师等等。人们也常常用程序员来泛指各种软件工程师。

软件危机

1995年,Standish Group研究机构以美国境内8000个软件项目作为调查样本,调查结果显示,有84%软件计划无法于既定时间、经费中完成,超过30%的计划于执行中被取消,项目预算平均超出189%。

案例:美国银行信托软件系统开发案

美国银行1982年进入信托商业领域,并规划发展信托软件系统。计划原订预算 2千万美元 ,开发时程9个月,预计于1984年12月31日以前完成,后来至1987年3月都未能完成该系统,期间已投入 6千万美元 。美国银行最终因为此系统不稳定而不得不放弃,并将340亿美元的信托账户转移出去,并失去了 6亿美元 的信托生意商机。

定义

  • 创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。
  • 应用系统化,遵从原则,可被计量的方法来发展、操作及维护软件;也就是把工程应用到软件上。
  • 与开发、管理及更新软件产品有关的理论、方法及工具。
  • 一种知识或学科,目标是生产质量良好、准时交货、符合预算,并满足用户所需的软件。
  • 实际应用科学知识在设计、建构计算机程序,与相伴而来所产生的文件,以及后续的操作和维护上。
  • 使用与系统化生产和维护软件产品有关之技术与管理的知识,使软件开发与修改可在有限的时间与费用下进行。
  • 建造由工程师团队所开发之大型软件系统有关的知识学科。
  • 对软件分析、设计、实施及维护的一种系统化方法。
  • 系统化地应用工具和技术于开发以计算机为主的应用。
  • 软件工程是关于如何设计和开发优质软件的技术。

软件工程的核心知识(SWEBOK)

ACM与IEEE Computer Society联合修定的SWEBOK(Software Engineering Body of Knowledge)提到,软件工程领域中的核心知识包括:

  • 软件需求(Software requirements)
  • 软件设计(Software design)
  • 软件建构(Software construction)
  • 软件测试(Software test)
  • 软件维护与更新(Software maintenance)
  • 软件构型管理(Software Configuration Management, SCM)
  • 软件工程管理(Software Engineering Management)
  • 软件开发过程(Software Development Process)
  • 软件工程工具与方法(Software Engineering Tools and methods)
  • 软件质量(Software Quality)

软件工程的发展方向

“敏捷开发”(Agile Development)被认为是软件工程的一个重要的发展。它强调软件开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。

敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”(Extreme Programming,简称为XP)。而与轻量级方法相对应的是“重量级方法”。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子有CMM/PSP/TSP。

面向方面的程序设计(Aspect Oriented Programming,简称AOP)被认为是近年来软件工程的另一个重要发展。这里的“方面”指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程(Generic Programming)和模板。

参考资料