嵌入式系统TDD策略

目标硬件的瓶颈

目标硬件

产品代码最终运行的硬件载体

目标硬件的瓶颈

软件只能在目标硬件上运行,将面临一些瓶颈:

  • 硬件就绪后于软件开发,推迟了软件测试;
  • 目标硬件本身需要调试验证,叠加软件的调试验证,调试验证困难度增加;
  • 系统的构建和上传普遍漫长

那如何解决硬件瓶颈问题呢?

  • 传统手段:开发板
    可以解决项目早期硬件未到位及部分调试验证问题,但未解决系统构建上传漫长等问题;
  • 更为有效的手段:双目标开发

双目标开发

  • 双目标:目标硬件、开发系统
    • 代码从第一天就设计成至少在两个平台上运行

双目标好处:

  • 硬件就绪之前就能测试代码
  • 避免硬件和软件同时调试
  • 帮助设计
    • 更关注软硬件的边界,软硬件解耦
  • 快速移植到新硬件,自动化单元测试验证

双目标测试的风险:

  • 编译特性、语言特性不同
  • 基本数据类型可能不同
  • 字节序及数据结构对齐可能不同

如何降低双目标测试风险?

开发系统尽量选用与目标硬件相同的编译、语言、数据类型、字节序及对齐等

嵌入式的TDD循环

  • 平台1: TDD微循环
    • 写通用软件
    • 隔离硬件和软件
    • 频繁运行
  • 平台2: 目标编译器兼容性检查
    • 每次采用新的语言特性时编译
    • 这可以提醒你一些移植性问题,比如有些头文件没有、不兼容的或者缺失的语言特性。
  • 平台3: 评估板上运行单元测试
    • 一直保持在评估板上运行的能力
    • 前期可用于评估在目标硬件上的效果
    • 后期可用于排除目标硬件可疑行为
  • 平台4:在目标硬件上运行单元测试
    • 若内存不能一次性装入所有测试,可以分割成多组测试套件,分批装入测试
  • 平台5: 在目标硬件上运行验收测试
    • 手工测试不能完全被自动化的依赖于硬件的代码

双目标的不兼容性

如何处理与平台相关的不兼容性?

  • 共用接口、独立实现(共用头文件、分平台独立目录及源文件)
  • 每个平台有一个目录保存与平台相关的代码
  • 利用编译器和链接器

和硬件一起测试

和硬件一起的测试应该自动化
3种可能的硬件测试:

  • 自动化硬件测试
  • 部分自动化硬件测试
    • 有效地最小化依赖于硬件的代码,并手工测试
  • 利用外部设备的自动化硬件测试
    外部设备对目标系统进行一些输入,测试目标硬件的输出是否符合预期。
    比如LED硬件亮灭可能需要人工的半自动化测试,若有外部工具可以对其LED控制,并有相应LED效果的捕获手段即可完成全自动化的测试。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容