软件工程(ソフトウェア工学)是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。 它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。
软件工程的核心知识( SWEBOK)
ACM 与 IEEE Computer Society 联合修定的 SWEBOK[12](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)
软件工程工具与方法( Computer-Aided Software Engineering, CASE)
软件品质( Software Quality)
软件开发过程
软件开发过程是随着开发技术的演化而随之改进的。从早期的瀑布式 (Waterfall)的开发模型到后来出现的螺旋式的迭代(Spiral)开发,以致最近开始兴起的敏捷开发方法(Agile),他们展示出了在不同的时代软件产业对于开发过程的不同的认识,以及对于不同类型项目的理解方法。
注意区分软件开发过程和软件过程改进之间的重要区别。诸如像 ISO 15504, ISO 9000, CMM, CMMI这样的名词阐述的是一些软件过程改进框架,他们提供了一系列的标准和策略来指导软件组织如何提升软件开发过程的质量、软件组织的能力,而不是给出具体的开发过程的定义。