领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Mark Levison 译者 张海龙 发布于 2008年1月30日
随着像Agitar One和Parasoft's JTest这样高质量测试代码生成工具的出现,很多人开始质疑,是否还有必要手动编写测试代码?Bob(Martin)大叔深入剖析了这种想法的弱点,给了它重重一击。 这些工具是被设计用于检查已有代码块的,它将以分支、循环等为基础,综合生成一套针对代码的观测报告,开发者可以通过审查这些报告,选择为自己关心的部分 生成整套的测试用例。对于遗留代码,这种方式是了解已有行为的一种非常有效的方式,让开发者可以在进行改变之前,先创建一张安全网。
然而,任何技术都是有限制的:这些工具只是针对代码生成一套观察报告,它们并不能理解算法或是开发者的意图。下面是来自Bob的说明:
作为一个简单的示例,我试着使用两款知名的测试生成工具来为保龄球游戏程序生成测试代码。保龄球游戏的接口看上去是这样的:
public class BowlingGame {设计思想是:在每次投球后调用roll方法,在游戏结束后调用score方法得到本次游戏的得分。
public void roll(int pins) {...}
public int score() {...}
}显而易见,测试生成器并不能随机生成有效的游戏。一次有效的游戏应该是一个有12到21次投球的序列,每次投球得分应该在0到10之间,还有什么?那就是 在每一格内,投球的得分总数不能超过10,对于处在目前阶段的随机生成器来说,要实现这些约束条件确实太困难了。
另一个方面,测试驱动开发(TDD)要求先写测试、再写产品代码的工作方法与众不同。TDD能起到作用,那是因为它会对开发 人员编写的代码进行即时的反馈。在做出任何小修改后,只要运行测试,开发者就可以知道这些改变是否正确;TDD确保了代码与我们通过测试代码表达的意图是 相匹配的;TDD让我们以一个消费者、而不仅仅是创造者的角度来思考如何设计代码,它让我们针对每一个条件和回路进行思考;而且,就像James Carr提到的那样,TDD迫使我们去考虑代码耦合的程度,看看Bob对此又是怎么说的:
使用测试生成器破坏了这个原则,因为生成器是以产品代码作为输入来生成测试的,而且因为它是全自动转换的,所以其生成的测试代码也不便于阅读。人类的意图 只是通过产品代码进行了体现,而无法通过阅读所生成的测试代码来获得验证,更无法通过它来确认产品代码是否已经实现了人类的意图。虽然人类会去检查自动生 成的报告,但相比TTD而言,这只是一个很被动的行为,远不及TTD对于缺陷、设计和意图体现上的洞察力。
……这并不是在说测试代码生成器没有用……我想它们有助于部分标识出大量遗留代码的特性。
多名敏捷社区最有影响力人物将出席Scrum Gathering上海站大会
百度开发者大会巡讲进行时,与大牛近距离交流移动•云技术(广州/武汉/西安/上海 免费报名!)
关于TDD中的测试,其真正的价值在于“写”测试的过程,而不是“有”一堆测试。不过,Agitar One这样的工具仍然很棒,它可以帮助我们为遗留代码构建安全网。
关于TDD中的测试,其真正的价值在于它是对运行代码的说明和监督.所以说它应该有两方面的作用,而tdd中更加强调对代码说明的部分,通过先写测试,来达到对代码说明得更明确的目的.而工具生成的测试则对代码是说明方面基本没有任何意义.
不能了解代码的作用,而对代码的测试,是毫无意义的
而且这样重构也不可能很好的进行了,如果不进行重构,那么要那个安全网还有什么用处呢?
to Chen Zhiguo
也不尽然!
如果工具能感知代码的重构,并在某一事件(按钮,菜单)的触发下,合理的重构测试代码,我想这个价值还是非常可观的。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
3 条回复
关注此讨论 回复