经管08015_XP起步:关于“结对编程”

结对编程的好处:
1、代码质量
2、速度——代码、沟通
3、降低风险——交叉培训

如下几个因素增加了项目失败的风险:
1、进度缓慢;
2、缺乏充分的沟通;
3、过分依赖于个人英雄主义行为。

如何进行结对编程:
1、驾驶员和领航员——互换:
2、交换配对——不要在一个任务进行的过程中交换配对
3、经常休息
4、坐在汽车后座对司机有影响的人
5、花一些时间学习工具
6、花一些时间来创建共同的词汇表
7、将设计讨论局限在一个小范围内
8、不要放弃
9、物理环境要适合结对编程
10、开发环境标准化
11、排除异己!
12、尊重和爱!

什么时候不需要结对编程:
1、探索新的事物;
2、针对有可能产生错误的问题上,有多种想法时。

在结对编程和单独编程之间寻找折中。

经管08014_XP起步:关于“测试”

成功并不是不允许犯错误,而是不能犯同样的错误。

测试用例:
1、保持代码的简洁
2、将测试用例视为文档(比文档更直观、更详细、更有效、更有价值,并且永远是最新的)

编写测试用例:
1、测试例运行失败
2、重构代码、重构测试用例

测试/代码 步骤:
1、编写一个测试用例;
2、编译这个测试用例;
3、编写足够的测试用例编译所需要的代码;
4、运行测试用例,测试失败;
5、编写足够的测试用例通过所需要的代码;
6、运行测试用例,测试通过;
7、为达到代码简洁清晰的目的,重构代码,一次且仅一次;
8、重复以上步骤。

采用尽量小的步骤、经常编写测试用例、采用尽量小的步骤。
写小的测试用例、少的代码、使测试通过。
做一次修改、如果测试失败、一定是这个修改引起。

测试什么:积累的过程!——学习已有的开源项目。

如何开始:用测试框架(如jUnit),调用部件库、方法、功能编写代码。

测试的挑战:
1、测试用户界面:用户界面与后台业务逻辑分离
2、在一个小的空间中做测试
3、测试Web
4、测试需要运行速度足够快

经管08013_XP起步:关于“计划”——迭代计划

不允许做修改的计划就不是一个好的计划。

故事卡片分类注意:
1、商业价值以及其他能帮助客户决定优先级的事情;
2、开发团队的开发速度。

每次迭代开始时,预留一些时间,审查上一次迭代工作。
每次迭代开始时,做迭代计划,通常为半天到两天。
迭代计划是发行版本计划的缩影。

迭代计划中涉及的工作:
1、演示并讨论上一次迭代中所完成的工作。  <1H
2、讨论下次迭代中应包括的内容。 1H-2H
3、任务探讨。 4H-8H
4、迭代计划验证。 4H-8H
    一次做一项任务
    装满您的袋子
(时间估算依据8-10的项目)

估算是一种艺术。需要经验,没有经验靠猜测。
讲求速度!

XP方法中:没有分析阶段、设计阶段、测试阶段和维护阶段。
XP方法中:重要的就是计划和实施计划。
    计划中:
        客户陈述他们希望实现的功能(故事)
        开发人员努力将其变成现实(迭代)
       
两者都要清楚项目的进展情况(对上一次迭代的审查)
    计划的实施:
        写出我们希望实现的功能(测试)
        努力将其变为现实(代码)
       
确保我们已经清晰的理解了我们实现的功能(重构)

经管08012_XP起步:关于“计划”——项目计划

计划和估算。
1、绘制路线图:
    指定一个目标、估算工作、然后执行这些工作;
    在每个大的节点检查一下时间、再次确认方向是否正确;
    看看是否有更好的可供选择的路线;
    不要在绘制路线图耗费太多时间;
    使用计划游戏确认并估算每个故事——事先做些调查研究/做最好的推测。
2、计划项目的最好方法:
    最初的计划游戏——不要超过一天!
    探索阶段
    发行版本的计划游戏
3、计划游戏过程:
   
1)客户编写故事:客户在记事卡写下故事(最后整理到记事卡;故事是最简单的能够工作的方法,就是让房间里的所有人都承认有位置可以记载需要完成的事情)

   
2)开发人员进行估算:开发人员按某种度量单位在每张卡片上做出估算(客户应按优先级分类;开发人员应按风险分类。两个以上的开发人员,检验和确认)

    3)将故事分解:将故事分解,确保在一个迭代中可以实现。
   
4)返回到估算阶段:根据先前决定的一些资源级别,开发人员需要确定在每个N周的迭代中(通常来说N的值从1到4)大约可以完成多少个度量单元(M个)

   
5)确定迭代大小:足够大-有重大的进展;足够小-不会有太多进展,会导致审查不过来。一般为两到三周。
   
6)将故事分类:客户将卡片最多分成M组,并按他们希望实施的顺序排列——选出必须有的、最高风险的,优先处理。开发人员认为基础的或者是对其他故事有影响的故事,客户应该考虑。

   
探索阶段
   
最初的计划游戏结束后,开始的在一个相对较小的范围内做迭代计划,开发团队探究那些他们还不知道如何做估算的故事。
    可能在项目中存在一天到两个月的时间。
    探索阶段结束后,开发人员就可以开始版本发行的计划游戏。
    花一些钱在探索阶段,比将钱花在后来的开发阶段更有价值。

经管08011_XP起步:关于“计划”

我们并不能总是时刻控制局面,但是,通过使用简单的规则和工具我们可以避免做愚蠢的事情。
  129
业务决策和技术决策的分离!使客户和开发人员各自明确自己的角色。
1、业务决策:决定费用如何分配等问题的,以获得更好的利益回报;
2、技术决策:决定为实现业务目标应该采用哪些方法,以及采用这些方法的费用估算。
1、客户:决定应该完成的工作以及按什么顺序(优先级)完成这些工作;
2、开发人员:决定完成这些工作的方法并估算完成这些工作所需要的时间。
 
制订项目计划的原则如下:
1、允许项目之初有不完整的需求;
2、所有团队成员都应该参与计划,但是角色一定要清晰;
3、所有参与者要持续的保持沟通;
4、通过频繁地调整计划来适应开发过程的变化;
 
需求是一种对话,而非文档。
在做计划及工作量估算的时候,必须做的事情:
1、确定项目的基本需要;
2、将这些需要分解成小的、重要的用户故事;
3、确定详细的验收准则(例如验收测试),这些验收准则是验证用户的需求故事是否能完全实现。
——达成这些的最好的方法:
让业务人员和开发人员一起工作!
 
两个开发人员在白板前进行的对话是最有效的沟通方法;其次是业务人员和技术人员之间巧妙地运用故事卡片。
 
当客户的“黄金所有者”“目标定义者”不是一个人,尽量让他们意见一致。
 
客户不喜欢某一个估算值通常是因为以下的两种原因之一:
1、认为整个故事的价值不需要花费那么多费用:故事不像最初表达时那样重要,或者可以用更简单的故事代替,费用也相应减少;
2、客户没有意识到故事的复杂本质:好的教育机会,开发人员向客户解释实现故事必须做的事情,挑最难处理的一两件解释。
  
引进可行的工具——CASE卡片板辅助软件工程
卡片:故事及其细分任务的概要描述+优先级
故事卡片+任务卡片=更好的沟通
卡片优先级的确定!!!
1、高——能实现系统性能的最新而必要的功能;——没有这些故事,产品就无法发布;
2、中——真正有价值而必要的功能;        
——没有这些故事,产品就不会在市场上占据重要地位;
3、低——有了这些功能系统将变得更完美;    ——有这些故事当然更好。
 
的确,二八原理;我们80%的精力总是被耗费在细节上,而不是主要功能上。
优先级的划分,真的非常重要!好钢用在刀刃上!
  
  148
极限小时——一个小时的时间对产品的最初版本做计划、进度表、开发以及质量保证:
1、10分钟——用户故事及结构峰值:业务团队-(项目保管员-索引卡片正面撰写故事;质量保证人员-卡片背面编写测试;)开发团队-画原型图;

2、10分钟——估算优先级和范围:必须有的;没有会造成很大损失的;有了会更好的。
3、 5分钟——最初承诺的时间表:开发团队对每一次迭代的大概时间都要做出承诺。
4、10分钟——第一次迭代:开发人员看是否需要将故事分解成任务,并接受任务、配对;质量保证人员决定各个配对何时通过测试;管理员与市场人员进行沟通-添加故事/随时回答开发人员问题。

5、 5分钟——计划第二次迭代:调整期望的效率和估算;开发团队需要知道他们要做的工作;业务团队要知道他们所期望的结果。
6、10分钟——第二次迭代:同4;业务人员开始考虑在将来的展示会上如何展示预期产品。
7、 5分钟——发布版本和新的承诺时间表:展示会及下一版本产品宣传。
8、 5分钟——大型展示会。