软件架构评审指南

软件架构评审是一个关键的过程,它不仅有助于提升软件质量,还能促进知识的交流。本文试图汇总在软件架构评审中可以使用的元素。

如果想要一些关于软件架构的正式定义,建议阅读以下信息。这些定义的一般基调是需要对将要构建的系统做出高层次的决策:

  • 将使用什么风格?
  • 它的结构是什么?
  • 它将如何运作?
  • 架构的结构组件如何协同工作?
  • 它如何满足所有利益相关者的需求?

对于现有系统,可以检测这些关键因素,以了解软件架构。评估软件架构的一种方法是推理软件架构所展现的质量属性。

性能

性能是指系统响应刺激(事件)所需的时间,或者是在某个时间间隔内处理的事件数量。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 连接池 - 通过建立共享的连接池,减少建立数据库连接的执行时间开销。
  • 负载均衡 - 在一组资源之间均匀分配负载。
  • 分布式处理
  • 缓存 - 使用数据的本地副本来减少访问时间。
  • 延迟实例化
  • 事务并发
  • OLTP和OLAP之间的进程隔离
  • 数据复制

可能会使用的典型度量单位包括:

  • 单位时间内的事务数
  • 完成事务所需的时间

可靠性

可靠性是指系统在应用程序和系统错误的情况下,以及在意外或不正确使用的情况下,保持运行的能力(以可预测的方式执行)。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 使用预防措施(管理)例如在IIS.6 ASP.NET /COM+ 1.5中回收服务器进程。
  • 隔离 - COM+服务器进程隔离
  • 数据库事务日志(回滚)

可能会使用的典型度量单位包括:

  • 平均故障时间

可用性

可用性是指系统正常运行的时间比例。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 故障转移 - 使系统更具可用性,如果一个服务器实例宕机,另一个实例可以接管工作。
  • 事务管理器 - 通过确保系统始终处于一致状态,并提供处理某些类别故障的系统范围策略,提高可用性和可靠性。
  • 无状态设计 - 当一个特定的无状态服务器失败时,其工作可以重定向到不同的服务器实例,而不影响状态管理。

可能会使用的典型度量单位包括:

  • 故障之间的时间长度
  • 系统在故障情况下恢复操作的速度。

安全性

安全性是衡量系统抵抗未经授权的使用尝试和拒绝服务的能力。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 授权 - 在用户被识别和认证后,如何组织对系统信息的控制访问?(基于角色的ACL)
  • 认证 - 在系统中识别和表示最终用户,并验证他是否在说实话?
  • 审计 - 验证和监控安全策略
  • 完整性 - 保护信息在传输或存储过程中不被不当或未检测到的修改?(加密)
  • 机密性 - 保护信息在传输和存储过程中不被不当披露(加密)
  • 拒绝服务 - 服务的连续性?(入侵检测)
  • 数据隔离(一般公共应用程序与内部LOB应用程序)

可修改性

可修改性是指快速且成本有效地对系统进行更改的能力。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 客户端-服务器(关注点分离) - 这种机制涉及从中央进程提供一系列服务,并允许其他进程通过固定协议使用这些服务。
  • 接口与实现的独立性 - 这种机制允许架构师用不同的实现替换相同的功能。
  • 分离 - 这种策略将数据和功能分开,以解决不同的关注点。由于关注点是分开的,可以独立修改一个关注点,而不影响另一个。隔离公共功能是另一个分离策略的例子。
  • 将功能编码到数据元数据和语言解释器中 - 通过将某些功能编码到数据中,并提供解释该数据的机制,可以简化影响该数据参数的修改。
  • 运行时发现 - 没有硬编码的连接字符串、队列名称等。

可能会使用的典型度量单位包括:

  • 使用特定更改作为基准,并记录进行这些更改的成本。

可移植性

可移植性是指系统在不同计算环境下运行的能力。有时被认为是可修改性的一个特殊类型。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 虚拟机

功能性

功能性是指系统完成其预定工作的能力。

可能会使用的典型度量单位包括:

  • 变更请求的数量

可扩展性

可扩展性是指在保持其他质量的同时,系统能够适应用户数量的变化。它必须能够支持用户需求和业务复杂性的持续增长。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 无状态设计
  • 负载均衡
  • 并发(乐观)

可能会使用的典型度量单位包括:

  • 轻松、增量地添加功能(时间、预算等)

耦合/内聚

耦合是指模块之间的依赖程度,内聚是指模块内部的紧密程度。

概念完整性

概念完整性是指统一系统设计的所有层次的主题或愿景。

互操作性

互操作性是指与其他子系统交互的能力,或者与外部可见的功能性和数据结构的明确访问,或者与其他运行时环境的交互。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 简单的数据类型
  • XML
  • Web服务

可用性

可用性是指程序的易用性。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 产品线之间的GUI标准

可能会使用的典型度量单位包括:

  • 熟悉先前版本或其他产品线的用户所犯错误的次数。

可维护性

可维护性是指在错误发生后修复或修复软件系统的问题的能力。

可能会使用的典型度量单位包括:

  • 容易定位
  • 更改的连锁反应

效率

效率涉及软件执行的资源使用,以及这如何影响响应时间、吞吐量和存储消耗。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 晚获取,早释放
  • 减少往返次数
  • 降低流量吞吐量(只发送必要的内容,只检索必要的内容)

可测试性

可测试性是指测试代码单元、子系统等的容易程度。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 基于接口的编程
  • 控制反转/依赖注入
  • 具有明确责任的类

可重用性

软件架构层面,可重用性是指将软件架构用于另一个应用程序的能力。在代码层面,它涉及框架方面。

易于部署

易于部署是指系统可以多快部署。

可能会使用的典型度量单位包括:

  • 安装程序(向导)

可能会使用的典型度量单位包括:

  • 安装产品和/或分发新功能单元所需的时间和资源。

易于管理

易于管理是指维护应用程序健康所需的基础设施、工具和管理人员和技术人员。例如,以最小的影响改变服务的物理位置。

可能会使用的典型度量单位包括:

  • 支持成本的降低:可以通过比较标准时间段内的help desk呼叫次数来衡量。

可扩展性

可扩展性是指在保持其他质量的同时,系统能够适应用户数量的变化。它必须能够支持用户需求和业务复杂性的持续增长。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 无状态设计
  • 负载均衡
  • 并发(乐观)

可调试性/监控

可调试性是指为应用程序的轻松和高效调试做准备。注册异常行为。实时监控。

在进行评审时,可能会寻找以下典型的设计/架构原则:

  • 跟踪支持
  • 异常处理机制中的日志记录

开发生产力

开发生产力是指基于软件架构开发应用程序的成本和时间节省机制。开发人员应该能够轻松学习架构概念及其实现方式。扩展开发团队时,新开发人员的指导成本不应太高。使用模板和编码标准的工作方式可以帮助提高学习曲线和质量。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485