知识卡片

软件架构设计面临的六大威胁及对策

普通读书笔记卡

内容

“关注架构”并不等于”能得到成功的架构”,书中总结出架构设计过程中的六大威胁及对应对策。被忽略的重要非功能需求:非功能需求分质量属性(易用性、性能、可伸缩性、健壮性、安全性等)和约束两类,功能需求的缺陷能靠编程级努力补回,但非功能需求达不到往往无法靠编程弥补、必须重新架构——对策是全面认识需求:需求分层次(客户高层/最终用户/开发者视角不同)、分类型(功能/质量属性/约束),并在充分考虑后做出合适的权衡取舍。频繁变化的需求:需求变更没有免费的午餐,任何变更都消耗时间金钱,而且大量变更后程序容易变乱、Bug增多——对策是用关键需求决定架构:限制深入分析的用例个数,重点权衡不同质量属性间的制约,把精力集中在少数最重要的需求上以获得透彻认识。考虑不全面的架构设计:系统复杂时,若不能让不同利益相关者的关注点在架构设计中都得到清晰表达,会严重影响项目推进——对策是多视图探寻架构:分而治之,每次只围绕少数概念和技术展开,让不同利益相关者的关注点分别得到有序表达。不及时的架构验证:架构设计是否合理直接影响系统能否成功,若不及早验证合理性会埋下巨大技术风险——对策是尽早验证架构:应对早期架构进行编码实现(而不仅是评审),测试原型以确保质量属性达到预期。较高的创造性架构比重:理解已有架构同样耗时,有时甚至比设计新架构更费时间,这会诱使团队倾向于重新设计,但新设计部分引入的不确定性风险,往往高于经过实践检验的已有架构——对策是合理分配经验架构与创新架构比重,调查显示80%经验架构加20%创新架构是较合理的分配。架构的低可执行性:架构设计”好的就是成功的”是错误标准,”适合的才是成功的”才对,一味追求完善性准确性而忽视可执行性(经济性、技术复杂性、发展趋势、团队水平)会带来风险——对策是验证架构的可执行性,用这种验证约束设计过程、避免过度设计。

参考来源

- 位置:《软件架构理论与实践》第8章《软件架构设计和实现》"8.4 软件架构设计面临的主要威胁及对策"节(源文件:_epub-src/OEBPS/text00067.html) - 结论依据:原文分六小节逐一说明每种威胁的具体表现和成因,并各自给出对应的"对策"标题及内容(如"对策:全面认识需求""对策:关键需求决定架构"),其中明确"调查显示,80%的经验架构加20%的创新架构是比较合理的分配比重",直接支撑本卡片结论。 - 原始内容:从开发的角度来看,功能需求的缺陷可以通过编程级的努力补回,而最终提供的软件系统能否达到非功能需求,特别是少数至关重要的非功能需求,是无法通过编程级的努力达到的,必须重新架构……调查显示,80%的经验架构加20%的创新架构是比较合理的分配比重。