ALPD学习笔记 4:高效高质量编码,测试先行和意图导向的编程

简介: # 由外而内:发现和形成设计职责设计是一种信息不完全情况下的决策:从最开始我们并不知道要用什么数据结构可能是最好的,如果一开始就从底层数据结构开始写,需要耗费更多脑力。我们首先应该写确定的功能性代码,一般来说外层功能相对确定,但是底层数据结构我们不一定知道。延迟决策到最后时刻关键信息经常会自然显现由外而内的变成允许暂时忽略不重要的细节,“意图导向编程 Programming By Inte

由外而内:发现和形成设计职责

设计是一种信息不完全情况下的决策:从最开始我们并不知道要用什么数据结构可能是最好的,如果一开始就从底层数据结构开始写,需要耗费更多脑力。
我们首先应该写确定的功能性代码,一般来说外层功能相对确定,但是底层数据结构我们不一定知道。
延迟决策到最后时刻关键信息经常会自然显现
由外而内的变成允许暂时忽略不重要的细节,“意图导向编程 Programming By Intention”

收益:

  • 职责分配实在编码过程中即使完成的,设计和编码真正成为一件事情
  • 代码的可理解性可以得到保证(声明式编程),消除了大多数注释的必要性。
  • 以终为始,渐近导出设计契约
  • 延迟复杂的细节性决策,聚焦于当前阶段的关键行为
  • 利用了IDE的“自动纠错”能力,提升了编码速度

由外而内编程的两个要素:

  • 保持同一个层次的抽象
  • 合理分配职责

小结:

  • 从应用层开始写,可以用应用场景驱动,促进领域对象和领域服务的职责持续生长
  • 意图导向,描述期望的程序行为,同时完成职责分配
  • 逐层深入,重复上述步骤
  • 设计领域层对象时,要结合领域对象的职责考虑,并合理区分哪些属于领域层,哪些不属于领域层

测试先行:表达和实现设计契约

测试先行 = 意图导向编程 + 用测试表达设计契约
后置自动化单元测试的问题:

  • 上下文丢失:难以回忆设计场景,出现设计场景丢失
  • 可测性缺乏:不知道老代码的功能职责,依赖难以断开
  • 情绪和动机:仅仅在补覆盖率的时候想做单元测试,但功能效果不好

推荐实践:

  • 自动化测试代码先于产品代码完成
  • 利用测试完善接口的定义,完善契约,可以用测试来做接口说明
  • 增加REST接口,并在集成环境中测试
  • 覆盖率是一种指示器,也是测试先行的自然结果

单元测试不是“白盒”测试,测试用例的本质是在描述接口职责

收益:

  • 聚焦于外部行为而不是具体实现
  • 自动化测试形成了代码的功能手册,可以作为活文档
  • 可测性得到了保证,不会出现依赖解不开,职责分不清的问题
  • 好的可测性带来了模块化
  • 测试线性容易推动进展
  • 持续建立信心

持续演进:契约是设计质量的保证

legacy code == code without tests
在有测试的前提下,代码可以重构、演进

目录
相关文章
|
7天前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
17 1
|
1月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
207 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
34 2
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
65 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
1月前
|
JavaScript
vue尚品汇商城项目-day07【55.编码测试与打包发布项目】
vue尚品汇商城项目-day07【55.编码测试与打包发布项目】
31 3
|
6月前
|
存储 测试技术
LabVIEW编程开发PCB自动测试设备
LabVIEW编程开发PCB自动测试设备
53 1
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
1月前
|
安全 网络安全 数据安全/隐私保护
Python渗透测试之流量分析:流量嗅探工具编程
Python渗透测试之流量分析:流量嗅探工具编程
|
3月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
62 2
|
3月前
|
存储 测试技术 数据库
Python接口自动化测试框架(练习篇)-- 函数编程(一)
本文通过实际的编程练习,讲解了面向过程编程的概念和应用,包括如何定义函数、处理文件读写以及实现用户注册功能,最终将这些过程封装成函数,体现了Python作为脚本语言的面向过程编程特性。
28 2
下一篇
无影云桌面