on boarding,指的是企业从面试招人,到验证这个人是否符合公司需求的阶段。也就是一个员工,是否有能力:理解用户故事的上下文,以及验收条件 - 按照测试工序的指引,分解任务 - 根据任务列表逐步完成工作。在很多公司中,并没有一个有效的 onboarding 流程。一般是在试用期内,由 HR 和 mentor 以及和员工密切协作的人,来感性评估。而非从员工能否正确实施的迭代交付上入手。

难以避免的认知分歧

所谓正确实施迭代交付,即是否按照公司现有的代码架构与流程,在理解正确的用户上下文下,在给定的周期内,完成预先给出的功能范围。这里需要拉齐认知的有 3 个部分

  1. 完善的业务上下文
  2. 明确统一的代码代码架构
  3. 集体认同的验收条件

由于软件开发是集体活动,从团队视角上来看,不同成员会对同一个问题产生完全不同的看法。

对于公司的老员工来说,他们能完全胜任的的表现即为:理解用户故事上下文 按照架构拆解任务 完成一条待办(验收条件)

对于一些对业务理解不是很好的来说(一般是技术至上的开发):他们并不能理解用户故事由何而来,只能不断对用户故事卡进行迭代

而刚入职的员工,就完全摸不着头脑了。他们并不会仔细思考要做什么功能,产品说要做,就直接在原来的代码上叠加了。最终带来的就是大量的返工和修改。

这种认知分歧难以消除,毕竟不同的人经验水平、专业背景、个人偏好,对问题的思考角度都完全不同。我们优先要做的,其实是固化流程,尽量减少认知分歧上的差异。

总结你的第一个测试工序

测试工序是指在生产或制造过程中,对产品进行检查和验证的一系列步骤。它的目的是确保产品符合预定的质量标准和规格要求。简单来说,测试工序就像是在生产线上设置的“检查站”,用来确认每个产品是否合格。

举个例子,假设你在生产手机,测试工序可能包括以下几个步骤:

  1. 外观检查:检查手机外壳是否有划痕、裂纹或其他缺陷。
  2. 功能测试:测试手机的各项功能,比如屏幕显示、触摸反应、摄像头拍照、通话质量等。
  3. 性能测试:测试手机的运行速度、电池续航时间等性能指标。
  4. 安全性测试:检查手机是否存在安全隐患,比如电池是否会过热、充电是否安全等。

通过这些测试工序,可以及时发现并纠正生产中的问题,确保最终交付给客户的产品是高质量的。

从计算机的角度来看,测试工序就像是给电脑程序做体检,确保它健康无病,能够正常工作。具体来说,测试工序包括以下几个步骤:

  1. 单元测试:就像检查每个零件是否正常工作一样,单元测试是检查程序中的小部分代码(比如一个函数或一个模块)是否按预期工作。
  2. 集成测试:当各个零件都检查完毕后,需要把它们组装起来,看看它们在一起工作时是否协调。集成测试就是检查不同模块或组件之间的交互是否正常。
  3. 系统测试:整个程序组装完成后,需要进行全面的检查,确保它在各种情况下都能正常运行。系统测试就是检查整个系统是否符合设计要求。
  4. 验收测试:最后,需要让用户或客户来试用,看看他们是否满意。验收测试就是检查程序是否满足用户的需求和期望。

通过这些测试工序,可以发现并修复程序中的错误和问题,确保最终交付的软件是稳定可靠的。简单来说,测试工序就是给程序做全面体检,确保它能够健康运行。经过前几篇文章,我们其实可以固化出以下测试工序。

当前系统技术栈为 Angular、Jest 和 playwright.
当前系统采用 MVVM 架构设计,分别为:
- Model 层,负责管理数据,包括数据访问和存储,命名规则为 XXXModel
	- 使用 angular Service 实现
- View层:负责展示数据和与用户交互的界面,使用 angular Component 实现
	- View 层通过调用 ViewModel层的 service,完成功能
- ViewModel层:作为Model和View之间的桥梁,处理业务逻辑,命名规则为 XXXService
	- 使用 angular Service 实现
	- ViewModel层调用 Model 层的 service,完成功能。

工序说明
- 如果功能要求使用到 ViewModel 层,那么:
	- 所有数据,存储在 viewModel 层中
	- 使用 Model 层的 fake 或 stub 作为测试替身
	- 列出需求描述的场景使用到ViewModel层组件的功能(ViewModel层目标功能);
	- 列出“ViewModel层目标功能”需要测试的场景(ViewModel层目标场景)
- 如果功能要求使用到Model层,那么:   
    - 使用内存中的数据或fake implementation(如in-memory web api)作为测试替身;
    - 列出需求描述的场景使用到Model组件的功能(Model层目标功能);
    - 列出“Model层目标功能”要测试的场景(Model层目标场景);
- 对于View层的测试,那么
	- View层仅使用 ViewModel 层做事件绑定和使用数据
	- 使用 jest 做 component 单元测试
	- 使用 playwright 做 e2e 测试

功能需求
=======
作为一个用户,我希望获取所有的在售商品,从而我可以选择我想要购买的商品

任务
====
首先,列出每一个验收场景以及对应的测试数据;
然后,针对每一个验收场景,按照架构描述和工序说明的指引,列出任务列表。

测试工序中的技术能力

  1. 描述功能需求的能力
  2. 拆解任务的能力
  3. 编写测试的能力
  4. 由可测试性引出的代码设计能力(设计模式)

埋点设计

Protocol 和 restful API