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

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

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

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

收益:

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

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

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

小结:

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

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

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

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

推荐实践:

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

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

收益:

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

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

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

目录
相关文章
|
7月前
|
人工智能 自然语言处理 安全
学不会编程也能写测试?AI让测试更平权
在传统的软件开发体系中,测试常被划分为“技术型测试”(如自动化、性能、安全)和“业务型测试”(如功能验证、用户体验)。前者掌握技术话语权,后者则更多依赖经验和流程规范。然而,随着大语言模型(LLM)等AI技术的迅猛发展,这一固有格局正被悄然打破:
233 10
|
10月前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141663 29
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
9月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
10月前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
通义灵码, 作为国内首个 AI 程序员,从最开始的内测到公测,再到通义灵码正式发布第一时间使用,再到后来使用企业定制版的通义灵码,再再再到现在通义灵码2.0,我可以说“用着”通义灵码成长的为数不多的程序员之一了吧。咱闲言少叙,直奔主题!今天,我会聊一聊通义灵码的新功能和通义灵码2.0与1.0的体验感。
|
12月前
|
人工智能 自然语言处理 前端开发
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
CodeArena 是一个在线平台,用于测试和比较不同大型语言模型(LLM)的编程能力。通过实时显示多个 LLM 的代码生成过程和结果,帮助开发者选择适合的 LLM,并推动 LLM 技术的发展。
309 7
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
|
10月前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
1185 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
206 1
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
664 2
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
425 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法