知识卡片

双峰模型:需求与架构的协同演化

结构图卡

内容

Nuseibeh提出的双峰模型是一种简化版的螺旋模型,核心主张是强调软件需求和软件架构的”平等性”——不是先把需求完全定清楚再开始架构设计,而是让需求规约和架构规约在发展过程中不断继续分离出”问题的结构和规约”与”解决方案的结构和规约”,在反复迭代的过程中产生越来越详细的需求和设计规约,最终把交织在软件开发过程中的设计与需求规约理顺分开。这个模型之所以叫”双峰”,是因为需求和架构被画成螺旋图上两个并行推进、交替深化的峰,而不是一前一后的两个阶段。双峰模型能解决三类管理问题:一是”当我看到它才知道它”(IKIWISI)——需求经常是用户看到模型或原型、给出反馈之后才浮现出来的,双峰模型允许增量开发,能让用户更早探索解决方案、同时管理开发带来的风险;二是如何选择商用现成软件(COTS)——软件开发实际上是一个从现有软件中识别并选择理想需求的过程,双峰模型能让开发人员从可购买的商业产品中确定需求和对应架构,快速缩小选择范围、确定关键架构决策;三是如何适应快速变化——建立一个能适应需求变化的稳定架构,需要着眼于细粒度的渐进发展,双峰模型天然接受变化而非试图一次性锁定需求。理解双峰模型的价值在于:它给”要不要先把需求写完整再动架构”这个常见争论提供了第三条路——既不是纯瀑布式的”先需求后架构”,也不是完全无序的”边做边想”,而是让两条线以相近的节奏、交替深化地向前推进。

结构图

flowchart LR
    R0[初始需求想法] --> A0[初始架构草案]
    A0 --> R1[需求细化]
    R1 --> A1[架构细化]
    A1 --> R2[需求进一步细化]
    R2 --> A2[架构进一步细化]
    A2 --> D[需求规约与设计规约最终分离]

参考来源

- 位置:《软件架构理论与实践》第8章《软件架构设计和实现》"8.1.3 需求与架构的协同演化"节(源文件:_epub-src/OEBPS/text00064.html) - 结论依据:原文说明"双峰模型强调软件需求和软件架构的平等性,它是简化版的螺旋模型,在发展需求和架构规约的同时,继续从解决方案的结构和规约中分离问题的结构和规约",并列出该模型解决的三个管理问题(IKIWISI、COTS选择、快速变化适应),直接支撑本卡片的结构图与内容解释。 - 原始内容:双峰模型强调软件需求和软件架构的平等性,它是简化版的螺旋模型……双峰模型解决了三个管理问题:①"当我看到它我才知道他"(I'll Know It When I See It,IKIWISI)……②如何选择商用软件(Commercial Off-the-shelf Software,COTS)……③如何适应快速改变(rapid change)。