ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

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

软件工程学习总结 ——基于北京大学孙艳春《软件工程》视频课程 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 面向对象设计方法面向对象设计包括四个部分问题域部分的设计、人机交互部分的设计、控制驱动部分的设计与数据管理部分的设计。问题域设计所要考虑的问题编程语言硬件、操作系统及网络设施复用支持数据管理系统界面支持系统。如何进行问题域部分的设计继续运用 OOA 的方法概念、表示法及策略使用 OOA 结果并加以修改应对需求的变化、修正新发现的错误使用 OOA 结果并进行补充与调整重点为复用设计与编程的类而增加结构增加一般类以建立共同协议按编程语言调整继承提高性能为实现对象永久存储所做的修改为编程方便增加底层细节。6 软件开发环境与工具课程从 CASE计算机辅助软件工程的概念出发介绍了软件开发工具与环境的构成CASE 工具支持软件生存周期某一过程或活动的单个工具如需求分析工具、设计工具、编码与测试工具、维护工具、项目管理工具等。CASE 工作台支持某一生存周期过程的一组集成化工具。软件开发环境工具与集成机制的组合为开发者提供一体化的支持。工具集成模型包括 Wasserman 五级模型、APSE 模型、层次模型和 PCTE 等。常用的开发工具与环境按技术方向划分覆盖 Java、C/C、Web、移动应用等领域的开发、构建与管理工具链。7 编码实现与测试课程资料对本部分着墨不多以下是结合课程理念的个人理解编码实现编码本质上是把设计翻译为代码应遵循良好的编码规范与风格让代码像文档一样可读、可维护。过程质量代码走查、结对编程与合理的重构都是在编码阶段保障质量的有效手段。测试与评估验证与确认VV以需求为准则通过测试、演示、分析及审查等方式评估最终产品贯穿开发全过程。核心理念质量不是最后测出来的而是从需求捕获、分析、设计、编码等过程就要监控的。8 项目管理与 CMMI8.1 项目管理知识体系项目管理涉及九大知识领域四大核心知识领域范围、时间、成本和质量。四大辅助知识领域人力资源管理、风险管理、沟通管理和采购管理。之所以称其为辅助知识领域是因为项目目标正是通过它们来实现的。项目整体管理在项目生命周期中协调所有其他项目管理知识领域所涉及的过程确保项目的所有组成要素在正确的时间结合在一起以成功地完成项目。项目整体管理包括以下几个主要过程项目计划制定收集其他计划编制过程的结果并将它们整合为一个协调一致的文件——项目计划项目计划执行通过执行项目计划所包含的有关活动实施项目计划整体变更控制协调整个项目范围内的变更。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 Engineering10.1 打好地基避免返工把想法聊清楚让AI把聊天内容整理成产品需求文档PRD确定技术栈和架构设置Git版本管理10.2 高效协作小步快跑先做MVP小步迭代勤用git commit存档点先规划后编码11 结语这门课程带给我的最大改变是从埋头编码转向站高一层看系统先想清楚再动手过程可控、质量可管、进度可视。从需求到设计、从过程到管理软件工程提供的是一套系统性思维而这套思维与 Cursor 等 AI 编程工具相结合正是当下工程师的核心竞争力。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进