news 2026/10/17 23:03:48

软件工程学习总结 ——基于北京大学孙艳春《软件工程》视频课程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件工程学习总结 ——基于北京大学孙艳春《软件工程》视频课程

1 概述

作为一名程序员,最令人沮丧的莫过于:投入了大量时间与精力,开发出的软件却不好用、甚至不可用。现在vibe coding日臻完善,但是软件的开发仍然还是达不到随心所欲的程度。现实中也不时陷入琐碎事务而难以抽身,由此反观自身是不是我们站位不够高?很多时候,换一个视角看问题,答案便截然不同。最近一段时间学习北京大学孙艳春老师的《软件工程》课程获益良多,结合自己AI使用的经验又大胆拓展了AI 驾驭工程(AI Harness Engineering,本文第10节)内容以期待与时俱进。

2 生存周期模型

为保证软件开发及时、高质量地完工,需要针对项目特点,选择合适的开发流程与策略,即软件生存周期模型。常见的模型对比如下:

模型主要特点
瀑布模型阶段顺序展开、文档驱动,适合需求明确且稳定的场景
增量模型分批交付可用的软件增量,逐步丰富产品功能
演化模型通过多轮原型迭代,逐步明确并实现需求
喷泉模型支持迭代与无间隙开发,适合面向对象开发方式
敏捷模型拥抱变化、小步快跑、持续交付,强调人与协作

3 需求分析

3.1 需求在系统工程中的作用

  • 需求分析(问题定义):通过分析分配给软件的那些系统需求,确定软件需求及约束。
  • 软件体系结构设计(解决方案分析):针对软件需求及约束,确定一组候选解决方案,进行实例研究,分析各种可能的方案,并选出其中最佳的一个。
  • 验证、确认及测试(产品评估):以需求为准则,通过测试、演示、分析及审查等方式,评估最终产品和文档,其中包括一些必要的软件系统集成活动。

3.2 需求的分类

功能需求、性能需求、外部接口需求、设计约束、质量属性。

3.3 需求的发现

自悟、交谈、观察、小组会、提炼,以及多种方式的综合运用。

3.4 需求规约的概念和格式

需求规约是对软件产品及其外部行为的完整描述,是后续软件设计、验证与确认活动的基础和依据。

4 结构化方法

4.1 结构化分析方法

核心工具是数据流图(DFD):先建立顶层数据流图,然后自顶向下、逐层求精,形成分层数据流图;配合数据字典与加工说明,最终产出需求规格说明书。

4.2 结构化设计方法

包括初始模块结构图的设计与精化、接口设计、数据设计,并以软件设计规约为载体表达设计结果。

5 面向对象方法

5.1 UML 建模

静态建模
  • 类图:显示类(及其接口)、类的内部结构以及与其他类之间的联系,是面向对象分析与设计所得到的最重要的模型。
  • 构件图:在转入实现阶段之前,可以用它表示如何组织构件;构件图描述了构件及构件之间的依赖关系。
  • 部署图:展示运行时进行处理的结点和在结点上生存的制品的配置,用来对系统的静态部署视图建模。
动态建模
  • 用况图:面向需求的模型,描述参与者与系统之间的交互。
  • 状态图:当对象的行为比较复杂时,可作为辅助模型描述对象的状态及其状态转移,从而更准确地定义对象的操作。
  • 活动图:注重从活动到活动的控制流,既可描述对象的操作流程,也可描述一组对象之间的协作行为或用户的业务流程。
  • 顺序图:注重消息的时间次序,可用来表示一组对象之间的交互情况。
  • 通信图:注重收发消息的对象的组织结构,与顺序图语义等价、视角互补。
  • 交互概观图:用于描述系统的宏观行为,是活动图和顺序图的混合物。
  • 定时图:用于表示交互,展现消息跨越不同对象或角色的实际时间,而不仅仅关心消息的相对顺序。

此外,UML 还提供了"包"这一控制复杂性的通用组织机制,用于对模型元素进行分组管理。

5.2 面向对象分析方法

核心是对"人、事、物"的识别与筛选:先识别类(对象),再识别属性与操作,最后识别对象之间的关系(关联、泛化、依赖、细化等)。

5.3 面向对象设计方法

面向对象设计包括四个部分:问题域部分的设计、人机交互部分的设计、控制驱动部分的设计与数据管理部分的设计。

问题域设计所要考虑的问题
  1. 编程语言;
  2. 硬件、操作系统及网络设施;
  3. 复用支持;
  4. 数据管理系统;
  5. 界面支持系统。
如何进行问题域部分的设计
  1. 继续运用 OOA 的方法:概念、表示法及策略;
  2. 使用 OOA 结果,并加以修改:应对需求的变化、修正新发现的错误;
  3. 使用 OOA 结果,并进行补充与调整(重点):
  4. 为复用设计与编程的类而增加结构;
  5. 增加一般类以建立共同协议;
  6. 按编程语言调整继承;
  7. 提高性能;
  8. 为实现对象永久存储所做的修改;
  9. 为编程方便增加底层细节。

6 软件开发环境与工具

课程从 CASE(计算机辅助软件工程)的概念出发,介绍了软件开发工具与环境的构成:

  • CASE 工具:支持软件生存周期某一过程或活动的单个工具(如需求分析工具、设计工具、编码与测试工具、维护工具、项目管理工具等)。
  • CASE 工作台:支持某一生存周期过程的一组集成化工具。
  • 软件开发环境:工具与集成机制的组合,为开发者提供一体化的支持。
  • 工具集成模型:包括 Wasserman 五级模型、APSE 模型、层次模型和 PCTE 等。
  • 常用的开发工具与环境:按技术方向划分,覆盖 Java、C/C++、Web、移动应用等领域的开发、构建与管理工具链。

7 编码实现与测试

课程资料对本部分着墨不多,以下是结合课程理念的个人理解:

  • 编码实现:编码本质上是把设计"翻译"为代码,应遵循良好的编码规范与风格,让代码像文档一样可读、可维护。
  • 过程质量:代码走查、结对编程与合理的重构,都是在编码阶段保障质量的有效手段。
  • 测试与评估:验证与确认(V&V)以需求为准则,通过测试、演示、分析及审查等方式评估最终产品,贯穿开发全过程。
  • 核心理念:质量不是最后测出来的,而是从需求捕获、分析、设计、编码等过程就要监控的。

8 项目管理与 CMMI

8.1 项目管理知识体系

项目管理涉及九大知识领域:

  • 四大核心知识领域:范围、时间、成本和质量。
  • 四大辅助知识领域:人力资源管理、风险管理、沟通管理和采购管理。之所以称其为辅助知识领域,是因为项目目标正是通过它们来实现的。
  • 项目整体管理:在项目生命周期中协调所有其他项目管理知识领域所涉及的过程,确保项目的所有组成要素在正确的时间结合在一起,以成功地完成项目。

项目整体管理包括以下几个主要过程:

  1. 项目计划制定:收集其他计划编制过程的结果,并将它们整合为一个协调一致的文件——项目计划;
  2. 项目计划执行:通过执行项目计划所包含的有关活动,实施项目计划;
  3. 整体变更控制:协调整个项目范围内的变更。

8.2 软件开发管理

  • 软件开发管理过程:启动、计划、实施、监控、收尾。
  • 人员管理:关注团队的组织架构、沟通等方面的协调与监控。
  • 软件采购管理:如今早已不流行从零开始开发软件,基于成熟组件采购与复用是常态。
  • 质量控制:质量不是测试出来的,而是要从需求捕获、分析、设计、编码等过程就要监控。
  • 进度计划:重视里程碑,以可验证的阶段性成果牵引整体进度。

8.3 CMMI 能力成熟度模型

CMMI 将软件组织的过程能力划分为五个等级(原文误将第 5 级写作 “CMMI 4”,此处已订正):

等级名称特征
CMMI 1初始级过程混乱无序,基本没有计划,成功依赖个人英雄主义
CMMI 2可重复级以往项目的成功经验可以被重复利用
CMMI 3已定义级过程已标准化、文档化,组织级统一执行
CMMI 4已管理级过程与质量可量化度量与管理
CMMI 5优化级持续过程改进,不断优化提升

除 CMMI 之外,ISO 9000 系列标准也是软件行业常用的质量管理体系,两者互为补充。

9 软件维护与再工程

  • 软件维护的概念与活动:软件交付使用后,为修正缺陷、改善性能或适应环境变化而进行的一系列活动,核心是程序修改的管理与实施。
  • 逆向工程:从已有的代码和文档中,反向恢复出系统的设计与需求信息。
  • 软件再工程:在逆向工程的基础上,对遗留系统进行重构,得到更完善的实现。其重点是对文档、代码和全局变量的理解与重构。
  • 软件设计的借鉴和复用,也是软件再工程的重要组成部分。

10 AI 驾驭工程(AI Harness Engineering)

10.1 打好地基,避免返工

  • 把想法聊清楚
  • 让AI把聊天内容整理成产品需求文档PRD
  • 确定技术栈和架构
  • 设置Git版本管理

10.2 高效协作,小步快跑

  • 先做MVP,小步迭代
  • 勤用git commit存档点
  • 先规划,后编码

11 结语

这门课程带给我的最大改变,是从"埋头编码"转向"站高一层看系统":先想清楚再动手,过程可控、质量可管、进度可视。从需求到设计、从过程到管理,软件工程提供的是一套系统性思维;而这套思维与 Cursor 等 AI 编程工具相结合,正是当下工程师的核心竞争力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 12:41:22

【AI大模型】LLaMA-Factory 工具使用:零代码微调,小白的最爱

【AI大模型】LLaMA-Factory 工具使用:零代码微调,小白的最爱 写在前面:不想写代码,也能微调大模型 前面几课我们一直在写代码做微调,但很多同学其实只想“点几下就把模型微调好”。有没有这样的工具?有——LLaMA-Factory就是目前最流行的“零代码微调”工具之一。它既有…

作者头像 李华
网站建设 2026/10/16 3:49:18

顾问同时在跑多个项目:专业服务公司的CRM怎么管好时间与经验

顾问同时在跑多个项目:专业服务公司的CRM怎么落地咨询公司、律师事务所、人力资源服务机构,这些企业有一个共同的经营特征:卖出去的不是产品,而是人的时间。一位顾问同时扛着几个项目,日程表排得密不透风。客户那边还在…

作者头像 李华
网站建设 2026/10/16 13:30:15

浮栅晶体管极性说明

目录 一、基础结构极性 各区域极性与掺杂一览 二、PN 结与沟道反型 1. 两个 PN 结 2. 沟道反型(Inversion) 三、浮栅电荷对极性/阈值的调控 四、三大操作中的极性与载流子行为 1. 编程(Program)— 电子注入浮栅 2. 擦除&a…

作者头像 李华
网站建设 2026/10/15 17:49:22

Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理

Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理 这学期开了 Linux 课,作业要求把 VMware 装系统的过程、还有命令行的基础知识整理成一篇博客。我本来想着"上机截几张图交差",结果真动手才发现坑不少,索性把过程…

作者头像 李华
网站建设 2026/10/17 8:16:51

基于PJ85718DM与STM32F413RH的多点温度监测系统设计与实现

1. 项目背景与核心需求拆解温度监测这件事,看起来简单,真要做到"本地准、远程稳、长期不飘",里面的门道比想象中多得多。我这次做的项目,核心就是用一颗PJ85718DM温度传感芯片配合STM32F413RH主控,搭一套能同…

作者头像 李华
网站建设 2026/10/15 11:41:53

第58章 兑•兑悦 喜悦

退休的申请是在2042年秋天递交的,审批流程走了大约四个月。悦儿在收到确认函的那天,坐在办公室里看了一会儿窗外,没有特别的感觉,只是确认了时间线上的那个标记已经移位到了一个新的位置。她把确认函收进了办公桌最下面的抽屉里&a…

作者头像 李华