西西河

主题:【原创】敏捷开发为什么能敏捷 -- 代码ABC

共:💬19 🌺42 新:
分页树展主题 · 全看 下页
  • 家园 【原创】敏捷开发为什么能敏捷

    通过观察和一些交流发现国内许多号称实施了敏捷开发的团队大多不是真正的敏捷。经常遇到一些令人无语的场面。比如:和他们将迭代、讲User Story、讲点数什么的都很好,末了大多会问那么测试该怎么写呢?

    ……

    我认为在没掌握测试驱动开发的情况下谈论任何敏捷过程都是没有意义的。敏捷开发之所以能够敏捷其核心是代码本身是敏捷的,也就是代码本身可以快速地响应变化。编写测试不仅仅在于测试令软件修改后的正确性验证得到保证,更在于先行的测试迫使程序员做出松耦合的设计,在代码的中间插入各种隔离措施。让我们修改程序的时候不至于发生牵一发而动全身的事故。而还只是测试提升代码敏捷性的其中一个作用。

    敏捷开发扬弃了早期英雄程序员的概念,但是回归到开发以程序员为主的概念。敏捷团队强调程序员的主动性,程序员应能主动花时间修改糟糕的设计。而这种主动性是建立在测试驱动的基础上的,否则在项目进度压力下除非万不得已,没有人愿意花时间冒险修改已经完成功能实现的代码,那怕这个修改看上去是那么轻而易举。而这种修改在敏捷团队中几乎是家常便饭,这些时间和风险投资的回报就是代码的敏捷性。

    只有代码具有敏捷性,敏捷过程才能真正体现其价值。这些过程协调了项目各方的关系,令工作有序地进行,并且将代码的敏捷性转换成项目的收益——这才是真正的敏捷。

    通宝推:切地雷,
    • 家园 敏捷开发有其适用范围

      一般来说最适合有默契、高水平的小团队。换句话来说,如果你和几个水平差不多的朋友合作,搞的东西又是所有成员感兴趣还能胜任有余的,敏捷开发就有用武之地了。

      换成一帮老弱残兵的话,先练兵再说吧。

    • 家园 都是被逼的,呵呵

      作为一个项目经理,如果有成本意识的话,多做几次比较,自然会趋向TDD

      很简单啊,因为找错误花的时间最长,改代码就是分分钟的事情,一个是重大特性先写测试,一个是找出问题后补写测试

      TDD最大的好处是不用操心,修改的范围哪些需要回归和验证了,一切一目了然

      • 家园 如果有两个团队做比较,那自然没问题

        问题是敏捷团队,甚至只是TDD模式的建立是需要时间和其他资源开销的。更不用说期间还涉及项目管理模式的变更,因此现实比较令人无语。有些极端的项目经理或领导无视上述问题,只会说——你们不是搞敏捷吗,那赶快把那些东西赶出来!要快!

        • 家园 我只是从效果上说,实际情况嘛,因地制宜吧

          搞出结果来才是王道!

          我们假定那些优雅的设计和实现是真理的话,这些真理并非不辩自明,TDD只是不断的去发现。

          任何事情都需要成本啊,你说的经理我也遇到过,那就搞呗,该说的我都说了,先搞出来吧,至于TDD,没有这个资源我为什么一定要这么干?!

          作为职业人士,日常对代码做些整理这是必要的工作,下次可以省心点,不见得是项目你才做TDD啊,这些可以是你的秘密武器,为自己争取多点时间。

          -----------

          对于产品和库我基本都在做TDD,主要是自己记不住那么多细节,TDD能帮我很好的记忆这些细节,对于项目,尤其是赶工的,一次性的项目,加上资源很紧张,先将东西搞出来再说。

          不要教条主义,最起码对得起客户付出的金钱就行,超出他们的期望更好。

    • 家园 写得好!

      敏捷团队强调程序员的主动性,程序员应能主动花时间修改糟糕的设计-----个人认为这句是我最喜欢的。但是这样的程序员不好找啊!各行各业都一样,认真负责的人真的不好找!

      • 家园 应该说目前在国内这样的团队不好找

        程序员的素质通常取决于其所在的团队。敏捷开发本来就有提升程序员素质的作用,但组建这样的团队不容易。许多公司连培训都要选择非工作时间,很难想象他们能容忍团队建设的挫折。

        • 家园 而且大部分程序员忽视测试,导致TDD难以发挥作用

          往往认为做测试不如做开发,而且这种观念不仅仅程序员如此想,似乎IT界大部分人都这样认为。结果开发人员不会测试,甚至有点不屑于测试,测试人员更谈不上开发,但是测试驱动开发需要开发人员自己先写出合格的测试用例,所以很难推广

          我见过要求开发人员也做测试(单元测试、集成测试)的结果就是,写了一堆应付差事的测试,仅仅是为了测试易于通过而写,不是为了测出问题而写。当然,这样的测试用例也比不写强点的。

        • 家园 培训选择非工作时间是为了向老板表功

          潜台词是:我们利用不付薪水的时间努力学习,这样在付薪水的时间就能更有效率的工作,老板,我们是多么肯为你卖力啊!

          通常组织这样学习培训的人都能获得赏识提拔

          我的理解是,组织业余时间学习和能否容忍团队建设的挫折么有直接联系

        • 家园 这个因该类似双向选择?

          代码兄有没有具体点的措施,比如如何创建并维持这样的团队?

      • 家园 非也非也

        一个敏捷项目应该有易于重构的特性,自动测试是必须的,否则在修改的代码不知道会不会影响项目其他部分的情况下,一个肯“主动花时间修改糟糕的设计”的程序员带来的可能是一场灾难。

        • 家园 易于重构的特性就是改出来的

          原文说了,没掌握测试驱动开发的前提下谈不上敏捷。而使用测试驱动开发后,就必须具备主动修改代码的精神和能力。

          易于重构的特性不是一下子就冒出来的,是在测试驱动下逐步修改出来的。而且通常也只是针对具体的项目需求易于重构,不是放诸四海皆准的。

    • 家园

      兄台可否多谈谈这方面的心得体会什么的?

    • 家园 UML
分页树展主题 · 全看 下页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河