跳至主要內容

Chapter19 架构实现与测试

Chiichen原创大约 4 分钟课程笔记软件体系结构

架构与实现

  • 保持代码和架构一致的技术:
    • 在代码中嵌入设计(Embedding the Design in the Code)
    • 框架
    • 代码模板

在代码中嵌入设计(Embedding the Design in the Code)

  • 架构作为实现的蓝图。这意味着:
    • 实现者知道他们正在实现的架构结构。例如,层次结构、发布-订阅、MVC、代理等。
    • 他们可以将架构结构作为注释记录在代码中。这样,任何接手代码的人都会了解一些约束条件。
    • 然后,工具可以自动关联代码和架构。

框架(Framework)

  • 框架是围绕特定主题组织的可重用的库或类集合。
  • 程序员使用框架提供的服务。
  • 例如:
    • Ruby on Rails 基于 MVC,专为 Web 应用程序设计。它提供了从 Web 服务器收集信息、与数据库交互或查询以及渲染模板的能力。

代码模板(Code Templates)

  • 代码模板是程序员提供应用程序特定部分的代码集合。
  • 例如:
    如果在关键应用组件中检测到故障,将进行以下切换: 1. 并行在不同处理器上的次要副本被提升为新的主要副本。 2. 新的主要副本与应用程序的客户端重建连接。 3. 启动新的次要副本作为新主要副本的备份。 4. 新启动的次要副本向新主要副本宣布自己的存在。如果在次要副本中检测到故障,则在其他处理器上启动一个新的次要副本。
  • 过程:
    • 对每个关键组件使用代码模板。
    • 在模板的固定位置放置应用程序特定的代码。
  • 代码模板的优势
    • 具有相似属性的组件以类似的方式运行。
    • 模板只需调试一次
    • 复杂部分可以由熟练人员完成,并交给不太熟练的人员。

架构和测试

  • 两个级别的测试
    • 单元测试(Unit Testing):对特定软件部分进行测试。
      • 组件或模块
    • 集成测试(Integration Testing):测试不同软件单元开始协同工作时的情况。
      • 集成测试可以测试功能、性能、可用性和安全性。
  • 需要测试的内容:
    • 功能正确性的责任(Responsibilities)
    • 通过合成负载进行性能(Performance)测试
    • 通过故障注入进行可用性(Availability)测试
    • 可修改性(Modifiability)需求也可以通过将更改分配给测试团队进行测试
    • 安全性(Security)通过执行各种攻击场景来测试。

黑盒测试(Black-Box Testing)

  • 黑盒测试将软件视为一个“黑盒”,没有关于内部设计、结构或实现的任何了解。
  • 测试人员的唯一信息来源是软件的需求文档。
  • 架构如何在黑盒测试中起作用?
    • 它帮助测试人员理解需求文档中与指定子系统相关的部分。

白盒测试(White-Box Testing)

  • 白盒测试充分利用软件单元的内部结构、算法以及控制和数据流。
  • 测试覆盖单元的所有控制路径。
  • 白盒测试通常用于单元测试。

测试活动

  • 架构师应积极参与以下活动:
    • 测试计划是分配资源的过程,例如时间、人力、技术、工具、硬件或设备。
    • 测试开发是编写测试、选择测试用例和创建测试数据集的过程。
    • 测试报告和缺陷分析
      • 测试工具集的创建,包括测试引擎和测试脚本仓库;
      • 主要目的是自动化测试过程。
  • 测试驱动开发是一种技术,系统是根据预先确定的测试来开发的。
    • 测试执行。测试人员将测试应用于软件,并记录错误。

总结

  • 实现
    • 实现活动可以将架构知识嵌入代码中。
    • 模板可以用于重复出现的关键部分。
    • 通过使用工具和管理流程可以防止架构侵蚀。
  • 测试
    • 单元测试和集成测试依赖于架构知识和测试工具集。
    • 架构师应参与各种测试活动。