异地金融研发团队的敏捷实施策略-Top100Summit

通过重构提高组织灵活性-百度技术沙龙

重构到管道式函数-软件匠艺小组

全球敏捷之旅2015天津站花絮

手机银行中的单分支开发或主干开发

长期维护的特性分支,这种做法会为每个新的大型特性或项目建立一个分支,仅当准备发布时才合并回到主干上。看似可以独立地开发每个特性,互不干扰。不幸的是,软件系统是如此复杂,随着主干与分支渐行渐远,接下的合并工作本身将会成为一个项目,带来无数的新缺陷,这真是一场噩梦。
当团队需要同时支持多个客户的不同需求时,版本控制仓库中很可能为此存在了许多分支。这显然会造成大量重复浪费以及高昂的维护成本,在临近产品发布时带来巨大风险。

2011年,@申导 进入某银行的网上银行工作。由于各国市场环境、政策法规等原因,以借记卡为例,看似相同的业务和账户,其背后的处理逻辑和外部集成系统可能都是不一样的。
当时的代码库中,多个国家的代码互相拷贝,由不同组维护,各有自己的思路,虽然最早是同一个基础框架发展而来,但短短几年后各自结构和规范差别越来越大。比如,页面login有的在iframe里,有的不在。相同的修改需要到处merge,例如安全性补丁,回归测试工作量大。

秋天,他所领导的敏捷团队开始开发新一代手机银行项目,目标是用同一代码库来支持多个国家的业务需求。

继续阅读 More

20131214 QClub天津站:Global Day of Coderetreat 活动纪实

Code Retreat,一个在没有工作压力下让人锻炼写Code技巧的活动,本次天津站在天津华苑站吶吧咖啡厅,由敏捷教练 – 申健带领大家进行。

当天到场参与的有将近20人,除了实践了结队编程(Pair Programming)以外,也尝试了TDD的作法,除了多数人使用的Java以外,也有使用C++的同好参与。虽然因为时间的因素没有进行难度太高的课目,但是每个人都扎扎实实的练习了一把,也都一致表示收获丰富,下次有一样的活动必定参加~~~^^

1.活动场地:吶吧咖啡厅,论场地、论气氛,还有美女程序媛n名,各方面天津场都完胜!!天津果然是过日子的地方啊~~~

继续阅读 More

用户故事图谱 User Story Mapping

传统的产品待办项列表(Product Backlog)相对于传统管理办法是一个巨大的进步,但是仍然存在一些问题:

  • 只见树木不见林
  • 重要的待办项容易淹没在各种细节中
  • 看不到全貌因而难以排列优先级
  • 并未明显地聚焦于用户需求
    而故事图谱是一个可视化Product Backlog的简单工具,有助于解决上述问题,特别是当PB越来越大,越来越复杂的时候。

继续阅读 More

所有代码都需要单元测试覆盖吗?

test-coverage

单元测试(unit testing)已经越来越得到广大开发者的认可。作为低成本、速度快、稳定度高的自动化测试手段,单元测试可以在类和函数级别对代码进行质量守护,有助于避免尴尬、耗时的错误。当然,相比功能测试(Functional testing)和端到端测试(end-to-end testing),单元测试能够寄予的产品级别的信心要略低一些,因而各个粒度的测试应该是相辅相成的,互为补充。

常常听到一些组织要求开发团队提高单元测试覆盖率,换来的却是怨声载道,或者是一堆应付差事的垃圾测试(没有断言的测试,都见过吧)。尽管,低测试覆盖率意味着对质量的信心不足,但是,单元测试覆盖率真的要达到100%才好吗?

继续阅读 More

“设计”工作应该放在迭代中吗?

在教练敏捷团队的过程中,一些团队反映“某些用户故事不好拆分,无法在一个迭代内完成”。对于这些故事,一些团队的做法是先指定资深人员作为“设计师”,他从“需求分析师”或业务方拿到需求后,花上1个迭代的时间进行“设计”,然后由他将编码任务进一步分配给“开发人员”,并且负责验收代码。这些故事往往就会持续1~2个迭代才能完成,甚至还来不及测试。

继续阅读 More