Skip to content
难度基础(★)
建议时长45分钟

7.2 软件开发方法

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

方法和模型不是一回事

软件开发方法回答“用什么思想分析和组织问题”,软件开发模型回答“按什么过程推进项目”。例如结构化方法是一种面向过程、逐步分解的分析设计思想;瀑布模型是一种阶段顺序明确的过程模型。二者相关,但不能完全等同。

维度关注问题例子
开发方法怎样理解问题、分解系统、组织设计结构化方法、原型方法、面向对象方法
开发模型生命周期活动按什么顺序、粒度和反馈方式执行瀑布、V 模型、增量、螺旋、敏捷

课堂提到这一节考试频率不算特别高,但它是全局性概念,尤其要能区分结构化、原型和面向对象。

结构化方法:面向过程,自顶向下

结构化方法是较早期的软件开发方法,它的基本思想是:先理解问题的处理过程,再把解决方案一步一步分解和实现。

特征含义
面向过程关注处理步骤、数据流动和功能分解
用户至上以用户需求和业务处理为出发点
自顶向下从整体功能逐层分解到子功能和模块
逐步求精每次分解都让问题更具体、更可实现
阶段清晰规划、需求、设计、实现、测试、维护等阶段边界明确
文档驱动各阶段形成计划书、需求规格说明书、设计说明书、测试报告等

结构化方法很适合需求较稳定、业务流程清晰、系统边界明确的项目。

结构化方法的典型产物链

阶段产物
规划/计划项目计划书
需求分析需求规格说明书
概要设计概要设计说明书
详细设计详细设计说明书
实现/编码源码文件
测试测试计划、测试用例、测试报告
运维维护记录、变更记录

这个产物链说明结构化方法强调可追踪和可管理,但也意味着它对需求变更的响应相对不够灵活。

原型方法:先做出来给用户看

原型方法适合需求不清或用户难以准确表达需求的场景。它先构造一个可演示、可试用的原型,通过用户反馈逐步澄清需求。

优点局限
用户更容易理解和反馈原型可能被误认为最终系统
有助于发现遗漏需求如果管理不好,容易边改边做失控
降低需求理解偏差需要区分抛弃型原型和演化型原型

为什么原型方法会出现?因为严格线性方法要求用户一开始说清所有需求,而现实中很多用户只有看到界面和交互后才知道自己真正想要什么。

面向对象方法:把数据和行为组织为对象

面向对象方法以对象为中心,把数据和操作封装在对象内部,通过类、继承、多态、消息等机制组织系统。

结构化方法面向对象方法
偏功能分解和处理过程偏对象、职责和协作
数据和处理过程容易分离数据和行为封装在对象中
适合流程稳定、功能清晰的系统适合复杂领域建模和可复用设计
常用数据流图、结构图常用用例图、类图、顺序图

面向对象方法不是简单“换一种画图方式”,它改变了系统分解的中心:从“系统要执行哪些步骤”转向“系统中有哪些对象,它们各自承担什么职责并如何协作”。

技术迭代:为什么从结构化走向面向对象和敏捷

方法优势局限后续方法补了什么
结构化方法纪律性强、阶段清晰、文档完整对需求变化响应慢,数据与过程分离导致维护困难原型加强需求反馈,面向对象加强封装和复用
原型方法快速澄清需求,降低沟通偏差容易失控,原型质量和范围难管理迭代模型、敏捷方法进一步强调节奏和反馈
面向对象方法封装、复用、可扩展性更好建模门槛较高,设计不当会过度抽象敏捷实践强调持续交付和重构

例题

单选
强调面向过程、自顶向下、逐步求精的软件开发方法是:
单选
原型方法更适合:
单选
面向对象方法的关键词是:

自查要点

  1. 开发方法和开发模型有什么区别?
  2. 结构化方法为什么说是面向过程?
  3. 原型方法为什么能缓解需求不清的问题?
  4. 面向对象方法相对结构化方法改进了什么?
  5. 为什么后续敏捷方法会强调迭代反馈?