本资料为软件架构课程复习专用,涵盖关键考点与核心概念,旨在帮助学生全面掌握和理解软件架构设计原则及实践方法。
### 当前软件系统的发展现状
今天的软件非常复杂,很难完全理解所有细节,并且难以用所有的利益相关者都能明白的语言来表达。业务驱动因素给项目带来了压力,商业周期缩短、竞争加剧以及用户期望值不断上升都使得情况变得更加紧张。“软”需求成为对计划、预算和成功构成威胁的常见问题。
太多的变更可能导致失败,因此灵活性和应变能力是关键所在。软件架构需要足够坚固以防止核心设计因修改而变得不稳定,并且在必要时愿意重新进行体系结构的设计。大多数项目都是不可预测的,缺乏明确衡量指标来评估进展的情况屡见不鲜。需求蠕变、废料返工以及90%完成度的长期存在是常见的问题。
人员质量不足会导致失败,即使拥有最好的流程和工具也不例外。管理团队是一项挑战,重大变革在组织层面上也往往难以实现。重用软件构件相对罕见。
### 软件体系结构是什么?
系统的软件架构是指组成该系统的一系列组件、这些组件的外部可见属性以及它们之间的关系。
### 对布鲁克斯“手术队”的看法
布鲁克斯提出的“手术团队”概念,即一个主要操作者和众多支持者的角色分配方式,在项目管理和协作中具有一定的借鉴意义。这有助于明确职责分工,并确保项目的顺利进行。
### 布鲁克斯在《人月神话》中的观点
小弗雷德·布鲁克斯在其著作《人月神话》里描述了系统架构师的角色,指出他们应当像建筑设计师一样成为用户的代理,代表用户的需求和利益来设计系统的结构与功能。
### 从David Parnas学到的软件开发原则
Parnas为软件工程引入了一些重要的“体系结构”理念,并将其发展成基本原则。主要的原则包括:
- **信息隐藏**:作为简化维护及重用的基础。
- **接口分离实施**:组件之间明确界定界面和实现部分。
- **程序元素特性观察**:不同代码单元各自独立的性质与角色区分。
- **“使用”关系**:控制各组件之间的连接,以促进系统扩展性增强。
- **错误处理原则**:用于检测并妥善应对各种异常情况。
- **识别系统的共通结构和特征**:“家族化”的软件体系中发现共同点,提供粗粒度、稳定且通用的架构框架。
- **认识到结构对非功能性‘质量’的影响**:例如性能、安全性等方面的特性。
这些原则有助于构建更加健壮、灵活以及易于维护扩展的应用系统。