TDD+结对编程活动分享

TDD+结对编程活动分享

关于活动

为了让大伙能体验编程的乐趣. 易贷项目iOS的小伙伴们组织了一场TDD+结对编程的活动.

概念介绍

首先和大伙介绍几个概念:

为什么需要TDD

我们都做过这样的事——写一大堆代码然后艰难地使它工作起来. 也就是先建造再修正. 测试是在代码写完之后的事情. 这种很难预料的过程被亲切地称为“调试”,我们可能会在其中花掉半个小时. 修改一个bug可能导致产生另一个,甚至是一系列的bug.
我们需要TDD,这是因为我们是人类,人类会犯错误. 计算机编程是一项非常复杂的活动. 除了其他原因,TDD还是自动化测试用例,通过它,我们系统地得到按我们的意图工作的代码,并且可以同时保持这些代码可工作.

什么是TDD

全称:测试驱动开发
TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码.

什么是结对编程

结对编程技术是指两位程序员坐在同一工作台前开发软件. 与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码.

需求介绍

考虑到是晚上编程,时间上比较紧张. 我们用来练手的是一个简单的需求.

描述

实现一个Calculator计算器类,完成加减运算.

例子

  • 输入 @”1+1” 返回2
  • 输入 @”1+1+1” 返回3

分组实现需求

最开始的用例尽可能的简单,只有@"1",实现起来也只是return 1. 随后的用例一点一点复杂起来,期间我们也多次推倒重构.

在用例的构造上是小伙伴A写用例,其partner写实现代码,然后小伙伴A去优化这段代码要去嵌套层次不得大于两层. 然后交替写用例.

最后完成的时候所有的分组再在一起互相晒代码.

有意思的是,分组内是结对编程,代码互相理解起来无难度,自己和partner之间也很融洽,讨论的兴致也很高昂; 可是当去看其他组的代码的时候,大伙一致评价其他组的代码可读性差.

总结

通过这次活动,我们意识到2个人一起考虑问题要比1个人思考更加全面一些.我们这个小需求都能推倒重写代码,而实际项目中需求变更的则更加频繁. 如果没有一个好的测试保障,我们根本没有勇气推倒重构. 大伙还没有掌握重构的一些方法,还需要努力.

感想

以下是参与的一些小伙伴的感想

TDD+结对编程活动分享

关于活动

为了让大伙能体验编程的乐趣. 易贷项目iOS的小伙伴们组织了一场TDD+结对编程的活动.

概念介绍

首先和大伙介绍几个概念:

为什么需要TDD

我们都做过这样的事——写一大堆代码然后艰难地使它工作起来. 也就是先建造再修正. 测试是在代码写完之后的事情. 这种很难预料的过程被亲切地称为“调试”,并且可以同时保持这些代码可工作.

什么是TDD

全称:测试驱动开发
TDD的原理是在开发功能代码之前,测试代码确定需要编写什么产品代码.

什么是结对编程

结对编程技术是指两位程序员坐在同一工作台前开发软件. 与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码.

需求介绍

考虑到是晚上编程,时间上比较紧张. 我们用来练手的是一个简单的需求.

描述

实现一个Calculator计算器类,完成加减运算.

例子

  • 输入 @”1+1” 返回2
  • 输入 @”1+1+1” 返回3

分组实现需求

最开始的用例尽可能的简单,大伙一致评价其他组的代码可读性差.

总结

通过这次活动,还需要努力.

感想

以下是参与的一些小伙伴的感想

A:

TDD:通过tdd,可以提高我们的代码质量,在编写代码之前考虑得更全面
结对编程:通过结对编程,个人觉得写代码时需要考虑扩展性,不然后续需要全部推倒重写,对以后的开发同事造成了大量的伤害。

B:

结对编程:有利于提高代码质量和编码速度,提高时间利用率,有个弊端可能彼此的思维想法交换不够充分,走入死胡同
TDD:可以在编码前考虑代码更全面,也能提高编码质量,可以慢慢将TDD融入我们项目中,可以从一些常出问题的请求开始写测试案例了

C:

TDD:测试驱动开发,在编写某一个功能模块之前,先把这部分的测试用例写好,可以在代码编写的早期,发现问题,解决问题,及时重构。
结对编程:两个人用一台设备进行编程,这种方式可以提高工作效率,并且对于某一个问题进行分析时会分析的更加全面,对于这种方式可能还不太适应,日后可以多进行这种训练。

D:

无论是结对编程还是TDD思想,在实际开发工程当中都是很有帮助的。
当然,最有效果的还是通过这种活动引发思考,去解决问题,尤其是结对编程,效果非常明显。

E:

TDD编程很效率,发现和解决问题效率,希望以后能多参加这种活动!非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结