• è”系我们
  • English
Scrum中文网
  • 知识库
  • æ•æ·æ–‡ç« 
  • 培训课程
    • æ•æ·è®¤è¯ç­
    • ä¼ä¸šå†…è®­
    • Scrumæ•æ·è®¤è¯è¯¾ç¨‹ä½“ç³»
    • SAFeå¤§è§„æ¨¡æ•æ·è®¤è¯è¯¾ç¨‹ä½“ç³»
  • æ•æ·å’¨è¯¢
  • æ•æ·å·¥å…·
  • 顾问团队
  • 客户
  • 学员
  • 关于我们

æ•æ·å¼€å‘

当å‰ä½ç½®: 主页 / 知识库 / æ•æ·å¼€å‘
æ•æ·å¼€å‘简å²

æ•æ·å¼€å‘简å²

åœ¨è½¯ä»¶å·¥ä¸šç•Œï¼Œæ•æ·å¼€å‘å·²æˆä¸ºä¼—多高效开å‘团队的制胜之é“。它ä¸ä»…被许多中å°å…¬å¸é’ç,在全çƒä¸€ç™¾å¼ºçš„ä¼ä¸šä¸­ï¼Œæ•æ·å¼€å‘也已大行其é“,å—到许多资深项目管ç†è€…和开å‘人员的推崇。到2008年,欧美软件ä¼ä¸šä¸­ï¼Œæœ‰è¿‘åŠä¼ä¸šå·²é‡‡ç”¨æ•æ·æ–¹æ³•进行开å‘ã€‚å¤§å¤šæ•°å°šæœªåº”ç”¨æ•æ·çš„ä¼ä¸šï¼Œä¹Ÿéƒ½å¯¹å…¶æœ‰æ‰€äº†è§£ï¼Œè€Œä¸”很多在计划实施。中国的外ä¼ï¼Œå¤–包公å¸å’Œè®¸å¤šçŸ¥åä¼ä¸šä¹Ÿéƒ½å¼€å§‹é‡‡ç”¨äº†æ•æ·æ–¹æ³•。例如,腾讯内部几乎所有的开å‘å›¢é˜Ÿéƒ½åœ¨å®žæ–½æ•æ·ã€‚

æ•æ·æ–¹æ³•给这些ä¼ä¸šä¹Ÿå·²å¸¦æ¥äº†å·¨å¤§çš„æ”¶ç›Šã€‚æ®ä¸šå†…èµ„æ·±äººå£«å’Œé•¿æœŸä»Žäº‹æ•æ·å’¨è¯¢çš„æœåŠ¡å…¬å¸é€éœ²ï¼Œé‡‡ç”¨æ•æ·å¼€å‘的团队一般会æé«˜3-10å€çš„æ•ˆçŽ‡ï¼Œè½¯ä»¶çš„è´¨é‡ä¹Ÿæœ‰äº†æ›´åŠ å¯é çš„ä¿è¯ã€‚åŒæ—¶ï¼Œæ•æ·å¼€å‘的应用也给团队内的æ¯ä¸ªæˆå‘˜æä¾›äº†è‰¯å¥½çš„å‘展机会。他们的技术和åˆä½œæ°´å¹³éƒ½èƒ½å¾—到å“应的æé«˜ã€‚æ•æ·çš„æˆåŠŸæ¥æºäºŽå…¶æ–¹æ³•本身的适用性和团队对它的深入ç†è§£å’Œåˆç†è¿ç”¨ã€‚䏋颿ˆ‘ä»¬å°±å¯¹æ•æ·å¼€å‘åšä¸€ä¸ªç®€å•的介ç»å’Œè®¨è®ºã€‚

æ•æ·ä¸æ˜¯æŒ‡æŸä¸€ç§å…·ä½“的方法论ã€è¿‡ç¨‹æˆ–æ¡†æž¶ï¼Œè€Œæ˜¯ä¸€ç»„ä»·å€¼è§‚å’ŒåŽŸåˆ™ã€‚ç¬¦åˆæ•æ·ä»·å€¼è§‚å’ŒåŽŸåˆ™çš„å¼€å‘æ–¹æ³•包括:æžé™ç¼–程(XP),Scrum,精益软件开å‘(Lean Software Development),动æ€ç³»ç»Ÿå¼€å‘方法(DSDM),特å¾é©±åЍ开å‘(Feature Driver Development),水晶开å‘(Crystal Clear)等等。所有这些方法都具有以下共åŒç‰¹å¾ï¼š

1. 迭代å¼å¼€å‘ã€‚å³æ•´ä¸ªå¼€å‘过程被分为几个迭代周期,æ¯ä¸ªè¿­ä»£å‘¨æœŸæ˜¯ä¸€ä¸ªå®šé•¿æˆ–ä¸å®šé•¿çš„æ—¶é—´å—æ¯ä¸ªè¿­ä»£å‘¨æœŸæŒç»­çš„æ—¶é—´ä¸€èˆ¬è¾ƒçŸ­ï¼Œé€šå¸¸ä¸ºä¸€åˆ°å…­å‘¨ã€‚

2. 增é‡äº¤ä»˜ã€‚äº§å“æ˜¯åœ¨æ¯ä¸ªè¿­ä»£å‘¨æœŸç»“æŸæ—¶è¢«é€æ­¥äº¤ä»˜ä½¿ç”¨ï¼Œè€Œä¸æ˜¯åœ¨æ•´ä¸ªå¼€å‘过程结æŸçš„æ—¶å€™ä¸€æ¬¡æ€§äº¤ä»˜ä½¿ç”¨ã€‚æ¯æ¬¡äº¤ä»˜çš„都是å¯ä»¥è¢«éƒ¨ç½²åˆ°ç”¨æˆ·åº”用环境中被用户使用的ã€èƒ½ç»™ç”¨æˆ·å¸¦æ¥å³æ—¶æ•ˆç›Šå’Œä»·å€¼çš„产å“。

3. å¼€å‘团队和用户å馈推动产å“å¼€å‘ã€‚æ•æ·å¼€å‘方法主张用户能够全程å‚与到整个开å‘过程中。这使需求å˜åŒ–和用户å馈能被动æ€ç®¡ç†å¹¶åŠæ—¶é›†æˆåˆ°äº§å“ä¸­ã€‚åŒæ—¶ï¼Œå›¢é˜Ÿå¯¹äºŽç”¨æˆ·çš„éœ€æ±‚ä¹Ÿèƒ½åŠæ—¶æä¾›å馈æ„è§ã€‚

4. æŒç»­é›†æˆã€‚新的功能或需求å˜åŒ–总是尽å¯èƒ½é¢‘ç¹åœ°è¢«æ•´åˆåˆ°äº§å“中。一些项目是在æ¯ä¸ªè¿­ä»£å‘¨æœŸç»“æŸçš„æ—¶å€™é›†æˆï¼Œ 有些项目则æ¯å¤©éƒ½åœ¨è¿™ä¹ˆåšã€‚

5. å¼€å‘团队自我管ç†ã€‚拥有一个积æžçš„ã€è‡ªæˆ‘管ç†çš„ã€å…·å¤‡è‡ªç”±äº¤æµé£Žæ ¼çš„å¼€å‘团队,是æ¯ä¸ªæ•æ·é¡¹ç›®å¿…ä¸å¯å°‘çš„æ¡ä»¶ã€‚äººæ˜¯æ•æ·å¼€å‘çš„æ ¸å¿ƒã€‚æ•æ·å¼€å‘总是以人为中心建立开å‘çš„è¿‡ç¨‹å’Œæœºåˆ¶ï¼Œè€ŒéžæŠŠè¿‡ç¨‹å’Œæœºåˆ¶å¼ºåŠ ç»™äººã€‚

许多人认为,相比于“传统â€çš„ç€‘å¸ƒå¼€å‘æ¨¡å¼ï¼Œæ•æ·å¼€å‘是一ç§â€œçް代â€çš„开呿¨¡å¼ã€‚ä½†æ˜¯ï¼Œå®žé™…ä¸Šæ•æ·æ–¹æ³•,特别是迭代和增é‡å¼€å‘方法(IID)起æºäºŽ20世纪30年代的一些éžè½¯ä»¶é¡¹ç›®ã€‚è€Œæœ€æ—©å¼•å…¥ä¸€äº›æ•æ·æ–¹æ³•的项目之一就是20世纪60年代åˆçš„美国航天局水星计划。在这个项目中,一些æžé™ç¼–程方法如测试先行等也被使用。此åŽï¼Œè¿­ä»£å’Œå¢žé‡å¼€å‘被IBMè”邦系统部(FSD)和沃森研究中心(Watson Research Centerï¼‰é‡‡çº³ã€‚æœ‰è¶£çš„æ˜¯ä¸€äº›ç ”ç©¶äººå‘˜ç”šè‡³åœ¨å…³äºŽç€‘å¸ƒå¼€å‘æ¨¡å¼çš„æœ€æ—©çš„论文中å‘çŽ°äº†æ•æ·å¼€å‘的线索。在这篇论文中,温斯顿.罗伊斯(Winston Royce)建议在一个项目中使用两次瀑布模å¼ï¼Œä¹Ÿå°±æ˜¯ä½¿ç”¨ä¸¤æ¬¡è¿­ä»£ã€‚

20世纪70年代,最早的有记载的使用迭代和增é‡å¼€å‘的主è¦é¡¹ç›®ä¹‹ä¸€ï¼Œæ˜¯ä¸ºç¬¬ä¸€è‰˜ç¾Žå›½ä¸‰å‰æˆŸæ½œè‰‡å¼€å‘的第一指挥和控制系统。该项目有大约一百万行代ç ï¼Œè¿›è¡Œå¾—éžå¸¸æˆåŠŸã€‚è¿­ä»£å’Œå¢žé‡å¼€å‘从此开始稳步å‘展,越æ¥è¶Šå¤šçš„项目开始使用这ç§å¼€å‘模å¼ã€‚在1976年,Tom Gilb在他的著作《软件度é‡ã€‹ï¼ˆâ€œSoftware Metricsâ€ï¼‰ä¸€ä¹¦ä¸­é˜è¿°äº†ä»–的迭代和增é‡å¼€å‘实践,这å¯èƒ½å°±æ˜¯ç¬¬ä¸€éƒ¨é˜è¿°è¿™ç§æ–¹æ³•的书ç±ã€‚迭代和增é‡å¼€å‘çš„å¦ä¸€æ¬¡å‡ºè‰²å‘挥,是在一个美国宇航局航天飞机软件的开å‘项目。这个项目负责开å‘其航空电å­è®¾å¤‡çš„软件系统。该项目由IBMè”邦系统部(IBM FSD)在1977至1980年完æˆã€‚ä¸€äº›å…¸åž‹çš„æ•æ·åšæ³•ï¼Œå¦‚ä½¿ç”¨8个周迭代以åŠç”¨å馈推动开å‘å¾ªåºæ¸è¿›ç­‰æ–¹æ³•都在该项目中得以应用。

20世纪80年代,更多的出版物和更多的项目应用进一步推进了迭代开å‘çš„å‘展。在1895å¹´ï¼Œå·´é‡Œè´æ¯ï¼ˆBarry Boehm)正å¼å®šä¹‰äº†ä½¿ç”¨è¿­ä»£å¼€å‘的螺旋模型(Spiral model)。80年代åˆï¼Œåœ¨ç¾Žå›½å›½é˜²éƒ¨å‘生了一件有趣的事情。美国国防部一直以æ¥éƒ½è¦æ±‚其软件开å‘商在开å‘è¿‡ç¨‹ä¸­ä½¿ç”¨ä¸¥æ ¼çš„ç€‘å¸ƒå¼€å‘æ¨¡åž‹ã€‚但是到了1987年末,国防部开始“建议â€ä½¿ç”¨è¿­ä»£å’Œå¢žé‡å¼€å‘ä½œä¸ºè½¯ä»¶å¼€å‘æ¨¡å¼ã€‚åŽæ¥ç¾Žå›½å›½é˜²éƒ¨çš„项目审查显示,早期使用瀑布模å¼å¼€å‘的软件项目,有75%以失败告终,有些开å‘出æ¥çš„äº§å“æ ¹æœ¬æ²¡æœ‰è¢«ä½¿ç”¨è¿‡ï¼Œåªæœ‰2%çš„è½¯ä»¶äº§å“æ— éœ€å¤§é‡ä¿®æ”¹å°±èƒ½è¢«æ­£å¸¸ä½¿ç”¨ã€‚

20世纪90年代,推è使用迭代和增é‡å¼€å‘的出版物和文献显著增加。在ç»åŽ†äº†å¤šæ¬¡æœ‰â€œç€‘å¸ƒå¿ƒæ€â€ï¼ˆâ€˜waterfall mentality’)项目的失败之åŽï¼Œç¾Žå›½å›½é˜²éƒ¨å¼€å§‹â€œè¦æ±‚â€è€Œä¸æ˜¯åƒ80年代那样仅仅是“建议â€ä»–们的软件开å‘商使用IID开呿¨¡å¼ã€‚Rational统一开å‘过程(Rational Unified Process)也是在这一时期产生并å‘展起æ¥çš„,它具有更规范的迭代æ¸è¿›è¿‡ç¨‹ã€‚到2000å¹´åº•ï¼Œæ›´å¤šçš„æ•æ·å¼€å‘方法被广泛推广并被使用于å„ç§ä¸åŒçš„项目中。2001年二月,一组由17ä½åœ¨DSDM,XP,Scrum,FSD等领域的专家组æˆçš„代表团é½èšç¾Žå›½çŠ¹ä»–å·žï¼Œå¯»æ‰¾è¿™äº›æ–¹æ³•çš„å…±åŒç‚¹ã€‚æœ€ç»ˆï¼Œè¿™äº›ä¸“å®¶åˆ¶å®šå¹¶å®£å¸ƒäº†æ•æ·å¼€å‘宣言。由此形æˆäº†çŽ°åœ¨æˆ‘ä»¬æ‰€è®¤è¯†çš„æ•æ·å¼€å‘å’ŒåŽæ¥çš„æ•æ·è”盟。

æ•æ·è”盟官方网站:http://www.agilealliance.org/

关键è¯ï¼šæ•æ·å¼€å‘

æ•æ·å¼€å‘宣言

æ•æ·å¼€å‘宣言

2001å¹´2月11日到13日,17ä½è½¯ä»¶å¼€å‘领域的领军人物èšé›†åœ¨ç¾Žå›½çŠ¹ä»–å·žçš„æ»‘é›ªèƒœåœ°é›ªé¸Ÿï¼ˆSnowbird)雪场。ç»è¿‡ä¸¤å¤©çš„è®¨è®ºï¼Œâ€œæ•æ·â€ï¼ˆAgile)这个è¯ä¸ºå…¨ä½“èšä¼šè€…所接å—,用以概括一套全新的软件开å‘价值观。这套价值观,通过一份简明扼è¦çš„ã€Šæ•æ·å®£è¨€ã€‹ä¼ é€’ç»™ä¸–ç•Œï¼ŒåŒæ—¶å³å®£å‘Šäº†æ•æ·å¼€å‘è¿åŠ¨çš„å¼€å§‹ã€‚

ã€Šæ•æ·å®£è¨€ã€‹

æˆ‘ä»¬é€šè¿‡èº«ä½“åŠ›è¡Œå’Œå¸®åŠ©ä»–äººæ¥æ­ç¤ºæ›´å¥½çš„è½¯ä»¶å¼€å‘æ–¹å¼ã€‚ç»ç”±è¿™é¡¹å·¥ä½œï¼Œæˆ‘们形æˆäº†å¦‚下价值观:

 个体与交互 é‡äºŽ 过程和工具
å¯ç”¨çš„软件 é‡äºŽ 完备的文档
客户å作   é‡äºŽ åˆåŒè°ˆåˆ¤
å“应å˜åŒ–   é‡äºŽ éµå¾ªè®¡åˆ’

在æ¯å¯¹æ¯”对中,åŽè€…å¹¶éžå…¨æ— ä»·å€¼ï¼Œä½†æˆ‘们更看é‡å‰è€…。

17使•æ·å®£è¨€å‘起人åå•如下:

Kent Beck Mike Beedle
Arie van Bennekum Alistair Cockburn
Ward Cunningham Martin Fowle
James Grenning Jim Highsmith
Andrew Hunt Ron Jeffries
Jon Kern Brian Marick
Robert C. Martin Steve Mellor
Ken Schwaber Jeff Sutherland
Dave Thomas

关键è¯ï¼šæ•æ·å¼€å‘宣言

æ•æ·å¼€å‘å二原则

æ•æ·å¼€å‘å二原则

åœ¨æ•æ·å¼€å‘中,我们éµå¾ªä»¥ä¸‹å‡†åˆ™ï¼š

  1. 我们的最高目标是,通过尽早和æŒç»­åœ°äº¤ä»˜æœ‰ä»·å€¼çš„è½¯ä»¶æ¥æ»¡è¶³å®¢æˆ·ã€‚
  2. 欢迎对需求æå‡ºå˜æ›´â€”—å³ä½¿æ˜¯åœ¨é¡¹ç›®å¼€å‘åŽæœŸã€‚è¦å–„äºŽåˆ©ç”¨éœ€æ±‚å˜æ›´ï¼Œå¸®åŠ©å®¢æˆ·èŽ·å¾—ç«žäº‰ä¼˜åŠ¿ã€‚
  3. è¦ä¸æ–­äº¤ä»˜å¯ç”¨çš„软件,周期从几周到几个月ä¸ç­‰ï¼Œä¸”越短越好。
  4. 项目过程中,业务人员与开å‘人员必须在一起工作。
  5. è¦å–„于激励项目人员,给他们以所需è¦çš„环境和支æŒï¼Œå¹¶ç›¸ä¿¡ä»–们能够完æˆä»»åŠ¡ã€‚
  6. 无论是团队内还是团队间,最有效的沟通方法是é¢å¯¹é¢çš„交谈。
  7. å¯ç”¨çš„软件是衡é‡è¿›åº¦çš„ä¸»è¦æŒ‡æ ‡ã€‚
  8. æ•æ·è¿‡ç¨‹æå€¡å¯æŒç»­çš„å¼€å‘。项目方ã€å¼€å‘äººå‘˜å’Œç”¨æˆ·åº”è¯¥èƒ½å¤Ÿä¿æŒæ’久稳定的进展速度。
  9. 对技术的精益求精以åŠå¯¹è®¾è®¡çš„䏿–­å®Œå–„å°†æå‡æ•æ·æ€§ã€‚
  10. è¦åšåˆ°ç®€æ´ï¼Œå³å°½æœ€å¤§å¯èƒ½å‡å°‘ä¸å¿…è¦çš„工作。这是一门艺术。
  11. 最佳的架构ã€éœ€æ±‚和设计出自于自组织的团队。
  12. 团队è¦å®šæœŸåçœå¦‚何能够åšåˆ°æ›´æœ‰æ•ˆï¼Œå¹¶ç›¸åº”地调整团队的行为。

关键è¯ï¼šæ•æ·å¼€å‘ï¼Œæ•æ·åŽŸåˆ™

XP æžé™ç¼–程

æžé™ç¼–程

æžé™ç¼–程(英语:Extreme programming,缩写为XP),是一ç§è½¯ä»¶å·¥ç¨‹æ–¹æ³•å­¦ï¼Œæ˜¯æ•æ·è½¯ä»¶å¼€å‘ä¸­åº”ç”¨æœ€ä¸ºå¹¿æ³›å’Œæœ€å¯Œæœ‰æˆæ•ˆçš„å‡ ç§æ–¹æ³•学之一。如åŒå…¶ä»–æ•æ·æ–¹æ³•学,æžé™ç¼–程和传统方法学的本质ä¸åŒåœ¨äºŽå®ƒæ›´å¼ºè°ƒå¯é€‚åº”æ€§è€Œä¸æ˜¯å¯é¢„测性。æžé™ç¼–程的支æŒè€…è®¤ä¸ºè½¯ä»¶éœ€æ±‚çš„ä¸æ–­å˜åŒ–是很自然的现象,是软件项目开å‘中ä¸å¯é¿å…çš„ã€ä¹Ÿæ˜¯åº”该欣然接å—的现象;他们相信,和传统的在项目起始阶段定义好所有需求å†è´¹å°½å¿ƒæ€çš„æŽ§åˆ¶å˜åŒ–的方法相比,有能力在项目周期的任何阶段去适应å˜åŒ–,将是更加现实更加有效的方法。

æžé™ç¼–程为管ç†äººå‘˜å’Œå¼€å‘人员开出了一剂指导日常实践的良方;这个实践æ„å‘³ç€æŽ¥å—并鼓励æŸäº›ç‰¹åˆ«çš„æœ‰ä»·å€¼çš„æ–¹æ³•。支æŒè€…ç›¸ä¿¡ï¼Œè¿™äº›åœ¨ä¼ ç»Ÿçš„è½¯ä»¶å·¥ç¨‹ä¸­çœ‹æ¥æ˜¯â€œæžç«¯çš„â€å®žè·µï¼Œå°†ä¼šä½¿å¼€å‘过程比传统方法更加好的å“åº”ç”¨æˆ·éœ€æ±‚ï¼Œå› æ­¤æ›´åŠ æ•æ·ï¼Œæ›´å¥½çš„æž„建出高质é‡è½¯ä»¶ã€‚

æžé™ç¼–程的创始者是肯特·è´å…‹ã€æ²ƒå¾·Â·åŽå®å®‰å’Œç½—æ©Â·æ°å¼—é‡Œæ–¯ï¼Œä»–ä»¬åœ¨ä¸ºå…‹èŽ±æ–¯å‹’ç»¼åˆæŠ¥é…¬ç³»ç»Ÿï¼ˆC3)的薪水册项目工作时æå‡ºäº†æžé™ç¼–程方法。肯特·è´å…‹åœ¨1996å¹´3月æˆä¸ºC3çš„é¡¹ç›®è´Ÿè´£äººï¼Œå¼€å§‹å¯¹é¡¹ç›®çš„å¼€å‘æ–¹æ³•学进行改善。他写了一本关于这个改善åŽçš„æ–¹æ³•学的书,并且于1999å¹´10月将之å‘行,这就是《æžé™ç¼–程解æžã€‹ï¼ˆ2005第二版出版)。克莱斯勒在2000å¹´2æœˆå–æ¶ˆäº†å®žè´¨ä¸Šå¹¶æœªæˆåŠŸçš„C3项目,但是这个方法学å´ä¸€ç›´æµè¡Œåœ¨è½¯ä»¶å·¥ç¨‹é¢†åŸŸä¸­ã€‚至今,很多软件开å‘项目都一直以æžé™ç¼–程åšä¸ºä»–们的指导方法学。

æžé™ç¼–程的目标

æžé™ç¼–程的主è¦ç›®æ ‡åœ¨äºŽé™ä½Žå› éœ€æ±‚å˜æ›´è€Œå¸¦æ¥çš„æˆæœ¬ã€‚åœ¨ä¼ ç»Ÿç³»ç»Ÿå¼€å‘æ–¹æ³•中,系统需求是在项目开å‘的开始阶段就确定下æ¥ï¼Œå¹¶åœ¨ä¹‹åŽçš„å¼€å‘è¿‡ç¨‹ä¸­ä¿æŒä¸å˜çš„。这æ„味ç€é¡¹ç›®å¼€å‘进入到之åŽçš„é˜¶æ®µæ—¶å‡ºçŽ°çš„éœ€æ±‚å˜æ›´å°†å¯¼è‡´å¼€å‘æˆæœ¬æ€¥é€Ÿå¢žåŠ ï¼Œè€Œè¿™æ ·çš„éœ€æ±‚å˜æ›´åœ¨ä¸€äº›å‘展æžå¿«çš„领域中是ä¸å¯é¿å…的。

æžé™ç¼–程通过引入基本价值ã€åŽŸåˆ™ã€æ–¹æ³•等概念æ¥è¾¾åˆ°é™ä½Žå˜æ›´æˆæœ¬çš„目的。一个应用了æžé™ç¼–程方法的系统开å‘é¡¹ç›®åœ¨åº”å¯¹éœ€æ±‚å˜æ›´æ—¶å°†æ˜¾å¾—æ›´ä¸ºçµæ´»ã€‚

æžé™ç¼–程的12个核心实践

短交付周期

æžé™ç¼–程和Scrum一样采用迭代的交付方å¼ï¼Œæ¯ä¸ªè¿­ä»£1-3周时间。在æ¯ä¸ªè¿­ä»£ç»“æŸçš„æ—¶å€™ï¼Œå›¢é˜Ÿäº¤ä»˜å¯è¿è¡Œçš„,ç»è¿‡æµ‹è¯•的功能,这些功能å¯ä»¥é©¬ä¸ŠæŠ•入使用。

计划游æˆ

XP的计划过程主è¦é’ˆå¯¹è½¯ä»¶å¼€å‘中的两个问题:预测在交付日期å‰å¯ä»¥å®Œæˆå¤šå°‘工作;现在和下一步该åšäº›ä»€ä¹ˆã€‚䏿–­çš„回答这两个问题,就是直接æœåŠ¡äºŽå¦‚ä½•å®žæ–½åŠè°ƒæ•´å¼€å‘过程;与此相比,希望一开始就精确定义整个开å‘过程è¦åšä»€ä¹ˆäº‹æƒ…ä»¥åŠæ¯ä»¶äº‹æƒ…è¦èŠ±å¤šå°‘æ—¶é—´ï¼Œåˆ™äº‹å€åŠŸåŠã€‚针对这两个问题,XP中åˆä¸¤ä¸ªä¸»è¦çš„相应过程:

软件å‘布计划(ReleasePlanning)。客户é˜è¿°éœ€æ±‚,开å‘äººå‘˜ä¼°ç®—å¼€å‘æˆæœ¬å’Œé£Žé™©ã€‚客户根æ®å¼€å‘æˆæœ¬ã€é£Žé™©å’Œæ¯ä¸ªéœ€æ±‚çš„é‡è¦æ€§ï¼Œåˆ¶è®¢ä¸€ä¸ªå¤§è‡´çš„项目计划。最åˆçš„项目计划没有必è¦ï¼ˆä¹Ÿæ²¡æœ‰å¯èƒ½ï¼‰éžå¸¸å‡†ç¡®ï¼Œå› ä¸ºæ¯ä¸ªéœ€æ±‚çš„å¼€å‘æˆæœ¬ã€é£Žé™©åŠå…¶é‡è¦æ€§éƒ½ä¸æ˜¯ä¸€æˆä¸å˜çš„ã€‚è€Œä¸”ï¼Œè¿™ä¸ªè®¡åˆ’ä¼šåœ¨å®žæ–½è¿‡ç¨‹ä¸­è¢«ä¸æ–­åœ°è°ƒæ•´ä»¥è¶‹ç²¾ç¡®ã€‚

周期开å‘计划(IterationPlanning)。开å‘过程中,应该有很多阶段计划(比如æ¯ä¸‰ä¸ªæ˜ŸæœŸä¸€ä¸ªè®¡åˆ’)。开å‘人员å¯èƒ½åœ¨æŸä¸ªå‘¨æœŸå¯¹ç³»ç»Ÿè¿›è¡Œå†…éƒ¨çš„é‡æ•´å’Œä¼˜åŒ–(代ç å’Œè®¾è®¡ï¼‰ï¼Œè€Œåœ¨æŸä¸ªå‘¨æœŸå¢žåŠ äº†æ–°åŠŸèƒ½ï¼Œæˆ–è€…ä¼šåœ¨ä¸€ä¸ªå‘¨æœŸå†…åŒæ—¶åšä¸¤æ–¹é¢çš„工作。但是,ç»è¿‡æ¯ä¸ªå¼€å‘周期,用户都应该能得到一个已ç»å®žçŽ°äº†ä¸€äº›åŠŸèƒ½çš„ç³»ç»Ÿã€‚è€Œä¸”ï¼Œæ¯ç»è¿‡ä¸€ä¸ªå‘¨æœŸï¼Œå®¢æˆ·å°±ä¼šå†æå‡ºç¡®å®šä¸‹ä¸€ä¸ªå‘¨æœŸè¦å®Œæˆçš„需求。在æ¯ä¸ªå¼€å‘周期中,开å‘人员会把需求分解æˆä¸€ä¸ªä¸ªå¾ˆå°çš„任务,然åŽä¼°è®¡æ¯ä¸ªä»»åŠ¡çš„å¼€å‘æˆæœ¬å’Œé£Žé™©ã€‚这些估算是基于实际开å‘ç»éªŒçš„,项目åšå¾—多了,估算自然更加准确和精确;在åŒä¸€ä¸ªé¡¹ç›®ä¸­ï¼Œæ¯ç»è¿‡ä¸€ä¸ªå¼€å‘周期,下一次的估算都会有更过的ç»éªŒã€å‚ç…§å’Œä¾æ®ï¼Œä»Žè€Œæ›´åŠ å‡†ç¡®ã€‚è¿™äº›ç®€å•的步骤对客户æä¾›äº†ä¸°å¯Œçš„ã€è¶³å¤Ÿçš„ä¿¡æ¯ï¼Œä½¿ä¹‹èƒ½çµæ´»æœ‰æ•ˆåœ°è°ƒæŽ§å¼€å‘进程。æ¯è¿‡ä¸¤ä¸‰ä¸ªæ˜ŸæœŸï¼Œå®¢æˆ·æ€»èƒ½å¤Ÿå®žå®žåœ¨åœ¨åœ°çœ‹åˆ°å¼€å‘人员已ç»å®Œæˆçš„需求。在XP里,没有什么“快è¦å®Œæˆäº†â€ã€â€œå®Œæˆäº†90%â€çš„æ¨¡ç³Šè¯´æ³•,è¦ä¸æ˜¯å®Œæˆäº†ï¼Œè¦ä¸å°±æ˜¯æ²¡å®Œæˆã€‚è¿™ç§åšæ³•çœ‹èµ·æ¥å¥½åƒæœ‰åˆ©æœ‰å¼Šï¼šå¥½å¤„是客户å¯ä»¥é©¬ä¸ŠçŸ¥é“完æˆäº†å“ªäº›ã€åšå‡ºæ¥çš„东西是å¦åˆç”¨ã€ä¸‹é¢è¿˜è¦åšäº›ä»€ä¹ˆæˆ–改进什么等等;å处是客户看到åšå‡ºæ¥çš„东西,å¯èƒ½ä¼šå¾ˆä¸æ»¡æ„甚至中止åˆåŒã€‚实际上,XP的这ç§åšæ³•æ˜¯ä¸ºäº†åŠæ—©å‘现问题ã€è§£å†³é—®é¢˜ï¼Œè€Œä¸æ˜¯ç­‰åˆ°è¿‡äº†å‡ ä¸ªæœˆï¼Œç”¨æˆ·ç»ˆäºŽçœ‹åˆ°å¼€å‘å®Œçš„ç³»ç»Ÿäº†ï¼Œç„¶åŽæ‰å‘Šè¯‰ä½ è¿™ä¸ªä¸è¡Œã€é‚£ä¸ªå˜äº†ã€è¿˜è¦å¢žåŠ å“ªä¸ªå†…å®¹ç­‰ç­‰ã€‚

结对编程

结对编程是指代ç ç”±ä¸¤ä¸ªäººå在一å°ç”µè„‘å‰ä¸€èµ·å®Œæˆã€‚一个程åºå‘˜æŽ§åˆ¶ç”µè„‘并且主è¦è€ƒè™‘ç¼–ç ç»†èŠ‚ã€‚å¦å¤–一个人主è¦å…³æ³¨æ•´ä½“ç»“æž„ï¼Œä¸æ–­çš„对第一个程åºå‘˜å†™çš„代ç è¿›è¡Œè¯„审。

ç»“å¯¹ä¸æ˜¯å›ºå®šçš„:我们甚至建议程åºå‘˜å°½é‡äº¤å‰ç»“对。这样,æ¯ä¸ªäººéƒ½å¯ä»¥çŸ¥é“其它人的工作,æ¯ä¸ªäººéƒ½å¯¹æ•´ä¸ªç³»ç»Ÿç†Ÿæ‚‰ï¼Œç»“对程åºè®¾è®¡åŠ å¼ºäº†å›¢é˜Ÿå†…çš„æ²Ÿé€šã€‚è¿™ä¸Žä»£ç é›†ä½“æ‰€æœ‰åˆ¶æ˜¯æ¯æ¯ç›¸å…³çš„。

坿Œç»­çš„节å¥

å›¢é˜Ÿåªæœ‰æŒä¹…æ‰æœ‰èŽ·èƒœçš„å¸Œæœ›ã€‚ä»–ä»¬ä»¥èƒ½å¤Ÿé•¿æœŸç»´æŒçš„速度努力工作,他们ä¿å­˜ç²¾åŠ›ï¼Œä»–ä»¬æŠŠé¡¹ç›®çœ‹ä½œæ˜¯é©¬æ‹‰æ¾é•¿è·‘ï¼Œè€Œä¸æ˜¯å…¨é€ŸçŸ­è·‘。

代ç é›†ä½“所有

代ç é›†ä½“所有æ„å‘³ç€æ¯ä¸ªäººéƒ½å¯¹æ‰€æœ‰çš„代ç è´Ÿè´£ï¼›è¿™ä¸€ç‚¹ï¼Œå过æ¥åˆæ„å‘³ç€æ¯ä¸ªäººéƒ½å¯ä»¥æ›´æ”¹ä»£ç çš„ä»»æ„部分。结队程åºè®¾è®¡å¯¹è¿™ä¸€å®žè·µè´¡çŒ®è‰¯å¤šï¼šå€Ÿç”±åœ¨ä¸åŒçš„结队中工作,所有的程åºå‘˜éƒ½èƒ½çœ‹åˆ°å®Œå…¨çš„代ç ã€‚集体所有制的一个主è¦ä¼˜åŠ¿æ˜¯æå‡äº†å¼€å‘程åºçš„速度,因为一旦代ç ä¸­å‡ºçŽ°é”™è¯¯ï¼Œä»»ä½•ç¨‹åºå‘˜éƒ½èƒ½ä¿®æ­£å®ƒã€‚

在给予æ¯ä¸ªå¼€å‘人员修改代ç çš„æƒé™çš„æƒ…况下,å¯èƒ½å­˜åœ¨ç¨‹åºå‘˜å¼•入错误的风险,他ï¼å¥¹ä»¬çŸ¥é“自己在åšä»€ä¹ˆï¼Œå´æ— æ³•é¢„è§æŸäº›ä¾èµ–关系。完善的å•元测试å¯ä»¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼šå¦‚果未被预è§çš„ä¾èµ–产生了错误,那么当å•元测试è¿è¡Œæ—¶ï¼Œå®ƒå¿…定会失败。

ç¼–ç è§„范

XPå¼€å‘å°ç»„中的所有人都éµå¾ªä¸€ä¸ªç»Ÿä¸€çš„编程标准,因此,所有的代ç çœ‹èµ·æ¥å¥½åƒæ˜¯ä¸€ä¸ªäººå†™çš„。因为有了统一的编程规范,æ¯ä¸ªç¨‹åºå‘˜æ›´åŠ å®¹æ˜“è¯»æ‡‚å…¶ä»–äººå†™çš„ä»£ç ï¼Œè¿™æ˜¯æ˜¯å®žçް代ç é›†ä½“所有的é‡è¦å‰æä¹‹ä¸€ã€‚

简å•设计

XP中让åˆå­¦è€…感到最困惑的就是这点。XPè¦æ±‚用最简å•的办法实现æ¯ä¸ªå°éœ€æ±‚ï¼Œå‰ææ˜¯æŒ‰ç…§è¿™äº›ç®€å•设计开å‘出æ¥çš„软件必须通过测试。这些设计åªè¦èƒ½æ»¡è¶³ç³»ç»Ÿå’Œå®¢æˆ·åœ¨å½“下的需求就å¯ä»¥äº†ï¼Œä¸éœ€è¦ä»»ä½•画蛇添足的设计,而且所有这些设计都将在åŽç»­çš„å¼€å‘è¿‡ç¨‹ä¸­å°±è¢«ä¸æ–­åœ°é‡æ•´å’Œä¼˜åŒ–。

在XP中,没有那ç§ä¼ ç»Ÿå¼€å‘模å¼ä¸­ä¸€æ¬¡æ€§çš„ã€é’ˆå¯¹æ‰€æœ‰éœ€æ±‚的总体设计。在XPä¸­ï¼Œè®¾è®¡è¿‡ç¨‹å‡ ä¹Žä¸€ç›´è´¯ç©¿ç€æ•´ä¸ªé¡¹ç›®å¼€å‘:从制订项目的计划,到制订æ¯ä¸ªå¼€å‘周期(Iteration)的计划,到针对æ¯ä¸ªéœ€æ±‚模å—的简æ·è®¾è®¡ï¼Œåˆ°è®¾è®¡çš„夿 ¸ï¼Œä»¥åŠä¸€ç›´ä¸é—´æ–­çš„è®¾è®¡é‡æ•´å’Œä¼˜åŒ–。整个设计过程是个螺旋å¼çš„ã€ä¸æ–­å‰è¿›å’Œå‘展的过程。从这个角度看,XP是把设计åšåˆ°äº†æžè‡´ã€‚

测试驱动开å‘

测试驱动开å‘çš„åŸºæœ¬æ€æƒ³å°±æ˜¯åœ¨å¼€å‘功能代ç ä¹‹å‰ï¼Œå…ˆç¼–写测试代ç ï¼Œç„¶åŽåªç¼–写使测试通过的功能代ç ï¼Œä»Žè€Œä»¥æµ‹è¯•æ¥é©±åŠ¨æ•´ä¸ªå¼€å‘过程的进行。这有助于编写简æ´å¯ç”¨å’Œé«˜è´¨é‡çš„代ç ï¼Œæœ‰å¾ˆé«˜çš„çµæ´»æ€§å’Œå¥å£®æ€§ï¼Œèƒ½å¿«é€Ÿå“应å˜åŒ–,并加速开å‘过程。

测试驱动开å‘的基本过程如下:

① 快速新增一个测试

② è¿è¡Œæ‰€æœ‰çš„æµ‹è¯•(有时候åªéœ€è¦è¿è¡Œä¸€ä¸ªæˆ–一部分),å‘现新增的测试ä¸èƒ½é€šè¿‡

③ åšä¸€äº›å°å°çš„æ”¹åŠ¨ï¼Œå°½å¿«åœ°è®©æµ‹è¯•ç¨‹åºå¯è¿è¡Œï¼Œä¸ºæ­¤å¯ä»¥åœ¨ç¨‹åºä¸­ä½¿ç”¨ä¸€äº›ä¸åˆæƒ…ç†çš„æ–¹æ³•

④ è¿è¡Œæ‰€æœ‰çš„æµ‹è¯•,并且全部通过

â‘¤ã€€é‡æž„代ç ï¼Œä»¥æ¶ˆé™¤é‡å¤è®¾è®¡ï¼Œä¼˜åŒ–设计结构

ç®€å•æ¥è¯´ï¼Œå°±æ˜¯ä¸å¯è¿è¡Œ/å¯è¿è¡Œ/釿ž„——这正是测试驱动开å‘çš„å£å·

釿ž„

XP强调简å•的设计,但简å•çš„è®¾è®¡å¹¶ä¸æ˜¯æ²¡æœ‰è®¾è®¡çš„æµæ°´è´¦å¼çš„程åºï¼Œä¹Ÿä¸æ˜¯æ²¡æœ‰ç»“æž„ã€ç¼ºä¹é‡ç”¨æ€§çš„程åºè®¾è®¡ã€‚å¼€å‘人员虽然对æ¯ä¸ªUSERSTORY都进行简å•è®¾è®¡ï¼Œä½†åŒæ—¶ä¹Ÿåœ¨ä¸æ–­åœ°å¯¹è®¾è®¡è¿›è¡Œæ”¹è¿›ï¼Œè¿™ä¸ªè¿‡ç¨‹å«è®¾è®¡çš„釿ž„(Refactoring)。这个å字最早出现在MartinFowler写的《Refactoring:ImprovingtheDesignofExistingCode》这本书中。

Refactoringä¸»è¦æ˜¯åŠªåŠ›å‡å°‘程åºå’Œè®¾è®¡ä¸­é‡å¤å‡ºçŽ°çš„éƒ¨åˆ†ï¼Œå¢žå¼ºç¨‹åºå’Œè®¾è®¡çš„å¯é‡ç”¨æ€§ã€‚Refactoringçš„æ¦‚å¿µå¹¶ä¸æ˜¯XP首创的,它已ç»è¢«æå‡ºäº†è¿‘30年了,而且一直被认为是高质é‡çš„代ç çš„特点之一。但XP强调,把Refactoringåšåˆ°æžè‡´ï¼Œåº”è¯¥éšæ—¶éšåœ°ã€å°½å¯èƒ½åœ°è¿›è¡ŒRefactoring,åªè¦æœ‰å¯èƒ½ï¼Œç¨‹åºå‘˜éƒ½ä¸åº”该心疼以å‰å†™çš„程åºï¼Œè€Œè¦æ¯«ä¸ç•™æƒ…地改进程åºã€‚å½“ç„¶ï¼Œæ¯æ¬¡æ”¹åЍåŽï¼Œç¨‹åºå‘˜éƒ½åº”该è¿è¡Œæµ‹è¯•程åºï¼Œä¿è¯æ–°ç³»ç»Ÿä»ç„¶ç¬¦åˆé¢„å®šçš„è¦æ±‚。

系统éšå–»

为了帮助æ¯ä¸ªäººä¸€è‡´æ¸…楚地ç†è§£è¦å®Œæˆçš„客户需求ã€è¦å¼€å‘的系统功能,XPå¼€å‘å°ç»„ç”¨å¾ˆå¤šå½¢è±¡çš„æ¯”å–»æ¥æè¿°ç³»ç»Ÿæˆ–åŠŸèƒ½æ¨¡å—æ˜¯æ€Žæ ·å·¥ä½œçš„。比如,对于一个æœç´¢å¼•擎,它的Metaphorå¯èƒ½å°±æ˜¯â€œä¸€å¤§ç¾¤èœ˜è››ï¼Œåœ¨ç½‘ä¸Šå››å¤„å¯»æ‰¾è¦æ•æ‰çš„ä¸œè¥¿ï¼Œç„¶åŽæŠŠä¸œè¥¿å¸¦å›žå·¢ç©´ã€‚â€

æŒç»­é›†æˆ

集æˆè½¯ä»¶çš„è¿‡ç¨‹ä¸æ˜¯æ–°é—®é¢˜ï¼Œå¦‚果项目开å‘的规模比较å°ï¼Œæ¯”如一个人的项目,如果它对外部系统的ä¾èµ–很å°ï¼Œé‚£ä¹ˆè½¯ä»¶é›†æˆä¸æ˜¯é—®é¢˜ï¼Œä½†æ˜¯éšç€è½¯ä»¶é¡¹ç›®å¤æ‚度的增加(å³ä½¿å¢žåŠ ä¸€ä¸ªäººï¼‰ï¼Œå°±ä¼šå¯¹é›†æˆå’Œç¡®ä¿è½¯ä»¶ç»„件能够在一起工作æå‡ºäº†æ›´å¤šçš„è¦æ±‚-è¦æ—©é›†æˆï¼Œå¸¸é›†æˆã€‚早集æˆï¼Œé¢‘ç¹çš„集æˆå¸®åŠ©é¡¹ç›®åœ¨æ—©æœŸå‘现项目风险和质é‡é—®é¢˜ï¼Œå¦‚æžœåˆ°åŽæœŸæ‰å‘现这些问题,解决问题代价很大,很有å¯èƒ½å¯¼è‡´é¡¹ç›®å»¶æœŸæˆ–者项目失败。

æŒç»­é›†æˆæ˜¯ä¸€ç§è½¯ä»¶å¼€å‘实践,å³å›¢é˜Ÿå¼€å‘æˆå‘˜ç»å¸¸é›†æˆå®ƒä»¬çš„工作,通常æ¯ä¸ªæˆå‘˜æ¯å¤©è‡³å°‘集æˆä¸€æ¬¡ï¼Œä¹Ÿå°±æ„å‘³ç€æ¯å¤©å¯èƒ½ä¼šå‘生多次集æˆã€‚æ¯æ¬¡é›†æˆéƒ½é€šè¿‡è‡ªåŠ¨åŒ–çš„æž„å»ºï¼ˆåŒ…æ‹¬ç¼–è¯‘ï¼Œå‘布,自动化测试)æ¥éªŒè¯ï¼Œä»Žè€Œå°½å¿«åœ°å‘现集æˆé”™è¯¯ã€‚许多团队å‘现这个过程å¯ä»¥å¤§å¤§å‡å°‘集æˆçš„问题,让团队能够更快的开å‘内èšçš„软件。

现场客户

在æžé™ç¼–程中,“客户â€å¹¶ä¸æ˜¯ä¸ºç³»ç»Ÿä»˜å¸çš„人,而是真正使用该系统的人。æžé™ç¼–程认为客户应该时刻在现场解决问题。例如:在团队开å‘一个财务管ç†ç³»ç»Ÿæ—¶ï¼Œå¼€å‘å°ç»„内应包å«ä¸€ä½è´¢åŠ¡ç®¡ç†äººå‘˜ã€‚客户负责编写故事和验收测试,现场客户å¯ä»¥ä½¿å›¢é˜Ÿå’Œå®¢æˆ·æœ‰æ›´é¢‘ç¹çš„交æµå’Œè®¨è®ºã€‚

æžé™ç¼–程的4个价值

除了XP实践,æžé™ç¼–程还æå€¡å››å¤§ä»·å€¼ï¼šæ²Ÿé€šã€ç®€å•ã€å›žé¦ˆã€å‹‡æ°”。

沟通

构建一个软件系统的基本任务之一就是与系统的开å‘者交æµä»¥æ˜Žç¡®ç³»ç»Ÿçš„具体需求。在一些正å¼çš„è½¯ä»¶å¼€å‘æ–¹æ³•中,这一任务是通过文档æ¥å®Œæˆçš„。

æžé™ç¼–程技术å¯ä»¥è¢«çœ‹æˆæ˜¯åœ¨å¼€å‘å°ç»„çš„æˆå‘˜ä¹‹é—´è¿…é€Ÿæž„å»ºä¸Žä¼ æ’­åˆ¶åº¦ä¸Šçš„è®¤è¯†çš„ä¸€ç§æ–¹æ³•ã€‚å®ƒçš„ç›®æ ‡æ˜¯å‘æ‰€æœ‰å¼€å‘人员æä¾›ä¸€ä¸ªå¯¹äºŽç³»ç»Ÿçš„å…±äº«çš„è§†è§’ï¼Œè€Œè¿™ä¸€è§†è§’åˆæ˜¯ä¸Žç³»ç»Ÿçš„æœ€ç»ˆç”¨æˆ·çš„视角相å»åˆçš„。为了达到这一目标,æžé™ç¼–程支æŒè®¾è®¡ã€æŠ½è±¡ã€è¿˜æœ‰ç”¨æˆ·-程åºå‘˜é—´äº¤æµçš„简å•化,鼓励ç»å¸¸æ€§çš„å£å¤´äº¤æµä¸Žå›žé¦ˆã€‚

简å•

æžé™ç¼–程鼓励从最简å•的解决方å¼å…¥æ‰‹å†é€šè¿‡ä¸æ–­é‡æž„è¾¾åˆ°æ›´å¥½çš„ç»“æžœã€‚è¿™ç§æ–¹æ³•ä¸Žä¼ ç»Ÿç³»ç»Ÿå¼€å‘æ–¹å¼çš„ä¸åŒä¹‹å¤„在于,它åªå…³æ³¨äºŽå¯¹å½“å‰çš„需求æ¥è¿›è¡Œè®¾è®¡ã€ç¼–ç ï¼Œè€Œä¸åŽ»ç†ä¼šæ˜Žå¤©ã€ä¸‹å‘¨æˆ–者下个月会出现的需求。æžé™ç¼–ç¨‹çš„æ‹¥æŠ¤è€…æ‰¿è®¤è¿™æ ·çš„è€ƒè™‘æ˜¯æœ‰ç¼ºé™·çš„ï¼Œå³æœ‰æ—¶å€™åœ¨ä¿®æ”¹çŽ°æœ‰çš„ç³»ç»Ÿä»¥æ»¡è¶³æœªæ¥çš„需求时ä¸å¾—ä¸ä»˜å‡ºæ›´å¤šçš„努力。然而他们主张“ä¸å¯¹å°†æ¥å¯èƒ½çš„éœ€æ±‚ä¸ŠæŠ•å…¥ç²¾åŠ›â€æ‰€å¾—到的好处å¯ä»¥å¼¥è¡¥è¿™ä¸€ç‚¹ï¼Œå› ä¸ºå°†æ¥çš„需求在他们还没æå‡ºä¹‹å‰æ˜¯å¾ˆå¯èƒ½å‘生å˜åŒ–的。为了将æ¥ä¸ç¡®å®šçš„需求进行设计以åŠç¼–ç æ„味ç€åœ¨ä¸€äº›å¯èƒ½å¹¶ä¸éœ€è¦çš„æ–¹é¢æµªè´¹èµ„æºã€‚è€Œä¸Žä¹‹å‰æåˆ°çš„â€œäº¤æµâ€è¿™ä¸€ä»·å€¼ç›¸å…³è”æ¥çœ‹ï¼Œè®¾è®¡ä¸Žä»£ç ä¸Šçš„简化å¯ä»¥æé«˜äº¤æµçš„è´¨é‡ã€‚一个由简å•的编ç å®žçŽ°çš„ç®€å•的设计å¯ä»¥æ›´åŠ å®¹æ˜“å¾—è¢«å°ç»„中的æ¯ä¸ªç¨‹åºå‘˜æ‰€ç†è§£ã€‚

å馈

XP团队é‡è§†å馈,å馈越快越好。在æžé™ç¼–程中,“åé¦ˆâ€æ˜¯å’Œç³»ç»Ÿå¼€å‘的很多ä¸åŒæ–¹é¢ç›¸å…³è”的:

æ¥è‡ªç³»ç»Ÿçš„å馈:通过编写å•元测试,程åºå‘˜èƒ½å¤Ÿå¾ˆç›´è§‚的得到ç»è¿‡ä¿®æ”¹åŽç³»ç»Ÿçš„状æ€ã€‚

æ¥è‡ªå®¢æˆ·çš„å馈:功能性测试是由客户还有测试人员æ¥ç¼–写的。他们能由此得知当å‰ç³»ç»Ÿçš„状æ€ã€‚这样的评审一般计划2ã€3个礼拜进行一次,这样客户å¯ä»¥éžå¸¸å®¹æ˜“çš„äº†è§£ã€æŽŒæŽ§å¼€å‘的进度。

æ¥è‡ªå°ç»„çš„åé¦ˆï¼šå½“å®¢æˆ·å¸¦ç€æ–°éœ€æ±‚æ¥å‚加项目计划会议时,å°ç»„å¯ä»¥ç›´æŽ¥å¯¹äºŽå®žçŽ°æ–°éœ€æ±‚æ‰€éœ€è¦çš„æ—¶é—´è¿›è¡Œè¯„ä¼°ç„¶åŽå馈给客户。

å馈是与“交æµâ€ã€â€œç®€å•â€è¿™ä¸¤æ¡ä»·å€¼ç´§å¯†è”系的。为了沟通系统中的缺陷,å¯ä»¥é€šè¿‡ç¼–写å•元测试,简å•çš„è¯æ˜ŽæŸä¸€æ®µä»£ç å­˜åœ¨é—®é¢˜ã€‚æ¥è‡ªç³»ç»Ÿçš„直接å馈信æ¯å°†æé†’程åºå‘˜æ³¨æ„这一部分。用户å¯ä»¥ä»¥å®šä¹‰å¥½çš„åŠŸèƒ½éœ€æ±‚ä¸ºä¾æ®ï¼Œå¯¹ç³»ç»Ÿè¿›è¡Œå‘¨æœŸæ€§çš„æµ‹è¯•。用Kent Beckçš„è¯æ¥è¯´ï¼šâ€œç¼–程中的ä¹è§‚主义是å±é™©çš„ï¼Œè€ŒåŠæ—¶å馈则是解决它的方法。â€

勇气

æžé™ç¼–程ç†è®ºä¸­çš„“系统开å‘ä¸­çš„å‹‡æ°”â€æœ€å¥½ç”¨ä¸€ç»„实践æ¥è¯ é‡Šã€‚其中之一就是“åªä¸ºä»Šå¤©çš„需求设计以åŠç¼–ç ï¼Œä¸è¦è€ƒè™‘明天â€è¿™æ¡æˆ’律。这是努力é¿å…陷入设计的泥潭ã€è€Œåœ¨å…¶ä»–问题上花费了太多ä¸å¿…è¦çš„精力。勇气使得开å‘人员在需è¦é‡æž„ä»–ä»¬çš„ä»£ç æ—¶èƒ½æ„Ÿåˆ°èˆ’适。这æ„味ç€é‡æ–°å®¡æŸ¥çŽ°æœ‰ç³»ç»Ÿå¹¶å®Œå–„å®ƒä¼šä½¿å¾—ä»¥åŽå‡ºçŽ°çš„å˜åŒ–需求更容易被实现。å¦ä¸€ä¸ªå‹‡æ°”çš„ä¾‹å­æ˜¯äº†è§£ä»€ä¹ˆæ—¶å€™åº”该完全丢弃现有的代ç ã€‚æ¯ä¸ªç¨‹åºå‘˜éƒ½æœ‰è¿™æ ·çš„ç»åŽ†ï¼šä»–ä»¬èŠ±äº†ä¸€æ•´å¤©çš„æ—¶é—´çº ç¼ äºŽè‡ªå·±è®¾è®¡å’Œä»£ç ä¸­çš„ä¸€ä¸ªå¤æ‚çš„éš¾é¢˜å´æ— æ‰€å¾—,而第二天回æ¥ä»¥ä¸€ä¸ªå…¨æ–°è€Œæ¸…醒的角度æ¥è€ƒè™‘,在åŠå°æ—¶å†…就轻æ¾è§£å†³äº†é—®é¢˜ã€‚

æžé™ç¼–程的5个原则

ç»„æˆæžé™ç¼–ç¨‹åŸºç¡€çš„åŽŸåˆ™ï¼Œæ­£æ˜¯åŸºäºŽä¸Šé¢æè¿°çš„é‚£å‡ æ¡ä»·å€¼ã€‚在系统开å‘项目中,这些原则被用æ¥ä¸ºå†³ç­–åšå‡ºæŒ‡å¯¼ã€‚与价值相比,原则被æè¿°çš„æ›´åŠ å…·ä½“åŒ–ï¼Œä»¥ä¾¿åœ¨å®žé™…åº”ç”¨ä¸­æ›´ä¸ºç®€å•的转å˜ä¸ºå…·ä½“的指导æ„è§ã€‚

1. 快速å馈

当å馈能åšåˆ°åŠæ—¶ã€è¿…é€Ÿï¼Œå°†å‘æŒ¥æžå¤§çš„作用。一个事件和对这一事件åšå‡ºåé¦ˆä¹‹é—´çš„æ—¶é—´ï¼Œä¸€èˆ¬è¢«ç”¨æ¥æŽŒæ¡æ–°æƒ…况以åŠåšå‡ºä¿®æ”¹ã€‚ä¸Žä¼ ç»Ÿå¼€å‘æ–¹æ³•ä¸åŒï¼Œä¸Žå®¢æˆ·çš„å‘ç”ŸæŽ¥è§¦æ˜¯ä¸æ–­åå¤å‡ºçŽ°çš„ã€‚å®¢æˆ·èƒ½å¤Ÿæ¸…æ¥šåœ°æ´žå¯Ÿå¼€å‘中系统的状况。他ï¼å¥¹èƒ½å¤Ÿåœ¨æ•´ä¸ªå¼€å‘è¿‡ç¨‹ä¸­åŠæ—¶ç»™å‡ºå馈æ„è§ï¼Œå¹¶ä¸”在需è¦çš„æ—¶å€™èƒ½å¤ŸæŽŒæŽ§ç³»ç»Ÿçš„开呿–¹å‘。

å•å…ƒæµ‹è¯•åŒæ ·å¯¹è´¯å½»å馈原则起到作用。在编写代ç çš„è¿‡ç¨‹ä¸­ï¼Œåº”éœ€æ±‚å˜æ›´è€Œåšå‡ºä¿®æ”¹çš„系统将出现怎样的å应,正是通过å•元测试æ¥ç»™å‡ºç›´æŽ¥å馈的。比如,æŸä¸ªç¨‹åºå‘˜å¯¹ç³»ç»Ÿä¸­çš„一部分代ç è¿›è¡Œäº†ä¿®æ”¹ï¼Œè€Œå‡å¦‚这样的修改影å“到了系统中的å¦ä¸€éƒ¨åˆ†ï¼ˆè¶…出了这个程åºå‘˜çš„å¯æŽ§èŒƒå›´ï¼‰ï¼Œåˆ™è¿™ä¸ªç¨‹åºå‘˜ä¸ä¼šåŽ»å…³æ³¨è¿™ä¸ªç¼ºé™·ã€‚å¾€å¾€è¿™æ ·çš„é—®é¢˜ä¼šåœ¨ç³»ç»Ÿè¿›å…¥ç”Ÿäº§çŽ¯èŠ‚æ—¶æš´éœ²å‡ºæ¥ã€‚

2. å‡è®¾ç®€å•

å‡è®¾ç®€å•认为任何问题都å¯ä»¥”æžåº¦ç®€å•”åœ°è§£å†³ã€‚ä¼ ç»Ÿçš„ç³»ç»Ÿå¼€å‘æ–¹æ³•è¦è€ƒè™‘未æ¥çš„å˜åŒ–,è¦è€ƒè™‘代ç çš„å¯é‡ç”¨æ€§ã€‚æžé™ç¼–程拒ç»è¿™æ ·åšã€‚

3. 增é‡å˜åŒ–

æžé™ç¼–程的æå€¡è€…æ€»æ˜¯è¯´ï¼šç½—é©¬ä¸æ˜¯ä¸€å¤©å»ºæˆçš„。一次就想进行一个大的改造是ä¸å¯èƒ½çš„。æžé™ç¼–程采用增é‡å˜åŒ–的原则。比如说,å¯èƒ½æ¯ä¸‰ä¸ªæ˜ŸæœŸå‘布一个包å«å°å˜åŒ–çš„æ–°ç‰ˆæœ¬ã€‚è¿™æ ·ä¸€å°æ­¥ä¸€å°æ­¥å‰è¿›çš„æ–¹å¼ï¼Œä½¿å¾—整个开å‘è¿›åº¦ä»¥åŠæ­£åœ¨å¼€å‘的系统对于用户æ¥è¯´å˜å¾—æ›´ä¸ºå¯æŽ§ã€‚

4. 拥抱å˜åŒ–

å¯ä»¥è‚¯å®šåœ°æ˜¯ï¼Œä¸ç¡®å®šå› ç´ æ€»æ˜¯å­˜åœ¨çš„。“拥抱å˜åŒ–â€è¿™ä¸€åŽŸåˆ™å°±æ˜¯å¼ºè°ƒä¸è¦å¯¹å˜åŒ–采å–åæŠ—çš„æ€åº¦ï¼Œè€Œåº”该拥抱它们。比如,在一次阶段性会议中客户æå‡ºäº†ä¸€äº›çœ‹æ¥æˆå‰§æ€§çš„éœ€æ±‚å˜æ›´ã€‚作为程åºå‘˜ï¼Œå¿…须拥抱这些å˜åŒ–,并且拟定计划使得下一个阶段的产å“能够满足新的需求。

5. 高质é‡çš„工作

没人喜欢拖泥带水,æ¯ä¸ªäººéƒ½æœŸæœ›å‡ºè‰²çš„完æˆå·¥ä½œã€‚æžé™ç¼–程的æå€¡è€…è®¤ä¸ºèŒƒå›´ã€æ—¶é—´ã€æˆæœ¬å’Œè´¨é‡è¿™ä¸ªå››ä¸ªè½¯ä»¶å¼€å‘çš„å˜é‡ï¼Œåªæœ‰è´¨é‡ä¸å¯å¦¥å的。

关键è¯ï¼šæ•æ·å¼€å‘,æžé™ç¼–程

æŒç»­é›†æˆ

æŒç»­é›†æˆï¼ˆContinuous Integration)

集æˆè½¯ä»¶çš„è¿‡ç¨‹ä¸æ˜¯æ–°é—®é¢˜ï¼Œå¦‚果项目开å‘的规模比较å°ï¼Œæ¯”如一个人的项目,如果它对外部系统的ä¾èµ–很å°ï¼Œé‚£ä¹ˆè½¯ä»¶é›†æˆä¸æ˜¯é—®é¢˜ï¼Œä½†æ˜¯éšç€è½¯ä»¶é¡¹ç›®å¤æ‚度的增加(å³ä½¿å¢žåŠ ä¸€ä¸ªäººï¼‰ï¼Œå°±ä¼šå¯¹é›†æˆå’Œç¡®ä¿è½¯ä»¶ç»„件能够在一起工作æå‡ºäº†æ›´å¤šçš„è¦æ±‚-è¦æ—©é›†æˆï¼Œå¸¸é›†æˆã€‚早集æˆï¼Œé¢‘ç¹çš„集æˆå¸®åŠ©é¡¹ç›®åœ¨æ—©æœŸå‘现项目风险和质é‡é—®é¢˜ï¼Œå¦‚æžœåˆ°åŽæœŸæ‰å‘现这些问题,解决问题代价很大,很有å¯èƒ½å¯¼è‡´é¡¹ç›®å»¶æœŸæˆ–者项目失败。

大师Martin Fowler对æŒç»­é›†æˆæ˜¯è¿™æ ·å®šä¹‰çš„:

æŒç»­é›†æˆæ˜¯ä¸€ç§è½¯ä»¶å¼€å‘实践,å³å›¢é˜Ÿå¼€å‘æˆå‘˜ç»å¸¸é›†æˆå®ƒä»¬çš„工作,通常æ¯ä¸ªæˆå‘˜æ¯å¤©è‡³å°‘集æˆä¸€æ¬¡ï¼Œä¹Ÿå°±æ„å‘³ç€æ¯å¤©å¯èƒ½ä¼šå‘生多次集æˆã€‚æ¯æ¬¡é›†æˆéƒ½é€šè¿‡è‡ªåŠ¨åŒ–çš„æž„å»ºï¼ˆåŒ…æ‹¬ç¼–è¯‘ï¼Œå‘布,自动化测试)æ¥éªŒè¯ï¼Œä»Žè€Œå°½å¿«åœ°å‘现集æˆé”™è¯¯ã€‚许多团队å‘现这个过程å¯ä»¥å¤§å¤§å‡å°‘集æˆçš„问题,让团队能够更快的开å‘内èšçš„软件。

æŒç»­é›†æˆçš„价值

  • å‡å°‘风险

一天中进行多次的集æˆï¼Œå¹¶åšäº†ç›¸åº”的测试,这样有利于检查缺陷,了解软件的å¥åº·çŠ¶å†µï¼Œå‡å°‘å‡å®šã€‚

  • å‡å°‘é‡å¤è¿‡ç¨‹

å‡å°‘é‡å¤çš„过程å¯ä»¥èŠ‚çœæ—¶é—´ã€è´¹ç”¨å’Œå·¥ä½œé‡ã€‚说起æ¥ç®€å•,åšèµ·æ¥éš¾ã€‚这些浪费时间的é‡å¤åŠ³åŠ¨å¯èƒ½åœ¨æˆ‘们的项目活动的任何一个环节å‘生,包括代ç ç¼–è¯‘ã€æ•°æ®åº“集æˆã€æµ‹è¯•ã€å®¡æŸ¥ã€éƒ¨ç½²åŠå馈。通过自动化的æŒç»­é›†æˆå¯ä»¥å°†è¿™äº›é‡å¤çš„åŠ¨ä½œéƒ½å˜æˆè‡ªåŠ¨åŒ–çš„ï¼Œæ— éœ€å¤ªå¤šäººå·¥å¹²é¢„ï¼Œè®©äººä»¬çš„æ—¶é—´æ›´å¤šçš„æŠ•å…¥åˆ°åŠ¨è„‘ç­‹çš„ã€æ›´é«˜ä»·å€¼çš„事情上。

  • 任何时间ã€ä»»ä½•地点生æˆå¯éƒ¨ç½²çš„软件

æŒç»­é›†æˆå¯ä»¥è®©æ‚¨åœ¨ä»»ä½•æ—¶é—´å‘布å¯ä»¥éƒ¨ç½²çš„软件。从外界æ¥çœ‹ï¼Œè¿™æ˜¯æŒç»­é›†æˆæœ€æ˜Žæ˜¾çš„好处,我们å¯ä»¥å¯¹æ”¹è¿›è½¯ä»¶å“质和å‡å°‘é£Žé™©è¯´èµ·æ¥æ»”æ»”ä¸ç»ï¼Œä½†å¯¹äºŽå®¢æˆ·æ¥è¯´ï¼Œå¯ä»¥éƒ¨ç½²çš„è½¯ä»¶äº§å“æ˜¯æœ€å®žé™…的资产。利用æŒç»­é›†æˆï¼Œæ‚¨å¯ä»¥ç»å¸¸å¯¹æºä»£ç è¿›è¡Œä¸€äº›å°æ”¹åŠ¨ï¼Œå¹¶å°†è¿™äº›æ”¹åŠ¨å’Œå…¶ä»–çš„ä»£ç è¿›è¡Œé›†æˆã€‚如果出现问题,项目æˆå‘˜é©¬ä¸Šå°±ä¼šè¢«é€šçŸ¥åˆ°ï¼Œé—®é¢˜ä¼šç¬¬ä¸€æ—¶é—´è¢«ä¿®å¤ã€‚ä¸é‡‡ç”¨æŒç»­é›†æˆçš„æƒ…况下,这些问题有å¯èƒ½åˆ°äº¤ä»˜å‰çš„é›†æˆæµ‹è¯•的时候æ‰å‘现,有å¯èƒ½ä¼šå¯¼è‡´å»¶è¿Ÿå‘布产å“,而在急于修å¤è¿™äº›ç¼ºé™·çš„æ—¶å€™åˆæœ‰å¯èƒ½å¼•入新的缺陷,最终å¯èƒ½å¯¼è‡´é¡¹ç›®å¤±è´¥ã€‚

  • 增强项目的å¯è§æ€§

æŒç»­é›†æˆè®©æˆ‘们能够注æ„åˆ°è¶‹åŠ¿å¹¶è¿›è¡Œæœ‰æ•ˆçš„å†³ç­–ã€‚å¦‚æžœæ²¡æœ‰çœŸå®žæˆ–æœ€æ–°çš„æ•°æ®æä¾›æ”¯æŒï¼Œé¡¹ç›®å°±ä¼šé‡åˆ°éº»çƒ¦ï¼Œæ¯ä¸ªäººéƒ½ä¼šæå‡ºä»–最好的猜测。通常,项目æˆå‘˜é€šè¿‡æ‰‹å·¥æ”¶é›†è¿™äº›ä¿¡æ¯ï¼Œå¢žåŠ äº†è´Ÿæ‹…ï¼Œä¹Ÿå¾ˆè€—æ—¶ã€‚æŒç»­é›†æˆå¯ä»¥å¸¦æ¥ä¸¤ç‚¹ç§¯æžæ•ˆæžœï¼š

(1)有效决策:æŒç»­é›†æˆç³»ç»Ÿä¸ºé¡¹ç›®æž„建状æ€å’Œå“质指标æä¾›äº†åŠæ—¶çš„ä¿¡æ¯ï¼Œæœ‰äº›æŒç»­é›†æˆç³»ç»Ÿå¯ä»¥æŠ¥å‘ŠåŠŸèƒ½å®Œæˆåº¦å’Œç¼ºé™·çŽ‡ã€‚

(2)注æ„到趋势:由于ç»å¸¸é›†æˆï¼Œæˆ‘们å¯ä»¥çœ‹åˆ°ä¸€äº›è¶‹åŠ¿ï¼Œå¦‚æž„å»ºæˆåŠŸæˆ–å¤±è´¥ã€æ€»ä½“å“质以åŠå…¶å®ƒçš„项目信æ¯ã€‚

  • 建立团队对开å‘产å“的信心

æŒç»­é›†æˆå¯ä»¥å»ºç«‹å¼€å‘团队对开å‘产å“çš„ä¿¡å¿ƒï¼Œå› ä¸ºä»–ä»¬æ¸…æ¥šçš„çŸ¥é“æ¯ä¸€æ¬¡æž„建的结果,他们知é“他们对软件的改动造æˆäº†å“ªäº›å½±å“,结果怎么样。

æŒç»­é›†æˆçš„è¦ç‚¹

1.统一的代ç åº“

2.自动构建

3.自动测试

4.æ¯ä¸ªäººæ¯å¤©éƒ½è¦å‘代ç åº“主干æäº¤ä»£ç 

5.æ¯æ¬¡ä»£ç é€’交åŽéƒ½ä¼šåœ¨æŒç»­é›†æˆæœåŠ¡å™¨ä¸Šè§¦å‘一次构建

6.ä¿è¯å¿«é€Ÿæž„建

7.模拟生产环境的自动测试

8.æ¯ä¸ªäººéƒ½å¯ä»¥å¾ˆå®¹æ˜“çš„èŽ·å–æœ€æ–°å¯æ‰§è¡Œçš„应用程åº

9.æ¯ä¸ªäººéƒ½æ¸…楚正在å‘生的状况

10.自动化的部署

 æŒç»­é›†æˆçš„原则

1. 所有的开å‘人员需è¦åœ¨æœ¬åœ°æœºå™¨ä¸Šåšæœ¬åœ°æž„å»ºï¼Œç„¶åŽå†æäº¤çš„版本控制库中,从而确ä¿ä»–ä»¬çš„å˜æ›´ä¸ä¼šå¯¼è‡´æŒç»­é›†æˆå¤±è´¥ã€‚

2. å¼€å‘人员æ¯å¤©è‡³å°‘å‘版本控制库中æäº¤ä¸€æ¬¡ä»£ç ã€‚

3. å¼€å‘人员æ¯å¤©è‡³å°‘需è¦ä»Žç‰ˆæœ¬æŽ§åˆ¶åº“中更新一次代ç åˆ°æœ¬åœ°æœºå™¨ã€‚

4. éœ€è¦æœ‰ä¸“é—¨çš„é›†æˆæœåŠ¡å™¨æ¥æ‰§è¡Œé›†æˆæž„建,æ¯å¤©è¦æ‰§è¡Œå¤šæ¬¡æž„建。

5. æ¯æ¬¡æž„建都è¦100%通过。

6. æ¯æ¬¡æž„建都å¯ä»¥ç”Ÿæˆå¯å‘布的产å“。

7. ä¿®å¤å¤±è´¥çš„æž„建是优先级最高的事情。

关键è¯ï¼šæ•æ·å¼€å‘,æŒç»­é›†æˆ

测试驱动开å‘

测试驱动开å‘

测试驱动开å‘,英文全称Test-Driven Development,简称TDD,是一ç§ä¸åŒäºŽä¼ ç»Ÿè½¯ä»¶å¼€å‘æµç¨‹çš„æ–°åž‹çš„开呿–¹æ³•ã€‚å®ƒè¦æ±‚在编写æŸä¸ªåŠŸèƒ½çš„ä»£ç ä¹‹å‰å…ˆç¼–写测试代ç ï¼Œç„¶åŽåªç¼–写使测试通过的功能代ç ï¼Œé€šè¿‡æµ‹è¯•æ¥æŽ¨åŠ¨æ•´ä¸ªå¼€å‘的进行。这有助于编写简æ´å¯ç”¨å’Œé«˜è´¨é‡çš„代ç ï¼Œå¹¶åŠ é€Ÿå¼€å‘过程。

Kent Beck先生最早在其æžé™ç¼–程(XP)方法论中,å‘大家推è“测试驱动â€è¿™ä¸€æœ€ä½³å®žè·µï¼Œè¿˜ä¸“门撰写了《测试驱动开å‘》一书,详细说明如何实现。ç»è¿‡å‡ å¹´çš„迅猛å‘展,测试驱动开å‘å·²ç»æˆé•¿ä¸ºä¸€é—¨ç‹¬ç«‹çš„è½¯ä»¶å¼€å‘æŠ€æœ¯ï¼Œå…¶åæ°”甚至盖过了æžé™ç¼–程。

基本原ç†

测试驱动开å‘çš„åŸºæœ¬æ€æƒ³å°±æ˜¯åœ¨å¼€å‘功能代ç ä¹‹å‰ï¼Œå…ˆç¼–写测试代ç ï¼Œç„¶åŽåªç¼–写使测试通过的功能代ç ï¼Œä»Žè€Œä»¥æµ‹è¯•æ¥é©±åŠ¨æ•´ä¸ªå¼€å‘过程的进行。这有助于编写简æ´å¯ç”¨å’Œé«˜è´¨é‡çš„代ç ï¼Œæœ‰å¾ˆé«˜çš„çµæ´»æ€§å’Œå¥å£®æ€§ï¼Œèƒ½å¿«é€Ÿå“应å˜åŒ–,并加速开å‘过程。

测试驱动开å‘的基本过程如下:

① 快速新增一个测试

② è¿è¡Œæ‰€æœ‰çš„æµ‹è¯•(有时候åªéœ€è¦è¿è¡Œä¸€ä¸ªæˆ–一部分),å‘现新增的测试ä¸èƒ½é€šè¿‡

③ åšä¸€äº›å°å°çš„æ”¹åŠ¨ï¼Œå°½å¿«åœ°è®©æµ‹è¯•ç¨‹åºå¯è¿è¡Œï¼Œä¸ºæ­¤å¯ä»¥åœ¨ç¨‹åºä¸­ä½¿ç”¨ä¸€äº›ä¸åˆæƒ…ç†çš„æ–¹æ³•

④ è¿è¡Œæ‰€æœ‰çš„æµ‹è¯•,并且全部通过

â‘¤ã€€é‡æž„代ç ï¼Œä»¥æ¶ˆé™¤é‡å¤è®¾è®¡ï¼Œä¼˜åŒ–设计结构

ç®€å•æ¥è¯´ï¼Œå°±æ˜¯ä¸å¯è¿è¡Œ/å¯è¿è¡Œ/釿ž„——这正是测试驱动开å‘çš„å£å·ã€‚

一个生动比喻

举个比较生动的例å­ï¼Œè¿™ä¸ªä¾‹å­ä½ ä¸€å®šå·²ç»åœ¨å¾ˆå¤šå…³äºŽTDD的文献资料上都看到过,但它确实是一个ä¸é”™çš„æ¯”喻。在此我进行了一些加工和扩展。

盖房å­çš„æ—¶å€™ï¼Œå·¥äººå¸ˆå‚…ç Œå¢™ï¼Œä¼šå…ˆç”¨æ¡©å­æ‹‰ä¸Šçº¿ï¼Œä»¥ä½¿ç –能够垒的笔直,因为垒砖的时候都是以这根线为基准的。TDDå°±åƒè¿™æ ·ï¼Œå…ˆå†™æµ‹è¯•代ç ï¼Œå°±åƒå·¥äººå¸ˆå‚…å…ˆç”¨æ¡©å­æ‹‰ä¸Šçº¿ï¼Œç„¶åŽç¼–ç çš„æ—¶å€™ä»¥æ­¤ä¸ºåŸºå‡†ï¼Œåªç¼–写符åˆè¿™ä¸ªæµ‹è¯•的功能代ç ã€‚

而一个新手或èœé¸Ÿçº§çš„å°å¸ˆå‚…,å´å¯èƒ½ä¸çŸ¥é“拉线,而是直接把砖往上垒,垒了一些之åŽå†çœ‹æ˜¯å¦ç¬”直,这时候å¯èƒ½ä¼šç”¨ä¸€æ ¹çº¿ï¼Œé‡ä¸€ä¸‹ç Œå¥½çš„墙是å¦ç¬”直,如果ä¸ç›´å†è¿›è¡Œæ ¡æ­£ï¼Œæ•²æ•²æ‰“打。使用传统的软件开å‘过程就åƒè¿™æ ·ï¼Œæˆ‘们先编ç ï¼Œç¼–ç å®Œæˆä¹‹åŽæ‰å†™æµ‹è¯•程åºï¼Œä»¥æ­¤æ£€éªŒå·²å†™çš„ä»£ç æ˜¯å¦æ­£ç¡®ï¼Œå¦‚果有错误å†ä¸€ç‚¹ç‚¹ä¿®æ”¹ã€‚

ä½ æ˜¯å¸Œæœ›å…ˆç Œå¢™å†æ‹‰çº¿ï¼Œè¿˜æ˜¯å¸Œæœ›å…ˆæ‹‰çº¿å†ç Œå¢™å‘¢ï¼Ÿå¦‚果你喜欢å‰è€…,那就算了,而如果你喜欢åŽè€…,那就转入TDD阵è¥å§ï¼è¯¦ç»†å¯å‚阅。

本质和优势

æˆ–è®¸åªæœ‰äº†è§£äº†æµ‹è¯•驱动开å‘的本质和优势之åŽï¼Œä½ æ‰ä¼šé¢†ç•¥åˆ°å¥¹çš„æ— ç©·é­…力。 测试驱动开å‘䏿˜¯ä¸€ç§æµ‹è¯•技术,它是一ç§åˆ†æžæŠ€æœ¯ã€è®¾è®¡æŠ€æœ¯ï¼Œæ›´æ˜¯ä¸€ç§ç»„ç»‡æ‰€æœ‰å¼€å‘æ´»åŠ¨çš„æŠ€æœ¯ã€‚ç›¸å¯¹äºŽä¼ ç»Ÿçš„ç»“æž„åŒ–å¼€å‘过程方法,它具有以下优势:

1) TDDæ ¹æ®å®¢æˆ·éœ€æ±‚编写测试用例,对功能的过程和接å£éƒ½è¿›è¡Œäº†è®¾è®¡ï¼Œè€Œä¸”è¿™ç§ä»Žä½¿ç”¨è€…角度对代ç è¿›è¡Œçš„设计通常更符åˆåŽæœŸå¼€å‘的需求。因为关注用户å馈,å¯ä»¥åŠæ—¶å“åº”éœ€æ±‚å˜æ›´ï¼ŒåŒæ—¶å› ä¸ºä»Žä½¿ç”¨è€…角度出å‘的简å•设计,也å¯ä»¥æ›´å¿«åœ°é€‚应å˜åŒ–。

2) å‡ºäºŽæ˜“æµ‹è¯•å’Œæµ‹è¯•ç‹¬ç«‹æ€§çš„è¦æ±‚,将促使我们实现æ¾è€¦åˆçš„设计,并更多地ä¾èµ–于接å£è€Œéžå…·ä½“的类,æé«˜ç³»ç»Ÿçš„坿‰©å±•æ€§å’ŒæŠ—å˜æ€§ã€‚而且TDD明显地缩短了设计决策的å馈循环,使我们几秒或几分钟之内就能获得å馈。

3) 将测试工作æåˆ°ç¼–ç ä¹‹å‰ï¼Œå¹¶é¢‘ç¹åœ°è¿è¡Œæ‰€æœ‰æµ‹è¯•,å¯ä»¥å°½é‡åœ°é¿å…和尽早地å‘现错误,æžå¤§åœ°é™ä½Žäº†åŽç»­æµ‹è¯•åŠä¿®å¤çš„æˆæœ¬ï¼Œæé«˜äº†ä»£ç çš„è´¨é‡ã€‚åœ¨æµ‹è¯•çš„ä¿æŠ¤ä¸‹ï¼Œä¸æ–­é‡æž„代ç ï¼Œä»¥æ¶ˆé™¤é‡å¤è®¾è®¡ï¼Œä¼˜åŒ–设计结构,æé«˜äº†ä»£ç çš„é‡ç”¨æ€§ï¼Œä»Žè€Œæé«˜äº†è½¯ä»¶äº§å“的质é‡ã€‚

4) TDDæä¾›äº†æŒç»­çš„å›žå½’æµ‹è¯•ï¼Œä½¿æˆ‘ä»¬æ‹¥æœ‰é‡æž„的勇气,因为代ç çš„æ”¹åŠ¨å¯¼è‡´ç³»ç»Ÿå…¶ä»–éƒ¨åˆ†äº§ç”Ÿä»»ä½•å¼‚å¸¸ï¼Œæµ‹è¯•éƒ½ä¼šç«‹åˆ»é€šçŸ¥æˆ‘ä»¬ã€‚å®Œæ•´çš„æµ‹è¯•ä¼šå¸®åŠ©æˆ‘ä»¬æŒç»­åœ°è·Ÿè¸ªæ•´ä¸ªç³»ç»Ÿçš„状æ€ï¼Œå› æ­¤æˆ‘们就ä¸éœ€è¦æ‹…心会产生什么ä¸å¯é¢„知的副作用了。

5) TDD所产生的å•元测试代ç å°±æ˜¯æœ€å®Œç¾Žçš„å¼€å‘者文档,它们展示了所有的APIè¯¥å¦‚ä½•ä½¿ç”¨ä»¥åŠæ˜¯å¦‚何è¿ä½œçš„,而且它们与工作代ç ä¿æŒåŒæ­¥ï¼Œæ°¸è¿œæ˜¯æœ€æ–°çš„。

6) TDDå¯ä»¥å‡è½»åŽ‹åŠ›ã€é™ä½Žå¿§è™‘ã€æé«˜æˆ‘ä»¬å¯¹ä»£ç çš„信心ã€ä½¿æˆ‘ä»¬æ‹¥æœ‰é‡æž„的勇气,这些都是快ä¹å·¥ä½œçš„é‡è¦å‰æã€‚

7)快速的æé«˜äº†å¼€å‘效率

çŽ°çŠ¶å’Œå‰æ™¯

测试驱动开å‘的技术已得到越æ¥è¶Šå¹¿æ³›çš„é‡è§†ï¼Œä½†ç”±äºŽå‘展时间ä¸é•¿ï¼Œç›¸å…³åº”ç”¨å¹¶ä¸æ˜¯å¾ˆæˆç†Ÿã€‚现今越æ¥è¶Šå¤šçš„å…¬å¸éƒ½åœ¨å°è¯•实践测试驱动开å‘,但由于测试驱动开å‘对开å‘äººå‘˜è¦æ±‚比较高,更与开å‘人员的传统æ€ç»´ä¹ æƒ¯ç›¸è¿èƒŒï¼Œå› æ­¤å®žè·µèµ·æ¥æœ‰ä¸€å®šå›°éš¾ã€‚ 美国ä¸å°‘è‘—å软件公å¸å¦‚IBMå¾ˆæ—©å°±å¼€å§‹å‘æ•æ·è½¬åž‹ï¼Œåœ¨æ­¤è¿‡ç¨‹ä¸­ï¼ŒTDD通常是最é‡è¦ä¹Ÿæœ€è‰°éš¾çš„一个,正如IBMå¼€å‘转型部门副总è£Sue Mckinney所言:测试驱动开å‘剿™¯éžå¸¸è¯±äººï¼Œä½†æ˜¯â€œåœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­æˆ‘们的付出å¯èƒ½ä¹Ÿæ˜¯æœ€å¤šçš„。â€Forrester的高级分æžå¸ˆDave West认为,测试驱动开å‘(TDDï¼‰å°±åƒæ˜¯â€œåœ£æ¯â€ï¼Œä½†æ˜¯â€œå¦‚果能达到这个目标,付出å†å¤šçš„辛苦也是值得的。â€

我想,测试驱动开å‘的推广过程中,首è¦çš„问题是将开å‘人员长期以æ¥å½¢æˆçš„æ€ç»´è§‚å¿µå’Œæ„识形æ€è½¬å˜è¿‡æ¥ï¼Œå¼€å‘人员åªå–œæ¬¢ç¼–ç ï¼Œä¸å–œæ¬¢æµ‹è¯•,更无法ç†è§£ä¸ºä»€ä¹ˆæ²¡æœ‰äº§å“代ç çš„æ—¶å€™å°±å…ˆå†™å•元测试;其次是相关的技术支æŒï¼Œæµ‹è¯•驱动开å‘对开å‘人员æå‡ºäº†æ›´é«˜çš„è¦æ±‚,ä¸ä»…è¦æŽŒæ¡æµ‹è¯•å’Œé‡æž„ï¼Œè¿˜è¦æ‡‚得设计模å¼ç­‰è®¾è®¡æ–¹é¢çš„知识。

æ­£åƒæ¯ç§é©å‘½æ€§çš„äº§ç‰©åˆšåˆšäº§ç”Ÿä¹‹åˆæ‰€å¿…ç„¶è¦ç»åŽ†çš„è‰°éš¾åŽ†ç¨‹ï¼Œæµ‹è¯•é©±åŠ¨å¼€å‘也正在ç»åކç€ï¼Œä½†å¥¹æ­£åœ¨é€æ¸èµ°å‘æˆç†Ÿï¼Œå‰é€”一片光明。相信未æ¥å‡ å¹´å†…,国内的一定会越æ¥è¶Šå¤šçš„软件ä¼ä¸šå¼€å§‹æ™®åŠæµ‹è¯•驱动开å‘。

关键è¯ï¼šæ•æ·å¼€å‘,测试驱动开å‘

DevOps基础

DevOps基础

DevOpsæ˜¯ä¸€ç»„è¿‡ç¨‹ã€æ–¹æ³•与系统的统称,用于促进开å‘(应用程åº/è½¯ä»¶å·¥ç¨‹ï¼‰ã€æŠ€æœ¯è¿è¥å’Œè´¨é‡ä¿éšœï¼ˆQA)部门之间的沟通ã€å作与整åˆã€‚它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产å“å’ŒæœåŠ¡ï¼Œå¼€å‘å’Œè¿è¥å·¥ä½œå¿…须紧密åˆä½œã€‚

å¯ä»¥æŠŠDevOps看作开å‘ï¼ˆè½¯ä»¶å·¥ç¨‹ï¼‰ã€æŠ€æœ¯è¿è¥å’Œè´¨é‡ä¿éšœï¼ˆQA)三者的交集
传统的软件组织将开å‘ã€ITè¿è¥å’Œè´¨é‡ä¿éšœè®¾ä¸ºå„自分离的部门。在这ç§çŽ¯å¢ƒä¸‹å¦‚ä½•é‡‡ç”¨æ–°çš„å¼€å‘æ–¹æ³•ï¼ˆä¾‹å¦‚æ•æ·è½¯ä»¶å¼€å‘),这是一个é‡è¦çš„课题:按照从å‰çš„工作方å¼ï¼Œå¼€å‘和部署ä¸éœ€è¦ITæ”¯æŒæˆ–者QA深入的ã€è·¨éƒ¨é—¨çš„æ”¯æŒï¼Œè€ŒçŽ°åœ¨å´éœ€è¦æžå…¶ç´§å¯†çš„多部门å作。然而DevOpsè€ƒè™‘çš„è¿˜ä¸æ­¢æ˜¯è½¯ä»¶éƒ¨ç½²ã€‚它是一套针对这几个部门间沟通与å作问题的æµç¨‹å’Œæ–¹æ³•。
需è¦é¢‘ç¹äº¤ä»˜çš„ä¼ä¸šå¯èƒ½æ›´éœ€è¦å¯¹DevOps有一个大致的了解。Flickrå‘展了自己的DevOps能力,使之能够支撑业务部门“æ¯å¤©éƒ¨ç½²10次â€çš„è¦æ±‚[7]──如果一个组织è¦ç”Ÿäº§é¢å‘多ç§ç”¨æˆ·ã€å…·å¤‡å¤šæ ·åŠŸèƒ½çš„åº”ç”¨ç¨‹åºï¼Œå…¶éƒ¨ç½²å‘¨æœŸå¿…然会很短。这ç§èƒ½åŠ›ä¹Ÿè¢«ç§°ä¸ºæŒç»­éƒ¨ç½²[8],并且ç»å¸¸ä¸Žç²¾ç›Šåˆ›ä¸šæ–¹æ³•è”系起æ¥ã€‚[9] 从2009年起,相关的工作组ã€ä¸“业组织和åšå®¢å¿«é€Ÿæ¶Œçް.

DevOps的引入能对产å“äº¤ä»˜ã€æµ‹è¯•ã€åŠŸèƒ½å¼€å‘和维护(包括──曾ç»ç½•è§ä½†å¦‚今已屡è§ä¸é²œçš„──“热补ä¸â€ï¼‰èµ·åˆ°æ„义深远的影å“。在缺ä¹DevOps能力的组织中,开å‘与è¿è¥ä¹‹é—´å­˜åœ¨ç€ä¿¡æ¯â€œé¸¿æ²Ÿâ€â”€â”€ä¾‹å¦‚è¿è¥äººå‘˜è¦æ±‚更好的å¯é æ€§å’Œå®‰å…¨æ€§ï¼Œå¼€å‘人员则希望基础设施å“应更快,而业务用户的需求则是更快地将更多的特性å‘布给最终用户使用。这ç§ä¿¡æ¯é¸¿æ²Ÿå°±æ˜¯æœ€å¸¸å‡ºé—®é¢˜çš„地方。
以下几方é¢å› ç´ å¯èƒ½ä¿ƒä½¿ä¸€ä¸ªç»„织引入DevOps:
1.Â ä½¿ç”¨æ•æ·å¼€å‘或其他软件开å‘过程与方法
2.Â ä¸šåŠ¡è´Ÿè´£äººè¦æ±‚加快产å“交付的速率
3. 虚拟化[14]和云计算基础设施(å¯èƒ½æ¥è‡ªå†…部或外部供应商)日益普é
4. 数æ®ä¸­å¿ƒè‡ªåŠ¨åŒ–æŠ€æœ¯[15]å’Œé…置管ç†å·¥å…·çš„æ™®åŠ
5. 有一ç§è§‚点认为,目å‰å ä¸»å¯¼åœ°ä½çš„“传统â€ç¾Žå›½å¼ç®¡ç†é£Žæ ¼ï¼ˆâ€œæ–¯éš†æ¨¡åž‹ vs 丰田模型â€ï¼‰[16]会导致“烟囱å¼è‡ªåŠ¨åŒ–â€ï¼Œä»Žè€Œé€ æˆå¼€å‘与è¿è¥ä¹‹é—´çš„鸿沟,因此需è¦DevOps能力æ¥å…‹æœç”±æ­¤å¼•å‘的问题。
DevOpsç»å¸¸è¢«æè¿°ä¸ºâ€œå¼€å‘团队与è¿è¥å›¢é˜Ÿä¹‹é—´æ›´å…·åä½œæ€§ã€æ›´é«˜æ•ˆçš„关系â€ã€‚由于团队间å作关系的改善,整个组织的效率因此得到æå‡ï¼Œä¼´éšé¢‘ç¹å˜åŒ–而æ¥çš„生产环境的风险也能得到é™ä½Žã€‚
DevOps对应用程åºå‘布的影å“
在很多ä¼ä¸šä¸­ï¼Œåº”用程åºå‘布是一项涉åŠå¤šä¸ªå›¢é˜Ÿã€åŽ‹åŠ›å¾ˆå¤§ã€é£Žé™©å¾ˆé«˜çš„æ´»åŠ¨ã€‚ç„¶è€Œåœ¨å…·å¤‡DevOps能力的组织中,应用程åºå‘布的风险很低,原因如下:

ä¸Žä¼ ç»Ÿå¼€å‘æ–¹æ³•é‚£ç§å¤§è§„模的ã€ä¸é¢‘ç¹çš„å‘å¸ƒï¼ˆé€šå¸¸ä»¥â€œå­£åº¦â€æˆ–“年â€ä¸ºå•ä½ï¼‰ç›¸æ¯”ï¼Œæ•æ·æ–¹æ³•大大æå‡äº†å‘å¸ƒé¢‘çŽ‡ï¼ˆé€šå¸¸ä»¥â€œå¤©â€æˆ–“周â€ä¸ºå•ä½ï¼‰
å‡å°‘å˜æ›´èŒƒå›´
与传统的瀑布å¼å¼€å‘æ¨¡åž‹ç›¸æ¯”ï¼Œé‡‡ç”¨æ•æ·å¼€å‘或迭代å¼å¼€å‘æ„å‘³ç€æ›´é¢‘ç¹çš„å‘å¸ƒã€æ¯æ¬¡å‘布包å«çš„å˜åŒ–更少。由于部署ç»å¸¸è¿›è¡Œï¼Œå› æ­¤æ¯æ¬¡éƒ¨ç½²ä¸ä¼šå¯¹ç”Ÿäº§ç³»ç»Ÿé€ æˆå·¨å¤§å½±å“,应用程åºä¼šä»¥å¹³æ»‘çš„é€ŸçŽ‡é€æ¸ç”Ÿé•¿ã€‚
加强å‘布åè°ƒ
é å¼ºæœ‰åŠ›çš„å‘布å调人æ¥å¼¥åˆå¼€å‘与è¿è¥ä¹‹é—´çš„æŠ€èƒ½é¸¿æ²Ÿå’Œæ²Ÿé€šé¸¿æ²Ÿï¼›é‡‡ç”¨ç”µå­æ•°æ®è¡¨ã€ç”µè¯ä¼šè®®ã€å³æ—¶æ¶ˆæ¯ã€ä¼ä¸šé—¨æˆ·ï¼ˆwikiã€sharepoint)等å作工具æ¥ç¡®ä¿æ‰€æœ‰ç›¸å…³äººå‘˜ç†è§£å˜æ›´çš„内容并全力åˆä½œã€‚
自动化
强大的部署自动化手段确ä¿éƒ¨ç½²ä»»åŠ¡çš„å¯é‡å¤æ€§ã€å‡å°‘部署出错的å¯èƒ½æ€§ã€‚

现状
很多组织将开å‘和和系统管ç†åˆ’分æˆä¸åŒçš„部门。开å‘部门的驱动力通常是“频ç¹äº¤ä»˜æ–°ç‰¹æ€§â€ï¼Œè€Œè¿è¥éƒ¨é—¨åˆ™æ›´å…³æ³¨ITæœåŠ¡çš„å¯é æ€§å’ŒITæˆæœ¬æŠ•入的效率。两者目标的ä¸åŒ¹é…,就在开å‘与è¿è¥éƒ¨é—¨ä¹‹é—´é€ æˆäº†é¸¿æ²Ÿï¼Œä»Žè€Œå‡æ…¢äº†IT交付业务价值的速度。
• 开å‘人员ç»å¸¸ä¸è€ƒè™‘自己写的代ç ä¼šå¯¹è¿è¥é€ æˆä»€ä¹ˆå½±å“。他们在交付代ç ä¹‹å‰ï¼Œå¹¶ä¸é‚€è¯·è¿è¥äººå‘˜å‚与架构决策或代ç è¯„审。
• 开å‘人员对é…置或环境进行修改之åŽï¼Œç»å¸¸æ²¡æœ‰åŠæ—¶ä¸Žè¿è¥äººå‘˜æ²Ÿé€šï¼Œå¯¼è‡´æ–°çš„代ç ä¸èƒ½è¿è¡Œã€‚
o 开å‘人员在自己的机器上手工修改é…置,而没有记录所有需è¦çš„æ­¥éª¤ã€‚想找到必è¦çš„é…ç½®å‚æ•°ï¼Œé€šå¸¸éœ€è¦å°è¯•很多ä¸åŒçš„傿•°ï¼›åœ¨å¾—到一个å¯å·¥ä½œçš„状æ€åŽï¼Œå¾€å¾€å¾ˆéš¾è¯†åˆ«å‡ºé€šè¿‡å“ªäº›æœ€å°æ­¥éª¤å°±èƒ½åˆ°è¾¾è¯¥çжæ€ã€‚
o 开å‘人员倾å‘于使用有利于快速开å‘的工具:对代ç ä¿®æ”¹æ›´å¿«çš„å馈,更低的内存消耗,等等。这样的工具集与è¿è¥äººå‘˜é¢å¯¹çš„目标è¿è¡Œæ—¶çŽ¯å¢ƒéžå¸¸ä¸åŒï¼šåŽè€…å¯¹ç¨³å®šæ€§å’Œæ€§èƒ½çš„è¦æ±‚è¿œèƒœäºŽçµæ´»æ€§ã€‚
o 由于开å‘人员平时使用桌é¢ç”µè„‘,他们倾å‘于使用为桌é¢ç”¨æˆ·ä¼˜åŒ–çš„æ“作系统。生产环境的è¿è¡Œæ—¶ç³»ç»Ÿé€šå¸¸éƒ½è¿è¡ŒæœåС噍æ“作系统上。
o 在开å‘过程中,系统在开å‘者的本地机器上è¿è¡Œã€‚在è¿è¥è¿‡ç¨‹ä¸­ï¼Œç³»ç»Ÿç»å¸¸åˆ†å¸ƒåœ¨å¤šå°æœåŠ¡å™¨ä¸Šï¼Œä¾‹å¦‚webæœåС噍ã€åº”用æœåŠ¡å™¨ã€æ•°æ®åº“æœåŠ¡å™¨ç­‰ç­‰ã€‚
â€¢Â å¼€å‘æ˜¯ç”±åŠŸèƒ½æ€§éœ€æ±‚ï¼ˆé€šå¸¸ä¸Žä¸šåŠ¡éœ€æ±‚ç›´æŽ¥ç›¸å…³ï¼‰é©±åŠ¨çš„ã€‚
• è¿è¥æ˜¯ç”±éžåŠŸèƒ½æ€§éœ€æ±‚ï¼ˆä¾‹å¦‚å¯èŽ·å¾—æ€§ã€å¯é æ€§ã€æ€§èƒ½ç­‰ï¼‰é©±åŠ¨çš„ã€‚
o è¿è¥äººå‘˜å¸Œæœ›å°½é‡é¿å…修改功能,从而é™ä½Žæ»¡è¶³éžåŠŸèƒ½æ€§éœ€æ±‚çš„é£Žé™©
o 如果拒ç»äº†å°çš„修改,但给定时间段内需è¦ä¿®æ”¹çš„æ€»é‡ä¸å˜ï¼Œé‚£ä¹ˆæ¯æ¬¡å˜æ›´çš„规模就会å˜å¤§
oÂ å˜æ›´è§„模越大,风险也越大,因为其中涉åŠçš„区域越多
• 由于è¿è¥äººå‘˜å°è¯•é¿å…å˜æ›´ï¼Œæ–°åŠŸèƒ½æµå…¥ç”Ÿäº§çŽ¯å¢ƒçš„é€Ÿåº¦å› æ­¤è¢«å»¶ç¼“ï¼Œä»Žè€Œå»¶ç¼“äº†å¼€å‘人员将特性交付给用户使用的速度。
• è¿è¥äººå‘˜å¯èƒ½å¯¹åº”用程åºå†…部缺ä¹äº†è§£ï¼Œä»Žè€Œéš¾ä»¥æ­£ç¡®åœ°é€‰æ‹©è¿è¡Œæ—¶çŽ¯å¢ƒå’Œå‘布æµç¨‹ã€‚
• 开å‘人员å¯èƒ½å¯¹è¿è¡Œæ—¶çŽ¯å¢ƒç¼ºä¹äº†è§£ï¼Œä»Žè€Œéš¾ä»¥æ­£ç¡®åœ°å¯¹ä»£ç è¿›è¡Œè°ƒæ•´ã€‚
诉求
• 更å°ã€æ›´é¢‘ç¹çš„å˜æ›´â”€â”€æ„å‘³ç€æ›´å°‘的风险
• 让开å‘人员更多地控制生产环境
• 更多地以应用程åºä¸ºä¸­å¿ƒæ¥ç†è§£åŸºç¡€è®¾æ–½
â€¢Â å®šä¹‰ç®€æ´æ˜Žäº†çš„æµç¨‹
• 尽å¯èƒ½åœ°è‡ªåŠ¨åŒ–
• 促æˆå¼€å‘与è¿è¥çš„å作
一般而言,当ä¼ä¸šå¸Œæœ›å°†åŽŸæœ¬ç¬¨é‡çš„å¼€å‘与è¿è¥ä¹‹é—´çš„工作移交过程å˜å¾—æµç•…æ— ç¢ï¼Œä»–们通常会é‡åˆ°ä»¥ä¸‹ä¸‰ç±»é—®é¢˜ï¼š
å‘布管ç†é—®é¢˜
很多ä¼ä¸šæœ‰å‘布管ç†é—®é¢˜ã€‚ä»–ä»¬éœ€è¦æ›´å¥½çš„å‘å¸ƒè®¡åˆ’æ–¹æ³•ï¼Œè€Œä¸æ­¢æ˜¯ä¸€ä»½å…±äº«çš„ç”µå­æ•°æ®è¡¨ã€‚ä»–ä»¬éœ€è¦æ¸…晰了解å‘布的风险ã€ä¾èµ–ã€å„é˜¶æ®µçš„å…¥å£æ¡ä»¶ï¼Œå¹¶ç¡®ä¿å„个角色éµå®ˆæ—¢å®šæµç¨‹è¡Œäº‹ã€‚
å‘布/部署å调问题
有å‘布/部署å调问题的团队需è¦å…³æ³¨å‘布/éƒ¨ç½²è¿‡ç¨‹ä¸­çš„æ‰§è¡Œã€‚ä»–ä»¬éœ€è¦æ›´å¥½åœ°è·Ÿè¸ªå‘布状æ€ã€æ›´å¿«åœ°å°†é—®é¢˜ä¸Šå‡ã€ä¸¥æ ¼æ‰§è¡Œæµç¨‹æŽ§åˆ¶å’Œç»†ç²’度的报表。
å‘布/部署自动化问题
这些ä¼ä¸šé€šå¸¸æœ‰ä¸€äº›è‡ªåŠ¨åŒ–å·¥å…·ï¼Œä½†ä»–ä»¬è¿˜éœ€è¦ä»¥æ›´çµæ´»çš„æ–¹å¼æ¥ç®¡ç†å’Œé©±åŠ¨è‡ªåŠ¨åŒ–å·¥ä½œâ”€â”€ä¸å¿…è¦å°†æ‰€æœ‰æ‰‹å·¥æ“ä½œéƒ½åœ¨å‘½ä»¤è¡Œä¸­åŠ ä»¥è‡ªåŠ¨åŒ–ã€‚ç†æƒ³æƒ…况下,自动化工具应该能够在éžç”Ÿäº§çŽ¯å¢ƒä¸‹ç”±éžè¿è¥äººå‘˜ä½¿ç”¨ã€‚
è¦å¼€å§‹ä¼˜åŒ–å‘布æµç¨‹ï¼Œå¯ä»¥ä»Žé—®é¢˜è¯†åˆ«å¼€å§‹ï¼šçœ‹çœ‹ä¸Šé¢æåˆ°çš„哪ç§é—®é¢˜åœ¨ä½ çš„团队中具有最高的优先级。
å‘布å调人
这是ä¼ä¸šçº§IT组织中一个新出现的角色,其主è¦ä»»åŠ¡å°±æ˜¯å调安排将ä¼ä¸šçº§è½¯ä»¶éƒ¨ç½²åˆ°é¢„生产环境。对å‘布å调人的需求æ¥è‡ªäºŽä»¥ä¸‹å‡ æ–¹é¢åŽŸå› ï¼š
1. 需è¦å¼¥åˆå¼€å‘与è¿è¥çš„鸿沟
2. 基础设施日益å˜å¾—夿‚:为了è¿è¥web应用,需è¦å¤šå±‚基础设施和多ç§å¹³å°
3. å‘布频率上å‡ï¼ˆç”±äºŽæ•æ·å¼€å‘和迭代å¼å¼€å‘的引入)
4. 分布å¼å›¢é˜Ÿï¼šä½äºŽå…¨çƒå¤šä¸ªåœ°ç‚¹çš„ã€åŒ…å«å¤–åŒ…äººå‘˜çš„ã€æ··åˆå¼€å‘/测试/基础设施的团队
å‘布å调人的角色(也被称为部署å调人或集æˆå调人)æºè‡ªå‘å¸ƒç®¡ç†æˆ–å‘布工程团队。这个角色与航空交通管制有些类似──实时åè°ƒä¸åŒå›¢é˜Ÿçš„行动,有效使用共享的资æºï¼ˆç©ºåŸŸã€èˆªé“ã€è·‘é“ã€èˆªç«™é—¨ï¼‰ï¼Œè¾¾åˆ°ç»„织的总体目标(安全起é™ï¼‰ã€‚
传统æ„义上的å‘布管ç†å¾€å¾€åªå…³æ³¨è½¯ä»¶å˜æ›´çš„计划与管ç†ï¼Œå‘布åè°ƒåˆ™éœ€è¦æŽ§åˆ¶â€œå°†ç‰¹å®šè½¯ä»¶å˜æ›´å‘布至生产环境â€çš„æ•´ä¸ªè¿‡ç¨‹ã€‚这项工作需è¦ç³»ç»Ÿåœ°ç®¡ç†æ‰€æœ‰ä¸Žâ€œå°†ä»£ç æž„建并部署到生产环境â€ç›¸å…³çš„æŠ€æœ¯ä»»åŠ¡ï¼Œä¹Ÿè¢«ç§°ä¸ºâ€œå‘布工程â€ã€‚
å˜æ›´ç®¡ç†æ˜¯è·Ÿè¸ªä¼ä¸šIT环境中å„ç§å˜åŒ–──ä¸ç®¡æ˜¯åº”用程åºè¿˜æ˜¯åŸºç¡€è®¾æ–½çš„å˜åŒ–â”€â”€çš„åŸºæœ¬åŽŸåˆ™ã€‚å˜æ›´ç®¡ç†æ˜¯ITIL v3的核心之一。

关键è¯ï¼šæ•æ·å¼€å‘,DevOps

什么是精益创业

精益创业

概念

精益创业(Lean Startup)是硅谷æµè¡Œçš„一ç§åˆ›æ–°æ–¹æ³•è®ºã€‚å®ƒçš„æ ¸å¿ƒæ€æƒ³æ˜¯ï¼Œå…ˆåœ¨å¸‚场中投入一个æžç®€çš„原型产å“,然åŽé€šè¿‡ä¸æ–­çš„学习和有价值的用户å馈,对产å“进行快速迭代优化,以期适应市场。

ç”±æ¥

精益创业(Lean Startup)由硅谷创业家Eric Rise2012å¹´8月在其著作《精益创业》一书中首度æå‡ºã€‚ä½†å…¶æ ¸å¿ƒæ€æƒ³å—到了å¦ä¸€ä½ç¡…谷创业专家Steve Garry Blank的《四步创业法》中“客户开å‘â€æ–¹å¼çš„很大影å“,åŽè€…也为精益创业æä¾›äº†å¾ˆå¤šç²¾å½©æŒ‡ç‚¹å’Œæ¡ˆä¾‹ã€‚

很多IT从业人员在了解精益创业åŽè®¤ä¸ºï¼Œå…¶æ ¸å¿ƒç†å¿µå¯ä»¥è¿½æº¯åˆ°è½¯ä»¶è¡Œä¸šçš„æ•æ·å¼€å‘管ç†ã€‚例如“最å°å¯ç”¨å“â€ä¸Žâ€œåŽŸåž‹å»ºæ¨¡â€éžå¸¸ç›¸ä¼¼ï¼Œéƒ½è¿½æ±‚å¿«é€Ÿçš„ç‰ˆæœ¬è¿­ä»£ï¼Œä»¥åŠæ—¶åˆ»ä¿æŒä¸Žå®¢æˆ·çš„æŽ¥è§¦å¹¶èŽ·å¾—å馈等等,精益创业å¯ä»¥ç†è§£ä¸ºæ•æ·å¼€å‘模å¼çš„一ç§å»¶ç»­ã€‚

三大法å®ç¼–辑

从《精益创业》一书中æåˆ°çš„ä¸»è¦æ€è·¯å’Œè„‰ç»œï¼Œç»“åˆåœ¨çŽ°å®žä¸­ä½¿ç”¨çš„é¢‘çŽ‡ï¼Œç²¾ç›Šåˆ›ä¸šæåˆ°çš„三个主è¦å·¥å…·æ˜¯ï¼šâ€œæœ€å°å¯ç”¨å“â€ã€â€œå®¢æˆ·å馈â€ã€â€œå¿«é€Ÿè¿­ä»£â€ã€‚

最å°å¯ç”¨å“–是指将创业者或者新产å“的创æ„用最简æ´çš„æ–¹å¼å¼€å‘出æ¥ï¼Œå¯èƒ½æ˜¯äº§å“界é¢ï¼Œä¹Ÿå¯ä»¥æ˜¯èƒ½å¤Ÿäº¤äº’æ“作的胚胎原型。它的好处是能够直观的被客户感知到,有助于激å‘客户的æ„è§ã€‚通常最å°å¯ç”¨å“有四个特点:体现了项目创æ„ã€èƒ½å¤Ÿæµ‹è¯•和演示ã€åŠŸèƒ½æžç®€ã€å¼€å‘æˆæœ¬æœ€ä½Žç”šè‡³æ˜¯é›¶æˆæœ¬ã€‚

客户å馈–是指通过直接或间接的方å¼ï¼Œä»Žæœ€ç»ˆç”¨æˆ·é‚£é‡ŒèŽ·å–针对该产å“çš„æ„è§ã€‚通过客户å馈渠é“了解关键信æ¯ï¼ŒåŒ…括:客户对产å“的整体感觉ã€å®¢æˆ·å¹¶ä¸å–œæ¬¢/å¹¶ä¸éœ€è¦çš„功能点ã€å®¢æˆ·è®¤ä¸ºéœ€è¦æ·»åŠ çš„æ–°åŠŸèƒ½ç‚¹ã€å®¢æˆ·è®¤ä¸ºæŸäº›åŠŸèƒ½ç‚¹åº”è¯¥æ”¹å˜çš„实现方å¼ç­‰ï¼›èŽ·å¾—å®¢æˆ·å馈的方å¼ä¸»è¦æ˜¯çŽ°åœºä½¿ç”¨ã€å®žåœ°è§‚察。对于精益创业者而言,一切活动都是围绕客户而进行,产å“å¼€å‘中的所有决策æƒéƒ½äº¤ç»™ç”¨æˆ·ï¼Œå› æ­¤ï¼Œå¦‚果没有足够多的客户å馈,就ä¸èƒ½ç§°ä¸ºç²¾ç›Šåˆ›ä¸šã€‚

快速迭代–是针对客户å馈æ„è§ä»¥æœ€å¿«çš„速度进行调整,èžåˆåˆ°æ–°çš„版本中。对于互è”ç½‘æ—¶ä»£è€Œè¨€ï¼Œé€Ÿåº¦æ¯”è´¨é‡æ›´é‡è¦ï¼Œå®¢æˆ·éœ€æ±‚快速å˜åŒ–,因此,ä¸è¿½æ±‚一次性满足客户的需求,而是通过一次åˆä¸€æ¬¡çš„è¿­ä»£ä¸æ–­è®©äº§å“的功能丰满。所以,æ‰ä¼šæœ‰å¾®ä¿¡åœ¨ç¬¬ä¸€å¹´å‘布了15个版本,扣扣ä¿é•–3周上线的记录。

常用方法编辑

1. 精简å¼å馈

å¤§å¤šæ•°å›¢é˜Ÿè®¤ä¸ºï¼Œåªæœ‰å¼€å‘出一个功能完整ã€çœ‹èµ·æ¥å¾ˆç¾Žè§‚的界é¢ä¹‹åŽï¼Œæ‰èƒ½å°†å…¶å±•示给客户以获得åé¦ˆã€‚äº‹å®žè¯æ˜Žï¼Œåªè¦å°†ä¸€äº›ç®€å•的模型功能组织在一起,并æä¾›å¯ç‚¹å‡»çš„åŒºåŸŸï¼ŒåŒæ ·å¯ä»¥èŽ·å¾—æœ‰ä»·å€¼çš„å馈。事实åå¤è¯æ˜Žï¼Œæ¶ˆè´¹è€…å分愿æ„与这些å¯ç‚¹å‡»çš„功能互动,就好åƒå®ƒä»¬æ˜¯æœ€ç»ˆçš„产å“。这å¯ä»¥å¸®åŠ©åˆ›ä¸šå…¬å¸äº†è§£å…¶è®¾è®¡æ˜¯å¦æœ‰æ•ˆï¼Œåœ¨çœŸæ­£è¿›è¡Œå¤§è§„模开å‘工程之å‰ï¼Œè¿™æ˜¯ä¸€ä¸ªå分伟大的方法。

2. 客户采访

ä¸è¦é—­é—¨é€ è½¦ï¼Œè€Œè¦é€šè¿‡æ”¶é›†æ•°æ®æ¥æ”¯æŒäº§å“设计。具体而言,è¦èµ°å‡ºåŽ»ï¼Œæ‰¾åˆ°è‡ªå·±äº§å“çš„æ½œåœ¨å®¢æˆ·ï¼Œé€šè¿‡ä¸Žä»–ä»¬äº¤æµæ¥æ‰¾åˆ°è§£å†³é—®é¢˜çš„答案。对于该方法,开å‘者也许已ç»å¬è¿‡ä¸Šç™¾æ¬¡äº†ï¼Œå¹¶ä¸”也认å¯ï¼Œä½†è¦çœŸæ­£æŠŠå®ƒåŸ¹å…»æˆä¹ æƒ¯å¹¶ä¸å®¹æ˜“。

3. 以å°è§å¤§

è¦æƒ³è¿…速了解消费者是å¦å–œæ¬¢ä¸€é¡¹æ–°åŠŸèƒ½ï¼Œåªéœ€é€šè¿‡æŽ¨å‡ºè¯¥åŠŸèƒ½çš„ä¸€å°éƒ¨åˆ†å³å¯ã€‚产å“定制创业公å¸CustomMade就是如此,开å‘者希望让访问者借鉴他人的项目æ¥èŽ·å¾—çµæ„Ÿã€‚但没有必è¦è´¹åŠ›åœ°å¼€å‘出整个功能,因此仅推出了第一个按钮。当开å‘者看到大é‡è®¿é—®è€…点击该按钮时,就知é“应该把这一功能继续完æˆã€‚ç»è¿‡è°ƒæ•´å’Œä¼˜åŒ–,用户互动明显æå‡ã€‚

4. 判断

å¼€å‘者å¯ä»¥å°†ç«žäº‰å¯¹æ‰‹çš„产å“看作是一个å…费的原型。观察消费者如何使用这些产å“,他们喜欢哪些功能,哪些功能用ä¸åˆ°ï¼Œç”šè‡³ä»¤äººåŽŒæ¶ã€‚了解这些,开å‘者在进行产å“设计ã€è¥é”€å’Œé”€å”®æ—¶å°±ä¼šåšå‡ºæ›´å¥½çš„决定。

5. 微调查

精益创业人士需è¦ä½¿ç”¨ä¸€é¡¹æœ‰æ•ˆçš„调查模å¼ï¼Œå°½é‡è®©è°ƒæŸ¥ä¸Žå½“å‰çš„研究内容紧密结åˆã€‚例如,如果想知é“顾客为何选择ä¼ä¸šçš„一项定价计划,就å¯ä»¥ç»™å‡ºä¸€ä¸ªå°çš„弹出å¼è°ƒæŸ¥é—®å·ï¼Œè€Œä¸æ˜¯å¯èƒ½éœ€è¦å‡ å¤©åŽæ‰èƒ½çœ‹åˆ°çš„电å­é‚®ä»¶ã€‚

此外,阅读100个简短的用户å馈获得的内容远比知é“32%的人选“Bâ€æ›´å¤šã€‚

6. 真正数æ®åŽŸåž‹

当为优惠券网站RetailMeNotè®¾è®¡ä¼˜æƒ åˆ¸é¡µé¢æ—¶ï¼Œè®¾è®¡è€…需è¦çœŸæ­£çš„ä¼˜æƒ åˆ¸æ•°æ®æ¥è¯„估设计。设计者花费了两天时间æ¥åˆ›å»ºåŽŸåž‹ï¼Œå°½ç®¡è¿˜æœ‰ä¸å°‘问题,也ä¸å…·å¤‡å¤ªå¤šåŠŸèƒ½ï¼Œä½†å´å¯ä»¥ä»Žæ¶ˆè´¹è€…那里获得许多有价值的å馈。

å馈å‘现,最åˆçº¦50%的想法ä¸åˆç†ã€‚åŽæ¥åˆé‡å¤äº†ä¸‰æ¬¡ï¼Œå»ºç«‹åŽŸåž‹å¹¶å±•ç¤ºç»™æ¶ˆè´¹è€…ï¼Œæœ€ç»ˆä½¿åˆ›æ–°çš„è®¾è®¡æ›´å…·å¯ç”¨æ€§ï¼Œç‚¹å…¥çŽ‡æ˜¾è‘—æå‡ã€‚

7. 实地考察

最åˆï¼ŒæŸä¸ªé¡¹ç›®ç»„与Foundation Medicineåˆä½œæ¥å®Œå–„其临床肿瘤基因组学报告。因此项目组决定å‚è§‚ä¸€ä¸‹è‚¿ç˜¤ä¸­å¿ƒï¼Œè§‚å¯ŸåŒ»ç”Ÿæ˜¯å¦‚ä½•ä½¿ç”¨æŠ¥å‘Šçš„ã€‚åŽæ¥å‘çŽ°ï¼Œä»–ä»¬åŠªåŠ›è®¾è®¡å‡ºçš„æŠ¥å‘Šé€šå¸¸æ˜¯é€šè¿‡ä¼ çœŸæ¥æŽ¥æ”¶çš„ï¼Œå°å­—体很难看清,å„ç§é¢œè‰²ä¿¡æ¯ä¹Ÿæ˜¯å¤šä½™çš„。尽管这是一个很容易解决的问题,但åªè¦åˆ°äº†çŽ°åœºæ‰èƒ½å‘现问题。

优点编辑

一是快速,精益创业模å¼ä¸‹ï¼Œæ‰€æœ‰çš„创新行为和想法都必须在最短的时间呈现出æ¥ï¼ŒæŠ›å¼ƒä¸€åˆ‡æš‚ä¸é‡è¦å…¶ä»–功能,把æžç®€çš„功能展现给客户,无论æˆåŠŸæˆ–å¤±è´¥ï¼Œéƒ½èƒ½å¤Ÿä»¥æœ€å¿«çš„é€Ÿåº¦çŸ¥é“结果。

äºŒæ˜¯ä½Žæˆæœ¬ï¼Œè¿‡å¾€â€œå年磨一剑â€å¼çš„长期研å‘ï¼Œå…¶æœ€ç»ˆæˆæžœæŽ¨å‡ºåŽï¼Œæœ‰å¯èƒ½å‘现花费了大é‡äººåŠ›ã€ç‰©åŠ›å’Œæ—¶é—´æ‰€å¼€å‘出的产å“ï¼Œå¹¶ä¸æ˜¯å®¢æˆ·æ‰€éœ€è¦çš„。这ç§å·¨å¤§çš„æµªè´¹é™¤äº†ä¼šç»™åˆ›ä¸šè€…ã€ä¼ä¸šå¸¦æ¥ç»å¤§çš„ç»æµŽæŸå¤±ä¹‹å¤–,还对团队的士气形æˆå·¨å¤§æ‰“击,ä¸å°‘团队æˆå‘˜ä¼šçº·çº·å‡ºèµ°ã€‚而精益创业所采用的“频ç¹éªŒè¯å¹¶ä¿®æ”¹â€çš„策略,确ä¿ä¸ä¼šåœ¨å®¢æˆ·è®¤å¯ä¹‹å‰æŠ•å…¥è¿‡é«˜çš„æˆæœ¬ã€‚

三是高æˆåŠŸçŽ‡ï¼Œè™½ç„¶åˆ›æ–°å……æ»¡é£Žé™©ï¼ŒæˆåŠŸç³»æ•°ä½Žï¼Œä½†ä¹Ÿä¸æ˜¯æ²¡æœ‰å¥—è·¯å¯éµå¾ªã€‚按照精益创业的模å¼ï¼Œä»Žâ€œæœ€å°å¯ç”¨å“â€å‡ºå‘,过程中æ¯ä¸€æ¬¡è¿­ä»£éƒ½å¯ä»¥å¯»æ‰¾å®¢æˆ·è¿›è¡Œè¯•用,了解客户对产å“的看法,寻找产å“çš„ä¸è¶³å’Œå®¢æˆ·å¸Œæœ›å¢žåŠ ä¹ƒè‡³ä¿®æ”¹çš„åŠŸèƒ½ç‚¹ã€‚å½“ä¸€è·¯ä¸ŠæŒç»­éµå¾ªå®¢æˆ·çš„æ„è§è¿›è¡Œå¼€å‘åŽï¼Œé¡¹ç›®ç»„çš„ä¸æ–­çº åçš„æˆæžœå°±æ˜¯äº§å“è¶Šæ¥è¶Šç¬¦åˆå®¢æˆ·æƒ³è¦çš„æ•ˆæžœï¼Œè€Œä¸æ˜¯å¼€å‘团队闭门想象的样å­ã€‚通过æŒç»­çš„“测试–调整â€ä»¥åŠå¿«é€Ÿè¿­ä»£ï¼Œåˆ›æ–°çš„æˆåŠŸçŽ‡èƒ½å¤Ÿå¤§å¤§æå‡ã€‚

适用范围编辑

ç²¾ç›Šåˆ›ä¸šæ¥æºäºŽäº’è”网行业,是软件开å‘çš„ä¸€ç§æ–°æ¨¡å¼ã€‚但其背åŽçš„“客户验è¯â€æ€æƒ³åœ¨å¤§é‡éžITé¢†åŸŸå¾—åˆ°åº”ç”¨ã€‚ä¾‹å¦‚ç¾Žå‰§çš„æ‹æ‘„ï¼Œå¾€å¾€éƒ½ä¼šå…ˆæ‹æ‘„一部几å分钟的先导片,交代主è¦çš„人物关系ã€çŸ›ç›¾å†²çªã€æ•…事背景,然åŽé‚€è¯·å‡ åä½è§‚ä¼—å‚加å°è§„æ¨¡è¯•æ˜ ä¼šï¼Œå†æ ¹æ®è§‚ä¼—çš„å馈æ¥å†³å®šå‰§æƒ…è¦ä½œé‚£äº›ä¿®æ”¹ï¼Œæ˜¯å¦éœ€è¦è°ƒæ•´æ¼”员,以åŠå†³å®šæ˜¯å¦æŠ•æ‹ã€‚在æ¯ä¸€å­£ç»“æŸæ—¶ï¼Œåˆ¶ä½œæ–¹åˆä¼šæ ¹æ®æ”¶è§†çŽ‡å’Œè§‚ä¼—æ„è§ï¼Œå†³ç­–æ˜¯ç æŽ‰è¯¥å‰§è¿˜æ˜¯è®¢è´­æ–°ä¸€å­£å†…å®¹ã€‚è¿™ç§å‘¨æ‹å­£æ’­çš„æ¨¡å¼ï¼ŒæŠŠæ‰€æœ‰çš„决策æƒäº¤ç»™è§‚众,让制作方的投资以åŠå¤±è´¥æˆæœ¬é™åˆ°äº†æœ€ä½Žï¼Œæ˜¯ä¸€ç§å…¸åž‹çš„精益创业方å¼ã€‚

整体而言,精益创业适åˆå®¢æˆ·éœ€æ±‚å˜åŒ–å¿«ã€ä½†å¼€å‘难度ä¸é«˜çš„领域,比如软件ã€ç”µå½±ç”µè§†ã€é‡‘èžæœåŠ¡ç­‰é¢†åŸŸã€‚åœ¨å›½å†…ï¼Œé™¤äº’è”网ä¼ä¸šå¤–,酒店管ç†é¢†åŸŸçš„“今夜酒店特价â€å°±é‡‡ç”¨è¿™ç§å°æ­¥è¯•错的方å¼è¿›è¡Œå¼€å‘,一些传统ä¼ä¸šå¦‚中信银行信用å¡ä¸­å¿ƒåˆ©ç”¨ç²¾ç›Šåˆ›ä¸šè¿›è¡Œä¿¡ç”¨å¡äº§å“åŠå®¢æˆ·æœåŠ¡çš„åˆ›æ–°ï¼Œå¹¶æŠŠä¸‰å¤§æ³•å®å›ºåŒ–åˆ°é¡¹ç›®ç®¡ç†æœºåˆ¶ä¸­ã€‚

由于精益创业需è¦ç»å¸¸è¿›è¡Œå®¢æˆ·éªŒè¯ï¼Œå› æ­¤å¯¹äºŽä¸€äº›å®¢æˆ·éªŒè¯æˆæœ¬è¾ƒé«˜ã€æˆ–者技术实现难度较大的工作并ä¸é€‚åˆã€‚比如大型赛事,æœåŠ¡å®¢æˆ·æ˜¯å…¨ä½“è¿åŠ¨å‘˜ï¼Œä½†æƒ³è¦èŽ·å¾—ä»–ä»¬çš„é¢‘ç¹åé¦ˆæ˜¯æ¯”è¾ƒå›°éš¾çš„ã€‚åˆæ¯”å¦‚èˆªå¤©å·¥ç¨‹ï¼Œå®¢æˆ·éœ€æ±‚æ˜¯æ¯”è¾ƒæ˜Žç¡®ã€æ¸…晰的,主è¦éš¾ç‚¹åœ¨äºŽé£žè¡Œå™¨çš„æŠ€æœ¯å®žçŽ°å’Œå¯¹æŽ¥æŽ§åˆ¶ã€‚

关键è¯ï¼šæ•æ·å¼€å‘,精益创业

Martin Fowlerè°ˆæ•æ·å¼€å‘

Martin Fowlerè°ˆæ•æ·å¼€å‘

æ¯ä¸ªäººéƒ½åœ¨è°ˆè®ºæ•æ·å¼€å‘(Agile Development)。但是,你是å¦é€‰æ‹©äº†æ­£ç¡®çš„æ–¹æ³•å­¦ï¼Ÿä½ æ‰€é€‰çš„æ–¹æ³•æ˜¯å¦æ­£å¸¸è¿è½¬ï¼Ÿä½ æ˜¯å¦åº”该请求顾问的帮助?你应该如何管ç†å¼€å‘的过程?还有,如何修补那些“先天ä¸è¶³â€çš„代ç ï¼Ÿè½»é‡çº§æ–¹æ³•学的大师Martin Fowler 将回答这些问题。

应该问什么?

记者:在寻找适åˆè‡ªå·±å›¢é˜Ÿçš„æ–¹æ³•学时,开å‘ç»ç†åº”è¯¥ææ€Žæ ·çš„问题?

Fowlerï¼šé¦–å…ˆï¼Œä»–ä»¬éœ€è¦ å¯¹è‡ªå·±çš„é¡¹ç›®æœ‰ä¸€ä¸ªå……åˆ†çš„äº†è§£ã€‚ä»–ä»¬éœ€è¦äº†è§£é¡¹ç›®ä¸­ä¸»è¦çš„é£Žé™©ï¼ŒåŒæ—¶åº”该了解ä¼ä¸šçš„æ–‡åŒ–å’Œæ¶‰åŠæ­¤é¡¹ç›®çš„团队æˆå‘˜ã€‚我一直都认为:你应该选择适åˆäºŽå›¢é˜Ÿçš„æ–¹ æ³•å­¦ï¼Œè€Œä¸æ˜¯ç›¸åã€‚å®žé™…ä¸Šï¼Œâ€œæ•æ·å®£è¨€â€çš„主è¦è§„åˆ™ä¹‹ä¸€å°±æ˜¯ï¼šä¸ªäººä¹‹é—´çš„äº¤æµæ¯”过程ã€å·¥å…·æ›´é‡è¦ã€‚团队中的个人以åŠè¿™äº›ä¸ªäººååŒå·¥ä½œçš„æ–¹å¼ï¼Œè¿™æ˜¯é¡¹ç›®æˆåŠŸ 的一个é‡è¦å› ç´ ï¼Œæ¯”对过程和工具的选择è¦é‡è¦å¾—多。

记者:回到å‰é¢é‚£ä¸ªé—®é¢˜ã€‚第一件应该问的就是:“你所åšçš„æ˜¯ä»€ä¹ˆé¡¹ç›®ï¼Ÿâ€æ˜¯è¿™æ ·å—?

Fowler:准确地说,应该 是“你所åšçš„æ˜¯ä»€ä¹ˆç±»åž‹çš„项目â€ã€‚涉åŠä¸Šç™¾äººçš„èˆªç©ºè½¯ä»¶é¡¹ç›®å’Œåªæ¶‰åŠå…­ä¸ªäººçš„网站项目,它们采用的方法学肯定是ä¸ä¸€æ ·çš„ã€‚æ›¾ç»æœ‰ä¸€ä¸ªäººè·Ÿæˆ‘谈起他的工作。 以å‰ä»–认为由å°å˜å¤§æ˜¯ä¸€ä¸ªå›°éš¾çš„è¿‡ç¨‹ï¼Œä½†æ˜¯åŽæ¥ä»–å‘现由大å˜å°ä¹ŸåŒæ ·å›°éš¾ã€‚大型项目所选择的方法学对于å°åž‹é¡¹ç›®é€šå¸¸å°±ä¸é€‚用了。å¦å¤–,软件产å“的类型也是 å½±å“因素之一。嵌入å¼ç³»ç»Ÿå’Œå•†ç”¨è½¯ä»¶ï¼Œå®ƒä»¬é‡‡ç”¨çš„æ–¹æ³•学肯定也是ä¸åŒçš„——这有一点猜测的æˆåˆ†ï¼Œå› ä¸ºæˆ‘ä»Žæ¥æ²¡æœ‰å¼€å‘过嵌入å¼ç³»ç»Ÿï¼Œåªå¼€å‘过商用软件。

记者:你刚æ‰è¿˜æåˆ°ï¼Œå¼€å‘ç»ç†åº”该了解他们å¯èƒ½é‡åˆ°çš„风险?

Fowler:是的,开å‘ç»ç† 必须知é“哪些因素å¯èƒ½å¯¼è‡´é¡¹ç›®å¤±è´¥ã€‚ä¾‹å¦‚ï¼Œæ•æ·ç¤¾ç¾¤ä¸€ç›´å…³æ³¨çš„一个é‡è¦é—®é¢˜å°±æ˜¯éœ€æ±‚çš„æ˜“å˜æ€§ã€‚如果需求ä¸ç¡®å®šã€æ— æ³•将需求固定在æŸä¸ªåˆç†çš„层é¢ä¸Šï¼Œé‚£ä¹ˆé€‰ æ‹©æ•æ·å¼€å‘方法就会比较åˆé€‚ã€‚ä¼ ç»Ÿçš„è½¯ä»¶å·¥ç¨‹æ–¹æ³•æ€»æ˜¯è¦æ±‚你将需求固定ä½ï¼Œå¹¶ä¸”在åŽç»­è¿‡ç¨‹ä¸­ä¸å†å˜åŒ–ã€‚å› æ­¤ï¼Œéœ€æ±‚çš„æ˜“å˜æ€§å°±ä¼šæˆä¸ºä¸€ä¸ªé‡è¦çš„风险æºã€‚我认为, è¿™ç§é£Žé™©å¯¹äºŽâ€œæ˜¯å¦é€‰æ‹©æ•æ·æ–¹æ³•â€èµ·ç€å†³å®šæ€§çš„作用。

è®°è€…ï¼šä½ åˆšæ‰æåˆ°çš„ç¬¬ä¸‰ç‚¹æ˜¯â€œä¼ä¸šæˆ–者开å‘团队的文化â€ã€‚你好象认为这比方法学本身还è¦é‡è¦ï¼Œä¸ºä»€ä¹ˆï¼Ÿ

Fowler:很明显,如果我 能有一打顶级的程åºå‘˜ï¼Œè€Œä»–们åˆèƒ½å¾ˆå¥½åœ°åˆä½œï¼Œæˆ‘å°±ä¼šè®©ä»–ä»¬è‡ªå·±åŽ»å°½æƒ…å‘æŒ¥ã€‚这时,使用什么过程根本就无所谓,因为他们的天æ‰ä¸€å®šä¼šè®©æˆ‘们胜出。这是我们 这一行中的一个决定性因素:如果优秀的人能很好地åˆä½œï¼Œé‚£ä¹ˆä»–们一定比普通团队åšå¾—更好,因为他们自己就会找到最适åˆä»–们的工作方å¼ã€‚å®žé™…ä¸Šï¼Œè¿™ä¹Ÿæ˜¯æ•æ·å¼€å‘过程中的一个éžå¸¸é‡è¦çš„æ¦‚念。OTI çš„Dave Thomas说,这个世界上有两ç§å¼€å‘者:适åˆä»–的和ä¸é€‚åˆä»–的。他的方法学就是:雇佣那些适åˆä»–的人。这正是OTI 之所以获得æˆåŠŸçš„é‡è¦å› ç´ ä¹‹ä¸€ã€‚

记者:å‡å¦‚你的公å¸é‡Œæ²¡æœ‰ä¸€ä¸ªçœŸæ­£æ„义上的“明星程åºå‘˜â€ï¼Œè€Œåªæœ‰ä¸€äº›ä¸é‚£ä¹ˆå‡ºè‰²çš„ã€éœ€è¦å¤§é‡ç®¡ç†å·¥ä½œæ‰èƒ½ä¿è¯ä»£ç è´¨é‡çš„程åºå‘˜ï¼Œä½ ä¼šæ€Žä¹ˆåŠžå‘¢ï¼Ÿä½ æœ‰ä»€ä¹ˆåŠžæ³•å¼¥è¡¥äººå‘˜ä¸Šçš„ç¼ºæ†¾å—ï¼Ÿæˆ–è€…ä½ è¦æŠŠä»–ä»¬å…¨éƒ½è§£é›‡æŽ‰ï¼Œç„¶åŽå†ä»Žå¤´å¼€å§‹ï¼Ÿ

Fowler:呵呵,如果å¯è¡Œ çš„è¯ï¼Œæˆ‘就会把他们解雇掉,然åŽé‡æ–°é›‡ä¸€æ‰¹èªæ˜Žçš„人æ¥ã€‚ä¸è¿‡ï¼Œè¿™é€šå¸¸éƒ½ä¸å¯è¡Œï¼Œä½ å¿…须充分利用手上的资æºã€‚你必须认识到:å³ä½¿æ²¡æœ‰ä¸€æ‰¹å¤©æ‰ï¼Œåªè¦è®©ä¸€æ‰¹åº¸ æ‰å¾ˆå¥½åœ°åˆä½œï¼Œä¹Ÿèƒ½èŽ·å¾—å¾ˆå¥½çš„æ•ˆæžœã€‚è€Œä½œä¸ºç»ç†ï¼Œä½ åº”该åšçš„就是:给没有良好传统的团队çŒè¾“一个åˆé€‚çš„è¿‡ç¨‹ã€‚åŒæ—¶ï¼Œå¯¹äºŽä¸ªäººèƒ½åŠ›ä¸é‚£ä¹ˆçªå‡ºçš„å›¢é˜Ÿï¼Œæˆ‘ä¼šéž å¸¸é‡è§†æé«˜ä»–们的能力。如果你能æé«˜ä»–们的个人能力,那么你也能获得更多的优势。ä¸è¿‡ï¼Œè¿™å¹¶ä¸æ„å‘³ç€æˆ‘è¦æ”¾å¼ƒè¿‡ç¨‹çš„引入。

记者:现在,开å‘ç»ç†å·²ç»çŸ¥é“自己è¦å¼€å‘的是什么样的项目,也知é“项目的主è¦é£Žé™©æ‰€åœ¨ï¼Œå¯¹ä¼ä¸šæ–‡åŒ–ä¹Ÿæœ‰äº†è¶³å¤Ÿçš„äº†è§£ã€‚é‚£ä¹ˆï¼Œä»–åº”è¯¥å¦‚ä½•å€ŸåŠ©è¿™äº›ä¿¡æ¯æ¥æŒ‡å¯¼ä»–的团队选择正确的方法学呢?

Fowler:在了解了 这些情况之åŽï¼Œå°±åº”该去阅读å„ç§ä¸åŒçš„æ–¹æ³•学,并拿你拥有的这些信æ¯åŽ»å’Œè¿™äº›æ–¹æ³•å­¦çš„çº¦æŸæ¡ä»¶ä½œåŒ¹é…,从中åšä¸€ä¸ªæœ€ä½³é€‰æ‹©ã€‚ç„¶åŽï¼Œè®©ä½ çš„团队实施所选的过 ç¨‹ï¼Œå¹¶åšæŒå‡ ä¸ªæœˆã€‚注æ„ï¼šåº”è¯¥å®Œå…¨æŒ‰ç…§è¿™ç§æ–¹æ³•学所说的去åšï¼Œå“ªæ€•它所说的å¬èµ·æ¥å¹¶ä¸æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,也照ç€å®ƒåŽ»åšã€‚æˆ‘çœ‹åˆ°å¾ˆå¤šäººé€‰æ‹©ä¸€ç§æ–¹æ³•学,å´ä¸ç…§ç€ 它所说的åšã€‚这是一个éžå¸¸ä¸¥é‡çš„问题。比如说,在æžé™ç¼–程(Extreme Programming,XP)的典型情况下,人们会说:“我们想è¦è¿›è¡Œæžé™ç¼–程,ä¸è¿‡ä¸æƒ³é‡‡ç”¨å…¶ä¸­â€˜æµ‹è¯•’那一部分。â€å½“ç„¶äº†ï¼Œå¦‚æžœä½ ä¸æŒ‰ç…§XP çš„è¦æ±‚那样进行严格的测试,整个过程都会失败。因此,你应该根æ®è‡ªå·±çš„ç»éªŒæ¥åˆ¤æ–­å“ªç§æ–¹æ³•学适åˆäºŽä½ ï¼Œç„¶åŽå…¨åŠ›ä»¥èµ´åœ°å®žæ–½å®ƒã€‚è¿™æ˜¯æ•æ·å¼€å‘的一项é‡è¦åŽŸåˆ™ã€‚

何时寻求帮助?

记者:å‡è®¾ä¸€ä¸ªå¼€å‘å›¢é˜Ÿå·²ç»æå‡ºäº†æ°å½“çš„é—®é¢˜ï¼ŒæŒ‘é€‰äº†ä¸€ç§æ–¹æ³•学,并且开始å°è¯•⋯⋯但还是é‡åˆ°äº†å›°éš¾ã€‚å¼€å‘团队应该在什么时候寻求外部的帮助呢?

Fowler(笑):我的公å¸ä»Žäº‹å¤§é‡çš„é¡¾é—®å·¥ä½œï¼Œææ€•我的答案会有个人因素å§ï¼Ÿæ­£å¦‚我å‰é¢è¯´è¿‡çš„,ç»éªŒä¸°å¯Œçš„ã€èªæ˜Žçš„ã€ä¼˜ç§€çš„程åºå‘˜ï¼Œä»–们总是能干出å“è‘—çš„æˆæ•ˆã€‚因此,引进一些好的ç»éªŒå’Œä¸€äº›å¥½çš„建议总是会有所帮助的。

记者:外部的帮助对开å‘团队有什么好处?

Fowler:有几ç§ä¸åŒçš„æ–¹ å¼ã€‚很多干这一行的人采用的都是“导师制â€çš„æ–¹å¼ï¼šä»Žå›¢é˜Ÿä¹‹å¤–带æ¥ä¸€ä¸ªäººï¼Œè®©ä»–ä½œä¸ºæ•´ä¸ªå›¢é˜Ÿçš„å¯¼å¸ˆã€‚è¿™ä¸ªäººè¦æˆä¸ºé¡¹ç›®ç»„的一员,并且确实åšä¸€äº›å¼€å‘工作, 但他的主è¦èŒè´£æ˜¯æŒ‡å¯¼å…¶ä»–人。显然,如果你涉足一个比较新的领域,导师制会是一个ä¸é”™çš„选择。我们在ThoughtWorks 采用的方å¼åˆ™æ˜¯æ‰€è°“的“åˆä½œåˆ¶â€ï¼šå¼€å‘团队中大约1/3 甚至1/2 的人æ¥è‡ªé¡¾é—®æ–¹ã€‚这些人有两件事è¦åšã€‚首先,他们帮助项目获得æˆåŠŸï¼›åŒæ—¶ï¼Œä»–ä»¬è¿˜è¦æ•™ç»™å…¶ä»–人如何工作。åˆä½œåˆ¶çš„好处在于:顾问能更好地ç†è§£å›¢é˜Ÿçš„工作, 团队的æˆå‘˜ä¹Ÿèƒ½èŽ·å¾—æ›´åˆç†çš„æŒ‡å¯¼ï¼Œå¹¶ä»Žä¸­å­¦åˆ°æ›´å¤šçš„东西。

记者:哪些迹象表示团队需è¦å¸®åŠ©å‘¢ï¼Ÿ

Fowler:哦,我是 åšå®šä¸ç§»åœ°ç›¸ä¿¡è¿­ä»£å¼å¼€å‘çš„ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œæˆ‘ä»¬åº”è¯¥åœ¨æ¯æ¬¡è¿­ä»£ç»“æŸæ—¶éƒ½å‘布有商业价值的代ç ã€‚如果你å‘çŽ°æŸæ¬¡è¿­ä»£å‘布的东西ä¸å¤Ÿå¤šï¼Œæˆ–者å‘布的质é‡ä¸å¤Ÿå¥½ï¼Œ 这就æ„味ç€ä½ é‡åˆ°å›°éš¾äº†ã€‚此时,你就应该寻求帮助。的确,迭代å¼å¼€å‘很有价值。比起瀑布å¼å¼€å‘,迭代å¼å¼€å‘能让你更好地跟踪项目的进度。开å‘者å¯ä»¥ç®¡ç†è‡ª å·±å—?

记者:能ä¸èƒ½è®©å¼€å‘者自己管ç†è‡ªå·±ï¼Ÿæˆ–者,在什么时候需è¦ä¸“门让一个人æ¥ç®¡ç†å¼€å‘者?

Fowler:呃,这个 问题的答案å–决于你如何看待“管ç†â€è¿™ä¸ªè¯ã€‚任何一个团队中都有éžå¸¸é‡è¦çš„管ç†è€…:他们帮助人们分工åä½œï¼Œä»–ä»¬ä¿æŒå›¢é˜Ÿä¸­ã€å›¢é˜Ÿä¸Žå¤–部良好的人际关系。这 些东西,从传统角度æ¥çœ‹å¹¶ä¸å±žäºŽâ€œç®¡ç†â€çš„范畴,但这的确是管ç†è€…的责任。为了进入软件开å‘这个行业,你必须有一定的æ‰åŽã€‚我是说,在软件开å‘è€…è¿™ä¸ªåœˆå­ é‡Œï¼Œå“ªæ€•æ¯”è¾ƒå·®çš„é‚£ä¸€éƒ¨åˆ†ï¼Œä»–ä»¬ä¹Ÿæ˜¯ç›¸å½“èªæ˜Žçš„ã€‚åªæœ‰é‚£äº›æ‰åŽæ¨ªæº¢çš„人æ‰å¯èƒ½å‡ºäººå¤´åœ°ã€‚æ‰€ä»¥ï¼Œæˆ‘ä¸€ç›´éƒ½è®¤ä¸ºï¼šè½¯ä»¶å¼€å‘æ˜¯ä¸€é¡¹ä¸“业工作,正如律师ã€åŒ»ç”Ÿçš„å·¥ 作是专业工作一样。而软件开å‘者,他们所åšçš„æ˜¯ä¸“家的工作,也应该得到专家的待é‡ã€‚ä½ ä¸å¯èƒ½è®©ä¸€ä¸ªæ™®é€šè¡Œä¸šçš„管ç†è€…到律师事务所去教这些律师怎么工作,也 ä¸å¯èƒ½è®©ä¸€ä¸ªéžåŒ»å­¦ä¸“ä¸šçš„äººåˆ°è¯Šæ‰€åŽ»æ•™åŒ»ç”Ÿå¦‚ä½•æ²»ç–—ç—…äººã€‚åŒæ ·ï¼Œä½ ä¹Ÿä¸åº”该让一个没有技术背景的人去指挥程åºå‘˜ã€è®¾è®¡å¸ˆä»¬çš„工作细节。因此,管ç†å¾ˆé‡è¦ï¼Œ 但我们所说的这ç§â€œç®¡ç†â€å’Œå¤§å¤šæ•°äººæ‰€ç†è§£çš„“管ç†â€æ ¹æœ¬ä¸æ˜¯ä¸€å›žäº‹ã€‚

记者:那么,管ç†è€…应该åšä»€ä¹ˆå‘¢ï¼Ÿ

Fowler:呃⋯⋯创造一个良好的环境,让所有人能é½å¿ƒå力解决问题。然åŽï¼Œä¿è¯å›¢é˜Ÿæ‰€æœ‰æˆå‘˜éƒ½èƒ½é¡ºç•…地彼此交æµã€‚我è§è¿‡ä¸€ä½éžå¸¸ä¼˜ç§€çš„ç»ç†ï¼Œä»–就很善于促进团队æˆå‘˜ä¹‹é—´çš„交æµã€‚在他的团队中,æ¯ä¸ªäººéƒ½çŸ¥é“项目的进展情况,æˆå‘˜èƒ½å¤Ÿå¾ˆå¥½åœ°å作解决问题。

釿ž„适用于什么地方?

记者:你å¯ä»¥ç®—å¾—ä¸Šæ˜¯â€œé‡æž„之父â€äº†ã€‚釿ž„ä¼¼ä¹Žåœ¨å¾ˆå¤šæ–¹æ³•å­¦ä¸­éƒ½é€‚ç”¨ã€‚ä½ å¯¹äºŽé‡æž„的定义是怎样的?

Fowlerï¼šé‡æž„(refactoringï¼‰æ˜¯è¿™æ ·çš„ä¸€ç§æŠ€æœ¯ï¼šåœ¨ä¸å¯¹ä»£ç çš„功能特å¾ä½œä»»ä½•改å˜çš„å‰æä¸‹ï¼Œä¿®æ”¹çŽ°å­˜ä»£ç çš„结构,以æé«˜è®¾è®¡çš„è´¨é‡ã€‚

è®°è€…ï¼šä½ è®¤ä¸ºé‡æž„适用于开å‘过程的什么地方?

Fowler: äººä»¬é€šå¸¸ä¼šåœ¨ä¸¤ä¸ªåœ°æ–¹ä½¿ç”¨é‡æž„。最显而易è§çš„就是:当你接手一å—设计质é‡ä¸é«˜çš„ä»£ç æ—¶ï¼Œä½ å¯èƒ½æƒ³è¦æ”¹è¿›å®ƒï¼Œå› æ­¤å°±éœ€è¦ä½¿ç”¨é‡æž„。如果代ç çš„设计质é‡å¾ˆç³Ÿ 糕,那么新功能的添加和错误的修å¤éƒ½ä¼šéžå¸¸å›°éš¾ã€‚但是你åˆä¸æ„¿æ„ä»Žå¤´å¼€å§‹é‡æ–°ç¼–写整个软件,因为工作é‡å¤ªå¤§ã€‚è¿™æ—¶ï¼Œé‡æž„就给了你第三ç§é€‰æ‹©ï¼šä½ å¯ä»¥å€ŸåŠ©è¿™ 一系列技术有æ¡ä¸ç´Šåœ°é€æ­¥æ”¹è¿›è½¯ä»¶çš„ç»“æž„ã€‚å¯¹äºŽé‡æž„的第二ç§ç”¨æ³•则是在XP é¡¹ç›®ä¸­çš„é‚£ç§æ–¹å¼ã€‚在进行æžé™ç¼–程时,你会æŒç»­ä¸æ–­åœ°ä½¿ç”¨é‡æž„。æ¯å¤©ä½ éƒ½ä¼šå¯¹è‡ªå·±å†™ä¸‹çš„代ç åšä¸€äº›é‡æž„。所以,æ¯å½“ä½ è¦å¼€å§‹ä¸€ä¸ªæ–°ä»»åŠ¡æ—¶ï¼Œä½ å°±ä¼šçœ‹ç€ä»¥å‰ 的代ç è¯´ï¼šâ€œè¿™äº›ä»£ç èƒ½è®©æˆ‘è½»æ¾åœ°åŠ å…¥è¿™é¡¹æ–°çš„åŠŸèƒ½å—?â€å¦‚æžœä¸è¡Œï¼Œä½ å°±ä¼šé‡æž„它,使得新功能的加入更容易。在努力让测试能够通过的过程中,你å¯èƒ½å¹¶ä¸å¤ª 关心设计的质é‡ï¼Œè€Œåªæ˜¯å…³å¿ƒå¦‚ä½•å®žçŽ°åŠŸèƒ½ï¼›ä½†æ˜¯ï¼Œä¸€æ—¦æµ‹è¯•èƒ½å¤Ÿé¡ºåˆ©é€šè¿‡ï¼Œä½ å°±å¿…é¡»è¿›è¡Œé‡æž„ï¼Œå°†è®¾è®¡è´¨é‡æé«˜ã€‚æ€»ä¹‹ï¼Œåœ¨è¿›è¡Œæžé™ç¼–程时,你会æŒç»­ä¸æ–­åœ°å¯¹ä»£ ç è¿›è¡Œé‡æž„,以ä¿è¯è®¾è®¡è´¨é‡ä¸ä¼šé™ä½Žã€‚å› æ­¤ï¼Œè¿™ç§æ–¹å¼ä¸Žå‰é¢æ‰€è¯´çš„“处ç†é—留代ç â€çš„æ–¹å¼æœ‰æ‰€ä¸åŒã€‚ä¸è¿‡ï¼Œå¦‚果你æˆåŠŸåœ°é€šè¿‡é‡æž„å°†é—留代ç çš„è´¨é‡æå‡åˆ°äº† 一个相当高的标准上,那么你应该会采用XP 的风格进行åŽç»­çš„å¼€å‘。

记者:除了XP ä¹‹å¤–ï¼Œé‡æž„还适用于别的方法学å—?

Fowler: 釿ž„适用于任何方法学。åªè¦ä½ çŽ°æœ‰ä»£ç çš„设计质é‡ä¸åˆä½ çš„è¦æ±‚ï¼Œä½ å°±åº”è¯¥è€ƒè™‘é‡æž„它。ä¸è¿‡ï¼Œå¦‚果有一整套自动化测试的支æŒï¼Œé‚£ä¹ˆé‡æž„会更有ä¿éšœï¼Œå› ä¸ºè‡ªåЍ åŒ–çš„æµ‹è¯•æ˜¯é‡æž„的一个é‡è¦çš„剿æ¡ä»¶ã€‚å¦‚æžœä½ æ— æ³•ä½¿ç”¨è‡ªåŠ¨åŒ–é‡æž„工具的è¯ï¼Œè‡³å°‘è¦æœ‰è‡ªåŠ¨åŒ–çš„æµ‹è¯•ã€‚æœ‰å¾ˆå¤šäººåœ¨ç€‘å¸ƒå¼çš„å¼€å‘中也æˆåŠŸåœ°ä½¿ç”¨äº†é‡æž„ã€‚æ‰€ä»¥ï¼Œåª è¦ä½ å¸Œæœ›æ”¹è¿›ä»£ç çš„è´¨é‡ï¼Œé‡æž„就是值得考虑的技术。

è®°è€…ï¼šæœ‰æ²¡æœ‰å“ªç§æ–¹æ³•å­¦ä¸é¼“åŠ±é‡æž„呢?

Fowler:我想,的确有一些方法学试图é™ä½Žå¯¹é‡æž„的需è¦ã€‚åŸºäºŽå·¥ç¨‹çš„æ–¹æ³•å­¦çš„æ ¸å¿ƒæ€æƒ³å°±æ˜¯ï¼šåœ¨å†™ä»»ä½•一行代ç ä¹‹å‰ï¼Œä½ å¿…é¡»å…ˆå®Œæˆæ•´ä¸ªè®¾è®¡ã€‚è¿™ç§æ€æƒ³è®¤ä¸ºï¼šå¦‚果你的设计åšå¾—正确无误,你就ä¸éœ€è¦é‡æž„,因为代ç è´¨é‡ä¸€å®šæ˜¯éžå¸¸é«˜çš„。当然,实际上很难把设计åšå¾—那么好。

记者:既è¦è®©å¼€å‘è€…æœ‰é‡æž„的自由,åˆä¸èƒ½å¤±å޻坹代ç å’Œé…置的控制,开å‘ç»ç†è¦å¦‚何应对这ç§çŸ›ç›¾å‘¢ï¼Ÿ

Fowler: 釿ž„与代ç çš„æ‰€æœ‰æƒå¹¶ä¸çŸ›ç›¾ã€‚ä¸è¿‡ï¼Œåœ¨é‚£ç§å¼ºè°ƒä»£ç æ‰€æœ‰æƒçš„æ–¹æ³•å­¦ä¸­ï¼Œçš„ç¡®éš¾ä»¥è¿›è¡Œé‡æž„。在我看æ¥ï¼Œä»£ç çš„æ‰€æœ‰æƒå¤§æŠµæœ‰ä¸‰ç§å½¢å¼ï¼šå¼ºæ‰€æœ‰æƒã€å¼±æ‰€æœ‰æƒã€ä»¥ åŠé›†ä½“ä»£ç æ‰€æœ‰æƒã€‚XP é¼“åŠ±çš„æ˜¯é›†ä½“ä»£ç æ‰€æœ‰æƒï¼Œæœ‰äººè®¤ä¸ºè¿™æ˜¯â€œæ²¡æœ‰ä»£ç æ‰€æœ‰æƒâ€ï¼Œä½†å®žé™…上这æ„味ç€â€œæ‰€æœ‰äººæ‹¥æœ‰æ‰€æœ‰ä»£ç â€â€”—任何人都å¯ä»¥åœ¨ä»»ä½•时候修改任何一部分的代ç ã€‚之 æ‰€ä»¥å°†å®ƒç§°ä¸ºâ€œé›†ä½“ä»£ç æ‰€æœ‰æƒâ€è€Œä¸æ˜¯â€œæ— ä»£ç æ‰€æœ‰æƒâ€ï¼Œæ˜¯å› ä¸ºå›¢é˜Ÿä½œä¸ºä¸€ä¸ªæ•´ä½“è´Ÿè´£ä¿è¯æ‰€æœ‰ä»£ç çš„è´¨é‡ï¼Œå› æ­¤ä»£ç å°±æ˜¯é›†ä½“æ‰€æœ‰çš„ã€‚â€œå¼ºä»£ç æ‰€æœ‰æƒâ€åˆ™æ˜¯ å¦ä¸€ä¸ªæžç«¯ï¼šè¿™ç§æ¨¡åž‹å°†ä»£ç åˆ†æˆå‡ å¤§å—,交给æ¯ä¸ªå¼€å‘者一å—,æ¯ä¸ªå¼€å‘者åªèƒ½ä¿®æ”¹è‡ªå·±çš„那一å—代ç ã€‚è€Œåœ¨â€œå¼±ä»£ç æ‰€æœ‰æƒâ€çš„æ¨¡åž‹ä¸­ï¼Œä»ç„¶éœ€è¦å°†ä»£ç åˆ†æˆ å—,并分é…到人,æ¯ä¸ªäººè´Ÿè´£ç¡®ä¿è‡ªå·±é‚£ä¸€éƒ¨åˆ†ä»£ç çš„设计质é‡ã€‚但是,如果有需è¦ï¼Œå…¶ä»–人å¯ä»¥æ¥ä¿®æ”¹ä»–负责的代ç ã€‚这也å¯ä»¥çœ‹ä½œæ˜¯ä¸Žä»£ç çš„æ‹¥æœ‰è€…之间的æŸç§ åˆä½œå…³ç³»ã€‚å¯ä»¥çœ‹å‡ºï¼Œå¼ºä»£ç æ‰€æœ‰æƒçš„开呿¨¡å¼å¹¶æ²¡æœ‰é˜»æ­¢å¼€å‘è€…è¿›è¡Œé‡æž„ï¼Œä½†åœ¨è¿™ç§æ¨¡å¼ä¸‹é‡æž„的确会å˜å¾—困难。一个典型的例å­å°±æ˜¯ç»™æ–¹æ³•改å:你的代ç ä¸­æœ‰ 一个方法,它的åç§°ä¸èƒ½å¾ˆå¥½åœ°æè¿°å®ƒçš„用途,因此你希望将它改å,给它起一个更具有æè¿°èƒ½åŠ›çš„åç§°ã€‚ä½†æ˜¯ï¼Œå¦‚æžœä½ çš„å›¢é˜Ÿé‡‡ç”¨äº†å¼ºä»£ç æ‰€æœ‰æƒçš„开呿¨¡å¼ï¼Œè€Œ ä½ æƒ³è¦æ”¹åçš„åˆæ˜¯ä¸€ä¸ªå…¬å¼€çš„æ–¹æ³•,你就必须费很大的力气æ‰èƒ½å®Œæˆè¿™æ¬¡æ”¹å。因为这个方法å¯èƒ½è¢«å¾ˆå¤šå…¶ä»–的地方调用到,而那些调用它的代ç å¯èƒ½æ˜¯ç”±å…¶ä»–äººæ¥ æ‹¥æœ‰çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须将改å之å‰çš„æ—§æ–¹æ³•æ ‡è®°ä¸ºâ€œä¸æŽ¨è使用â€ï¼Œå¹¶ä½¿å…¶è°ƒç”¨æ”¹ååŽçš„æ–°æ–¹æ³•。这会大大é™ä½Žä½ çš„æ•ˆçŽ‡ï¼Œå¹¶ä¸”è®©ä½ æ„Ÿåˆ°éžå¸¸çƒ¦èºã€‚而在弱 ä»£ç æ‰€æœ‰æƒçš„æ¨¡å¼ä¸‹ï¼Œä½ ä¹Ÿè®¸å°±å®Œå…¨å¯ä»¥ç›´æŽ¥ä¿®æ”¹é‚£ä¸ªæ–¹æ³•çš„åç§°ï¼Œå¹¶ä¿®æ”¹å®ƒæ‰€æœ‰çš„è°ƒç”¨è€…ã€‚è¿™å¹¶ä¸æ˜¯è¯´æ²¡æœ‰äººå¯¹å…¶ä»–的代ç è´Ÿè´£ï¼Œåªä¸è¿‡ä»–们å¯ä»¥ç»™ä½ ä¸€å®šç¨‹åº¦çš„ æ–¹ä¾¿ï¼Œè®©ä½ å®Œæˆä½ çš„ä¿®æ”¹ã€‚å¦‚æžœä½ ä½¿ç”¨äº†è‡ªåŠ¨åŒ–é‡æž„工具的è¯ï¼Œè¿™æ ·çš„æ–¹ä¾¿å°±å°¤å…¶é‡è¦äº†â€”—在这ç§å·¥å…·ä¸­ï¼Œç»™ä¸€ä¸ªæ–¹æ³•改ååªéœ€è¦ç‚¹å‡»ä¸€ä¸ªæŒ‰é’®å¹¶è¾“入新的åç§°å°± 行了。如果è¦é€‰æ‹©å¼±ä»£ç æ‰€æœ‰æƒæˆ–è€…é›†ä½“ä»£ç æ‰€æœ‰æƒçš„开呿¨¡å¼ï¼Œå°±å¿…é¡»åŒæ—¶é€‰æ‹©ä¸€ä¸ªåŒæ­¥æŽ§åˆ¶ç³»ç»Ÿæ¥è¿›è¡Œæºç æŽ§åˆ¶ã€‚CVS 就是这样的一个系统,它å…è®¸å¤šäººåŒæ—¶æ›´æ–°åŒä¸€å—代ç ï¼Œå¹¶é€šè¿‡å†²çªæ£€æµ‹ç­‰æŠ€æœ¯æ¥ä¿è¯ä¸ä¼šæŠŠäº‹æƒ…æžä¹±ã€‚

è¦ä¸è¦æ•æ·å¼€å‘?

记者:什么时候ä¸åº”è¯¥ä½¿ç”¨æ•æ·å¼€å‘?

Fowler:当你能获得固定ä¸å˜çš„需求时。如果你知é“需求是固定ä¸å˜çš„,你也了解自己è¦ä½¿ç”¨çš„æŠ€æœ¯ï¼Œå¯¹äºŽå¼€å‘团队的能力也很清楚,那么传统的软件工程方法会更åˆé€‚。

记者:你é‡åˆ°è¿‡è¿™ç§æ—¶å€™å—?

Fowler: å‘µå‘µï¼Œé—®é¢˜å°±åœ¨è¿™é‡Œï¼Œä¸æ˜¯å—?实际上,我们总是é‡åˆ°æ— æ³•ç¡®å®šçš„éœ€æ±‚ã€‚é‚£ä¹ˆï¼Œä½ è¦æ€Žä¹ˆé¢å¯¹è¿™äº›å˜åŒ–ä¸å®šçš„éœ€æ±‚ï¼Ÿæ•æ·å¼€å‘者们说:好å§ï¼Œè®©æˆ‘们å‡è®¾â€œæ— æ³•确定 çš„éœ€æ±‚â€æ˜¯éšæ—¶éƒ½å­˜åœ¨çš„ï¼Œå¹¶æå‡ºä¸€ç§èƒ½å¤ŸåŒ…容它的开å‘过程——实际上,还ä¸ä»…仅是包容,而是欢迎这ç§ä¸ç¡®å®šæ€§ã€‚传统的软件工程方法教我们如何将需求固定下 æ¥ã€‚Alan Cooperã€Larry Constantine å’ŒLucy Lockwood 所æå€¡çš„交互å¼è®¾è®¡æ–¹æ³•很大程度上正是为了这个目的。有很多人从事于需求工程的工作,他们也是æœè¿™ä¸ªæ–¹å‘在努力。他们说:“我们è¦å°†éœ€æ±‚固定下æ¥ã€‚为了这 个目标,我们全力以赴。â€ä½†æ˜¯ï¼Œå¯¹äºŽä¸€ä¸ªé¡¹ç›®ï¼Œä½ å¿…é¡»è¦åˆ¤æ–­å®ƒçš„需求是å¦å¤©ç”Ÿå°±æ— æ³•固定。如果有å¯èƒ½å°†éœ€æ±‚固定,这样的开销是å¦å€¼å¾—ï¼Ÿä¼ ç»Ÿæ–¹æ³•å’Œæ•æ·å¼€å‘方法,哪一ç§çš„æ€§ä»·æ¯”更高?说实è¯ï¼Œæˆ‘对这两者之间的æƒè¡¡å¹¶æ²¡æœ‰å¤ªå¤šçš„å‘言æƒï¼Œå› ä¸ºæˆ‘å‡ ä¹Žéƒ½æ²¡çœ‹åˆ°è¿‡æœ‰è°æˆåŠŸåœ°å°†éœ€æ±‚å›ºå®šä¸‹æ¥çš„。

关键è¯ï¼šæ•æ·å¼€å‘

结对编程

什么是结对编程

结对编程技术是一个éžå¸¸ç®€å•和直观的概念:两ä½ç¨‹åºå‘˜è‚©å¹¶è‚©åœ°å在åŒä¸€å°ç”µè„‘å‰åˆä½œå®ŒæˆåŒä¸€ä¸ªè®¾è®¡ã€‚åŒä¸€ä¸ªç®—法ã€åŒä¸€æ®µä»£ç æˆ–åŒä¸€ç»„测试ã€ä¸Žä¸¤ä½ç¨‹åºå‘˜å„自独立工作相比.结对编程往往åªéœ€èŠ±è´¹å¤§çº¦ä¸€åŠçš„æ—¶é—´å°±èƒ½ç¼–å†™å‡ºè´¨é‡æ›´é«˜çš„代ç ï¼Œ 但是,人与人之间的åˆä½œä¸æ˜¯ä¸€ä»¶ç®€å•的事情——尤其当人们都早已习惯了独自工作的时候ã€å®žæ–½ç»“对编程技术将给软件项目的开å‘工作带æ¥å¥½å¤„ï¼Žåªæ˜¯è¿™äº›å¥½å¤„å¿…é¡»ç»è¿‡ç¼œå¯†çš„æ€è€ƒå’Œè®¡åˆ’æ‰èƒ½çœŸæ­£ä½“现出æ¥ã€‚而å¦ä¸€æ–¹é¢ï¼Œä¸¤ä¸ªæœ‰ç»éªŒçš„人å¯èƒ½ä¼šå‘现é…对编程里没有什么技能的转移,但是让他们在ä¸åŒçš„æŠ½è±¡å±‚次解决åŒä¸€ä¸ªé—®é¢˜ä¼šè®©ä»–们更快地找到解决方案,而且错误更少。

结对编程还有其他多ç§å¥½å¤„:
1ã€ç›´æŽ¥çš„ã€è¿žç»­çš„代ç å›žé¡¾ã€‚
2ã€ä¸Žåˆ«äººå·¥ä½œä¼šå¢žåŠ è´£ä»»å’Œçºªå¾‹æ€§ã€‚
3ã€åŒæ—¶ç†è§£ä¸€ä¸ªé—®é¢˜ã€‚
4ã€åœ¨æœ‰äººç›¯ç€çš„æ—¶å€™å޻巿‡’è¦å›°éš¾å¾—多ï¼
两个程åºå‘˜å…·æœ‰ç›¸åŒçš„缺点和盲点的å¯èƒ½æ€§å¾ˆå°ï¼Œæ‰€ä»¥æˆ‘ä»¬å½“æˆ‘ä»¬é‡‡ç”¨ç»“å¯¹ç¼–ç¨‹çš„æ—¶å€™ä¼šèŽ·å¾—ä¸€ä¸ªå¼ºå¤§çš„è§£å†³æ–¹æ¡ˆã€‚è€Œè¿™ä¸ªè§£å†³æ–¹æ¡ˆæ°æ°æ˜¯å…¶å®ƒè½¯ä»¶å·¥ç¨‹æ–¹æ³•学中所没有的。
在我们平时的编程当中,如果é‡åˆ°ä¸€ä¸ªéžå¸¸éš¾è§£å†³çš„问题(困难到对该项目产生厌烦的æ€åº¦),那么你势必会希望寻求帮助,无论是从信æ¯é‡åºžå¤§çš„Internet网络里,还是从身边的技术大师里,你都会拼了è€å‘½åŽ»è§£å†³(å‰ææ˜¯ä½ æœ‰å¯¹è®¡ç®—æœºçŸ¥è¯†çš„åŠ¿çˆ±)。这个时候ä¸å¦¨é‡‡ç”¨ç»“对编程试一下,其它的ä¸è¯´ï¼Œå¯èƒ½æ„Ÿè§‰å°±ä¸åŒã€‚

关键è¯ï¼šæ•æ·å¼€å‘,结对编程

SCRUM中文网

å…¬å¸ï¼š
上海享知信æ¯ç§‘技有é™å…¬å¸
上海享知教育科技有é™å…¬å¸
上海总部: 闵行区åŽä¸­è·¯6å·å¾·å¿…易园B座323室
咨询热线:400 696 6280
邮箱:info@scrumcn.com
声明:scrumcn.com å’Œ51agile.com为Scrum中文网唯一官方中ã€è‹±æ–‡ç½‘站,其他任何以Scrum中文网为宣传的网站å‡ä¸ºè™šå‡æ¬ºè¯ˆç½‘站,请用户仔细甄别。

认è¯èµ„è´¨

æ•æ·å¼€å‘社区QQ交æµç¾¤ï¼š
Scrum中国 -群å·ï¼š113141196 Scrum京津冀 -群å·ï¼š177263268 Scrum长三角 -群å·ï¼š191738930 Scrumç ä¸‰è§’ -群å·ï¼š177261346 Scrumæˆéƒ½ -群å·ï¼š103734771

关注我们

微信公众å·ï¼šScrum_CN æ•æ·å¼€å‘社区微信
微信扫一扫,“微信版“估算扑克å…费用ï¼

æ›´å¯èŽ·å–æ•æ·å¼€å‘èµ„æ–™ã€æ–‡ç« å’Œæœ€æ–°è¯¾ç¨‹åЍæ€ã€‚

勿ƒ…链接

Leangooæ•æ·å·¥å…·
Leangoo社区
国际Scrumè”盟
æ•æ·è”盟
上海市软件行业å会
深圳市软件行业å会
中国软件行业å会过程改进分会
麦客表å•
起点学院
SegmentFault社区
å¼€æºä¸­å›½
北京软件造价评估技术创新è”盟
InfoQ

© Copyright 2008 - 2022 www.scrumcn.com 沪ICP备14041584å·-1 - Scrum中文网-Scrum培训,æ•æ·å¼€å‘培训 - 中国Scrumæ•æ·å¼€å‘培训ã€å’¨è¯¢é¢†å¯¼å“ç‰Œï¼ è¯·ä½¿ç”¨IE9以上æµè§ˆå™¨æµè§ˆ