我觉得TDD入手最重要的一个环节的就是对TODO的分解,每条TODO最终都能分析到一定的可测试的粒度,否则很难转化成测试代码。在TDD的几本书中,似乎TODO是轻而易举的事,但往往在具体项目中却让人不知如何下手。书上的例子大多都是一些纯逻辑的问题,而具体的项目往往都是数据库,UI,网络同逻辑混杂一起。而此也造成了大多TDD推行的流产。我是从事网络多媒体相关开发,在项目团队中推行TDD,发现几乎所有的开发人员TODO都不知道如何细化分解,因此我在这里通过一个具体的例子把我的分解列出来。
项目描述:
这是一个监控相关的项目。有多个现场,每个现场都有多个摄像头,客户端可以监控各个现场,同一个现场也可以从各个角度监控。客户端可以同时有多个视频窗口,每个现场都可以独立选择绑定的现场和绑定的摄像机位。
业务需求:
系统需求分解:
a)用户从下拉条选择要查看的视频机位,选择后在对应的窗口播放视频。 |
b)由于可能有多个窗口在看视频,本窗口选择的视频可能另一个窗口已经在播放了,因此确保同一个机位视频只订阅一次。 |
c)记得要清除原有订阅的视频。 |
d)如果视频所在的服务器不同需要建立新的连接。如果另的窗口的视频源同一个服务地址,则只用一个连接。 |
个人观点:系统需求分解就是将业务需求结合开发环境、架构、性能、对象生命期管理的进一步分解。
TODO:
1. (不测)切换下拉事件:如果没有机位没变化则不改变当前状态 |
2. (不测)切换下拉事件:如果机位发生变化,取消窗口同旧的视频流的绑定 |
3. (不测)切换下拉事件:如果机位发生变化,建立窗口同新的视频流的绑定 |
4. (要测)建立窗口同视频机位的绑定:如果该机位视频已经有其它的窗口订阅了,那么无需重新订阅,直接使用原有订阅,添加该视频订阅合约同窗口的关系。 |
5. (要测)建立窗口同视频机位的绑定:如果该机位视频还未订阅过,那么进行订阅。 |
6. (要测)订阅机位视频:创建或取得同该视频源的访问代理对象,订阅机位所在通道的视频流。 |
7. (要测)创建或取得同该视频源的访问代理对象:如果视频源所在的代理对象已经存在,直接返回 |
8. (要测)创建或取得同该视频源的访问代理对象:如果视频源所在的代理对象不存在,则创建,并取得同该服务器的连接,将该代理对象放入连接中。 |
9. (要测)取得同该服务器的连接:如果连接存在,直接返回 |
10. (要测)取得同该服务器的连接:如果连接不存在,则创建一个新的连接 |
11. (要测)取消窗口同旧的视频流的绑定:从订阅的节点中,移除本窗口 |
12. (要测)取消窗口同旧的视频流的绑定:如果订阅节点中的所有绑定窗口都清空了,则真正向视频源取消对应通道视频流的订阅。并清除视频源的访问代理。 |
13. (要测)清除视频源的访问代理:如果代理所在的连接器没有任何其它代理,则断开并清除连接 |
个人观点:由于1、2、3涉及到MFC的窗口控件调用,测试麻烦,固不进行测试。
个人观点:由于涉及的问题较复杂,因此TODO也是采用逐层挖掘的方式,如:
切换下拉事件
建立窗口同视频机位的绑定
如果该机位视频已经有其它的窗口订阅了
如果该机位视频还未订阅过
订阅机位视频
创建或取得同该视频源的访问代理对象
如果视频源所在的代理对象已经存在
如果视频源所在的代理对象不存在
取消窗口同旧的视频流的绑定
从订阅的节点中,移除本窗口
如果订阅节点中的所有绑定窗口都清空了
清除视频源的访问代理
个人观点:由于TDD是驱动设计,而不是保障接口的有效性测试,而此可以去测试一些private的函数。如何测private,不同语言不同,我是用c++,采用friend方式就可以。
以上是我的一些思路,纯粹是个人在项目中的摸索,还请大家共同指教。另外我觉得不同的软件开发,会有一些各自适用的经验,大家也可以一起贴出来交流学习。
分享到:
相关推荐
单元测试 TDD EASYMOCK 的一般用法说明 实例
[测试驱动开发的三项修炼——走出TDD丛林].
工程与技术实践-TDD中常见的10大反模式
2020QECon全球软件质量&效能大会,工程效能变革专场刘冉做的洞见TDD-理论与实践的报告的PPT文档,分享给大家!
TDD Todo工作流程片集(约1小时) 编写将使用您的应用程序的测试。 首先使用TDD编写逻辑。 稍后执行UI。 当前,Todo.test.ts中有一个失败的测试,您可以通过编写生产代码开始。 提示:我们需要在./src/api/Todo....
[测试驱动开发的三项修炼——走出TDD丛林].rar
AgboTddPractica 实践TDD
TDD测试驱动开发,你值得拥有! TDD测试驱动开发,你不会后悔!
TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。 TDD得基本思路就是通过测试来推动整个开发得进行,但测试驱动开发并不只是单纯的测试工作,而是把需求...
华为LTE TDD系统原理培训PPT文档
3GPP采用“求同存异”的原则进行L1E FDD和TDD的标准制定工作.将两种制式的协议实现在相同的规范中描述,并尽可能保证其协议实现相同,如遇到无法融合的差异,则仅针对差异部分进行分别描述。标准制定的这种指导思想...
vue-tdd-with-todo 项目设置 yarn install 编译和热重装以进行开发 yarn serve 编译并最小化生产 yarn build 运行单元测试 yarn test:unit 整理和修复文件 yarn lint 自定义配置 请参阅。
《测试驱动开发的3项修炼:走出TDD丛林》用实际案例及故事讲述了测试驱动开发(TDD)的最佳实践,从TDD为什么实践起来非常困难等最根源的问题入手,循序渐进地介绍了构筑TDD的三项修炼,涉及到未雨绸缪的单元及自动化...
Laravel开发-tdd 时分双工
GSM TDD noise 分析,但愿对GSM RF感兴趣的您有所帮助
GSM TDD 板振说明及分析方法、解决方法总结
C语言的TDD参考示例代码,主要包含了书中所参考的源代码
使用phpunit 一步一步使用tdd开发模式,减少bug数,提高项目质量
TDD FDD哪个好.docx