标题：软件工程专业
简介
软件工程专业是一门研究用工程化方法构建和维护有效的、实用的  软件工程知识体系全景图[1]和高质量的软件的学科。它涉及到程序设计语言，数据库，软件开发工具，系统平台，标准，设计模式等方面。在现代社会中，软件应用于多个方面。典型的软件比如有电子邮件，嵌入式系统，人机界面，办公套件，操作系统，编译器，数据库，游戏等。同时，各个行业几乎都有计算机软件的应用，比如工业，农业，银行，航空，政府部门等。这些应用促进了经济和社会的发展，使得人们的工作更加高效，同时提高了生活质量。[2]
相关学者、组织机构都分别给出了定义：
Boehm：运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。 
IEEE：软件工程是开发、运行、维护和修复软件的系统方法。 
Fritz Bauer：建立并使用完善的工程化原则，以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。[3]
发展过程
概念提出1960年代末期，计算机程序在复杂度、规模和应用领域等方面的增长引人注目，这导致上千亿资金花费在软件开发上，许多人的工作和生活依赖于软件开发的成果。软件产品帮助人们获得更高的工作和生产效率，同时也给人们提供一个更加安全、灵活和宽松的工作与生活环境。尽管有很多成功之处，许多软件产品在成本、工期、质量等方面存在严重问题。主要原因是：
软件产品是复杂的人造系统，具有复杂性、不可见性和易变性，难以处理。个人或小组开发小型软件非常有效的编程技术和过程，在开发大型、复杂系统时难以发挥同样的作用。
1968年在德国举行的NATO软件工程会议上，为应对“软件危机”的挑战，提出了“软件工程”的术语。这个时期有代表性的软件工程定义是“为了经济地获得在真实机器上可靠工作的软件而制定和使用的合理工程原则和方法”。
1972年IEEE学会的计算机协会第一次出版了《软件工程学报》。此后，“软件工程”这个术语被广泛用于工业、政府和学术界，众多的出版物、团体和组织、专业会议在它们的名称里使用“软件工程”这个术语，很多大学的计算机科学系先后设立软件工程课程。[4]　学科雏形软件工程早期的发展是理清软件工程过程的各种活动，提出软件生命周期的概念和软件开发的瀑布模型，制定软件生命周期中主要活动的质量标准。
1991年，ACM和IEEE/CS的计算教程CC1991专题组将“软件工程”列为计算学科的九个知识领域之一。
1980年代末到1990年代初，计算机硬件普遍采用大规模集成电路。在单主机计算模式下，基于瀑布模型的软件开发过程和结构式过程语言编程范型占主导地位。软件工程得到巨大的发展。以阶段论看待软件生命周期，给规范和规程的制定、工具研制、预算管理、工程核算、组织质量过程带来极大方便，基于瀑布模型的软件工程的研究在软件需求分析、软件设计、软件测试、软件质量保证、软件过程改进等多个子领域得到深化和扩展，形成了软件工程学科的雏形。[5-6]学科确立1970年代末期，美国制定研究生教育计划时采纳了IEEE/CS提出的、制定软件工程教程的建议，为软件工程教育打下了基础。
1980年代末和1990年代初，软件工程教育得到卡内基-梅隆大学软件工程研究所（SEI）的培育和支持。他们调查软件工程教育的现状；出版软件工程推荐教程；在卡内基-梅隆大学建立软件工程硕士教育计划；组织和推动软件工程教育者研讨会。
1993年，IEEE-CS和ACM为把软件工程建设成为一个专业，建立了IEEE-CS/ACM联合指导委员会。随后，该指导委员会被软件工程协调委员会（SWECC）替代。SWECC给出了“软件工程职业道德规范”、“本科软件工程教育计划评价标准”和“软件工程知识体”(SWEBOK)。SWEBOK全面描述了软件工程实践所需的知识，为开发本科软件工程教育计划打下了基础。
2004年8月，全世界五百多位来自大学、科研机构和企业界的专家、教授经过多年的努力，推出了软件工程知识体、软件工程教育知识体（SEEK）两个文件的最终版本，标志着软件工程学科在世界范围正式确立，并在本科教育层次上迅速发展。软件工程、计算机科学、计算机工程、信息系统、信息技术并列成为计算学科下的独立学科。[7]　教育发展中国的软件工程基础技术研究始于1980年代初。当时，软件开发方法学成为研究热点。1980年在北京召开了中国首届软件工程研讨会，之后，许多高等学校和科研单位陆续开展了软件开发方法学、CASE工具和环境、面向对象技术等软件工程基础技术的研究。“软件工程核心支撑环境”，“软件工程技术、工具和环境的研究与开发（SEP）”等课题列入国家重点科技攻关项目，其科研成果代表了中国软件工程技术研究的水平。与此同时，部分高校面向研究生开设了软件工程课程，开始引进和编写软件工程教材。1984年和1985年，国家科委选择重点高校招收了两批（200人）软件工程硕士，为软件工程教育积累了经验。此后，高等院校开始为本科开设软件工程课程。部分高校从1988年开始试办软件工程专业（后来在学科调整时又归并到计算机科学与技术学科）。
1990年代，软件重用和软件构件技术成为研究热点，面向对象方法和技术成为软件开发的主流技术，软件过程研究及软件企业的过程改善受到广泛重视。随着软件工程技术的发展，高校又增设了面向对象技术，支持面向对象技术的Smalltalk语言、软件过程管理、软件测试技术、软件过程度量等课程，软件工程领域的教学内容不断丰富，教学时数不断增加，教学改革不断深入。
为适应中国经济结构战略性调整，实现软件产业和软件人才培养的跨越式发展，2000年发布了18号文件《国务院关于印发鼓励软件产业和集成电路产业发展的若干政策的通知》，2001年经教育部和国家计委批准，全国成立了35所示范性软件学院。各高校软件学院和计算机学院（系）为培养高层次、实用型、复合型、具有国际竞争力的人才，要求学生在思维创新的基础上，提高技术创新和工程创新能力，提高软件工程实践和软件工程管理能力。这有效地促进了中国软件工程学科的发展，中国软件工程教育开始走向成熟。[8]
组成结构
ACM和IEEE-CS发布的SWEBOK定义了软件工程学科  需求驱动的软件开发过程[9]的内涵，它由10个知识域构成。[10]
（1）软件需求
软件需求描述解决现实世界某个问题的软件产品，及对软件产品的约束。软件需求涉及需求抽取、需求分析、建立需求规格说明和确认，涉及建模、软件开发的技术、经济、时间可行性分析。软件需求直接影响软件设计、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程和软件质量等。[11]
（2）软件设计
设计是软件工程最核心的内容。设计既是“过程”，也是这个过程的“结果”。软件设计由软件体系结构设计、软件详细设计两种活动组成。它涉及软件体系结构、构件、接口、以及系统或构件的其它特征，还涉及软件设计质量分析和评估、软件设计的符号、软件设计策略和方法等。[12]
（3）软件构造
通过编码、单元测试、集成测试、调试、确认这些活动，生成可用的、有意义的软件。软件构造除要求符合设计功能外，还要求控制和降低程序复杂性、预计变更、进行程序验证和制定软件构造标准。软件构造与软件配置管理、工具和方法、软件质量密切相关。[13]
（4）软件测试
测试是软件生存周期的重要部分，涉及测试的标准、测试技术、测试度量和测试过程。测试不再是编码完成后才开始的活动，测试的目的是标识缺陷和问题，改善产品质量。软件测试应该围绕整个开发和维护过程。测试在需求阶段就应该开始，测试计划和规程必须系统，并随着开发的进展不断求精。正确的软件工程质量观是预防，避免缺陷和问题比改正好。代码生成前的主要测试手段是静态技术（检查），代码生成后采用动态技术（执行代码）。测试的重点是动态技术，从程序无限的执行域中选择一个有限的测试用例集，动态地验证程序是否达到预期行为。[14]
（5）软件维护 
软件产品交付后，需要改正软件的缺陷、提高软件性能或其他属性、使软件产品适应新的环境。软件维护是软件进化的继续。软件维护要支持系统快速地、便捷地满足新的需求。基于服务的软件维护越来越受到重视。软件维护是软件生存周期的组成部分。然而，历史上维护从未受到重视。情况有了改变，软件组织力图使软件运营时间更长，软件维护成为令人关注的焦点。
（6）软件配置管理
为了系统的控制配置变更，维护整个系统生命周期中配置的一致性和可追踪性，必须按时间管理软件的不同配置，包括配置管理过程的管理、软件配置鉴别、配置管理控制、配置管理状态记录、配置管理审计、软件发布和交付管理等。
（7）软件工程管理
运用管理活动，如计划、协调、度量、监控、控制和报告，确保软件开发和维护是系统的、规范的、可度量的。它涉及基础设施管理；项目管理；度量和控制计划三个层次。度量是软件管理决策的基础。近年来软件度量的标准、测度、方法、规范发展较快。
（8）软件工程过程
管理软件工程过程的目的是，实现一个新的或者更好的过程。软件工程过程关注软件过程的定义、实现、评估、测量、管理、变更、改进，以及过程和产品的度量。软件工程过程分为，①围绕软件生存周期过程的技术和管理活动，即需求获取、软件开发、维护和退役的各种活动。②对软件生存周期的定义、实现、评估、度量、管理、变更和改进。[15]
（9）软件工程工具和方法
软件开发工具是以计算机为基础的，用于辅助软件生存周期过程。通常  一个QMS的过程方法的实施[16]，工具是为特定的软件工程方法设计的，以减少手工操作的负担、使软件工程更加系统化。软件工具的种类很多，从支持个人到整个生存周期。软件工具分为：需求工具、设计工具、构造工具、测试工具、维护工具、配置管理工具、工程管理工具、工程过程工具、软件质量工具等。
软件工程方法支持软件工程活动，使软件开发更加系统，并能获得成功。软件开发方法不断发展。当前，软件工程方法分为：①启发式方法，包括结构化方法、面向数据方法、面向对象方法和特定域方法；②基于数学的形式化方法；③用软件工程多种途径实现的原型方法，原型方法帮助确定软件需求、软件体系结构，用户界面等。
（10）软件质量
软件质量贯穿整个软件生存周期，涉及软件质量需求、软件质  软件项目管理结构[17]量度量、软件属性检测、软件质量管理技术和过程等。
SWEBOK还把软件工程相关学科列为知识域，它们是软件工程发展不可或缺的部分。相关学科知识域包括计算机工程、计算机科学、数学、管理学、项目管理、质量管理、系统工程学和软件人类工程学八个领域。[18]
学科地位
软件工程学科是计算学科的分支，计算学科中理论、抽象、设计等三个学科形态，绑定、大问题的复杂性、概念和形式模型、一致性和完备性、效率、演化、抽象层次、按空间排序、按时  软件工程内容概括间排序、重用、安全性、折衷与决策等十二个基本概念，数学方法、系统科学方法在软件工程学科中占有重要地位。此外，软件工程还十分重视管理过程，以提高软件产品的质量、降低开发成本、保证工程按时完成。系统性、规范性、可度量性也是软件工程非常关注的。[19]
软件工程学科的理论基础是数学、计算机科学。软件工程的研究和实践涉及人力、技术、资金、进度的综合管理，是开展最优化生产活动的过程；软件工程必须划分系统的边界，给出系统的解决方案。因此，软件工程的相关学科有计算机科学与技术、数学、计算机工程、管理学、系统工程和人类工程学等。[20]
软件工程
[21] 软件工程研究与应用 Software Engineering and Applications 是一本关注计算机领域最新进展的国际中文期刊，由汉斯出版社发行。本刊支持思想创新、学术创新，倡导科学，繁荣学术，集学术性、思想性为一体，旨在为了给世界范围内的科学家、学者、科研人员提供一个传播、分享和讨论计算机领域内不同方向问题与发展的交流平台。
研究领域：  软件工程
软件架构
软件设计方法
软件领域建模
软件工程决策支持
软件工程教育
软件测试技术
自动化的软件设计和合成
基于组件的软件工程
计算机支持的协同工作
编程语言和软件工程
计算机网络
信息与通信安全
计算机图形学与人机交互
多媒体技术应用
人工智能与识别
嵌入式软件与应用
自动控制
分布式计算与网格计算
云计算技术
存储技术
数据库技术研究
计算机辅助设计与应用技术
培养方案
主修课程主干学科：马克思主义理论、大学外语、高等数学、大学物理、物理实验、线性代数、概率论与数理统计、程序设计语言、数据结构、离散数学、操作系统、编译技术、软件工程概论、统一建模语言、软件体系结构、软件需求、软件项目管理
该专业除了学习公共基础课外，还将系统学习离散数学、数据结构、算法分析、面向对象程序设计、现代操作系统、数据库原理与实现技术、编译原理、软件工程、软件项目管理、计算机安全等课程，根据学生的兴趣还可以选修一些其它选修课。
修业年限：四年 
授予学位：工学学士学位
实践环节：毕业实习、课程设计、计算机工程实践、生产实习、毕业设计(论文)。[22]培养要求本专业是培养适应计算机应用学科的发展，特别是软件产业的发展，具备计算机软件的基础理论、基本知识和基本技能，具有用软件工程的思想、方法和技术来分析、设计和实现计算机软件系统的能力，毕业后能在IT行业、科研机构、企事业中从事计算机应用软件系统的开发和研制的高级软件工程技术人才。  软件工程项目管理流程[23]
掌握和计算机科学与技术相关的基本理论知识，具有一般计算机相关工程的分析设计和解决实际问题的能力。了解文献检索、资料查询的基本方法，具有一定的科学研究和实际工作能力。能够运用学习知识和外文阅读能力查阅外文资料。养成积极参加体育锻炼和健康的文化活动的良好习惯，达到国家规定的大学生体育合格标准，身心健康。[22]就业导向就业方向
本专业学生毕业后可以从事各级各类企事业单位的办公自动化处理、计算机安装与维护、网页制作、计算机网络和专业服务器的维护管理和开发工作、动态商务网站开发与管理、软件测试与开发及计算机相关设备的商品贸易等方面的有关工作。
除考取国内外名牌大学研究生外，主要毕业去向是计算机软件专业公司﹑信息咨询公司﹑以及金融等其它独资、合资企业。[22]　
就业前景
中国的软件行业规模不是很大，有些软件企业在软件制作上，也只是采用了  关键设计原则[24]一些软件工程的思想，距离大规模的工业化大生产比较还是有一定的差距；原因有管理体制的问题，市场问题，政策问题，也有软件工程理论不全面和不完善的问题。所以软件工程的研究和应用，以及中国软件行业的进一步发展，都需要一定的既有软件工程的理论基础和研究能力，又有一定的实践经验的软件工程科学技术人员来推动。软件工程的前途是光明的。
软件服务外包属于智力人才密集型现代服务业。大量著名外包企业落户宁波。主要就业去向包括软件外包与服务企业、信息产品与服务企业，担任程序员、软件测试员、项目经理等工作岗位。[22]就业岗位Java方向：JAVA初级程序员、JAVA计算程序员 、 JAVA工程师 、J2EE系统工程师等。
.Net方向： .Net程序员网站开发工程师 .Net工程师等。
其它方向： 简单的管理信息系统开发和维护人员 、网页制作和客户端脚本程序编写人员 、初级数据库管理和 维护人员 、数据库开发工程师 、系统分析设计工程 、软件项目配置管理员 、文档编写工程师。[25]
软件学院
国家示范性软件学院
北京大学软件与微电子学院
北京工业大学软件学院
东北大学软件学院
北京航空航天大学软件学院
哈尔滨工程大学软件学院
北京交通大学软件学院
东南大学软件学院
电子科技大学软件学院
华中科技大学软件学院
北京理工大学软件学院
复旦大学软件学院
华东师范大学软件学院
西安电子科技大学 软件学院
北京邮电大学软件学院
湖南大学软件学院
华南理工大学软件学院
西北工业大学软件与微电子学院
重庆大学软件学院
吉林大学软件学院
上海交通大学软件学院
西安交通大学软件学院
大连理工大学软件学院
南京大学软件学院
天津大学软件学院
中国科学技术大学软件学院
国防科技大学软件学院
南开大学软件学院
同济大学 软件学院
云南大学软件学院
武汉大学软件学院
清华大学软件学院
四川大学软件学院
浙江大学软件学院
南昌大学软件学院
山东大学软件学院引
中南大学软件学院
中山大学软件学院 [26-29]　
厦门大学软件学院
哈尔滨工业大学软件学院
河南大学软件学院