本系列文章分为三部分:
申请CTC的攻略秘籍
前面两篇文章讲了敏捷教练职业发展的光明前景,以及我成为敏捷教练一路的心得,如果你也想和我一样去冲击最高级别的Scrum导师级认证,那就继续往下看吧。
从去年底推出试点以来,CTC已经正式开放申请,目前我从论坛上看到已有很多东南亚的人士已经在积极申请,而中国区申请人数不多,大家还需要努力啊,我相信国内的敏捷水平可是要远远高于东南亚的啊!
本系列文章分为三部分:
2007年我加入诺基亚西门子通信,正好赶上3G Platform产品线全面推广敏捷,那个时候在全球真正敢于大规模推广敏捷的大型公司并没有几个。2008年时我获得了CSM认证。在诺西那几年我陆续担任过高级软件工程师、资源线经理、质量经理、项目经理、ScrumMaster、敏捷教练等职位,也和很多敏捷方面的专家共事过,不夸张地说,诺西真的可谓中国敏捷的黄埔军校。至于我个人,在管理方面,学会了更多授权、精益思想和系统思考。在技术和工程实践方面,全面地接受了XP中持续集成的理念,将自动化测试和重构融入到了日常工作中,认识到技术敏捷性的重要。后来的LeSS框架基本上就是诺西那几年在组织级大规模推广Scrum的经验教训的总结。
本系列文章分为三部分:
敏捷教练是个新鲜头衔,敏捷转型的公司内都有人在做着一些事,其中很多人还是在过去的职位上,却做着全新的事情,于是就难免产生顾虑和疑惑:
公司让我做敏捷教练或ScrumMaster,到底有什么前途?我该如何发展?
原文作者周龍鴻(Roger)是台湾敏捷与Scrum的推广者和践行者。去年与他合作过以Scrum方式组成远程虚拟字幕组,合作完成Spotify系列视频的中文字幕翻译,免费回馈给海峡两岸的敏捷社区。
最近,他和台湾的小伙伴再次出发。这次他们组成了多个虚拟Scrum团队(你可以称之为规模化敏捷部落:p),采用远程协作的方式共同对《ISO 21500 项目管理标准》进行翻译、修订,递交台湾”国家标准检验局”,成功通过审查成为台湾的”国标”(CNS)。
这些小伙伴没有报酬,全凭热情工作在一起,认真地践行Scrum和敏捷工作方式。从Roger的故事中,以及后半部分志愿者的心得中,整个过程的辛苦和收获,更能感受到他们的用心、严谨和喜悦!
征得原作者同意,我将此文《我在CNS Scrum專案的奇幻之旅》转到墙内,让大家了解到Scrum不仅仅限于IT软件领域。希望更多人能够和他们一起来享受这个敏捷奇幻之旅,用敏捷来改变大家的工作方式,改变世界。
原文Facebook链接:https://goo.gl/HqBXHn
过去因为每个测试是相互独立、顺序执行的,因此单元测试都是同步执行的。为了支持各种异步调用,XCode可以用来新的API和 XCTestExpectation 对象支持block,现在测试方法会等待调用完成或者超时。
一般的过程是,测试用例进行异步操作,并注册回调,然后等待expectation被满足。当异步操作结束时,通常会进入回调函数或者Block,测试案例在这里需要主动告知expectation已经被满足,从而结束run loop的等待,然后可以进行后续断言或操作。
While developing stuff with Ember.js I stumbled upon some very nice and handy functions which are built in. This post lists some of them and describes in a short what they are used for.
当用Ember.js开发时,我发现了一些优美且实用的函数。本文列出了它们,并简短地说明了用法。
js单元测试Unit Test的工具包括Jasmine, Mocha, NodeUnit, JsTestDriver等。
以Jasmine最为流行,因为其良好的语义和丰富的Mocking机制。
无论使用Grunt.js或是Maven来作为项目构建工具,Jasmine都有良好的插件支持。
js单元测试其实并不为前端开发者重视,近年开始node.js以及单页面web app流行起来后,越来越多的js项目也开始采用了单元测试,至于单元测试覆盖率,对于很多js开发者还很新鲜。
笔者所在项目采用grunt.js作为项目工具。之前使用了grunt.js v0.3,采用grunt-jasmine-runner插件来运行测试,但一直苦于没有合适的覆盖率插件,后来发现了grunt-istanbul,然而两者不能够直接集成,需要对源代码进行改动,以使运行测试的浏览器(比如phantomjs)将生成的覆盖率数据,从内存中传递到grunt的上下文中。
于是,笔者在github上fork了项目,自行将两者整合成为完整的一步式插件grunt-jasmine-coverage,并发布到NPM上。
近期,grunt升级到v0.4, 官方的jasmine插件也换成了grunt-contrib-jasmine。经过笔者一番探索和讨论,发现该插件支持模板系统用于扩展功能,而且已有热心人制作了用于覆盖率的模板grunt-template-jasmine-istanbul。经过与其作者的讨论,现在该模板已经可以很好的支持同时生成多份覆盖率报告。比如,cobertura格式的报告,可以用于Jenkins集成,而lcov格式的报告,可以用于Sonar集成(需要sonar-javascript插件)
有一个小技巧,项目中除了包括自己的源代码,肯定也会包含其他第三方的库,比如jquery。而对于计算覆盖率,我们可能希望将第三方代码踢除出去。这时,在grunt-contrib-jamine的配置中,记得将第三方代码置入vender
一节中,这样grunt-template-jasmine-istanbul在做instrument时会忽略掉这些代码。
此外,grunt.js对于nodeunit也有很好的支持
经常听到有人抱怨说,敏捷实践中会议太多,形式主义严重。在真实了解实际情形后,我们会发现并非这些敏捷实践本身没有价值,而是因为没有正确地领会会议的目的,采取了不恰当的会议形式,或其它深层次的问题,导致会议不能产生预想的结果。每日站会就是一个例子。
首先必须明确,每日站会的目的:基于迭代目标的团队协作和快速反馈。更详细点地说,每日站会提供了在达成迭代目标过程中的团队协作同步点,以及快速反馈循环中的检查和调整点。它的目的不是汇报状态,不是要知晓每个团队成员昨天把时间花在了哪里,不是要知道每个人将要把时间投入在什么地方,而是对目标的跟踪和校准,以及加强在达成目标过程中的协调和合作。
在梳理用户故事时,一个常见问题是:我们应不应该有独立的性能测试相关的用户故事?