第8章 确定关键性需求
是什么决定了软件系统的架构?!
没有大的争议的是:需求决定了软件系统的架构!
需求有功能性需求、质量需求和约束条件,那么什么样的需求对软件系统的架构影响最大?
并非所有的需求都对架构都有影响!!!
![](https://img-blog.csdnimg.cn/img_convert/1e110faef5d53a943446808c7865d321.png)
8.1 众说纷纭——什么决定了架构
![](https://img-blog.csdnimg.cn/img_convert/fa28f00ba21d61fb1754f832fe46b436.png)
需求的三方面:
功能性需求=》用例
非功能性需求:质量需求
非功能需求:约束条件
类比:就想买房,并非有所对家的需求对影响房型的选择,只有一些关键需求会影响房型架构,比如家里几口人,对书房或厨房的诉求、对舒适性的需求、以及手头资金这个约束条件!!!
![](https://img-blog.csdnimg.cn/img_convert/4dc8c71cd2b40f4cc605968db24a4c3a.jpeg)
8.1.1 用例驱动论:功能性需求
用例用图形的方式展现了:站在系统之外,软件系统提供的所有的功能性需求。
因为需求决定架构,因此,有相当多的人认为,用例决定了软件系统的架构。
![](https://img-blog.csdnimg.cn/img_convert/2f2fad4cf3cb4e70af02f6704faf2e97.png)
8.1.2 质量决定论:非功能性需求
![](https://img-blog.csdnimg.cn/img_convert/37ab73c38e94d6553bec4519fb57a38a.png)
![](https://img-blog.csdnimg.cn/img_convert/9ffd2078f698ddcb1b8ad36c0ef0bda6.png)
作者的观点:没有功能性需求,非功能性需求何以立足?
8.1.3 经验决定论
![](https://img-blog.csdnimg.cn/img_convert/3d3566fcfaff7d2c9d873f56ef8fe81a.png)
8.2 真知灼见——关键需求决定架构
关键性需求包括:
关键性功能性需求
关键性非功能性需求
关键性约束条件
需求的三个方面缺一不少!!!
8.2.1 “目标错误”比“遗漏需求”更糟糕
错误:方向性错、目标性错误、核心问题的错误
遗漏:遗漏部分需求。
![](https://img-blog.csdnimg.cn/img_convert/8983428f9cec332e7185c55b0d05baf3.jpeg)
在众多需求中,把握住关键性需求,是叫架构师的关键技能,是架构师在架构之前首先要解决的问题。
一旦关键性需求把握错误,就是方向性选择的错误,这个错误导致的返工的代价是非常大的!!!
![](https://img-blog.csdnimg.cn/img_convert/0e5504a4da5d557b697a2f73877c6157.png)
错误的质量目标会导致错误的架构设计。
为了克服这个问题,需要采用新的方法来确定软件的架构。
8.2.2 关键需求决定架构,其余需求验证架构
把握住了关键需求,构建系统架构,然后在用其他需求验证,根据关键性需求构建的架构是否能够同时兼容其他非关键性需求,并根据非关键性需求对架构进行优化和改进。
![](https://img-blog.csdnimg.cn/img_convert/4ff0f1bcbea7cb77a969cc9b4528ad04.png)
![](https://img-blog.csdnimg.cn/img_convert/0f18d513e98487e98beee0817b5bda3e.png)
备注:
根据关键性需求构建的架构是架构框架、是基础架构,但并不是理想架构。
并不存在理想架构,它能够满足大多数需求而已。
架构设计要同时考虑:
关键性功能性需求
关键性质量需求
关键性约束条件
关键性需求的特征:
风险大
性能要求高
核心需求
8.3 付诸行动——如何确定关键需求
![](https://img-blog.csdnimg.cn/img_convert/4f2b460fa2caefbe16949d364b6ad0dd.png)
对于前者:在不同质量目标中取得平衡,正是因为质量目标有一定的制衡性和矛盾,因此选择某一个质量性需求作为主需求,作为关键性需求,则其他与之制衡的非关键性需求就沦为非关键性需求,就会降低他们的影响力,甚至要牺牲哪些非关键性质量需求!!!
对于后者:选择核心的需求、关键性的需求。
8.3.1 确定关键质量要求
![](https://img-blog.csdnimg.cn/img_convert/00497bb401133a9d528403aa924c9d83.png)
![](https://img-blog.csdnimg.cn/img_convert/11ed0c60eca912bffe996c59a5095bbe.png)
备注:
+表示这两个质量属性是正相关的,强化一个属性,这同时强化另一个属性,反之亦然。
-表示这两个质量属性是负相关的,强化一个属性,则会弱化另一个属性,反之亦然。
![](https://img-blog.csdnimg.cn/img_convert/9390f3b50379fd059d608faa732b496e.png)
![](https://img-blog.csdnimg.cn/img_convert/452049cf7c78ad1f3583786880ded75b.png)
8.3.2 确定关键功能要求
![](https://img-blog.csdnimg.cn/img_convert/60333271a6c652bbea01186ac4a19feb.png)
![](https://img-blog.csdnimg.cn/img_convert/93d9972beb4d9b79e3ec3eb8b47a2ff5.png)
![](https://img-blog.csdnimg.cn/img_convert/6c63028d602edf381d3f5906320d3b23.png)
![](https://img-blog.csdnimg.cn/img_convert/4f1a78d468762b280595cce0d9b618c1.png)
![](https://img-blog.csdnimg.cn/img_convert/23f8c51b26e9b1ec46bd37da94c7fe9b.png)
8.3.3 确定关键约束条件
每个用例都有自己的约束条件,关键需求的约束条件,就是关键性约束条件。
8.4 实际应用(6)——小系统与大系统的架构分水岭
8.4.1 架构师的“拿来主义”困惑
![](https://img-blog.csdnimg.cn/img_convert/a02d9611374018bb3333c11bcaf7be39.png)
![](https://img-blog.csdnimg.cn/img_convert/d67b76b4bd4fdd894dde42f6a88da345.png)
![](https://img-blog.csdnimg.cn/img_convert/c6e69e98663b398766451989eb47f01e.png)
8.4.2 场景1:小型PMIS(项目型ISV背景)
![](https://img-blog.csdnimg.cn/img_convert/9ecec67330da633ee7829654f65cb995.png)
![](https://img-blog.csdnimg.cn/img_convert/7e8452cb0ca6f3566e5f929fb384d7e3.png)
8.4.3 场景2:大型PM Suite(产品型ISV背景)
![](https://img-blog.csdnimg.cn/img_convert/3afc3c796d570bc30274ac86358ea2a0.png)
![](https://img-blog.csdnimg.cn/img_convert/f66eeef7c9fed8d44a9b1d661d378342.png)
8.4.4 场景3:多个自主产品组成的方案(例如IBM)
![](https://img-blog.csdnimg.cn/img_convert/acdaf1b590818f6dd3e53381f12d05b1.png)
![](https://img-blog.csdnimg.cn/img_convert/ea2a8c2bc9b01cd46ec122a0d5422c3b.png)
8.4.5 “拿来主义”虽好,但要合适才行
![](https://img-blog.csdnimg.cn/img_convert/72b3c27190a1b828e7f5f5a359d6334a.png)
![](https://img-blog.csdnimg.cn/img_convert/393dcbcd972b3b713dea58eb80f7d373.png)
备注:
不同的目标系统,关键性需求是不相同的。
需要根据自身的需求,重新定制化自己的关键性需求,而不是一味地拿来主义。