软件工程研究的基本内容是什么

软件工程研究的基本内容,通常按知识体系划成八块:需求工程、软件设计、软件构造、软件测试、软件维护、配置管理、质量保证、软件过程。八块不是并列的工种,而是一条从「要什么」到「怎么造」再到「怎么养」的链,也是各类课程大纲的骨架。

八块各自解决什么问题

需求工程解决「做对的东西」,包括获取、分析、规约、验证、管理变更。软件设计解决「怎么分层」,分体系结构设计和详细设计。软件构造是写代码,包括编码规范、复用、单元测试。

软件测试解决「有没有错」,分单元、集成、系统、验收四级。软件维护解决「上线之后怎么办」,分纠错性、适应性、完善性、预防性四类。配置管理管版本与变更,质量保证管流程与标准,软件过程管「用什么套路做」。

这八块对应 IEEE 计算机学会发布的《软件工程知识体系指南》(SWEBOK)。较早版本列十五个知识领域,近年版本有扩充,八块是其中最核心的部分,也是各类认证考试和课程大纲的骨架。

知识领域 核心问题 典型产出 对应课程
需求工程 要做成什么样 需求规格说明书 软件需求分析
软件设计 结构怎么分 架构图、接口定义 软件体系结构、UML
软件构造 代码怎么写 可运行的程序 程序设计、设计模式
软件测试 有没有错 测试用例、缺陷报告 软件测试技术
软件维护 上线后怎么改 变更记录、补丁 软件维护
配置管理 版本怎么管 基线、分支策略 版本控制与 CI
质量保证 流程合不合规 评审记录、度量数据 软件质量保证
软件过程 按什么套路做 过程模型、改进方案 软件工程导论

需求工程为什么排在第一?

因为需求错误的代价最高。业界常引的估算曲线是:需求阶段发现并修正一个错误,成本记为 1;到设计阶段变成 3 到 5;到编码阶段变成 10;到上线之后变成 20 到 100。数量级不一定精确,趋势是公认的。

需求工程里最难的不是写文档,是变更管理。需求一定会变,问题在于变的时候有没有人知道会影响哪些模块、哪些测试用例、哪些接口。这就是为什么需求要建基线、要走变更流程。

一个具体做法是需求追踪矩阵:每一行是一条需求,每一列是设计、代码、测试用例,双向可查。它看起来笨,但审计和交接时最管用。

软件工程与计算机科学差在哪?

计算机科学问「计算是什么、什么可计算、怎样算得更快」,关心算法、复杂度、计算模型。软件工程问「一群人怎么在有限的时间和预算里,把软件造出来并且维护十年」,关心规模、协作、进度、成本。

一句话概括:计算机科学关心「能不能」,软件工程关心「值不值、稳不稳、改得动改不动」。前者是发现,后者是建造。

这个区分解释了一个现象:算法竞赛拿奖的人,未必能带好一个十人的项目。因为项目的主要难点不在算法,在沟通、约定和变更。

「软件工程」这个词本身也有来历。1968 年北约在德国加米施召开的一次会议上,面对软件项目普遍延期、超支、质量失控的「软件危机」,与会者第一次把 engineering 和 software 并置,用来指称一门尚未成型的学科。此后几十年,这门学科的主要工作就是给「造软件」找一套可重复的规矩。

维护才是成本大头

软件生命周期里,维护阶段的花费通常占总成本六成以上,有些系统更高。原因不是程序员爱改代码,是业务在变、环境在变、缺陷在暴露。

维护难易取决于前期设计。模块边界清楚、依赖方向单一、测试覆盖充分,改起来就快;反之,改一处崩三处,维护成本指数上升。

四类维护里,纠错性维护只占一小部分,大头是完善性维护——用户提新需求、业务加新规则。所以「上线即结束」的想法最要不得,上线只是维护期的开始。

《人月神话》里那条著名的判断,向进度落后的项目增加人手,只会让进度更落后,说的也是这件事。人多了,沟通路径按平方增长,而维护成本主要来自理解代码,不是敲键盘。

这八块在课程表上怎么对应

本科阶段的课程大致是:大一大二打基础,学程序设计、数据结构、离散数学、数据库、操作系统、计算机网络;大二大三进专业课,学软件工程导论、需求分析、软件设计、软件测试、项目管理;大四进实训和毕业设计。

国内学科目录里,软件工程是工学门类下的一级学科,本科专业代码 080902。它与计算机科学与技术(080901)并列,课程重合度高,但软件工程更偏工程管理,计算机科学更偏理论。

想判断一个学校的软件工程强不强,看三样:有没有稳定的校企实训基地、有没有通过工程教育专业认证、毕业设计的题目是不是来自真实项目。这三样比排名更能说明问题。

常见问题

软件工程是不是就是学写代码?

不是。写代码是「构造」这一块,八块里只占一块。其余七块大部分时间在沟通、建模、写文档、做评审。

学软件工程一定要数学好吗?

不需要特别好,但离散数学、概率统计、线性代数是基础课。做算法方向要求高,做工程管理方向要求相对低。

软件工程和人工智能是什么关系?

人工智能是应用领域,软件工程是建造方法。做人工智能产品同样要走需求、设计、测试、维护这一套流程,只是多了数据管理和模型评估两个环节。