ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>性xx色xx综合久久久xx,av中文字幕一区二区三区,国产免费一区二区三区在线观看http://www.aygfsteel.com/yesjoy/articles/125273.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 03:01:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125273.htmlhttp://www.aygfsteel.com/yesjoy/comments/125273.htmlhttp://www.aygfsteel.com/yesjoy/articles/125273.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125273.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125273.htmlhttp://www.linuxdby.com/html/linux/system/20070505/27673.html

1.引言

 

1.1¾~–写目的

  说明¾~–写˜q™ä†¾‹¹‹è¯•计划目的åQŒæŒ‡å‡ºé¢„期的读者ã€?/p>

1.2背景

  a.待开发系¾lŸçš„名称åQ?br>  b.列出本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆ—÷€?/p>

1.3定义

  列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组ã€?/p>

1.4参考资�/strong>

  列出有关的参考资料�/p>

2åQŽè®¡åˆ?/h3>

 

2.1¾pȝ»Ÿè¯´æ˜Ž

  [提供一份图表,òq‰™€é¡¹è¯´æ˜Žè¢«æµ‹¾pȝ»Ÿçš„功能、输入、输出等质量指标åQŒä½œä¸ºå™˜q°æµ‹è¯•计划的提纲。]

2.2‹¹‹è¯•内容

  [列出¾l„装‹¹‹è¯•和确认测试中的每一™åÒŽµ‹è¯•内容的名称标识½W¦ã€è¿™äº›æµ‹è¯•çš„˜q›åº¦å®‰æŽ’以及˜q™äº›‹¹‹è¯•的内容和目的。]

2.3‹¹‹è¯•1åQˆæ ‡è¯†ç¬¦åQ?/strong>

  [¾l™å‡º˜q™é¡¹‹¹‹è¯•内容的参与单位及被测试的部位。]

  2.3.1˜q›åº¦å®‰æŽ’
  [¾l™å‡ºå¯¹è¿™™åÒŽµ‹è¯•çš„˜q›åº¦å®‰æŽ’åQŒåŒ…括进行测试的日期和工作内宏V€‚]

  2.3.2条äšg
  [陈述本项‹¹‹è¯•工作对资源的要求。包括:]
  a.¼‹¬äšg
  b.软äšg
  c.人员

  2.3.3‹¹‹è¯•资料
  列出本项‹¹‹è¯•所需的资料ã€?/p>

  2.3.4‹¹‹è¯•培训
ã€€ã€€è¯´æ˜Žæˆ–å¼•ç”¨èµ„æ–™è¯´æ˜ŽäØ“è¢«æµ‹¾pȝ»Ÿçš„ä‹É用提供培训的计划。规定培训的内容、受训的人员及从事培训的工作人员ã€?/p>

2.4‹¹‹è¯•2åQˆæ ‡è¯†ç¬¦åQ?/strong>

  用与本测试计åˆ?ã€?条相¾cÖM¼¼çš„æ–¹å¼è¯´æ˜Žç”¨äºŽå¦ä¸€™å¹åŠå…¶åŽå„项‹¹‹è¯•内容的测试工作计划ã€?br>  。。。。。ã€?/p>

,h3><3åQŽæµ‹è¯•设计说æ˜?

 

3.1‹¹‹è¯•1åQˆæ ‡è¯†ç¬¦åQ?/strong>

  [说明对第一™åÒŽµ‹è¯•内容的‹¹‹è¯•设计考虑。]

  3.1.1控制
  [说明本测试的控制方式。]

  3.1.2输入
  [说明本项‹¹‹è¯•中所使用的输入数据及选择˜q™äº›è¾“入数据的策略。]

  3.1.3输出
  [说明预期的输出数据。]

  3.1.4˜q‡ç¨‹
  [说明完成此项‹¹‹è¯•的一个个步骤和控制命令。]

3.2‹¹‹è¯•2åQˆæ ‡è¯†ç¬¦åQ?/strong>

  [用与本测试计åˆ?ã€?条相¾cÖM¼¼çš„æ–¹å¼è¯´æ˜Žç¬¬2™å¹åŠå…¶åŽå„项‹¹‹è¯•工作的设计考虑。]
  [。。。。。。]

4åQŽè¯„价准åˆ?/h3>

 

4.1范围

  [说明所选择的测试用例能够检查的范围及其局限性。]

4.2数据整理

  [陈述ä¸ÞZº†æŠŠæµ‹è¯•数据加工成便于评ä­h的适当形式åQŒä‹É得测试结果可以同已知¾l“æžœ˜q›è¡Œæ¯”较而要用到的è{换处理技术;如果是用自动方式整理数据åQŒè¿˜è¦è¯´æ˜ŽäØ“˜q›è¡Œå¤„理而要用到的硬件、èÊY件资源。]

4.3ž®ºåº¦

  [说明用来判断‹¹‹è¯•工作是否能通过的评价尺度,如合理和输出¾l“果的类型、测试输出结果与预期输出之间的容许偏¼›»èŒƒå›´ã€å…è®æ€¸­æ–­æˆ–停机的最大数。]



]]>ISO软äšg工程模板(7)数据库设计说明书http://www.aygfsteel.com/yesjoy/articles/125272.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 03:00:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125272.htmlhttp://www.aygfsteel.com/yesjoy/comments/125272.htmlhttp://www.aygfsteel.com/yesjoy/articles/125272.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125272.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125272.htmlhttp://www.linuxdby.com/html/linux/system/20070505/27672.html

1.引言

 

1.1¾~–写目的

  [说明¾~–写˜q™ä†¾æ•°æ®è®¾è®¡è¯´æ˜Žä¹¦çš„目的åQŒæŒ‡å‡ºé¢„期的读者。]

1.2背景

  a.[待开发数据库的名¿U°å’Œä½¿ç”¨æ­¤æ•°æ®åº“çš„èÊYä»¶ç³»¾lŸçš„名称åQ›]
  b.[列出本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆ—÷€‚]

1.3定义

  [列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组。]

1.4参考资�/strong>

  [列出有关的参考资料。]

2åQŽå¤–部设è®?/h3>

 

2.1标识½W¦çš„状æ€?/strong>

  [联系用途,详细说明用于唯一地标识该数据库的代码、名¿U°æˆ–标识½W¦ï¼Œé™„加的描˜q°æ€§ä¿¡æ¯äº¦è¦ç»™å‡ºã€‚如果该数据库属于尚在实验中、尚在测试中或是暂时使用的,则要说明˜q™ä¸€ç‰¹ç‚¹åŠå…¶æœ‰æ•ˆæ—‰™—´èŒƒå›´ã€‚]

2.2使用它的½E‹åº

  [列出ž®†è¦ä½¿ç”¨æˆ–访问此数据库的所有应用程序,对于˜q™äº›åº”用½E‹åºçš„æ¯ä¸€ä¸ªï¼Œ¾l™å‡ºå®ƒçš„名称和版本号。]

2.3¾U¦å®š

  [陈述一个程序员或一个系¾lŸåˆ†æžå‘˜ä¸ÞZº†èƒ½ä‹É用此数据库而需要了解的建立标号、标识的¾U¦å®šã€‚]

2.4专门指导

  [向准备从事此数据库的生成、从事此数据库的‹¹‹è¯•、维护äh员提供专门的指导。]

2.5支持软äšg

  [½Ž€å•介¾låŒæ­¤æ•°æ®åº“直接有关的支持èÊY件。说明这些èÊYä»¶çš„åç§°ã€ç‰ˆæœ¬å·çš„ä¸»è¦åŠŸèƒ½ç‰¹æ€§ã€‚åˆ—å‡ø™¿™äº›æ”¯æŒèÊY件的技术文件的标题、编号及来源]

3åQŽç»“构设è®?/h3>

 

3.1概念¾l“构设计

  [说明本数据库ž®†åæ˜ çš„现实世界中的实体、属性和它们之间的关¾pȝ­‰çš„原始数据åŞ式,包括各数据项、记录、系、文åïLš„æ ‡è¯†½W¦ã€å®šä¹‰ã€ç±»åž‹ã€åº¦é‡å•位和值域åQŒå¾ç«‹æœ¬æ•°æ®åº“的每一òq…用戯‚§†å›¾ã€‚]

3.2逻辑¾l“构设计

  [说明把上˜q°åŽŸå§‹æ•°æ®è¿›è¡Œåˆ†è§£ã€åˆòq¶åŽé‡æ–°¾l„织èµäh¥çš„æ•°æ®åº“全局逻辑¾l“构。]

3物理¾l“构设计

  [建立¾pȝ»Ÿ½E‹åºå‘˜è§†å›¾ã€‚]

4åQŽè¿ç”¨è®¾è®?/h3>

 

4.1数据字典设计

  [å¯ÒŽ•°æ®åº“设计中涉及到的各¿Ué¡¹ç›®ä¸€èˆ¬è¦å»ºç«‹èµäh•°æ®å­—典,以说明它们的标识½W¦ã€åŒä¹‰ååŠæœ‰å…³ä¿¡æ¯ã€‚]

4.2安全保密设计

  [说明在数据库的设计中åQŒå°†å¦‚何通过区分不同的访问者、不同的讉K—®¾cÕdž‹å’Œä¸åŒçš„æ•°æ®å¯¹è±¡åQŒè¿›è¡Œåˆ†åˆ«å¯¹å¾…而获得的数据库安全保密的设计考虑。]



]]>ISO软äšg工程模板(6)概要设计说明ä¹?http://www.aygfsteel.com/yesjoy/articles/125271.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 02:58:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125271.htmlhttp://www.aygfsteel.com/yesjoy/comments/125271.htmlhttp://www.aygfsteel.com/yesjoy/articles/125271.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125271.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125271.htmlhttp://www.linuxdby.com/html/linux/system/20070505/27671.html

1åQŽå¼•­a€

 

1.1¾~–写目的

  [说明¾~–写˜q™ä†¾æ¦‚要设计说明书的目的åQŒæŒ‡å‡ºé¢„期的读者。]

1.2背景

  a.[待开发èÊYä»¶ç³»¾lŸçš„名称åQ›]
  b.[列出本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆ—÷€‚]

1.3定义

  [列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组。]

1.4参考资�/strong>

  [列出有关的参考资料。]

2åQŽæ€ÖM½“设计

 

2.1需求规�/strong>

  [说明å¯ÒŽœ¬¾pȝ»Ÿçš„主要的输入输出™å¹ç›®ã€å¤„理的功能性能要求。包括]

  2.1.1¾pȝ»ŸåŠŸèƒ½

  2.1.2¾pȝ»Ÿæ€§èƒ½
    2.1.2.1¾_‘Öº¦
    2.1.2.2æ—‰™—´ç‰ÒŽ€§è¦æ±?br>    2.1.2.4可靠æ€?br>    2.1.2.5灉|´»æ€?/p>

  2.1.3输入输出要求

  2.1.4数据½Ž¡ç†èƒ½åŠ›è¦æ±‚

  2.1.5故障处理要求

  2.1.6其他专门要求

2.2˜qè¡ŒçŽ¯å¢ƒ

  [½Ž€è¦åœ°è¯´æ˜Žå¯ÒŽœ¬¾pȝ»Ÿçš„运行环境的规定。]

  2.2.1讑֤‡
  [列出˜qè¡Œè¯¥èÊY件所需要的¼‹¬è®¾å¤‡ã€‚说明其中的新型讑֤‡åŠå…¶ä¸“门功能。]

  2.2.2支持软äšg
  [列出支持软äšgåQŒåŒ…括要用到的操作系¾lŸã€ç¼–译(或汇¾~–)½E‹åºã€æµ‹è¯•支持èÊY件等。]

1  2.2.3接口
  [说明该系¾lŸåŒå…¶ä»–¾pȝ»Ÿä¹‹é—´çš„æŽ¥å£ã€æ•°æ®é€šä¿¡åè®®½{‰]

  2.2.4控制
  [说明控制该系¾lŸçš„˜qè¡Œçš„æ–¹æ³•和控制信号åQŒåƈ说明˜q™äº›æŽ§åˆ¶ä¿¡å·çš„æ¥æºã€‚]

2.3基本设计概念和处理流½E?/strong>

  [说明本系¾lŸçš„基本设计概念和处理流½E‹ï¼Œž®½é‡ä½¿ç”¨å›¾è¡¨çš„åŞ式。]

2.4¾l“æž„

  [¾l™å‡º¾pȝ»Ÿ¾l“æž„æ€ÖM½“框图åQˆåŒ…括èÊY件、硬件结构框图)åQŒè¯´æ˜Žæœ¬¾pȝ»Ÿçš„å„æ¨¡å—çš„åˆ’åˆ†ï¼Œæ‰ÆD¦è¯´æ˜Žæ¯ä¸ª¾pȝ»Ÿæ¨¡å—的标识符和功能,分层‹Æ¡åœ°¾l™å‡ºå„模块之间的控制与被控制关系。]

2.5功能需求与¾pȝ»Ÿæ¨¡å—的关¾p?/strong>

  [本条用一张矩阵图说明各项功能需求的实现同各模块的分配关¾p…R€‚]

    [¾pȝ»Ÿæ¨¡å—1] [¾pȝ»Ÿæ¨¡å—2] [……] [¾pȝ»Ÿæ¨¡å—m]
[功能需æ±?]  √             
[功能需æ±?]      √         
[┇]                
[功能需求n]      √       √ 

2.6人工处理˜q‡ç¨‹

  [说明在本¾pȝ»Ÿçš„工作过½E‹ä¸­ä¸å¾—不包含的人工处理˜q‡ç¨‹ã€‚]

2.7ž®šæœªè§£å†³çš„é—®é¢?/strong>

  [说明在概要设计过½E‹ä¸­ž®šæœªè§£å†³è€Œè®¾è®¡è€…认为在¾pȝ»Ÿå®Œæˆä¹‹å‰å¿…须解决的各个问题。]

3åQŽæŽ¥å£è®¾è®?/h3>

 

3.1用户接口

  [说明ž®†å‘用户提供的命令和它们的语法结构,以及相应的回½{”信息。]
  [说明提供¾l™ç”¨æˆäh“ä½œçš„¼‹¬äšg控制面板的定义。]

3.2外部接口

  [说明本系¾lŸåŒå¤–界的所有接口的安排包括软äšg与硬件之间的接口、本¾pȝ»Ÿä¸Žå„支持¾pȝ»Ÿä¹‹é—´çš„æŽ¥å£å…³¾p…R€‚]

3.3内部接口

  [说明本系¾lŸä¹‹å†…的各个¾pȝ»Ÿå…ƒç´ ä¹‹é—´çš„æŽ¥å£çš„安排。]

4åQŽè¿è¡Œè®¾è®?/h3>

 

4.1˜qè¡Œæ¨¡å—¾l„合

  [说明对系¾lŸæ–½åŠ ä¸åŒçš„å¤–ç•Œ˜qè¡ŒæŽ§åˆ¶æ—¶æ‰€å¼•è“v的各¿Uä¸åŒçš„˜qè¡Œæ¨¡å—¾l„合åQŒè¯´æ˜Žæ¯¿Uè¿è¡Œæ‰€åŽ†ç»çš„å†…éƒ¨æ¨¡å—çš„æ”¯æŒè½¯äšg。]

4.2˜qè¡ŒæŽ§åˆ¶

  [说明每一¿Uå¤–界的˜qè¡ŒæŽ§åˆ¶çš„æ–¹å¼æ–¹æ³•和操作步骤。]

4.3˜qè¡Œæ—‰™—´

  [说明每种˜qè¡Œæ¨¡å—¾l„合ž®†å ç”¨å„¿Uèµ„源的旉™—´ã€‚]

5åQŽç³»¾lŸæ•°æ®ç»“构设è®?/h3>

 

  [不涉及èÊY件设计可不包含]

5.1逻辑¾l“构设计要点

  [¾l™å‡ºæœ¬ç³»¾lŸå†…软äšg所使用的每个数据结构的名称、标识符以及它们之中每个数据™åV€è®°å½•、文卷和¾pÈš„æ ‡è¯†ã€å®šä¹‰ã€é•¿åº¦åŠå®ƒä»¬ä¹‹é—´çš„层‹Æ¡çš„æˆ–è¡¨æ ¼çš„ç›æ€º’关系。]

5.2物理¾l“构设计要点

  [¾l™å‡ºæœ¬ç³»¾lŸå†…软äšg所使用的每个数据结构中的每个数据项的存储要求,讉K—®æ–ÒŽ³•、存取单位、存取的物理关系、设计考虑和保密条件。]

5.3数据¾l“构与程序的关系

  [说明各个数据¾l“构与访问这些数据结构的各个½E‹åºä¹‹é—´çš„对应关¾p…R€‚]

    [½E‹åº1] [½E‹åº2] [……] [½E‹åºm]
[数据¾l“æž„1]  √             
[数据¾l“æž„2]      √         
[┇]                
[数据¾l“æž„n]      √       √ 

6åQŽç³»¾lŸå‡ºé”™å¤„理设è®?/h3>

 

6.1出错信息

  [用一览表的方式说明每¿Uå¯èƒ½çš„出错或故障情况出现时åQŒç³»¾lŸè¾“å‡ÞZ¿¡æ¯çš„形式、含意及处理æ–ÒŽ³•。]

6.2补救措施

  [说明故障出现后可能采取的变通措施。包括:]
  a.后备技æœ?[说明准备采用的后备技术,当原始系¾lŸæ•°æ®ä¸‡ä¸€ä¸¢å¤±æ—¶å¯ç”¨çš„副本的徏立和启动的技术,例如周期性地把磁盘信息记录到¼‚å¸¦ä¸ŠåŽ»ž®±æ˜¯å¯¹äºŽ¼‚ç›˜åª’体的一¿UåŽå¤‡æŠ€æœ¯ã€‚]
  b.降效技æœ?[说明准备采用的后备技术,使用另一个效率稍低的¾pȝ»Ÿæˆ–方法来求得所需¾l“果的某些部分,例如一个自动系¾lŸçš„降效技术可以是手工操作和数据的人工记录。]
        c.恢复及再启动技æœ?[说明ž®†ä‹É用的恢复再启动技术,使èÊY件从故障ç‚ÒŽ¢å¤æ‰§è¡Œæˆ–使èÊY件从头开始重新运行的æ–ÒŽ³•。]

 

6.3¾pȝ»Ÿ¾l´æŠ¤è®¾è®¡

  [说明ä¸ÞZº†¾pȝ»Ÿ¾l´æŠ¤çš„æ–¹ä¾¿è€Œåœ¨½E‹åºå†…部设计中作出的安排åQŒåŒ…括在½E‹åºä¸­ä¸“门安排用于系¾lŸçš„‹‚€æŸ¥ä¸Ž¾l´æŠ¤çš„æ£€‹¹‹ç‚¹å’Œä¸“用模块。]



]]>ISO软äšg工程模板(5)用户手册 http://www.aygfsteel.com/yesjoy/articles/125270.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 02:57:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125270.htmlhttp://www.aygfsteel.com/yesjoy/comments/125270.htmlhttp://www.aygfsteel.com/yesjoy/articles/125270.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125270.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125270.htmlhttp://www.linuxdby.com/html/linux/system/20070505/27670.html

1åQŽå¼•­a€

 

1.1¾~–写目的

  [……]

1.2背景

  [……]

1.3定义

  [……]

1.4参考资�/strong>

  [……]

2åQŽç”¨é€?/h3>

 

2.1功能

  [……]

2.2性能

  2.2.1¾_‘Öº¦

  [……]

  2.2.2æ—‰™—´ç‰ÒŽ€?br>  [……]

  2.2.3灉|´»æ€?br>  [……]

2.3安全保密

  [……]

3åQŽè¿è¡Œçޝå¢?/h3>

 

3.1¼‹¬è®¾å¤?/strong>

  [……]

3.2支持软äšg

  [……]

3.3数据¾l“æž„

  [……]

4åQŽä‹É用过½E?/h3>

 

4.1安装与初始化

  [……]

4.2输入

  4.2.1输入数据的现实背æ™?br>  [……]

  4.2.2输入格式
  [……]

  4.2.3输入举例
  [……]

4.3输出

  4.3.1输出数据的现实背æ™?br>  [……]

  4.3.2输出格式

  [……]

 

  4.3.3输出举例
  [……]

4.4文卷查询

  [……]

4.5出错处理与恢�/strong>

  [……]

4.6¾lˆç«¯æ“ä½œ

  [……]



]]>ISO软äšg工程模板(4)需求说明书http://www.aygfsteel.com/yesjoy/articles/125269.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 02:57:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125269.htmlhttp://www.aygfsteel.com/yesjoy/comments/125269.htmlhttp://www.aygfsteel.com/yesjoy/articles/125269.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125269.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125269.htmlhttp://www.linuxdby.com/html/linux/system/20070505/27669.html

1åQŽå¼•­a€

 

1.1¾~–写的目çš?/strong>

  说明¾~–写˜q™ä†¾éœ€æ±‚说明书的目çš?指出预期的读è€?

1.2背景

  a. 待开发的¾pȝ»Ÿçš„名¿U?
  b.本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆøP¼›
  c.该系¾lŸåŒå…¶ä»–¾pȝ»Ÿæˆ–其他机构的基本的相互来往关系ã€?/p>

1.3定义

  列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组ã€?/p>

1.4参考资�/strong>

  列出用得着的参考资料�/p>

2åQŽä“Q务概˜q?/h3>

 

2.1目标

  叙述该系¾lŸå¼€å‘的意图、应用目标、作用范围以及其他应向读者说明的有关该系¾lŸå¼€å‘的背景材料。解释被开发系¾lŸä¸Žå…¶ä»–有关¾pȝ»Ÿä¹‹é—´çš„å…³¾p…R€?/p>

2.2用户的特�/strong>

  列出本系¾lŸçš„æœ€¾lˆç”¨æˆïLš„特点åQŒå……分说明操作äh员、维护äh员的教育水åã^和技术专长,以及本系¾lŸçš„预期使用频度ã€?/p>

2.3假定和约�/strong>

  列出˜q›è¡Œæœ¬ç³»¾lŸå¼€å‘工作的假定和约束ã€?/p>

3åQŽéœ€æ±‚è§„å®?

 

3.1对功能的规定

  用列表的方式åQŒé€é¡¹å®šé‡å’Œå®šæ€§åœ°å™è¿°å¯¹ç³»¾lŸæ‰€æå‡ºçš„功能要求,说明输入什么量、经怎么æ ïLš„处理、得åˆîC»€ä¹ˆè¾“出,说明¾pȝ»Ÿçš„容é‡?包括¾pȝ»Ÿåº”支持的¾lˆç«¯æ•°å’Œåº”支持的òq¶è¡Œæ“ä½œçš„用æˆäh•°½{‰æŒ‡æ ‡ã€?/p>

3.2 å¯ÒŽ€§èƒ½çš„è§„å®?/strong>

  3.2.1¾_‘Öº¦
  说明对该¾pȝ»Ÿçš„输入、输出数据精度的要求åQŒå¯èƒ½åŒ…括传输过½E‹ä¸­çš„精度ã€?/p>

  3.2.2æ—‰™—´ç‰ÒŽ€§è¦æ±?br>  说明对于该系¾lŸçš„æ—‰™—´ç‰ÒŽ€§è¦æ±‚ã€?/p>

  3.2.3灉|´»æ€?br>  说明对该¾pȝ»Ÿçš„灵‹zÀL€§çš„要求åQŒå³å½“需求发生某些变化时åQŒè¯¥¾pȝ»Ÿå¯¹è¿™äº›å˜åŒ–的适应能力ã€?/p>

3.3输入输出要求

  解释各输入输出数据类型,òq‰™€é¡¹è¯´æ˜Žå…¶åª’ä½“ã€æ ¼å¼ã€æ•°å€ÆDŒƒå›´ã€ç²¾åº¦ç­‰ã€‚对¾pȝ»Ÿçš„æ•°æ®è¾“出及必须标明的控制输出量˜q›è¡Œè§£é‡Šòq¶ä‹D例ã€?/p>

3.4数据½Ž¡ç†èƒ½åŠ›è¦æ±‚åQˆé’ˆå¯¹èÊYä»¶ç³»¾lŸï¼‰

  说明需要管理的文卷和记录的个数、表和文åïLš„大小规模åQŒè¦æŒ‰å¯é¢„见的增长对数据及其分量的存储要求作å‡ÞZ¼°½Ž—ã€?/p>

3.5故障处理要求

  列出可能的èÊY件、硬件故障以及对各项性能而言所产生的后果和å¯ÒŽ•…障处理的要求ã€?/p>

3.6其他专门要求

  如用户单位对安全保密的要求,对ä‹É用方便的要求åQŒå¯¹å¯ç»´æŠ¤æ€§ã€å¯è¡¥å……性、易è¯ÀL€§ã€å¯é æ€§ã€è¿è¡ŒçŽ¯å¢ƒå¯è½¬æ¢æ€§çš„ç‰ÒŽ®Šè¦æ±‚½{‰ã€?/p>

4åQŽè¿è¡ŒçŽ¯å¢ƒè§„å®?/h3>

 

4.1讑֤‡

  列出˜qè¡Œè¯¥èÊY件所需要的¼‹¬è®¾å¤‡ã€‚说明其中的新型讑֤‡åŠå…¶ä¸“门功能åQŒåŒ…括:
  a.处理器型号及内存定w‡
  b.外存定w‡ã€è”机或脱机、媒体及其存储格式,讑֤‡çš„型号及数量
  c.è¾“å…¥åŠè¾“å‡ø™®¾å¤‡çš„型号和数量,联机或脱机;
  d.数据通信讑֤‡çš„型号和数量
  e.功能键及其他专用¼‹¬äšg

4.2支持软äšg

  列出支持软äšgåQŒåŒ…括要用到的操作系¾lŸã€ç¼–译程序、测试支持èÊYä»¶ç­‰ã€?/p>

4.3接口

  说明该系¾lŸåŒå…¶ä»–¾pȝ»Ÿä¹‹é—´çš„æŽ¥å£ã€æ•°æ®é€šä¿¡åè®®½{‰ã€?/p>

4.4控制

  说明控制该系¾lŸçš„˜qè¡Œçš„æ–¹æ³•和控制信号åQŒåƈ说明˜q™äº›æŽ§åˆ¶ä¿¡å·çš„æ¥æºã€?/p>

]]>ISO软äšg工程模板(3)数据要求说明ä¹?http://www.aygfsteel.com/yesjoy/articles/125268.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 02:55:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125268.htmlhttp://www.aygfsteel.com/yesjoy/comments/125268.htmlhttp://www.aygfsteel.com/yesjoy/articles/125268.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125268.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125268.htmlhttp://www.linuxdby.com/html/linux/system/20070505/27668.html

1åQŽå¼•­a€

 

1.1¾~–写目的

  说明¾~–写˜q™ä†¾æ•°æ®è¦æ±‚说明书的目的åQŒæŒ‡å‡ºé¢„期的读者ã€?/p>

1.2背景

  a.待开发èÊYä»¶ç³»¾lŸçš„名称åQ?br>  b.列出本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆ·ä»¥åŠå°†˜qè¡Œè¯¥é¡¹è½¯äšg的计½Ž—站或计½Ž—机¾|‘络¾pȝ»Ÿã€?/p>

1.3定义

  列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组ã€?/p>

1.4参考资�/strong>

  列出有关的参考资料�/p>

2åQŽæ•°æ®çš„逻辑描述

 

  å¯ÒŽ•°æ®è¿›è¡Œé€»è¾‘描述时可把数据分为动态数据和静态数据ã€?/p>

2.1静态数�/strong>

  列出所有作为控制或参考用的静态数据元素�/p>

2.2动态输入数�/strong>

  列出动态输入数据元素�/p>

2.3动态输出数�/strong>

  列出动态输出数据元素�/p>

2.4内部生成数据

  列出向用æˆähˆ–开发单位中的维护调试äh员提供的内部生成数据ã€?/p>

2.5数据¾U¦å®š

  说明å¯ÒŽ•°æ®è¦æ±‚的制约。逐条列出对进一步扩充或使用斚w¢çš„考虑而提出的å¯ÒŽ•°æ®è¦æ±‚的限制。对于在设计和开发中¼‹®å®šæ˜¯äÍ界性的限制更要明确指出ã€?/p>

3åQŽæ•°æ®çš„采集

 

3.1要求和范�/strong>

  按数据元的逻辑分组来说明数据采集的要求和范å›ß_¼ŒæŒ‡æ˜Žæ•°æ®çš„采集方法,说明数据采集工作的承担者是用户˜q˜æ˜¯å¼€å‘者ã€?/p>

3.2输入的承担�/strong>

  说明预定的对数据输入工作的承担者。如果输入数据同某一接口软äšg有关åQŒè¿˜åº”说明该接口软äšg的来源ã€?/p>

3.3预期处理

  å¯ÒŽ•°æ®çš„采集和预处理˜q‡ç¨‹æå‡ºä¸“门的规定,包括适合应用的数据格式、预定的数据通信媒体和对输入的时间要求等。对于需¾læ¨¡æ‹Ÿè{换或数字转换处理的数据量åQŒè¦¾l™å‡ºè½¬æ¢æ–ÒŽ³•å’Œè{换因子等有关信息åQŒä»¥ä¾¿èÊYä»¶ç³»¾lŸä‹É用这些数据ã€?/p>

3.4影响

  说明˜q™äº›æ•°æ®è¦æ±‚对于讑֤‡ã€èÊY件、用戗÷€å¼€å‘单位所可能产生的媄响ã€?/p>

]]>
ISO软äšg工程模板(2)™å¹ç›®å¼€å‘计åˆ?/title><link>http://www.aygfsteel.com/yesjoy/articles/125266.html</link><dc:creator>★yesjoyâ˜?/dc:creator><author>★yesjoyâ˜?/author><pubDate>Wed, 20 Jun 2007 02:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/yesjoy/articles/125266.html</guid><wfw:comment>http://www.aygfsteel.com/yesjoy/comments/125266.html</wfw:comment><comments>http://www.aygfsteel.com/yesjoy/articles/125266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yesjoy/comments/commentRss/125266.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yesjoy/services/trackbacks/125266.html</trackback:ping><description><![CDATA[转脓来自åQ?a >http://www.linuxdby.com/html/linux/system/20070505/27667.html</a><br> <h3>1. 引言</h3> <p> </p> <p><strong>1.1 ¾~–写目的</strong></p> <p>  [说明¾~–写˜q™ä†¾™å¹ç›®å¼€å‘计划的目的åQŒåƈ指出预期的读者。]</p> <p><strong>1.2 背景</strong></p> <p>  a. 待开发èÊYä»¶ç³»¾lŸçš„名称åQ?br>  b.本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆ·åŠå®žçŽ°è¯¥èÊY件的计算中心或计½Ž—机¾|‘络åQ?br>  c.该èÊYä»¶ç³»¾lŸåŒå…¶ä»–¾pȝ»Ÿæˆ–其他机构的基本的相互来往关系ã€?/p> <p><strong>1.3 定义</strong></p> <p>  [列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组。]</p> <p><strong>1.4 参考资æ–?/strong></p> <p>  [列出用得着的参考资料。]</p> <p> <h3>2. ™å¹ç›®æ¦‚è¿°</h3> <p> </p> <p><strong>2.1 工作内容</strong></p> <p>  [½Ž€è¦åœ°è¯´æ˜Žåœ¨æœ¬™å¹ç›®çš„开发中™å»è¿›è¡Œçš„各项主要工作ã€?]</p> <p><strong>2.2 主要参加人员</strong></p> <p>  [æ‰ÆD¦åœ°è¯´æ˜Žå‚加本™å¹ç›®å¼€å‘工作的主要人员的情况,包括他们的技术水òqŸë€‚]</p> <p><strong>2.3 产品</strong></p> <p>  2.3.1 ½E‹åº<br>  [列出需¿UÖMº¤¾l™ç”¨æˆïLš„½E‹åºçš„名¿U°ã€æ‰€ç”¨çš„¾~–程语言及存储程序的媒体形式åQŒåƈ通过引用有关文äšg。逐项说明其功能和能力。]</p> <p>  2.3.2.æ–‡äšg <br>  [列出需¿UÖMº¤¾l™ç”¨æˆïLš„æ¯ç§æ–‡äšg的名¿U°åŠå†…容要点。]</p> <p>  2.3.3.服务<br>  [列出需向用æˆähä¾›çš„各项服务ã€?]</p> <p>  2.3.4.非移交的产品 <br>  [说明开发集体应向本单位交出但不必向用户¿UÖMº¤çš„äñ”品ã€?]</p> <p><strong>2.4 验收标准 </strong></p> <p>  [对于上述˜q™äº›åº”交出的产品和服务,逐项说明或引用资料说明验收标准。]</p> <p><strong>2.5 [完成™å¹ç›®çš„æœ€˜qŸæœŸé™]</strong></p> <p><strong>2.6 [本计划的批准者和批准日期]</strong></p> <p> <h3>3. 实施计划</h3> <p> </p> <p><strong>3.1 工作ä»ÕdŠ¡çš„åˆ†è§£ä¸Žäººå‘˜åˆ†å·¥</strong></p> <p>  [对于™å¹ç›®å¼€å‘中需完成的各™å¹å·¥ä½œï¼Œä»Žéœ€æ±‚分析、设计、实现、测试直到维护,包括文äšg的编制、审扏V€æ‰“印、分发工作,用户培训工作åQŒèÊY件安装工作等åQŒæŒ‰å±‚次˜q›è¡Œåˆ†è§£åQŒæŒ‡æ˜Žæ¯™å¹ä“Q务的负责人和参加人员。]</p> <p><strong>3.2 接口人员</strong></p> <p>  [说明负责接口工作的äh员及他们的职责。]</p> <p><strong>3.3 ˜q›åº¦</strong></p> <p>  [对于需求分析、设计、编码实现、测试、移交、培训和安装½{‰å·¥ä½œï¼Œ¾l™å‡ºæ¯é¡¹å·¥ä½œä»ÕdŠ¡çš„é¢„å®šçš„å¼€å§‹æ—¥æœŸã€å®Œæˆæ—¥æœŸåŠæ‰€éœ€èµ„æºåQŒè§„定各™å¹å·¥ä½œä“Q务完成的先后™åºåºä»¥åŠè¡¨å¾æ¯é¡¹å·¥ä½œä»ÕdŠ¡å®Œæˆçš„æ ‡å¿—æ€§äº‹ä»¶ã€‚]</p> <p><strong>3.4 预算</strong></p> <p>  [逐项列出本开发项目所需要的力_Š¡ä»¥åŠ¾lè´¹çš„预½Ž—和来源。]</p> <p><strong>3.5 关键问题</strong></p> <p>  [逐项列出能够影响整个™å¹ç›®æˆèÓ|的关键问题、技术难点和风险åQŒæŒ‡å‡ø™¿™äº›é—®é¢˜å¯¹™å¹ç›®çš„媄响。]</p> <p> <h3>4.支持条äšg</h3> <p> </p> <p>  [说明为支持本™å¹ç›®çš„开发所需要的各种条äšg和设施。]</p> <p><strong>4.1 计算机系¾lŸæ”¯æŒ?/strong></p> <p>  [逐项列出开发中和运行时所需的计½Ž—机¾pȝ»Ÿæ”¯æŒåQŒåŒ…括计½Ž—机、外围设备、通讯讑֤‡ã€æ¨¡æ‹Ÿå™¨ã€ç¼–译程序、操作系¾lŸã€æ•°æ®ç®¡ç†ç¨‹åºåŒ…、数据存储能力和‹¹‹è¯•支持能力½{‰ï¼Œé€é¡¹¾l™å‡ºæœ‰å…³åˆ°è´§æ—¥æœŸã€ä‹É用时间的要求。]</p> <p><strong>4.2 需ç”Þq”¨æˆäh‰¿æ‹…的工作</strong></p> <p>  [逐项列出需要用æˆäh‰¿æ‹…的工作和完成期限,包括需ç”Þq”¨æˆähä¾›çš„æ¡äšg及提供时间。]</p> <p><strong>4.3 需由外单位提供的条ä»?/strong></p> <p>  [逐项列出需要外单位分合同承包者承担的工作和完成的旉™—´ã€‚]</p> <p> <h3>5.专题计划要点</h3> <p> </p> <p>  [说明本项目开发中需制订的各个专题计划的要点。]</p> </span> <img src ="http://www.aygfsteel.com/yesjoy/aggbug/125266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yesjoy/" target="_blank">★yesjoyâ˜?/a> 2007-06-20 10:53 <a href="http://www.aygfsteel.com/yesjoy/articles/125266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ISO软äšg工程模板(1)可行性研½I¶æŠ¥å‘?http://www.aygfsteel.com/yesjoy/articles/125265.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 20 Jun 2007 02:51:00 GMThttp://www.aygfsteel.com/yesjoy/articles/125265.htmlhttp://www.aygfsteel.com/yesjoy/comments/125265.htmlhttp://www.aygfsteel.com/yesjoy/articles/125265.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/125265.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/125265.html转脓来自åQ?a >http://www.linuxdby.com/html/linux/system/20070505/27666.html

1. 引言

 

1.1 ¾~–写目的

  [¾~–写本可行性研½I¶æŠ¥å‘Šçš„目的åQŒæŒ‡å‡ºé¢„期的读者。]

1.2 背景

  a.[æ‰€å»ø™®®å¼€å‘的软äšg¾pȝ»Ÿçš„名¿UŽÍ¼›]
  b.[本项目的ä»ÕdŠ¡æå‡ºè€…ã€å¼€å‘è€…ã€ç”¨æˆ·åŠå®žçŽ°è¯¥èÊY件的计算站或计算机网¾lœï¼›]
  c.[该èÊYä»¶ç³»¾lŸåŒå…¶ä»–¾pȝ»Ÿæˆ–其他机构的基本的相互来往关系。]

1.3 定义

  [列出本文件中用到的专门术语的定义和外文首字母¾l„词的原词组。]

1.4 参考资�/strong>

  [列出用得着的参考资料。]

2. 可行性研½I¶çš„前提

 

  [说明å¯Òމ€å»ø™®®å¼€å‘的软äšg的项目进行可行性研½I¶çš„前提。]

2.1 要求

  [说明å¯Òމ€å»ø™®®å¼€å‘的软äšg的基本要求。]

2.2 目标

  [è¯´æ˜Žæ‰€å»ø™®®¾pȝ»Ÿçš„主要开发目标。]

2.3 条äšg、假定和限制

  [说明对这™å¹å¼€å‘中¾l™å‡ºçš„æ¡ä»¶ã€å‡å®šå’Œæ‰€å—到期的限制。]

2.4 ˜q›è¡Œå¯è¡Œæ€§ç ”½I¶çš„æ–ÒŽ³•

  [说明˜q™é¡¹å¯è¡Œæ€§ç ”½I¶å°†æ˜¯å¦‚何进行的åQŒæ‰€å»ø™®®çš„ç³»¾lŸå°†æ˜¯å¦‚何评ä»ïLš„åQŒæ‘˜è¦è¯´æ˜Žæ‰€ä½¿ç”¨çš„基本方法和½{–略。]

2.5 评ä­hž®ºåº¦

  [说明对系¾lŸè¿›è¡Œè¯„ä»äh—¶æ‰€ä½¿ç”¨çš„主要尺度。]

3. 对现有系¾lŸçš„分析

 

  [˜q™é‡Œçš„现有系¾lŸæ˜¯æŒ‡å½“前实际ä‹É用的¾pȝ»ŸåQŒè¿™ä¸ªç³»¾lŸå¯èƒ½æ˜¯è®¡ç®—机系¾lŸï¼Œä¹Ÿå¯èƒ½æ˜¯ä¸€ä¸ªæœºæ¢°ç³»¾lŸç”šè‡Ïx˜¯ä¸€ä¸ªäh工系¾lŸã€‚]
  [分析现有¾pȝ»Ÿçš„目的是ä¸ÞZº†˜q›ä¸€æ­¥é˜æ˜Žå¾è®®ä¸­çš„开发新¾pȝ»Ÿæˆ–修改现有系¾lŸçš„必要性。]

3.1 处理‹¹ç¨‹å’Œæ•°æ®æµ½E?/strong>

  [说明现有¾pȝ»Ÿçš„基本的处理‹¹ç¨‹å’Œæ•°æ®æµ½E‹ã€‚æ­¤‹¹ç¨‹å¯ç”¨å›¾è¡¨åÏxµ½E‹å›¾çš„åŞ式表½Cºï¼Œòq¶åŠ ä»¥å™˜q°ã€‚]

3.2 工作负荷

  [列出现有¾pȝ»Ÿæ‰€æ‰¿æ‹…的工作及工作量。]

3.3 费用开�/strong>

  [列出ç”׃ºŽ˜qè¡ŒçŽ°æœ‰¾pȝ»Ÿæ‰€å¼•è“v的费用开支。]

3.4 人员

  [列出ä¸ÞZº†çŽ°æœ‰¾pȝ»Ÿçš„运行和¾l´æŠ¤æ‰€éœ€è¦çš„人员的专业技术类别和数量。]

3.5 讑֤‡

  [列出现有¾pȝ»Ÿæ‰€ä½¿ç”¨çš„各¿Uè®¾å¤‡ã€‚]

3.6 局限�/strong>

  [列出本系¾lŸçš„主要局限性。]

4. æ‰€å»ø™®®çš„ç³»¾l?/h3>

 

4.1 å¯Òމ€å»ø™®®¾pȝ»Ÿçš„说æ˜?/strong>

  [æ¦‚æ‹¬åœ°è¯´æ˜Žæ‰€å»ø™®®¾pȝ»ŸåQŒåƈ说明在第2条中列出的那些要求将如何得到满èƒöåQŒè¯´æ˜Žæ‰€ä½¿ç”¨çš„基本方法及理论æ ÒŽ®ã€‚]

4.2 处理‹¹ç¨‹å’Œæ•°æ®æµ½E‹ã€?/strong>

  [¾l™å‡ºæ‰€å»ø™®®¾pȝ»Ÿçš„处理流½E‹å¼å’Œæ•°æ®æµ½E‹ã€‚]

4.3 改进之处

  [æŒ?.2æ¡ä¸­åˆ—å‡ºçš„ç›®æ ‡ï¼Œé€é¡¹è¯´æ˜Žæ‰€å»ø™®®¾pȝ»Ÿç›¸å¯¹äºŽçŽ°å­˜ç³»¾lŸå…·æœ‰çš„æ”¹è¿›ã€‚]

4.4 影响

  [说明新提出的讑֤‡è¦æ±‚及对现存¾pȝ»Ÿä¸­å°šå¯ä‹É用的讑֤‡™åÖM½œå‡ºçš„修改。]

  4.4.1.对设备的影响
  [说明新提出的讑֤‡è¦æ±‚及对现存¾pȝ»Ÿä¸­å°šå¯ä‹É用的讑֤‡™åÖM½œå‡ºçš„修改]

  4.4.2.对èÊY件的影响
  [说明ä¸ÞZº†ä½¿çŽ°å­˜çš„åº”ç”¨è½¯äšg和支持èÊYä»¶èƒ½å¤ŸåŒæ‰€å»ø™®®¾pȝ»Ÿç›”R€‚应åQŒè€Œéœ€è¦å¯¹˜q™äº›è½¯äšg所˜q›è¡Œçš„修改和补充。]

  4.4.3.对用户单位机构的影响
  [说明ä¸ÞZº†å»ºç«‹å’Œè¿è¡Œæ‰€å»ø™®®¾pȝ»ŸåQŒå¯¹ç”¨æˆ·å•位机构、äh员的数量和技术水òq³ç­‰æ–šw¢çš„全部要求。]

  4.4.4.对系¾lŸè¿è¡Œè¿‡½E‹çš„影响
  [è¯´æ˜Žæ‰€å»ø™®®¾pȝ»Ÿå¯¹è¿è¡Œè¿‡½E‹çš„影响。]

  4.4.5.对开发的影响
  [说明对开发的影响。]

  4.4.6.对地点和设施的媄å“?br>  [说明对徏½{‘物攚w€ çš„要求及对环境设施的要求。]

  4.4.7.对经费开支的影响
  [æ‰ÆD¦è¯´æ˜Žä¸ÞZº†æ‰€å»ø™®®¾pȝ»Ÿçš„开发,¾lŸè®¡å’Œç»´æŒè¿è¡Œè€Œéœ€è¦çš„各项¾lè´¹å¼€æ”¯ã€‚]

4.5 技术条件方面的可能�/strong>

  [本节应说明技术条件方面的可能性]

5. 可选择的其他系¾lŸæ–¹æ¡?/h3>

 

  [æ‰ÆD¦è¯´æ˜Žæ›¾è€ƒè™‘˜q‡çš„æ¯ä¸€¿Uå¯é€‰æ‹©çš„ç³»¾lŸæ–¹æ¡ˆï¼ŒåŒ…括需开发的和可从国内国外直接购买的åQŒå¦‚果没有供选择的系¾lŸæ–¹æ¡ˆå¯è€ƒè™‘åQŒåˆ™è¯´æ˜Ž˜q™ä¸€ç‚V€‚]

5.1 可选择的系¾lŸæ–¹æ¡?

  [说明可选择的系¾lŸæ–¹æ¡?åQŒåƈ说明它末被选中的理由。]

5.2 可选择的系¾lŸæ–¹æ¡?

  [按类ä¼?ã€?条的方式说明½W?个乃至第n个可选择的系¾lŸæ–¹æ¡ˆã€‚]
  [……]

6. 投资及效益分�/h3>

 

6.1 支出

  [对于所选择的方案,说明所需的费用,如果已有一个现存系¾lŸï¼Œåˆ™åŒ…括该¾pȝ»Ÿ¾l§ç®‹˜qè¡ŒæœŸé—´æ‰€éœ€çš„费用。]

  6.1.1 åŸºæœ¬å»ø™®¾æŠ•资
  [包括采购、开发和安装所需的费用。]

  6.1.2 其他一‹Æ¡æ€§æ”¯å‡?

  6.1.3 非一‹Æ¡æ€§æ”¯å‡?br>

  [列出在该¾pȝ»Ÿç”Ÿå‘½æœŸå†…按月或按季或按年支出的用于运行和¾l´æŠ¤çš„费用。]

6.2 收益

  [对于所选择的方案,说明能够带来的收益,˜q™é‡Œæ‰€è¯´çš„æ”¶ç›ŠåQŒè¡¨çŽîCؓ开支费用的减少或避免、差错的减少、灵‹zÀL€§çš„增加、动作速度的提高和½Ž¡ç†è®¡åˆ’æ–šw¢çš„æ”¹˜q›ç­‰åQŒåŒ…括:

  6.2.1 一‹Æ¡æ€§æ”¶ç›Š]
  [说明能够用äh民币数目表示的一‹Æ¡æ€§æ”¶ç›Šï¼Œå¯æŒ‰æ•°æ®å¤„理、用戗÷€ç®¡ç†å’Œæ”¯æŒ½{‰é¡¹åˆ†ç±»å™è¿°ã€‚]

  6.2.2 非一‹Æ¡æ€§æ”¶ç›?br>  [说明在整个系¾lŸç”Ÿå‘½æœŸå†…ç”±äºŽè¿è¡Œæ‰€å»ø™®®¾pȝ»Ÿè€Œå¯¼è‡´çš„æŒ‰æœˆçš„、按òq´çš„能用人民币数目表½Cºçš„æ”¶ç›ŠåQŒåŒ…括开支的减少和避免。]

6.2.3 不可定量的收ç›?br>  [逐项列出无法直用人民币表½Cºçš„æ”¶ç›Šã€‚]

 

6.3 收益/投资�/strong>

  [求出整个¾pȝ»Ÿç”Ÿå‘½æœŸçš„æ”¶ç›Š/投资比倹{€‚]

6.4 投资回收周期

  [求出收益的篏计数开始超˜q‡æ”¯å‡ºçš„累计数的旉™—´ã€‚]

6.5 敏感性分�/strong>

  [是指一些关键性因素与˜q™äº›ä¸åŒ¾cÕdž‹ä¹‹é—´çš„合理搭配、处理速度要求、设备和软äšg的配¾|®ç­‰å˜åŒ–æ—Óž¼Œå¯¹å¼€æ”¯å’Œæ”¶ç›Šçš„媄响最灉|•çš„范围的估计。]

7. ½C¾ä¼šå› ç´ æ–šw¢çš„可能æ€?/h3>

 

7.1.[法律斚w¢çš„可行性]

7.2.[使用斚w¢çš„可行性]

8. ¾l“论

 

  [在进行可行性研½I¶æŠ¥å‘Šçš„¾~–制æ—Óž¼Œå¿…须有一个研½I¶çš„¾l“论]



]]>敏捷软äšg开发(下篇åQ?/title><link>http://www.aygfsteel.com/yesjoy/articles/62680.html</link><dc:creator>★yesjoyâ˜?/dc:creator><author>★yesjoyâ˜?/author><pubDate>Wed, 09 Aug 2006 15:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/yesjoy/articles/62680.html</guid><wfw:comment>http://www.aygfsteel.com/yesjoy/comments/62680.html</wfw:comment><comments>http://www.aygfsteel.com/yesjoy/articles/62680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yesjoy/comments/commentRss/62680.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yesjoy/services/trackbacks/62680.html</trackback:ping><description><![CDATA[ <h2>敏捷软äšg开发(下篇åQ?/h2> <hr width="95%" color="red" size="1" /> <font size="2">NetReptile推荐 [2005-7-17]</font> <br /> <font size="2">出处åQšZDNet</font> <br /> <font size="2">作者:Brian Swan</font> <br /> <font size="2"> <font size="+0"><br /><br /><p></p><p></p><p>在敏捯‚ÊY件开发方法上中下¾pÕdˆ—的最后一½‹‡æ–‡ç« é‡ŒåQŒæˆ‘们将探讨开发小¾l„如何与客户交互åQŒå¦‚何让其参与到开发过½E‹é‡Œæ¥ã€?/p><p>在《敏捯‚ÊY件开发》上中下¾pÕdˆ—的上½‹‡é‡ŒåQŒæˆ‘们了解了开发äh员做法以及技术优势如何带来质量的显著提高。在中篇里,我们探讨了开发小¾l„做法以及如何徏立一个效率最高的开发小¾l„,òq‰™‡ç‚¹ç ”½I¶äº†ä»£ç ¾~–写标准、连¾l­é›†æˆå’Œç”¨äºŽæè¿°¾pȝ»Ÿçš„通用语言。现在,我们要看看最外面的圆环——“统一ž®ç»„做法åQˆone team practiceåQ‰â€ï¼Œ˜q™å…¶ä¸­åŒ…括开发äh员、测试ähå‘˜å’Œå®¢æˆ·â€”â€”åÆˆå¸®åŠ©æ›´å¥½åœ°åè°ƒä¸šåŠ¡å’ŒITã€?/p><p>协调业务和IT——“统一ž®ç»„”做æ³?br />敏捷软äšg开发里的统一ž®ç»„指的是敏捷开发小¾l„和所有的利益相关äºÞZؓ了一个共同的目标¾l“成一个团队工作。尽½Ž¡å°¾l„里的每个成员都必须把各自主要精力放在具体的ä»ÕdŠ¡ä¸Šï¼Œä½†æ˜¯ž®ç»„æ›´å–œ‹Æ¢å¼€æ”„¡š„、真诚的和频¾Jçš„æ²Ÿé€šï¼Œè€Œä¸æ˜¯æš—地里的操作ã€?/p><p>¾lŸä¸€ž®ç»„å¼ø™°ƒç”±å¼€å‘äh员作出技术决定而由客户作出业务军_®šåQŒä¸€è´¯å¦‚此,毫无例外。高度的交流åQŒä¾‹å¦‚每日例会以及项目辐ž®„(在《中½‹‡ã€‹é‡Œè®¨è®º˜q‡ï¼‰ä¼šå¸®åŠ©å¢žåŠ äº¤‹¹åƈ不断持箋下去åQŒä»¥¼‹®ä¿åŠæ—¶èŽ·å¾—é¢‘ç¹çš„åé¦ˆä¿¡æ¯ã€?/p><p>˜q™ä¸€æ¦‚念对于ž®†æ•æ·å¼€å‘的所有元素集中到一èµäh˜¯å¿…需的ã€?/p><p>创徏背景òq¶å–得需求——第一æ­?br />在你开始敏捷开发的˜q™ä¸€éƒ¨åˆ†ä¹‹å‰åQŒä»Žå®¢æˆ·ã€ä¸šåŠ¡æ–¹å’Œç”¨æˆ·å–å¾—éœ€æ±‚ä¿¡æ¯ï¼›ä»–ä»¬æ‰æ˜¯å®šä¹‰éœ€æ±‚çš„äººã€‚ç”±äºŽä¸šåŠ¡æ–¹åœ¨è¿™äº›åšæ³•ä¸­æ‰®æ¼”äº†è‡³å…³é‡è¦çš„è§’è‰²åQŒæ‰€ä»¥ä»–们必™åÕd®Œå…¨ç†è§£è‡ªå·±åœ¨æ•æ·å¼€å‘环境里的角色是什么,以及他们能够做到什么。让光™«˜é€Ÿè¿è½¬è“v来肯定需要进行讨è®ÞZ¼šå’Œå…¶ä»–培训工作ã€?/p><p>在解释敏捷开发的时候,需要向业务人员阐明的重要优势有åQ?/p><ol><li>能够åQŒåœ¨ä»ÖM½•时候,改变其对最ž®æˆæœ¬çš„观点ã€? </li><li>能够æ ÒŽ®æ¥è‡ªå¸‚场或其他地方的反馈˜q›è¡Œè°ƒæ•´å’Œåº”变ã€? </li><li>在ä“Q何时候都知道™å¹ç›®çš„状态,òq¶å…·å¤‡å¯é¢„见能力ã€? </li><li>能够从业务的角度参与™å¹ç›®çš„æŒ‡å¯¼å·¥ä½œã€?</li></ol><p><em>重要的成功因ç´?/em></p><ul><li>理解——客户将需要某¿Uç¨‹åºçš„培训才能¼‹®åˆ‡åœ°ç†è§£ä»–们在敏捷开发环境里扮演的角艌Ӏ? </li><li>沟通——以协作的åŞ式与客户˜q›è¡Œäº¤è°ˆå’Œæ²Ÿé€šæ˜¯ååˆ†é‡è¦çš„。在整个™å¹ç›®˜q‡ç¨‹ä¸­éƒ½åº”该˜q™æ ·åQŒä½†æ˜¯ä»Žä¸€å¼€å§‹å°±åšæŒ˜q™æ ·æ˜‘Ö¾—ž®¤å…¶é‡è¦ã€?</li></ul><p>客户åQä¸šåŠ¡æ–¹ä»‹å…¥â€”â€”ç¬¬äºŒæ­¥<br />在这一步骤里,我们要通过用户的素材和验收‹¹‹è¯•让客户参与到开发过½E‹é‡Œæ¥ã€‚很多客户可能在¾~–写用户素材或者验收测试上¾léªŒä¸å¤šæˆ–者完全没有经验;再强调一‹Æ¡ï¼Œå¯èƒ½éœ€è¦æŸ¿Uç¨‹åº¦çš„讨论会或者培训来帮助其完成ä“Q务ã€?/p><p><b>用户的素æ?/b><br />用户的素材就是“需求”。每个素材都代表¾pȝ»Ÿéœ€è¦å¦‚何解å†ÏxŸä¸ªç‰¹å®šçš„问题。然而,用户的素材不是大量的写满需求的文档åQŒè€Œæ˜¯å†™åœ¨ç´ æå¡ä¸ŠåQŒåº”该作为实现更˜q›ä¸€æ­¥è°ˆè¯çš„引子ã€?/p><p><b>好的素材需要什么?</b><br />客户åQŒæˆ–者更加常见的客户ž®ç»„åQŒéœ€è¦èšåœ¨ä¸€èµøP¼Œåœ¨ä¸€å¼?x3寸的素材卡上为系¾lŸç¼–写用æˆïL´ æã€‚我们用财物½Ž¡ç†è½¯äšg公司3Q Solutions来作ä¸ÞZ¾‹å­ï¼š</p><p>“客户希望能够获得一个规则引擎,从而可以用规则来评估顾客的¾læµŽçŠ¶æ€ã€‚â€?/p><p>˜q™ä¸€è¦æ±‚或者素材存在的问题是太不明¼‹®ã€‚编写好素材卡的正确规则应该是INVESTåQ?/p><p><strong>独立çš?/strong><strong>åQ?/strong><strong>I</strong>ndependentåQ?br />可协商的åQ?strong>N</strong>egotiableåQ?br />垂直的(<strong>V</strong>erticalåQ?br />可估计的åQ?strong>E</strong>stimableåQ?br />短小的(<strong>S</strong>mallåQ?br />可测试的åQ?strong>T</strong>estableåQ?/p><p>面的素材昄¡„¶æ˜¯ä¸å¯ä¼°è®¡çš„åQˆå¾ˆéš‘Öˆ¤æ–­å®ƒéœ€è¦èŠ±å¤šé•¿æ—‰™—´åQ‰ã€ä¸çŸ­å°çš„(˜q™æ˜¯ä¸€ä¸ªéžå¸¸å·¨å¤§çš„、不明确的要求)åQŒä¹Ÿæ˜¯ä¸å¯æµ‹è¯•çš„åQˆä½ å¦‚何能够对像˜q™æ ·çš„要求进行由‹¹‹è¯•驱动的开发工作?åQ‰ã€‚所以下面这样一个素材可能会更好åQ?/p><p>“客户希望能够分析顾客当前拥有的现金量——太多、太ž®‘,˜q˜æ˜¯åˆšåˆšå¥½ï¼ˆå–决于生‹zÀL–¹å¼çš„æˆæœ¬å’Œå¯¹é£Žé™©çš„æ€åº¦åQ‰ã€‚â€?/p><p>˜q™ä¸€ç´ æž®±æ»¡­‘³äº†æˆ‘们INVEST标准的所有要求。当˜q™ä¸ªç´ æåœ¨å°¾l„(客户和开发方åQ‰ä¸­è®¨è®ºçš„æ—¶å€™ï¼Œå®ƒå¾ˆæ˜Žæ˜¾åœ°å°±ä¼ è¾¾äº†å®¢æˆïLœŸæ­£éœ€è¦çš„æ˜¯å…·å¤‡è¯´æ˜Žè§„则引擎的能力。上面的例子表明åQŒä¸€æ¡è§„则就­‘›_¤Ÿè¯´æ˜Žç”¨æˆ·çš„需要。这ž®±æ˜¯¾~–写素材的方法。重要的是,素材要引发äñ”生对话,而对话带来对客户需求的明确和真正理解ã€?/p><p><b>沟é€?/b><br />要记住,素材的主导思想是,它们是发生更˜q›ä¸€æ­¥å¯¹è¯çš„引子。其原因是语­a€è¦ä»¥ä¸Šä¸‹æ–‡å’Œç†è§£ä¸ºåŸº¼‹€ã€‚没有提问,没有对话åQŒæˆ‘们将无法体会其中微妙的含义。我们就以Matt Cohn’s Buffalo˜q™ä¸ªçŸ­è¯­ä¸ÞZ¾‹å­ã€‚BuffaloåQˆå¸ƒæ³•罗市)是美国纽¾U¦å·žçš„一座城市,是野牛(bisonåQ‰çš„同义词,˜q˜æœ‰åŠ¨è¯â€œæ¬ºéª—å’Œå›°æƒ‘â€çš„æ„æ€ã€‚æ‰€ä»¥è¿™æ ·ä¸€ä¸ªå¥å­â€œBuffalobuffalobuffalobuffalo”是成立的。或者更加明¼‹®ä¸€ç‚¹å°±æ˜¯æ¥è‡ªï¼ˆ¾U½çº¦å·žï¼‰å¸ƒæ³•¾|—市的野牛欺骗了其他的野牛(bison from Buffalo (NY) intimidate and confuse other buffaloåQ‰ã€‚所以如果没有上下文åQŒè¿™ä¸ªçŸ­è¯­å°±æ˜¯æ¯«æ— æ„ä¹‰çš„ã€?/p><p>åœ¨æ¯å¼ ç´ æå¡çš„èƒŒé¢ï¼Œæˆ‘ä»¬å»ø™®®å®¢æˆ·å¿«é€Ÿè®°ä¸‹ä“Q何有关验收测试的æƒÏx³•ã€?/p><p><b>验收‹¹‹è¯•</b><br />验收‹¹‹è¯•用来保证åQ?/p><ol><li>客户¼‹®ä¿¡¾l™å®šçš„功能能够满­‘Œ™®¾è®¡çš„要求ã€? </li><li>¾l™äºˆå¼€å‘äh员一个明¼‹®çš„停止点:当验收测试通过的时候,功能ž®Þp¢«å®žçŽ°äº†ã€?</li></ol><p>在敏捷开发项目里åQŒå®¢æˆ¯‚¦¾~–写所有的验收‹¹‹è¯•。在™å¹ç›®åˆæœŸåQŒå¼€å‘äh员可能需要与客户紧密合作åQŒä»¥¾~–写验收‹¹‹è¯•的内宏V€?/p><p>我们˜q˜å¾è®®ä½ ä½¿ç”¨AT框架òq¶å°†‹¹‹è¯•自动化。开人员人需要能够随着他们不断加入新功能而反复地˜qè¡Œ˜q™äº›‹¹‹è¯•ã€?/p><p>下面ž®±æ˜¯ä¸Žä¸Š˜q°ç´ æç›¸å…³çš„AT框架的例子ã€?/p><p>交互‹¹‹è¯•åQˆç¤ºä¾‹ï¼‰</p><p>//概述<br />“分析顾客的现金收支状况åQŒè€ƒå¯Ÿä»–们在给定的生活方式成本和对风险的态度的条件下是否握有˜q‡å¤šçš„现金。â€?/p><p></p><table cellspacing="3" cellpadding="0" width="400" border="0"><tbody><tr><td><p>//讄¡½®™å‘Ö®¢æ•°æ®</p></td><td><p> </p></td><td><p> </p></td></tr><tr><td><p>UserClicksMainMenu</p></td><td><p>MenuFinancialObjectives</p></td><td><p> </p></td></tr><tr><td><p>UserInputsText</p></td><td><p>FinancialObjectivesAttitudeToRisk</p></td><td><p>â€?åQä½Žå›žæŠ¥åQé•¿¾U¿æŠ•资â€?/p></td></tr><tr><td><p>UserClicksMainMenu</p></td><td><p>MenuCurrentBalanceSheet</p></td><td><p> </p></td></tr><tr><td><p>UserInputsText</p></td><td><p>CurrentBalanceSheetTotalCash</p></td><td><p>30000</p></td></tr><tr><td><p>UserClicksMainMenu</p></td><td><p>MenuFinancialObjectives</p></td><td><p> </p></td></tr><tr><td><p>UserInputsText</p></td><td><p>FinancialObjectivesLifestyleCost</p></td><td><p>25000</p></td></tr><tr><td><p>//现金规则</p></td><td><p> </p></td><td><p> </p></td></tr><tr><td><p>TestValueOfText</p></td><td><p>AnalyseObservation</p></td><td><p>“如果担心风险,你应该维持不­‘…过#12,500的现金结余。â€?/p></td></tr><tr><td><p>TestValueOfText</p></td><td><p>AnalyseRecommendation</p></td><td><p>“考虑ž®?17,500从现金帐戯‚{¿UÕdˆ°å¯æŠ•资的资äñ”上。â€?/p></td></tr><tr><td><p>TestValueOfText</p></td><td><p>AnalyseDestination</p></td><td><p>“查询投资本金总额åQŒå°†å¤šä½™çš„现金è{¿UÕdˆ°çŽ°é‡‘å­˜å‚¨å¸æˆ·åQŒé™¤éžç”¨çŽ°é‡‘è´­ä¹°èµ„äñ”。â€?/p></td></tr><tr><td><p>//hyperlink</p></td><td><p> </p></td><td><p> </p></td></tr><tr><td><p>UserClicksControl</p></td><td><p>AnalyseDestination</p></td><td><p> </p></td></tr><tr><td><p>TestValueOfLabel</p></td><td><p>WorkAreaTitle</p></td><td><p>“本金总额â€?/p></td></tr></tbody></table><p>åœ?Q公司åQŒå®¢æˆ·ä¼š¾~–写验收‹¹‹è¯•åQŒåƈ以电子文本的形式每天提交¾l™å¼€å‘小¾l„。所有的验收‹¹‹è¯•都会被尽早地提供¾l™å¼€å‘小¾l„。这一˜q‡ç¨‹ä¸Žæµ‹è¯•-¾~–码åQé‡æ•´åó@环配合得相当好,它ä‹É得开发äh员可以在˜q›è¡ŒéªŒæ”¶‹¹‹è¯•å¤ÞpÓ|之后åQŒè¿è¡Œé€šè¿‡‹¹‹è¯•åQç¼–码-重整循环åQŒç„¶åŽé‡æ–°è¿æ–°éªŒæ”¶æµ‹è¯•,直到看到光™€šè¿‡‹¹‹è¯•。每个素材都可能多次˜q›è¡ŒéªŒæ”¶‹¹‹è¯•åQŒä½†æ˜¯ä¸€æ—¦æ‰€æœ‰çš„验收‹¹‹è¯•都通过了,那么该素材/功能的实现就完成了ã€?/p><p><em>重要的成功因ç´?/em></p><ul><li>不慌不忙——用æˆïL´ æä¸å®ÒŽ˜“写好åQŒæ‰€ä»¥åœ¨˜q›è¡Œé¦–批ä»ÕdŠ¡å’Œè®¨è®ÞZ“Q务的时候给自己充裕的时间ã€? </li><li>验收‹¹‹è¯•帮助——开发äh员可能需要从一开始就与客户一èµïL¼–å†™éªŒæ”¶æµ‹è¯•ã€‚ä¸“é—¨äØ“˜q™ä¸€ä»ÕdŠ¡æ‹¨å‡ºæ—‰™—´â€”—好的验收测试将带来不同å¯Õd¸¸çš„æ”¶èŽ—÷€? </li><li>å¯ÀL±‚帮助——如果意识到你和你的ž®ç»„需要帮助——去å¯ÀL±‚帮助吧,不要犹èõUåQ? </li><li>已有的需求文档——如果有现成的需求文档,你要ž®†å®ƒç”¨ä½œ¾~–写素材的基¼‹€ã€‚要è®îC½åQŒæŠŠ˜q™äº›æ–‡æ¡£å½“作“新的”素材。它们是对话的要点,而不是定好的要求ã€?</li></ul><p>½{–划——第三步<br />敏捷软äšg开发有三个层次的策划:</p><ol><li>高层‹Æ¡çš„发布½{–划åQŒåœ¨˜q™é‡Œ½{–划™å¹ç›®çš„æ‰€æœ‰å‘布。这通常取决于项目的规模åQŒä½†æ˜¯æŸäº›é¡¹ç›®çš„多次发布要求寚w•¿è¾?8个月的期限的高层‹Æ¡ç­–划ã€? </li><li>发布½{–划åQŒç¬¬ä¸€‹Æ¡å‘布在˜q™é‡Œè¢«ç­–划。每‹Æ¡å‘布之间的间隔ä¸?个月ã€? </li><li>反复½{–划åQŒé€šè¿‡å…¶æ¥½{–划下两个星期的工作ã€?</li></ol><p>˜q™ä¸€ä¸‰çñ”½{–划˜q‡ç¨‹çš„目的是让小¾l„首先理解最¾lˆçš„目标åQŒä½†æ˜¯åªè¯¦ç»†½{–划他们现在所知的内容——未来两周的工作ã€?/p><p><b>发布½{–划</b><br />在高层次发布½{–划阶段åQŒå®¢æˆ·å’Œå¼€å‘äh员应该在一起共同讨论和理解整个¾pȝ»Ÿã€‚通常已经存在的需求文档能够用于启动这一讨论。在理想状况下,客户应该在开会的时候带上含有即ž®†å‘布的大多数内容的素材卡ã€?/p><p>在会议过½E‹ä¸­åQŒå¼€å‘äh员将需要估计素材的隑ֺ¦ã€‚这可以在会议过½E‹ä¸­æˆ–者在会议之后˜q›è¡Œã€‚我们徏议每个ähç›æ€º’比较各自素材åQŒåƈ把具有相同难度的素材集中åˆîC¸€èµ—÷€‚然后,使用一个从最½Ž€å•到最隄¡š„‹¹‹é‡è¡¨ï¼Œä½ å°±å¯ä»¥å¼€å§‹ä¼°è®¡æ¯ä¸ªç´ æï¼ˆçš„难度了åQ‰ã€‚小¾l„ä‹É用不同的æ–ÒŽ³•来给素材评分åQŒæŒ‰ç…§éš¾åº¦åˆ†åˆ«æ‰“ä¸?åˆ?0分ã€?/p><p>现在客户能够½{–划最初的高层‹Æ¡å‘布计划了。高层次发布òq¶ä¸ä¸€å®šè¦ååˆ†¾_„¡¡®åQŒä¼˜å…ˆé¡ºåºå’Œä¼°è®¡éƒ½ä¸éœ€è¦å¾ˆå¯é åQŒä½†æ˜¯å®ƒä¼šäØ“ž®ç»„定下方向和提供决½{–çš„­‘›_¤Ÿä¿¡æ¯ã€?/p><p><b>ž®åž‹å‘布</b><br />下一步,客户需要拿èµîC¼°è®¡å¥½çš„素材卡åQŒåƈæ ÒŽ®æœ€˜q‘一个发布将素材的重要性的优先™åºåºæŽ’列好。客户需要考虑它们需要系¾lŸç«‹å›_®žçŽîC»€ä¹ˆï¼Œå› è€Œè¿™äº›ç´ æå°†æž„成卛_°†˜q›è¡Œçš„发布。这些估计在˜q™é‡Œå˜å¾—十分重要åQŒå› ä¸ºå¼€å‘äh员已¾lä¼°è®¡çš„æ˜¯ä»–们能够给定的发布旉™—´é‡Œå®Œæˆä»€ä¹ˆï¼›åQˆè¿™ä¸ªç»™å®šçš„æ—‰™—´åQ‰åœ¨å¤§å¤šæ•°æƒ…况下æ˜?个月ã€?/p><p>短期发布循环可以保证紧密的反馈åó@环,˜q˜èƒ½è®©å°¾l„把¾_‘ÖŠ›æ”‘Öœ¨ä¸Žé¡¹ç›®ç´§å¯†ç›¸å…³çš„重要目标上ã€?/p><p><b>反复½{–划</b><br />现在ž®ç»„éœ€è¦äØ“æœªæ¥ä¸¤å‘¨åˆ¶å®šå…·ä½“çš„è®¡åˆ’ã€‚å†å¼ø™°ƒä¸€‹Æ¡ï¼Œå®¢æˆ·å¿…é¡»ž®†ç´ æçš„优先™åºåºæŽ’列出来åQŒè¯¦¾l†è¯´æ˜Žä»–们希望在未来两周里看到的功能ã€?/p><p>˜q™äº›ç´ æå¡ç„¶åŽå°±è¢«æ”¾åˆîC¸¤å‘¨çš„反复åQˆå‘布里åQ‰ã€‚最˜q‘的一‹Æ¡åå¤å°†æ˜¯å°¾l„立卌™¿›è¡Œçš„工作。他们将交付˜q™ä¸ªåå¤åQŒä¹Ÿž®±æ˜¯å…¨åŠ›å·¥ä½œã€èÊY件测试和取得反馈åQˆå³å†æ¬¡ä¸ºæœªæ¥ä¸¤å‘¨ç­–划)åQŒç„¶åŽå†‹Æ¡å¼€å§‹ã€‚如果素材在一个反复之前就完成了,开发äh员会要求获得更多的素材。如果所有的素材都看èµäh¥æ˜¯æ— æ³•完成的åQŒé‚£ä¹ˆå¼€å‘äh员和客户要共同将素材¿UÕdˆ°ä¸‹ä¸€ä¸ªåå¤é‡Œæˆ–者适当地分割一下素材ã€?/p><p>两周的反复让客户可以充分利用ä»ÖM½•变化。例如,3Q公司¼„°åˆ°äº†ä¸€ä¸ªå¾ˆæœ‰é¢„见能力的客户。他意识åˆîC¸€ä¸ªæŒ‰è®¡åˆ’攑֜¨å‘布后期的素材事实上需要更早完成。在¾lè¿‡ä¸€ä¸ªç®€çŸ­çš„讨论之后åQŒå°¾l„用客户要求的素材替换掉了当前发布里å…ähœ‰åŒç­‰ä»·å€¼çš„素材。那么成本呢åQŸåªæ˜¯ä¸€ä¸?5分钟的对话ã€?/p><p>以上只是对策划过½E‹å¦‚何工作的½Ž€è¦æ¦‚˜q°ã€‚我们徏议寻求对该过½E‹è¿™ä¸€éƒ¨åˆ†çš„一些帮助或者指å¯û|¼Œå› äؓ它可能会十分复杂åQŒä»”¾l†è°ƒæ•´å¸¸å¸æ€¹Ÿæ˜¯å¿…需的ã€?/p><p>˜q™ä¸€åå¤˜q‡ç¨‹å’Œå‘布策划分别要每两个星期和每三个月˜q›è¡Œä¸€‹Æ¡ã€?/p><p><em>重要的成功因ç´?/em></p><ul><li>在反复中期进行一‹Æ¡æ£€æŸ¥â€”—尽早检查小¾l„在反复中期的进展情å†üc€? </li><li>估计ž®±æ˜¯˜q™æ ·â€”—小¾l„一开始的估计常常会偏¼›È”š˜qœâ€”—开发äh员都是乐观主义者!但是随着ž®ç»„˜q›å±•åˆ°æ–°çš„åå¤åÆˆé€‚åº”˜q™ä¸€˜q‡ç¨‹åQŒä¼°è®¡ï¼ˆçš„准¼‹®æ€§ï¼‰æˆ–者速度åQˆå°¾l„工作有多快åQ‰å°±ä¼šç¡®å®šä¸‹æ¥ã€? </li><li>昨天的天气——一旦完成了一个反复,你将对小¾l„的速度有一个粗略的概念——两个星期里可以交付多少素材。这ž®±æ˜¯ž®ç»„认可的在未来两周里的速度和小¾l„工作量。随着ž®ç»„的成熟,具备更好地进行估计的能力åQŒä½ çš„速度可能会提高,然后固定在一个稳定的速度上ã€? </li><li>速度不是一æ ÒŽ£å­â€”—而是对管理者的提醒——速度不是用来鞭打ž®ç»„的大‹‚’;它是用来‹¹‹é‡è‡ªç„¶æ³¢åŠ¨çš„ã€? </li><li>决策——客æˆähˆ–者客户小¾l„å¿…™åÕd…·æœ‰å†³½{–权åQŒæˆ–者能够迅速进行决½{–,ž®¤å…¶æ˜¯åœ¨éœ€è¦å˜åŒ–或者适应的时候ã€? </li><li>协商的意愎쀔—客户必™åÀL„¿æ„å°±èŒƒå›´½{‰å†…容进行协商。这才是敏捷开发的工作方式åQšå°±èŒƒå›´˜q›è¡Œåå•†åQŒæŽ’列最具业务ä­h值的功能的优先顺序ã€?</li></ul><p>敏捷开发里的策划可能会很困难,所以我们徏议你åŽÕd¯»æ±‚一些帮助,òq¶èŠ±æ—‰™—´æ¥å®Œæˆå®ƒã€?/p><p>保持高效——第四步<br />逐步推进˜q™ä¸€˜q‡ç¨‹çš„æœ€ä½Ïx–¹æ³•之一是有一个在现场的客戗÷€‚最理想的方法是让客户坐在小¾l„成员当中,˜q™æ ·ž®±å¯ä»¥éšæ—¶å›ž½{”问题。这限制了开发äh员的随意猜想。此外,在现场的客户能够以最快的速度回答开发äh员的疑问ã€?/p><p>˜q™åƈ不意味着˜q™ä¸ªå®¢æˆ·ä¸åŽ»ä»Žäº‹ä»–çš„â€œæ—¥å¸¸â€å·¥ä½œï¼Œè€Œæ˜¯è¯´ä»–ž®±åœ¨å‘¨å›´å‡†å¤‡å¥½å›ž½{”问题。即佉Kš”着一层楼也会影响沟通。要˜q›è¡Œé¢å¯¹é¢çš„对话åQŒè€Œä¸æ˜¯ç”¨ç”µè¯æˆ–者电子邮件ã€?/p><p>昄¡„¶åQŒè®¾¾|®çŽ°åœºå®¢æˆ·åÆˆä¸æ€ÀL˜¯å¯èƒ½çš„,在这¿Uæƒ…况下åQŒä»–应该ž®½å¯èƒ½åœ°æŽ¥è¿‘ž®ç»„åQŒåƈž®½å¯èƒ½åœ°å‚加每日例会。如果这也不可能åQŒé‚£ä¹ˆä½ ž®Þp¦è®©ä»–参加日常会议——至ž®‘一周一‹Æ¡â€”—以¼‹®ä¿ä½ åœ¨ä¸æ–­åœ°åŽ»çš„åé¦ˆæ„è§å’Œæ²Ÿé€šã€?/p><p>对反馈和沟通的增加也需要定期进行回™å¾ã€‚这最好应该在每个反复¾l“尾的时候进行。这æ ïLš„回顾能够让小¾l„有æœÞZ¼šåä¸‹æ¥æ£€æŸ¥ä¸Šä¸€ä¸ªåå¤ï¼Œòq¶å¼„清楚什么做得好、什么做得不好,以及下一‹Æ¡èƒ½å¤ŸæŠŠä»€ä¹ˆåšå¾—更好。应该问三个问题åQšä»€ä¹ˆæœ‰ç”¨ï¼Ÿä»€ä¹ˆæ²¡æœ‰ç”¨åQŸæˆ‘们要改进什么?</p><p><em>重要的成功因ç´?/em></p><ul><li>现场与否åQŸâ€”—现场客æˆähˆ–è®æ€¼šå¸¦æ¥ä¸€äº›é—®é¢˜ï¼Œä½†æ˜¯å¦‚果可能的话˜q˜æ˜¯è¦æ‰¾ä¸€ä¸ªçŽ°åœºå®¢æˆ—÷€‚如果无法实玎ͼŒž®Þp¦å¯ÀL‰¾å…¶ä»–的途径来确保定期的沟通ã€? </li><li>回顾——把在每‹Æ¡åå¤ç»“束的时候进行回™å¾ä½œä¸ÞZ¸€æ¡çºªå¾‹å®šæ¥ä¸‹åQŒåƈ把äh们的æƒÏx³•付诸行动ã€?</li></ul><p>我们刚刚更加仔细地探讨了《上½‹‡ã€‹é‡Œ½W¬ä¸€ä¸ªå›¾è¡¨çš„外层圆环åQŒå®ƒéœ€è¦æ‰€æœ‰å‚与者的同意。这可能是敏捷开发里最困难的一部分åQŒä½†æ˜¯å®ƒèƒ½å¤Ÿå¾ˆå¥½åœ°åè°ƒä¸šåŠ¡å’ŒITåQŒè€Œä¸”其好处不仅对于业务而且对于IT也是很有价值的ã€?/p><p>æ€È»“<br />ž®½ç®¡åœ¨æœ¬¾pÕdˆ—里我们向你讲解了如何一步步地培å…ÀL•æ¯‚ÊY件开发的能力åQŒä»¥åŠå¦‚何从内到外树立开发äh员的信心åQŒç„¶åŽæ˜¯å¼€å‘小¾l„的信心åQŒæœ€åŽæ˜¯æ•´ä¸ª™å¹ç›®ž®ç»„的信心。从在Exoftware公司的经验可以看出,很多公司都选择为某个项目徏立一个完整的敏捷开发实验小¾l„,òq¶è®©ä¸€ä¸ªæŒ‡å¯ÆD€å¸ˆæ‰‹æŠŠæ‰‹åœ°å¸®åŠ©ž®ç»„。如果你选择˜q™ä¸€æ–ÒŽ³•åQŒä½ ž®†å…·æœ‰ä»Žæ‰€æœ‰åšæ³•直接获得好处的优势åQŒæ­¤å¤–,它将¾l™ä½ é€‚应你具体环境的有ä­h值的信息。简单地说有åQ?/p><p><b>实验性的敏捷软äšg开发——如何开å§?/b><br /><i>你的目标是什么?</i><br />评估你现在所处的位置以及你想要去哪里åQŒè¿™å¯¹äºŽä½¿ç”¨æ•æ·å¼€å‘做法来说是臛_…³é‡è¦çš„。这ž®†å¸®åЩ你¼‹®å®šå¸Œæœ›å–得的预期成果。对其的外部评估常常也是很有用的åQŒå› ä¸ºå®ƒä»¬å°†ä¸ºå¤„理你的问题提供一个客观的视角ã€?/p><p><i>实验性的敏捷开å?/i><br />虽然我们已经叙述了开发敏捷开发的一¿Uæ–¹æ³•,但是在一个项目上引导实现敏捷开发是理解敏捷开发方法是否适用于你的机构的最ä½Ïx–¹æ³•,它还会帮助你了解如何适应自己的环境ã€?/p><p><i>‹¹‹é‡æ ‡å‡†</i><br />如果可能的话åQŒä½ è¦åœ¨™å¹ç›®å¼€å§‹å‰æˆ–è€…åœ¨å®žçŽ°æ•æ·å¼€å‘åšæ³•ä¹‹å‰æ”¶é›†ä¸€äº›æµ‹é‡æ ‡å‡†ã€‚å³ä½¿è¿™äº›æ ‡å‡†æ¥è‡ªäºŽå…¶ä»–çš„é¡¹ç›®ï¼Œå®ƒä»¬ä¹Ÿå°†æœ‰åŠ©äºŽäØ“æ•æ·å¼€å‘å·²¾lå®žçŽ°çš„å†…å®¹æä¾›ä¸€ä¸ªè‰¯å¥½çš„åŸºå‡†ã€‚ä½ ˜q˜è¦¼‹®ä¿èƒ½å¤Ÿåœ¨æ•æ·å¼€å‘项目过½E‹ä¸­ä»¥åŠä¹‹åŽæ”‰™›†åˆîC¸€äº›é«˜æ ‡å‡†çš„æµ‹é‡æ ‡å‡†ã€‚缺é™ïLŽ‡ã€æµ‹è¯•å†…å®ÒŽˆ–者最¾lˆæœŸé™éƒ½æ˜¯å¾ˆå¥½çš„且简单易行的高标准测量标准ã€?/p><p><i>环境</i><br />要明白实验性的敏捷开发可能要求对你的物理环境˜q›è¡Œä¸€äº›æ”¹å˜ã€‚例如,开攄¡š„工作½Iºé—´æ˜¯æ•æ·å¼€å‘真正è“v效的必要条äšgã€?/p><p><i>å¯ÀL±‚帮助</i><br />外部的帮助能够指å¯ég½ çš„实验性项目迈向成功。它能够帮助你理解你在哪里以及你惛_Ž»å“ªé‡ŒåQŒåƈ且能够向你指明如何让敏捷开发适应你的环境åQŒä»Žè€Œåˆ°è¾¾è¿™ä¸€ç›®æ ‡ã€‚此外,外部帮助可以¼‹®ä¿ž®ç»„集中¾_‘ÖŠ›å›žç­”éšæ—¶å‡ºçŽ°çš„é—®é¢˜ã€‚äØ“ž®†æ•æ·å¼€å‘应用到其他工程ž®ç»„里而树立一个业务案例也是十分重要的ã€?/p><p><i>Brian Swanæ˜?a ><font color="#78ba00">Exoftware公司</font></a>教授敏捷开发的指导老师。他在敏捷开发的技术和½Ž¡ç†æ–šw¢å…ähœ‰ç›¸å½“丰富的经验,曄¡»å¸¦é¢†å¾ˆå¤šž®ç»„成功地è{换到了敏捷开发,òq¶ä»¥æ•æ·å¼€å‘的思想和做法来培训开发äh员和½Ž¡ç†äººå‘˜ã€‚他在Exoftware公司和在敏捷开发方面的工作使他到过很多公司åQŒåƈ对其开发小¾l„äñ”生了持箋的、积极的影响。Brian先前的经验还包括担ä“QNapier大学的讲师,讲授软äšg开发和人机互动。Brian可以通过<a href="mailto:bswan@exoftware.com?Subject=Builder Article"><font color="#78ba00">电子邮äšg</font></a>联系上ã€?/i></p><p></p><p></p><p> </p></font></font> <img src ="http://www.aygfsteel.com/yesjoy/aggbug/62680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yesjoy/" target="_blank">★yesjoyâ˜?/a> 2006-08-09 23:33 <a href="http://www.aygfsteel.com/yesjoy/articles/62680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>敏捷软äšg开发(中篇åQ?http://www.aygfsteel.com/yesjoy/articles/62679.html★yesjoyâ˜?/dc:creator>★yesjoyâ˜?/author>Wed, 09 Aug 2006 15:30:00 GMThttp://www.aygfsteel.com/yesjoy/articles/62679.htmlhttp://www.aygfsteel.com/yesjoy/comments/62679.htmlhttp://www.aygfsteel.com/yesjoy/articles/62679.html#Feedback0http://www.aygfsteel.com/yesjoy/comments/commentRss/62679.htmlhttp://www.aygfsteel.com/yesjoy/services/trackbacks/62679.html敏捷软äšg开发(中篇åQ?


NetReptile推荐 [2005-7-17]
出处åQšZDNet
作者:Brian Swan
 

在《敏捯‚ÊY件开发》上中下¾pÕdˆ—的上½‹‡é‡ŒåQŒæˆ‘们探讨了开发äh员做法,也回™å¾äº†æŠ€æœ¯ä¼˜åŠ¿å¦‚ä½•å¤§òq…提高èÊY件质量。第一部分把重点主要放在了‹¹‹è¯•åQç¼–码-重整循环上。现在我们è{åˆîC¸­é—´ä¸€ä¸ªåœ†çŽ¯ï¼Œçœ‹çœ‹æ•æ·å¼€å‘åšæ³•å¦‚ä½•åœ¨ž®ç»„˜q™ä¸€å±‚次发挥作用ã€?/p>

让小¾l„高效工作——小¾l„做æ³?br />一旦每个开发äh员都在紧密围¾l•中心圆环的反馈循环工作æ—Óž¼Œæˆ‘们ž®±å¯ä»¥çœ‹çœ‹æ•´ä¸ªå¼€å‘小¾l„能够如何以更加敏捷的方式工作。小¾l„这一层次的做法是敏捷开发的核心åQŒå› ä¸ºå®ƒä»¬èƒ½å¤Ÿæ˜¾½Cºå‡ºž®ç»„成员可以如何更加高效åœîC¸€èµ·å·¥ä½œåƈ推动共同˜q›è¡ŒæŠ€æœ¯å†³½{–。我们将分别从四个方面来讨论ž®ç»„的这¿Uæ”¹å˜â€”—设定基调、基于小¾l„的代码¾~–写标准、提高和保持效率、采用“统一ž®ç»„”方式(包括与开发小¾l„直接相关的东西åQ‰çš„首要步骤。我们给你ä‹D的例子来自于3Q Solutions公司åQŒè¿™æ˜¯ä¸€å®¶ç”Ÿäº§èƒ¦ç‰©ç®¡ç†ç³»¾lŸåƈ完全使用敏捷开发方法的软äšg公司ã€?/p>

讑֮šåŸø™°ƒâ€”—第一æ­?br />敏捷软äšg开发的一个中心思想是小¾l„朝着一个共同的目标工作。尽½Ž¡å¾ˆå¤šæµ½E‹éƒ½æå€¡å°¾l„工作,但是敏捷开发(真正åQ‰èžåˆäº†æ”¯æŒž®ç»„工作的做法,òq¶å°†ž®ç»„工作攑ֈ°äº†æ—¥å¸¸åšæ³•里。在开始讨论小¾l„做法之前,我们需要先为小¾l„设定一个基调,让他们开始感觉更像是一个真正的ž®ç»„ã€?/p>

开攄¡š„工作½Iºé—´
为更加开攄¡š„、基于小¾l„的敏捷开发方式设定基调的一¿Uæœ€ä½Ïx–¹æ³•是为小¾l„创造一¿Uå¼€æ”„¡š„工作½Iºé—´åQˆopen workplaceåQ‰ã€‚这意味着要徏立一个或多个开攄¡š„区域åQŒåƈž®½æœ€å¤§å¯èƒ½è¿›è¡Œæ²Ÿé€šå’Œåˆä½œã€‚你惌™¦ä¸“门了解什么样的环境能够让配对¾~–程更容易。小格间和办公室是与敏捷开发开攑ַ¥ä½œç©ºé—´æ ¼æ ég¸å…¥çš„åQŒæ‰€ä»¥åº”该避免其出现。在一家与Exoftware有合作关¾pȝš„公司里,开攄¡©ºé—´åŒºåŸŸåªè¢«ç”¨äºŽå·¥ä½œï¼Œé‡Œé¢åªæœ‰ç”¨äºŽé…å¯¹¾~–程、集成和构徏软äšg的机器。其它的所有区域都留给带有Internet˜qžæŽ¥å’Œç”µè¯çš„个äh计算机。如果你有这æ ïLš„½Iºé—´åQŒè¿™ž®±æ˜¯åº”è¯¥è€ƒè™‘çš„ä¸œè¥¿ï¼Œå› äØ“å®ƒæœ‰åŠ©äºŽæ¸…æ¥šåœ°è¡¨æ˜Žâ€œå½“æˆ‘ä»¬åœ¨å·¥ä½œåŒºçš„æ—¶å€™ï¼Œæˆ‘ä»¬åœ¨å·¥ä½œâ€ã€?/p>

不要低估开攄¡š„工作½Iºé—´å¯¹äºŽž®ç»„的重要性——这ž®±æ˜¯ä¸ÞZ»€ä¹ˆæˆ‘们将其作为第一步的原因。下面的一òq…照片就是是3Q Solutions开发小¾l„的工作½Iºé—´ã€?/p>

è¯äh³¨æ„ï¼Œä¸¤å¼ å¤§æ¡Œå­ï¼ˆä¸‹é¢æ²¡æœ‰æ–‡äšgæŸœï¼‰è¢«æ‘†åœ¨ä¸€èµøP¼Œæž„成了最适合配对¾~–程的办公桌ã€?/p>

集体ä¸ÖM¹‰ä¸ÖMh¾˜ç²¾¼œ?/b>
我们惌™¦ä»‹ç»çš„下一个思想是集体主义主人翁¾_„¡¥žåQˆCollective OwnershipåQ‰ã€‚敏æïL¼–½E‹çš„˜q™ç§ä¸­å¿ƒæ€æƒ³æ˜¯è®©æ¯ä¸€ä¸ªäh都对整个¾pȝ»Ÿè´Ÿè´£åQŒæ¯ä¸€ä¸ªäh都有更改代码的自由。这是一¿Ué‡è¦çš„æ€ç»´æ–ÒŽ³•åQŒå› ä¸ºå®ƒè®©å°¾l„的注意力都集中åˆîCº†™å¹ç›®ä¸Šï¼Œä»Žè€Œç¡®ä¿æœ‰ä¸€ä¸ªå…±åŒçš„目标。与配对¾~–ç¨‹ç›¸å…³çš„å…¶å®ƒæ­¥éª¤ä¹Ÿå¼ø™°ƒ˜q™ç§æ€æƒ³åQŒä½†æ˜¯å°½æ—©å¼•入这¿Uæ€æƒ³æ˜¯éžå¸¸å¥½çš„ã€?/p>

½Ž€å•设è®?/b>
敏捷开发崇ž®šç®€å•的渐进设计åQŒè€Œä¸æ˜¯å‰§çƒˆçš„颠覆式设计。其目标是(首先åQ‰åªæŒ‡è®¾è®¡æˆ‘们所了解的项目的那些部分åQŒä»…此而已åQŒç„¶åŽè®©è¯¥è®¾è®¡éšç€æ—‰™—´çš„æŽ¨¿U»è€Œé€æ¸æ”¹è¿›åQŒè¿™æœ‰åŠ©äºŽæé«˜çµ‹zÀL€§åƈž®†å˜åŒ–导致的成本最ž®åŒ–ã€?/p>

我们ž®×ƒ»Ž3Q Solutions公司举一个例子,有一个客戯‚¦æ±‚获得一个规则引擎(rules engineåQ‰ã€‚小¾l„ä¼ ¾lŸçš„做法是花上数月时间开发规则引擎,然后可能˜q˜æ˜¯æ— æ³•把它卖出厅R€‚在与客户共同协商的情况下,ž®ç»„军_®šè®¾è®¡ä¸€ä¸ªæ»¡­‘Œ™§„则引擎工作要求的最½Ž€å•ç³»¾lŸï¼Œòq¶äؓ每一条规则创å»ÞZ¸€ä¸ªç˜¦åž‚ç›´¾pȝ»ŸåQˆa thin vertical systemåQ‰ã€‚è¿™ž®Þq»™äºˆäº†å®¢æˆ·ä»–ä»¬çœŸæ­£éœ€è¦çš„ä¸œè¥¿â€”â€”å¯è¯æ˜Žçš„è§„åˆ™â€”â€”åÆˆ¼‹®ä¿æŠ•资抉|¶ˆäº†æŠ•入的旉™—´ã€‚这样小¾l„可以在保持灉|´»æ€§çš„同时从一开始就不断改进设计。简单设计是一个复杂的领域åQŒç ”½I¶å®ƒçš„æœ€ä½Ïx–¹æ³•是获得外部的帮助ã€?/p>

重要的成功因�/i>

  • 赞同—â€?/b>整个开发小¾l„坚持尝试ä‹É用敏捷开发以及开发小¾l„圆环里的做法极光™‡è¦ã€‚如果不能这样坚持,开始甚至保持这æ ïLš„做法都是非常困难的ã€?
  • 沟通—â€?/b>˜q™ä¸€ç‚ÒŽ€Žä¹ˆå¼ø™°ƒéƒ½ä¸å¤Ÿã€‚保证小¾l„里高层‹Æ¡çš„æ²Ÿé€šå’Œå¯¹è¯¸å¦‚集体主义主人翁¾_„¡¥ž˜q™æ ·çš„æ¦‚å¿ëŠš„理解非常重要ã€?
  • 配对¾~–程—â€?/b>配对¾~–程为很多小¾l„做法提供支持,òq¶å°†åŠ å¼ºž®ç»„的沟通和凝聚力ã€?
  • 行政—â€?/b>如果没有行政上的支持åQŒåˆ›é€ å¼€æ”‘Ö·¥ä½œç©ºé—´å°†ä¼šéžå¸¸å›°éš¾ã€‚在某些情况下,当行政机构的官僚ä¸ÖM¹‰ä½œé£Žç››è¡Œçš„æ—¶å€™ï¼Œæˆ‘们只用˜q›è¡Œä¸€äº›æ”¹å˜å°±è¡Œäº†ã€?
  • 每日例会—â€?/b>˜q™ä¸€ä¸ªæ¯å¤©æ—©ä¸Šè¿›è¡Œçš„½Ž€å•会议,供开发äh员讨论当日面临的工作和问题。这æ ïLš„ä¼šè®®åº”è¯¥æ˜¯ç«™ç€å¼€çš„ï¼Œå› äØ“å…¶æ—¶é—´ä¸åº”è¯¥­‘…过几分钟ã€?

ž®ç»„¾~–写代码——第二步
既然我们已经安置好了工作½Iºé—´åQŒåƈ讑֮šäº†å°¾l„çš„åŸø™°ƒåQŒæˆ‘们现在就需要看看小¾l„是如何处理代码的。我们这里的目标是确保所有通过配对¾~–程¾~–写的代码都能无¾~åœ°é›†æˆåœ¨ä¸€èµøP¼Œòq¶ä¸”½W¦åˆž®ç»„所承认的标准。通过推动½W¬äºŒæ­¥çš„˜q›è¡ŒåQŒæˆ‘ä»¬äØ“æ”¯æŒ½W¬ä¸€æ­¥è¿˜æœ‰å¾ˆå¤§ä¸€ŒDµèµ\要走ã€?/p>

代码¾~–写标准
无论你是否决定采用敏æïL¼–½E‹ï¼Œä»£ç ¾~–写标准åQˆcoding standardåQ‰æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„æœ€ä½›_šæ³•。这一步骤涉及让小¾l„创立一套他们能够完全理解和坚持使用的代码编写标准。代码编写标准给予我们下列优势:

  • 它让我们能够è½ÀL¾åœ°è¯»æ‡‚别人的代码åQŒè¿™æ äh‰€æœ‰äh都可以进行(代码åQ‰äº¤æ¢ã€?
  • 代码为未来接手的ž®ç»„提供了一个绝佳的信息源,即ä‹É有小¾l„成员离队ã€?
  • æ–°çš„ž®ç»„成员有一套指导方针——而不是瞎猜ã€?

大多数小¾l„都会利用已有的框架åQŒåÆˆå›´ç»•å…¶æž„å»ø™‡ªå·Þqš„一套标准。这里的关键要素是开始,立即解决ž®ç»„正在奋力解决的问题,然后æ ÒŽ®éœ€è¦å‘前推˜q›ã€‚也不要ä¸ÞZº†æ ‡å‡†è€Œå޻弸™¡ŒæŽ¨è¡Œæ ‡å‡†â€”—这毕竟是整个小¾l„需要共同认可、相信和使用的东è¥Ñ€‚下面是3Q公司代码¾~–写标准文档的一ž®æ®µã€?/p>

CamelCase

CamelCase里的一切、类名称都以大写字母开始,而方法和字段的名¿U°åˆ™ä¸éœ€è¦ã€?/p>

ä»ÖM½•内容都不要放在有大括åïLš„那一行ã€?/p>

字段以下划线开å¤ß_¼š

_fieldname

变量名不以下划线开å¤ß_¼š

variableName

æ–ÒŽ³•åQ?/p>

public void methodName(String stringValue)

 

接口公开

公共æ–ÒŽ³•在类的最上部åQŒåŽé¢è·Ÿæœ‰å—保护的方法,然后才是¿Uæœ‰æ–ÒŽ³•。将所有ç‘ô承自抽象¾cÀLˆ–者实现结构的æ–ÒŽ³•都靠前放¾|®ï¼Œ˜q™æ˜¯ä¸€ä¸ªå¥½ä¸ÀL„ã€?/p>

ž®½å¯èƒ½åšåˆ°ç«‹å›_°±èƒ½æ‰¾åˆîC¸€ä¸ªç±»åQŒåƈ马上可以感觉到其功能以及它如何实现该功能åQŒè€Œä¸éœ€è¦æ»šå±ã€?/p>

æ–ÒŽ³•和类的名¿U?/strong>

让其名称能够说明其功能。注意,不同的开发äh员对于什么样的方法可è¯ÀLœ‰ä¸åŒçš„看法,他们更喜‹Æ¢ä»Žå‘¨å›´çš„ç±»åQŒç”šè‡Ïx˜¯æ–ÒŽ³•里的参数看出其作用。对˜q™ä¸€ç‚¹è¿˜å­˜åœ¨äº‰è®®åQŒä½†æ˜¯ä»Žåå­—来判断一个方法的作用是肯定可行的åQŒå› æ­¤ï¼š
doIForAllX()
ž®×ƒ¸ç†æƒ³åQŒä½†æ˜¯ï¼š
setupAllTableRowItems()
ž®±å¾ˆå¥½ã€?/p>

而:
createRows()
可能更好�/p>

[getVarvscalculateVar, 直接的getterå¯ÒŽ–¹æ³•]

[不要ž®†æŸ¥è¯¢ä¸Žä½œä¸šæ··åœ¨ä¸€èµ·]

æ–ÒŽ³•的抽è±?/strong>

æ–ÒŽ³•里的代码的抽象程度应该与同一个方法里其他所有代码的相同。这æ ïLš„话,事äšg的自然过½E‹èƒ½å¤Ÿè¢«å¼„清楚。例如:

public void initializeDataBase()
{
  _connection = createConnection ();
  setUpTable();.
  For (inti=0;i<tableRows;i++)
    SetUpTableRow(i);
}

你稍½Eä¸€çž¥ï¼Œä¸ç”¨è´¹ä»€ä¹ˆåŠŸå¤«å°±å¯ä»¥è¯ÀL‡‚它。我们在3Q的时候非常珍惜视力,所以把˜q™æ®µä»£ç å˜æˆäº†å‡ ä¸ªæ¸…晰明了的步骤åQŒå°±åƒä¸‹é¢è¿™æ øP¼š

public void initializeDataBase()
{
  setUpConnection();
  setUpTable();
  setUpTableRow();
}

˜q™å°±æœ‰å¯èƒ½ï¼š

1.感觉åˆîCº‹æƒ…进展得怎么æ ?/p>

2.很容易就‹¹è§ˆåˆ°æˆ‘们希望找到的¾cÈš„¼‹®åˆ‡éƒ¨åˆ†åQˆå¦‚果我们对表格行的讄¡½®æ„Ÿå…´­‘£ï¼Œæˆ‘们ž®±æŒ‰ä½Ctrl点击setUpTableRow()åQ‰ã€?/p>

得墨忒尔法则åQ?/strong>Law of DemeteråQŒå³æœ€ž®‘知识法则)

¾cÕdº”该只能够讉K—®é‚£äº›å¯ä»¥ç›´æŽ¥ä»Žå…¶å­—段或者变量访问到的方法。对送进来的对象或者类自行实例化的对象的参考也是如此ã€?/p>

一般情况下åQŒä¸è¦è¿™ä¹ˆåšâ€¦â€?/p>

publicintcalculateRetirementFund()
{
return getClient().getRetirementDetails().getRetirementFund();
}

……而要˜q™ä¹ˆåšï¼š

public void calculateRetirementFund (RetirementDetails details)
{
return details.getRetirementFund();
}

˜q™æœ‰åŠ©äºŽä¸ºç±»è®‘Ö®šèŒƒå›´òq¶å‡ž®‘不必要的方法调用和委派ã€?/p>

™åºåºé€‰æ‹©˜q­ä»£

一般可以将æ–ÒŽ³•åˆ†äØ“ä¸‹é¢ä¸‰ç§¾cÕdž‹ã€‚一¾pÕdˆ—事äšgåQŒä¸€ä¸ªæŽ¥ä¸€ä¸ªï¼›å¯šw›†åˆçš„æœçƒ¦æˆ–过滤;以及寚w›†åˆæˆ–者数¾l„çš„˜q­ä»£ã€?/p>

攉™›†æ–ÒŽ³•、向量创建、向量设¾|®ã€å‘量功能(vector dosomethingåQ?/strong>

集合一‹Æ¡åˆä¸€‹Æ¡åœ°å‡ºçްåQŒæ¯‹Æ¡éƒ½æ˜¯åŒæ ïLš„问题åQŒä¸»è¦åŒ¾cÕdž‹æœ‰å…³ã€‚如果在集合里有一个ä“Q意的˜qè¡Œåº“强制è{换(castingåQ‰ï¼Œé‚£ä¹ˆæ€ÀLœ‰å‡ºçŽ°é”™è¯¯¾cÕdž‹çš„æœºä¼šï¼Œå¯ÆD‡´å¼ºåˆ¶è½¬æ¢å¼‚常的出现ã€?/p>

让集合变成可以针对具体类型,˜q™ä‹É得在¾~–è¯‘çš„æ—¶å€™æ£€æŸ¥å¾€é›†åˆé‡ŒåŠ å…¥çš„å†…å®¹æˆäØ“å¯èƒ½åQŒåŒæ—¶è¿˜è®©æ ¹æ®ç±»åž‹æ¥é€‚应自定义的集合æ–ÒŽ³•变得更容易ã€?/p>

不要使用临时变量——用查询来替代äÍ时变é‡?/strong>

在有关重整的书上查找˜q™ä¸ªå†…容——“用查询来替代äÍ时变量”,最好不要抱着临时变量不放åQŒå®ƒä¼šå¢žåŠ ä»£ç çš„å¤æ‚æ€§ï¼Œ¾l™é˜…读者带来困难,同时减少了对½Ž—法作进一步重整的可能性ã€?/p>

‹¹‹è¯•打破常规

˜q‡å¤šçš„设¾|®æ„å‘³ç€ä¸ä½³çš„æ¨¡å¼ã€‚你应该只需要设¾|®é‚£äº›ä¸Žä½ æ­£åœ¨æµ‹è¯•çš„¾cȝ›´æŽ¥ç›¸å…³çš„对象ã€?/p>

ž®½é‡è®©å•元测试精¾l†åŒ–åQŒè¿™ž®†å¸¦æ¥å¯¿UÀL¤æ€§æ›´å¼ºçš„代码åQŒåƈž®†å®ƒæŽ¨å‘更加清晰、更加独立的实现ã€?/p>

通过回调刉™’ˆ‹¹‹è¯•

回调刉™’ˆåQˆbackpointeråQ‰å®Œå…¨å°±æ˜¯ä¸ªéºÈƒ¦äº‹ï¼Œåº”该避免其出现。它会带来相当多的异常,状态模式就是其中一个。一定要了解自己实现回调指针的理由。如果理由是“它会è“v作用”,那么你就在失åŽÖM»€ä¹ˆä¸œè¥Ñ€?/p>

视图‹¹‹è¯•——将‹¹‹è¯•三要素实例化

在一个构造完好的应用½E‹åºé‡Œï¼Œè§†å›¾å±‚应该从域抽象出来,辑ֈ°ä¸€¿Uä¸éœ€è¦åˆ›å»ø™§†å›‘Ö°±èƒ½å¤Ÿ‹¹‹è¯•该应用程序的½E‹åº¦ã€‚不够精¾l†çš„‹¹‹è¯•需要更加经常地更改。见上文‹¹‹è¯•打破常规ã€?/p>

˜q™åªæ˜¯æ¥è‡ªä¸€ä¸ªä¸æ–­æ”¹˜q›çš„ž®ä¾‹å­ã€‚我再提醒一遍,从简单的开始,保持其基本框æžÓž¼Œå¾—到所有äh的同意ã€?/p>

 

˜qžç®‹é›†æˆ
瀑布式方法的一个缺é™äh˜¯ä»£ç åº“的集成往往每隔数周或者数月之久才˜q›è¡Œä¸€‹Æ¡ã€‚æ–°çš„é”™è¯¯å¸¸å¸æ€¼šéšç€ä»£ç çš„集成而不断暴露出来,我们不得不花额外的时间来更正错误òq‰™‡æ–°é›†æˆã€‚如果集成不是频¾Jè¿›è¡Œï¼Œé‚£ä¹ˆåé¦ˆž®×ƒ¸å¯èƒ½åƒåº”该的那么紧密。敏捷开发要求进行更加频¾Jçš„集成——在3Q的案例里åQŒè¿™æ„å‘³ç€æ¯å¤©è¦é›†æˆä¸€åˆîC¸¤‹Æ¡ã€?/p>

大多数小¾l„ä¸€èˆ¬éƒ½ä¼šæœ‰ä¸€å°æž„å»ø™®¡½Ž—机åQŒæˆå¯¹çš„开发äh员能够利用其‹‚€æŸ¥åœ¨‹¹‹è¯•åQç¼–码-重整循环里编写好的代码。每对开发äh员都有确信其代码在被集成åˆîC»£ç åº“之前ž®±å·²¾lç»˜q‡æµ‹è¯•和重整。一旦检验完毕,自动化的构徏计算机就会编译所有的代码åQŒè¿è¡Œæ‰€æœ‰çš„‹¹‹è¯•åQŒåƈ通过昄¡¤ºå™¨ï¼ˆå‘小¾l„)昄¡¤ºå‡ºæ¥â€”â€”æž„å»ø™¿‡½E‹æ˜¯å¦éœ€è¦å¼•èµäh³¨æ„â€”—例如:新加入的代码有没有破坏什么东西?

˜q™ä¼šåšä¸¤ä»¶äº‹æƒ…:

  • 从代码被集成åQˆè¿›ä»£ç åº“)到小¾l„意识到存在问题之间的时间间隔会被减到最ž®ã€?
  • 构徏昄¡¤ºå™¨å°†ä¿¡æ¯ä¼ è¾¾¾l™æ•´ä¸ªå°¾l„——不论是集成成功完成——还是需要引èµäh³¨æ„â€”—这让小¾l„可以立即作出相应的反应ã€?

像这样频¾Jçš„集成意味着软äšg的构建是不停˜q›è¡Œçš„,ä»ÖM½•人在ä»ÖM½•时候都可以参与构徏˜q‡ç¨‹ã€‚æž„å»ø™¿‡½E‹éœ€è¦è¢«è‡ªåŠ¨åŒ–ï¼Œä»¥ä¾¿ä½‰K›†æˆå°½å¯èƒ½åœ°å®¹æ˜“,˜q™æ˜¯ååˆ†é‡è¦çš„。下面就æ˜?Q公司的构建监视器的向ž®ç»„传达信息的一个例子ã€?/p>



ž®±å¦‚上面囄¡”»æ‰€æ˜„¡¤ºçš„,构徏服务器能够向ž®ç»„提供额外的信息ã€?

重要的成功因�/i>

    • 自动åŒ?/b>——这需要成ä¸ÞZ¸€ä¸ªè‡ªåŠ¨åŒ–çš„è¿‡½E‹ã€‚否则你ž®†ä¸å¾—不专门找一个开发äh员来¾l´æŒæž„徏˜q‡ç¨‹â€”—这可不是一个有意思的工作。首先就要营造环境,取得讑֤‡å’Œå®žçŽ°è‡ªåŠ¨åŒ–ã€?
    • TCR和配对编½E?/b>——对于这一层次的集成工作,ž®ç»„必须按照‹¹‹è¯•åQç¼–码-重整循环来进行,˜q™æ ·ä»–们才有信心保证所有的问题只会发生在集成过½E‹é‡Œã€‚如果没有TCR循环åQŒè¿™ä¸€éƒ¨åˆ†çš„过½E‹å°†ä¼šéžå¸¸å›°éš¾ã€?
    • 按部ž®Þq­â€”—就像这个小标题说的åQŒä¸æ…Œä¸å¿™åœ°ä»Žç®€å•的地方开始,然后随着旉™—´çš„æŽ¨¿UÀL¥é€æ­¥æ”¹è¿›â€”—尤其是在代码编写标准这一块ã€?

保持高效率——第三步
ž®±å¦‚我们在《上½‹‡ã€‹é‡Œè¯´çš„åQŒæ•æ·å¼€å‘过½E‹æ˜¯ä¸€™å¹å·¥ä½œå¼ºåº¦å¾ˆå¤§çš„¾~–程方式。除此之外,软äšg开发本íw«å°±åŽ‹åŠ›é‡é‡åQŒè€Œå°¾l„篏垮的可能性非帔R«˜ã€?/p>

可持¾l­çš„æ­¥ä¼æ„å‘³ç€å¼€å‘小¾l„现在和未来的工作都ž®†éžå¸¸è‰°è‹¦ã€‚加班不是我们希望鼓åŠÞqš„事情åQŒå°½½Ž¡æœ‰çš„æ—¶å€™éœ€è¦å¦‚此。如果小¾l„不得不加班工作åQŒé‚£ä¹ˆæˆ‘们想要尝试将可持¾l­æ­¥ä¼é‡Œçš„加班时间控制在一åˆîC¸¤å‘¨è€Œä¸æ˜¯ä¸€åˆîC¸¤ä¸ªæœˆã€‚å†å¼ø™°ƒä¸€éï¼Œæ•æ·å¼€å‘是一™å¹å¼ºåº¦å¾ˆå¤§çš„工作åQ›é…å¯¹ç¼–½E‹è¦æ±‚很多交互和重视åQŒæµ‹è¯•-¾~–码åQé‡æ•´åó@环也是如此。尽½Ž¡æ•æ·å¼€å‘会引发我们ž®ç»„的最大潜能,但是我们需要清楚很多时候的大量加班会篏垮整个小¾l„的风险ã€?/p>

重要的成功因�/i>
˜q™æ˜¯½Ž¡ç†è€…å¿…™åÕdåˆ†æ¸…楚的一个领域。确保小¾l„在整个™å¹ç›®é‡Œä¿æŒåˆç†çš„æ­¥ä¼æ˜¯å…¶ä¸»è¦èŒè´£ã€?/p>

开始è{¿UÕdˆ°¾lŸä¸€ž®ç»„——第四步
有的人可能认为Metaphorçš„æ¦‚å¿µåº”è¯¥æ¥å¾—æ›´æ—©ä¸€äº›ï¼Œä½†æ˜¯æˆ‘ä»¬å»ø™®®åœ¨è¿™ä¸€é˜¶æ®µå¿«ç»“æŸçš„æ—¶å€™æ‰å¼•å…¥å®ƒï¼Œå› äØ“˜q™æ˜¯æˆ‘们首次提到客户åQä¸šåŠ¡æ–¹åQˆcustomeråQbusinessåQ‰ã€‚Metaphor是客户与开发äh员之间系¾lŸçš„通用语言。它看è“v来可能不重要åQŒä½†æ˜¯ä»¥Exoftwareçš„æ”¿åºœé¡¾å®¢äØ“ä¾‹ï¼Œå¼€å‘å°¾l„一般都把业务方åQˆä¹Ÿž®±æ˜¯å®šä¹‰¾pȝ»Ÿéœ€æ±‚的人)当作客户。但是对于业务方而言åQŒâ€œå®¢æˆ·â€æŒ‡çš„æ˜¯æœ€¾lˆç”¨æˆ—÷€‚è¿™ž®±å¯¼è‡´å¼€å‘äh员和“业务方”之间的困惑和挫折ã€?/p>

Metaphor的作用不只是一门通用语言——它˜q˜ä¸Žä¸Šä¸‹æ–‡å’Œå¯¹ç³»¾lŸæ˜¯ä»€ä¹ˆçš„高层‹Æ¡ç†è§£æœ‰å…Ÿë€‚在˜q™é‡Œæˆ‘们能够采取步骤做到真正åœîC¸Žæˆ‘ä»¬çš„ä¸šåŠ¡åˆä½œä¼™ä¼´æ²Ÿé€šåÆˆå…׃ín共同的目标ã€?Q公司使用一¿Uå«åšAdaptor Tree Hierarchy体系åQŒå®ƒé€šè¿‡ä¸€é—¨å®¢æˆøP¼ä¸šåŠ¡æ–¹å…±åŒè®¤å¯çš„è¯­è¨€¾l™äºˆå¼€å‘äh员一个广阔的¾pȝ»Ÿè§†é‡Žã€‚例如:

ThreeQData

  • todaysDate
  • marriage
    • spouse
    • economicindicators
    • client
      • lossofincomestory
        • annualincome
        • coveramortisationeroision
        • ...
      • managedfundstory
      • pensionstory

˜q™ä¸ªæ ‘åÅž¾l“构的每一部分都可以扩展出更多¾l†èŠ‚åQŒèƒ½å¤Ÿè½»æ˜“地改变åQŒåƈ提供一个很好的¾pȝ»Ÿè§†è§’åQŒåŒä¸ºæ•´ä¸ªå°¾l„提供一门通用的语­a€ã€?/p>

 

重要的成功因�/i>

  • 坚持到底——只有当你坚持ä‹É用的时候Metaphor才会有效。它ž®†ä¼šæˆäؓ日常语言的一部分åQŒä½†æ˜¯é€‚应它需要花旉™—´ã€?
  • 从基本的开å§?/b>——从Metaphor的基本框架开始,了解它,使用它,然后以此为基¼‹€æ¥åˆ›å»ºå®ƒã€?
  • 取得帮助——让ž®½å¯èƒ½å¤šçš„相关业务方åQå®¢æˆ·å‚与Metaphor的创建——让其他人尽早参与进来是臛_…³é‡è¦çš„ã€?

敏捷开发的ž®ç»„做法的目的是帮助ž®ç»„把重ç‚ÒŽ”¾åœ¨é›†ä½“工作上åQŒåƈ理解其共有的做法和目标。尽½Ž¡æœ‰çš„做法,比如代码¾~–写标准åQŒèƒ½å¤Ÿåœ¨éš”离的情况下完成åQŒä½†æ˜¯å¦‚果与具体的开发äh员做法,例如‹¹‹è¯•åQç¼–码-重整和配对编½E‹ç»“合è“v来,那么˜q™äº›ž®ç»„做法ž®†å‘挥最大效用ã€?/p>

本系列的最后一部分ž®†æŽ¢è®¨å¼€å‘äh员小¾l„如何开始同客户方/业务构成“统一ž®ç»„”ã€?/p>

 

Brian Swanæ˜?a >Exoftware公司教授敏捷开发的指导老师。他在敏捷开发的技术和½Ž¡ç†æ–šw¢å…ähœ‰ç›¸å½“丰富的经验,曄¡»å¸¦é¢†å¾ˆå¤šž®ç»„成功地è{换到了敏捷开发,òq¶ä»¥æ•æ·å¼€å‘的思想和做法来培训开发äh员和½Ž¡ç†äººå‘˜ã€‚他在Exoftware公司和在敏捷开发方面的工作使他到过很多公司åQŒåƈ对其开发小¾l„äñ”生了持箋的、积极的影响。Brian先前的经验还包括担ä“QNapier大学的讲师,讲授软äšg开发和人机互动。Brian可以通过电子邮äšg联系上ã€?/i>



]]>敏捷软äšg开发(上篇åQ?/title><link>http://www.aygfsteel.com/yesjoy/articles/62678.html</link><dc:creator>★yesjoyâ˜?/dc:creator><author>★yesjoyâ˜?/author><pubDate>Wed, 09 Aug 2006 15:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/yesjoy/articles/62678.html</guid><wfw:comment>http://www.aygfsteel.com/yesjoy/comments/62678.html</wfw:comment><comments>http://www.aygfsteel.com/yesjoy/articles/62678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yesjoy/comments/commentRss/62678.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yesjoy/services/trackbacks/62678.html</trackback:ping><description><![CDATA[ <h2>敏捷软äšg开发(上篇åQ?</h2> <br /> <font size="2">NetReptile推荐 [2005-7-17]</font> <br /> <font size="2">出处åQšZDNet</font> <br /> <font size="2">作者:Brian Swan</font> <br /> <font size="2"> <font size="+0"><br /><br /><p></p><p>ä½œäØ“ä¸‰ç¯‡¾pÕdˆ—文章的第一½‹‡ï¼Œæˆ‘们ž®†å¸¦ä½ äº†è§£æ•æ¯‚ÊY件开发的重要做法——如何ä‹É用它们、你可能会碰åˆîC»€ä¹ˆæ ·çš„问题,以及你将从它们那里获得什么ã€?/p><p>敏捷软äšg开发不是一个具体的˜q‡ç¨‹åQŒè€Œæ˜¯ä¸€ä¸ªæ¶µç›–性术语(umbrella termåQ‰ï¼Œç”¨äºŽæ¦‚括å…ähœ‰¾cÖM¼¼åŸºç¡€çš„æ–¹å¼å’Œæ–ÒŽ³•。这些方法,其中包括极限¾~–程åQˆExtreme ProgrammingåQ‰ã€åŠ¨æ€ç³»¾lŸå¼€å‘方法(Dynamic System Development MethodåQ‰ã€SCRUM、Crystalå’ŒLean½{‰ï¼Œéƒ½ç€çœégºŽå¿«é€Ÿäº¤ä»˜é«˜è´¨é‡çš„工作èÊYä»Óž¼Œòq¶åšåˆ°å®¢æˆäh»¡æ„ã€?/p><p>ž®½ç®¡æž„成˜q™ä¸ªæ•æ·å¼€å‘过½E‹çš„æ¯ç§æ–ÒŽ³•都具有类似的目标åQŒä½†æ˜¯å®ƒä»¬å®žçŽ°è¿™ä¸ªç›®æ ‡çš„åšæ³•åQˆpracticeåQ‰å´ä¸å°½ç›¸åŒã€‚我们把在自己完成所有过½E‹ä¸­¾låކ˜q‡çš„æœ€ä½›_šæ³•集中到了本¾pÕdˆ—的文章里ã€?/p><p>下面的图表基本勾ç”Õd‡ºäº†æˆ‘们提炼出来的˜q™äº›æ•æ·å¼€å‘最佛_šæ³•。最中间的圆环代表一对程序员日常工作的做法。紧接着的中间一个圆环表½Cºå¼€å‘äh员小¾l„ä‹É用的做法。最外面的一个圆环是™å¹ç›®æ‰€æ¶‰åŠçš„æ‰€æœ‰äh的做法——客戗÷€å¼€å‘äh员、测试äh员、业务分析师½{‰ç­‰ã€?/p><p>˜q™äº›åœ†çŽ¯é‡Œçš„æ‰€æœ‰åšæ³•éƒ½ç›´æŽ¥ä¸Žå››ä¸ªè§’ä¸Šæ˜¾½Cºçš„æ•æ·å¼€å‘的核心价值相养I¼šæ²Ÿé€šï¼ˆCommunicationåQ‰ã€åé¦ˆï¼ˆFeedbackåQ‰ã€å‹‡æ°”(CourageåQ‰å’Œ½Ž€å•(SimplicityåQ‰ã€‚也ž®±æ˜¯è¯ß_¼Œæ¯ä¸ªåšæ³•都给予我们一条实现敏捷开发ä­hå€¼åÆˆè®©å®ƒä»¬æˆä¸ø™¯¥˜q‡ç¨‹ä¸€éƒ¨åˆ†çš„具体方法ã€?/p><p> <img src="http://tk.files.storage.msn.com/x1pnp_rgmi5o537Q53I9vofWuCfgqHuvhLEGGhK7O-an2n13JioXeZbMRClwqslqgk3XRhVgxN4R_8ytpnWc6W9Zp2mqqURWf5Zd7J07NIq65_DAxk3p1IVCi734O_7p4ML4mpqwa5_Rhg" /></p><p>在理想状况下åQŒå¦‚果决定采用敏捯‚ÊY件开发的æ–ÒŽ³•åQŒä½ ž®±åº”该在一个经˜q‡ç®¡ç†å±‚许可的敏捷开发实验项目里ž®è¯•所有的作法。这是掌握敏捷开发的最好方法之一åQŒå› ä¸ø™¿™æ ¯‚ƒ½ä¿è¯å¾—到支持åQŒäؓ你的努力提供更多的回报,帮助捕捉学习到的东西åQŒè¿™æ ·ä½ æ‰èƒ½è®©æ•æ·å¼€å‘过½E‹æ¥é€‚应你独特的环境ã€?/p><p>然而,˜q™åƈ不æ€ÀL˜¯å¯è¡Œçš„ï¼Œæ‰€ä»¥æœ‰çš„æ—¶å€™æœ€å¥½é‡‡ç”¨æ­¥æ­¥äØ“è¥çš„æ–ÒŽ³•。在˜q™ç§æƒ…å†µä¸‹ï¼Œæˆ‘ä»¬å»ø™®®ä»Žæœ€é‡Œé¢çš„圆环向外面的圆环推˜q›ã€‚也ž®±æ˜¯ä»Žå¼€å‘äh员实践开始,然后是小¾l„这一层次的做法,最后再融入“统一ž®ç»„åQˆone teamåQ‰â€çš„æ¦‚念ã€?/p><p>为技术优势设个限——开发äh员做æ³?br />技术优势是敏捷开发过½E‹çš„æ ¸å¿ƒã€‚äØ“äº†è®©å…¶ä»–çš„åšæ³•çœŸæ­£ç”Ÿæ•ˆï¼Œæˆ‘ä»¬å¿…é¡»åœ¨å¼€å‘äh员中˜q›è¡ŒæŠ€æœ¯ä¼˜åŠ¿çš„åŸ¹è®­ã€‚ä»Žè¡¨é¢ä¸Šçœ‹åQŒæŠ€æœ¯ä¼˜åŠ¿å¯èƒ½çœ‹èµäh¥òq¶ä¸æ˜¯æ ¸å¿ƒä¼˜å…ˆå¯¹è±¡ï¼Œä½†æ˜¯å¦‚果把我们注意力都放在上面,它将¼‹®ä¿æˆ‘们¾~–写å‡ÞZ¸åŒå¯»å¸¸çš„优秀代码。这反过来同样会¾l™äºˆå…¬å¸ã€å®¢æˆøP¼Œä»¥åŠç”¨æˆ·å¯¹èÊYä»¶å’Œå¯ÒŽˆ‘们交付能力的信心ã€?/p><p>开发äh员做法(developer practiceåQ‰æ˜¯æˆ‘们推动技术优势的切实可行的方法。即使是独立完成åQŒè€Œæ²¡æœ‰å…¶ä»–敏捷开发做法的介入åQŒå¼€å‘äh员做法也能够¾l™ä½ çš„èÊY件带来巨大的收益ã€?/p><p>开发äh员做法可以被分解为四个做法(如果你把实际的编写代码的˜q‡ç¨‹åŠ ä¸ŠåŽÕd°±æ˜¯äº”个做法)。它们分别是‹¹‹è¯•åQç¼–码-重整循环åQˆTest-Code-Refactor cycleåQ‰ã€é…å¯¹ç¼–½E‹ï¼ˆPair ProgrammingåQ‰å’Œ½Ž€å•设计(Simple DesignåQ‰ç­‰ã€?/p><p>‹¹‹è¯•åQç¼–码-重整åQˆTCRåQ‰åó@环——第一æ­?br />由测试驱动的开发和重整常常被当作是各自独立做法åQŒä½†æ˜¯å®ƒä»¬äº‹å®žä¸Šæ˜¯TCR循环的一部分。要建立我们正在å¯ÀL±‚的紧密反馈åó@环,我们ž®±éœ€è¦æŠŠå®ƒä»¬æ”‘Öœ¨ä¸€èµ—÷€?/p><p>我们在这里的目标有两层:‹¹‹è¯•让我们对代码质量的充满信心,òq¶èƒ½è¡¨æ˜Žæˆ‘们加入æ–îC»£ç çš„æ—¶å€™æ²¡æœ‰ç ´åä“Q何东西;重整和测试有助于让代码变成我们就代码实际在做什么而进行沟通的最真实形式——ä“Q何äh都应该可以看到它åQŒåƈ知道什么是什么ã€?/p><p>由测试驱动的开发(TDDåQ‰æ˜¯ä¸€ä¸ªåó@环,它从‹¹‹è¯•å¤ÞpÓ|开始,然后是编写èƒö够的代码通过‹¹‹è¯•åQŒå†æ˜¯é‡æ•´ä»£ç ï¼Œä½¿å¾—代码在实现系¾lŸå½“前功能的条äšg下尽可能地简单ã€?/p><p>‹¹‹è¯•åQç¼–码-重整循环非常短暂——也ž®±å‡ åˆ†é’Ÿã€‚å¦‚æžœè¶…å‡ø™¿™ä¸ªæ—¶é—´èŒƒå›´é‚£ž®±æ„å‘³ç€‹¹‹è¯•çš„çñ”别过高,有可能加入了未经‹¹‹è¯•的实çŽîC»£ç ã€?/p><p>在本文的开始部分,我们不会丑ևºTDD的例子,有关的内容会在后é?sup><a ><font color="#78ba00">2, 3, 4</font></a></sup>详细讨论。在˜q™é‡ŒåQŒä»Žæ•´ä½“ä¸ŠæŠŠæ¡åÆˆæŠŠé‡ç‚ÒŽ”¾åœ¨TCR循环更有­‘£çš„æ–šw¢ä¸Šä¼šæ›´åŠ æœ‰ç”¨ã€?/p><p>ž®±åŒä»ÖM½•极限¾~–程åQæ•æ·å¼€å‘é¡¹ç›®ä¸€æ øP¼Œè¦åšçš„第一个素材(storyåQ‰æ˜¯ä¸€ä¸ªç»˜q‡ç®€åŒ–的应用½E‹åºåQŒç”¨æ¥å®Œæ•´åœ°è¯´æ˜Ž½E‹åºçš„功能。在本文里,˜q™æ ·çš„应用程序是一个二十一点纸牌游戏。在¾lè¿‡½Ž€åŒ–çš„½W¬ä¸€ä¸ªç´ æé‡ŒåQŒåªæœ‰ä¸€ä¸ªçŽ©å®¶å¤–åŠ ä¸€ä¸ªå‘ç‰ŒähåQŒæ¯ä¸ªçŽ©å®¶åªä¼šå¾—åˆîC¸¤å¼ ç‰ŒåQŒèŽ·èƒœè€…æ˜¯ä¸¤å¼ ç‰Œå‘å®ŒåŽç‚ÒŽ•°æœ€å¤§çš„人ã€?/p><p>素材åQè¦æ±?br />一个简单的二十一点纸牌游æˆ?/p><ul><li>玩家下注 </li><li>¾l™çŽ©å®¶å’Œå‘ç‰Œäººæ¯äºÞZ¸¤å¼ ç‰Œ </li><li>¾l™èŽ·èƒœè€…æ”¯ä»˜å¥–é‡‘ï¼ˆçŽ©å®¶èŽ¯‚ƒœçš„æœºä¼šäØ“2:1åQ?</li></ul><p>验收‹¹‹è¯•<br />要知道我们的素材什么时候完成就需要经˜q‡ä¸€¾pÕdˆ—验收‹¹‹è¯•。我们这个简单游戏的验收‹¹‹è¯•如下åQ?/p><p></p><table cellspacing="3" cellpadding="0" width="358" border="0"><tbody><tr><td width="115"><p><b>玩家莯‚ƒœ</b></p></td><td width="116"><p><b>å‘ç‰Œäºø™Ž·èƒ?/b></p></td><td width="115"><p><b>òq›_±€</b></p></td></tr><tr><td width="115"><p>玩家赌注总额åQ?00</p></td><td width="116"><p>玩家赌注总额åQ?00</p></td><td width="115"><p>玩家赌注总额åQ?00</p></td></tr><tr><td width="115"><p>å‘ç‰Œäºø™µŒæ³¨æ€»é¢åQ?000</p></td><td width="116"><p>å‘ç‰Œäºø™µŒæ³¨æ€»é¢åQ?000</p></td><td width="115"><p>å‘ç‰Œäºø™µŒæ³¨æ€»é¢åQ?000</p></td></tr><tr><td width="115"><p>玩家下注10</p></td><td width="116"><p>玩家下注10</p></td><td width="115"><p>玩家下注10</p></td></tr><tr><td width="115"><p>玩家发到10 & 9</p></td><td width="116"><p>玩家发到8 & 9</p></td><td width="115"><p>玩家发到8 & 9</p></td></tr><tr><td width="115"><p>发牌人发åˆ? & 9</p></td><td width="116"><p>发牌人发åˆ?0 & 9</p></td><td width="115"><p>发牌人发åˆ? & 9</p></td></tr><tr><td width="115"><p>玩家赌注总额åQ?10</p></td><td width="116"><p>玩家赌注总额åQ?0</p></td><td width="115"><p>玩家赌注总额åQ?00</p></td></tr><tr><td width="115"><p>å‘ç‰Œäºø™µŒæ³¨æ€»é¢åQ?90</p></td><td width="116"><p>å‘ç‰Œäºø™µŒæ³¨æ€»é¢åQ?010</p></td><td width="115"><p>å‘ç‰Œäºø™µŒæ³¨æ€»é¢åQ?000</p></td></tr></tbody></table><p>ä»ÕdŠ¡<br />素材往往单独解决èµäh¥å¾€å¾€éžå¸¸å›°éš¾åQŒæ‰€ä»¥åœ¨ä¸€èˆ¬æƒ…å†µä¸‹æˆ‘ä»¬éƒ½æŠŠå®ƒåˆ†è§£äØ“ä¸€¾pÕdˆ—ä»ÕdŠ¡æ¥å®Œæˆã€‚åœ¨æœ¬æ–‡çš„äºŒåä¸€ç‚¹çº¸ç‰Œæ¸¸æˆé‡ŒåQŒéœ€è¦è¿›è¡Œä¸‹åˆ—ä“Q务:</p><ul><li>创徏一副牌 </li><li>创徏一个投注台é? </li><li>创徏一手牌 </li><li>创徏游戏 </li><li>创徏一副牌</li></ul><p>åœ¨æŠŠç´ æåˆ†è§£æˆäØ“ä»ÕdŠ¡çš„æ—¶å€™ï¼Œæˆ‘ä»¬å¯ä»¥æŠŠå„ä¸ªä“Q务再分解成一¾pÕdˆ—待办事项åQŒä»Žè€ŒæŒ‡å¯¼æˆ‘们进行测试。这让我们可以保证在通过所有测试之后完成这个ä“Q务。对于这一副牌åQŒæˆ‘们有下列事项需要完成ã€?/p><ul><li>向牌桌上放一张纸ç‰? </li><li>在发牌的同时ž®†å…¶ä»Žç‰Œæ¡Œä¸Š¿U»èµ° </li><li>‹‚€æŸ¥ç‰Œæ¡Œæ˜¯å¦äØ“½I? </li><li>‹‚€æŸ¥ç‰Œæ¡Œä¸Š¾U¸ç‰Œçš„å¼ æ•? </li><li>ž®†ç‰Œæ¡Œä¸Šçš„ä¸€å‰¯ç‰Œçš„å¼ æ•°é™åˆ¶äØ“52张(如果­‘…过åQŒå°±è¦æ˜¾½Cºå¼‚常) </li><li>不断发牌åQŒç›´åˆ°å‘å®? </li><li>‹z—牌 </li><li>‹‚€æŸ¥ç‰Œæ¡Œä¸Š¾U¸ç‰Œçš„张数是否正¼‹?</li></ul><p>在进行过½W¬ä¸€è½®çš„几个½Ž€å•测试之后,我们的待办事™å¹åˆ—表就像下面这样了åQ?/p><ul><li><s>向牌桌上</s><s>放一张纸ç‰?/s></li><li>在发牌的同时ž®†å…¶ä»Žç‰Œæ¡Œä¸Š¿U»èµ° </li><li><s>‹‚€æŸ¥ç‰Œæ¡Œæ˜¯å¦äØ“½I?/s></li><li><s>‹‚€æŸ¥ç‰Œæ¡Œä¸Š¾U¸ç‰Œçš„å¼ æ•?/s></li><li><s>ž®†ç‰Œæ¡Œä¸Šä¸€å‰¯ç‰Œçš„å¼ æ•°é™åˆ¶äØ“</s><s>52</s><s>张(如果­‘…过åQŒå°±è¦æ˜¾½Cºå¼‚常)</s></li><li>不断发牌åQŒç›´åˆ°å‘å®? </li><li>‹z—牌 </li><li>‹‚€æŸ¥ç‰Œæ¡Œä¸Š¾U¸ç‰Œçš„张数是否正¼‹?</li></ul><p>下一个要˜q›è¡Œçš„æµ‹è¯•æ˜¯ä»Žç‰Œæ¡Œä¸Šå‘ç‰Œã€‚å½“æˆ‘ä»¬åœ¨äØ“‹¹‹è¯•æ–ÒŽ³•¾~–写代码的时候,我们所扮演的角色就是将要编写的应用½E‹åºçš„用戗÷€‚è¿™ž®±æ˜¯ä¸ÞZ»€ä¹ˆæˆ‘们给自己的类创徏的接口要与给用户的接口像¾cÖM¼¼çš„原因。在本文的这个例子里åQŒæˆ‘们将按照命ä×oåQæŸ¥è¯¢åˆ†¼›ÕdŽŸåˆ™ï¼ˆCommand/Query Separation Principle<sup><a ><font color="#78ba00">5</font></a></sup>åQ‰ç¼–写出下面˜q™æ ·çš„代码ã€?/p><p>Deck¾c…R€‚如<b>列表</b><b>A</b>所½Cºã€?/p><p><b>列表A</b></p><p>import java.util.List; </p><p>import java.util.ArrayList; </p><p>public class Deck { </p><p>    private static final int CARDS_IN_DECK = 52; </p><p>    private List cards = new ArrayList(); </p><p>    public boolean isEmpty() { </p><p>        return size() == 0; </p><p>    }</p><p>     public int size() { </p><p>        return cards.size(); </p><p>    }</p><p>     public void add(int card) throws IllegalStateException { </p><p>        if(CARDS_IN_DECK == size()) </p><p>            throw new IllegalStateException("Cannot add more than 52 cards"); </p><p>        cards.add(new Integer(card)); </p><p>    }</p><p>     public int top() { </p><p>        return ((Integer) cards.get(0)).intValue(); </p><p>    }</p><p>     public void remove() { </p><p>        cards.remove(0); </p><p>    }</p><p> } <br /><br /></p><p>我们所有的‹¹‹è¯•都通过了,而且我们没有看到ä»ÖM½•重复或者其他必要的重整åQŒæ‰€ä»¥åº”该是时候进行下面的‹¹‹è¯•了。然而事实却不是˜q™æ ·çš„。我们topå’Œremoveæ–ÒŽ³•的实现里有一个潜在的问题。如果对一个空的Deck调用它们åQŒä¼šå‘生什么?˜q™ä¸¤ä¸ªæ–¹æ³•都会从¾U¸ç‰Œçš„内部列表里跛_‡ºä¸€ä¸ªIndexOutOfBoundsException异常åQŒä½†æ˜¯ç›®å‰æˆ‘们还没有ž®Þp¿™ä¸ªé—®é¢˜è¿›è¡Œæ²Ÿé€šã€‚回头看看简单性的原则åQŒæˆ‘们知道自己需要沟通。我们的¾cȝš„用户应该知道˜q™ä¸ªæ½œåœ¨çš„问题。幸˜qçš„æ˜¯ï¼Œæˆ‘们ž®†è¿™¿Uæµ‹è¯•当作是一¿Uæ²Ÿé€šçš„æ–¹å¼åQŒå› æ­¤æˆ‘们增加了下面的测试ã€?br /><br /></p><p>public void testTopOnEmptyDeck() { </p><p>    Deck deck = new Deck(); </p><p>    try { </p><p>        deck.top(); </p><p>        fail("IllegalStateException not thrown"); </p><p>    } catch(IllegalStateException e) { </p><p>        assertEquals("Cannot call top on an empty deck", e.getMessage()); </p><p>    } </p><p>}  </p><p>public void testRemoveOnEmptyDeck() { </p><p>    Deck deck = new Deck(); </p><p>    try { </p><p>        deck.remove(); </p><p>        fail("IllegalStateException not thrown"); </p><p>    } catch(IllegalStateException e) { </p><p>        assertEquals("Cannot call remove on an empty deck", e.getMessage()); </p><p>    } </p><p>} <br /><br />上面都是异常‹¹‹è¯•åQˆException Test<sup><a ><font color="#78ba00">2</font></a></sup>åQ‰çš„例子。我们再一‹Æ¡è¿è¡Œè¿™äº›æµ‹è¯•看它们å¤ÞpÓ|åQŒç„¶åŽåŠ å…¥å®žçŽ°è®©å®ƒä»¬é€šè¿‡ã€?br /><br />public int top() { </p><p>    if(isEmpty()) </p><p>        throw new IllegalStateException("Cannot call top on an empty deck"); </p><p>    return ((Integer) cards.get(0)).intValue(); </p><p>}</p><p> public void remove() { </p><p>    if(isEmpty()) </p><p>        throw new IllegalStateException("Cannot call remove on an empty deck"); </p><p>    cards.remove(0); </p><p>} </p><p>ž®½ç®¡guard语句有重复,但是我们军_®šä¸åŽ»½Ž¡å®ƒåQŒæ²¡æœ‰å°†å®ƒä»¬½Ž€åŒ–成一个共同的æ–ÒŽ³•ã€‚è¿™æ˜¯å› ä¸ºæ²Ÿé€šçš„ä»·å€ÆD¶…˜q‡äº†é‡å¤çš„代仸P¼Œå½“ç„¶˜q™åªæ˜¯ä¸€ä¸ªä¸ªäººçš„选择ã€?/p><p>一手牌<br />我们已经完成了对牌桌和投注台面的‹¹‹è¯•和实玎ͼŒçŽ°åœ¨ž®±åˆ°äº†åˆ›å»ÞZ¸€æ‰‹ç‰Œçš„æ—¶å€™äº†ã€‚待办事™å¹åˆ—表再一‹Æ¡å‘挥其作用åQŒæˆ‘们得åˆîCº†ä¸‹é¢˜q™æ ·ä¸€ä¸ªåˆ—表:</p><ul><li>创徏一个一开始没有纸牌的½Iºæ‰‹ </li><li>向手上加入纸ç‰? </li><li>‹‚€æŸ¥ä¸€åªæ‰‹æ˜¯å¦å‡»èÓ|了另一æ‰? </li><li>‹‚€æŸ¥ä¸€åªæ‰‹æ˜¯å¦çˆ†äº†</li></ul><p> </p><p>为空手增加一个测试很½Ž€å•,我们¾l§ç®‹åˆ°ç»™æ‰‹ä¸ŠåŠ å…¥¾U¸ç‰Œã€?/p><p>public void testAddACard()<br />{<br />  Hand hand = new Hand();<br />  hand.add(10);<br />  assertEquals(1, hand.size());<br />  hand.add(5);<br />  assertEquals(2, hand.size());<br />} </p><p>我们˜qè¡Œ‹¹‹è¯•åQŒç„¶åŽåŠ å…¥å®žçŽ°ã€?/p><p>public void add( int card )<br />{<br />  cards.add(new Integer(card));<br />}</p><p>‹¹‹è¯•通过了,我们没有看到Hand¾c»é‡Œæœ‰ä“Q何重复。但是我们刚刚给Hand加上的实现和¾l™Deck加上的方法极其相伹{€‚回头看看牌桌的待办事项列表åQŒæˆ‘们记得必™åÀL£€æŸ¥ç‰Œæ¡Œï¼ˆä¸Šçº¸ç‰Œçš„å¼ æ•°åQ‰æ˜¯å¦æ­£¼‹®ï¼Œæˆ‘们最后也å¯Òމ‹åšåŒæ ïLš„事情ã€?/p><p>public void testAddInvalidCard() { </p><p>    Hand hand = new Hand(); </p><p>    try { </p><p>        hand.add(1); </p><p>        fail("IllegalArgumentException not thrown"); </p><p>    } catch(IllegalArgumentException e) { </p><p>        assertEquals("Not a valid card value 1", e.getMessage()); </p><p>    }</p><p>     try { </p><p>        hand.add(12); </p><p>        fail("IllegalArgumentException not thrown"); </p><p>    } catch(IllegalArgumentException e) { </p><p>        assertEquals("Not a valid card value 12", e.getMessage()); </p><p>    } </p><p>} </p><p>我们加入了下面的实现来通过‹¹‹è¯•ã€?/p><p>public void add( int card )<br />{<br />  if(card < 2 || card > 11)<br />    throw new IllegalArgumentException("Not a valid card value " + card);<br />  cards.add(new Integer(card));<br />} </p><p>但是现在我们在Deckå’ŒHand里有相同的guard语句åQŒç”¨æ¥æ£€æŸ¥è¯¥è‡ªå˜é‡æ˜¯å¦ä»£è¡¨ç€æ­£ç¡®çš„纸牌倹{€‚简单性的原则要求我们删除重复åQŒä½†æ˜¯åœ¨˜q™é‡Œæƒ…况òq¶ä¸åƒExtract Method重整<sup><a ><font color="#78ba00">6</font></a></sup>˜q™ä¹ˆ½Ž€å•。如果我们看到多个类之间存在重复åQŒè¿™æ„å‘³ç€æˆ‘们¾~ºå¤±äº†æŸ¿Uæ¦‚å¿üc€‚在˜q™é‡Œæˆ‘们很容易就看到Card¾cÀL‹…è´Ÿè“v了判断什么值是有效的责任,而Deckå’ŒHandä½œäØ“Card的容器变得更å…äh²Ÿé€šæ€§ã€?/p><p>我们引入了Card¾cÖM»¥åŠç›¸åº”çš„Deckå’ŒHand重整åQŒå¦‚åˆ?b>è¡?/b><b>B</b>åQ?/p><p>public class Card { </p><p>    private final int value; </p><p>    public Card( int value ) { </p><p>        if( value < 2 || value > 11 ) </p><p>            throw new IllegalArgumentException( "Not a valid card value " + value ); </p><p>        this.value = value; </p><p>    }</p><p>     public int getValue() { </p><p>        return value; </p><p>    } </p><p>}</p><p> public class Deck { </p><p>    private static final int[] NUMBER_IN_DECK = new int[] {0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 16, 4};</p><p>     â€?</p><p>    public void add( Card card ) throws IllegalStateException { </p><p>        if(NUMBER_IN_DECK[card.getValue()] == countOf(card)) </p><p>            throw new IllegalStateException("Cannot add more cards of value " + card.getValue()); </p><p>        cards.add(card); </p><p>    }</p><p>     public Card top() { </p><p>        if(isEmpty()) </p><p>            throw new IllegalStateException("Cannot call top on an empty deck"); </p><p>        return (Card) cards.get(0); </p><p>    }</p><p>     â€?</p><p>    private int countOf(Card card) { </p><p>        int result = 0; </p><p>        for(Iterator i = cards.iterator(); i.hasNext(); ) { </p><p>            Card each = (Card) i.next(); </p><p>            if(each.getValue() == card.getValue()) </p><p>                result++; </p><p>        }</p><p>         return result; </p><p>    } </p><p>}</p><p> public class Hand { </p><p>    â€?</p><p>    public void add( Card card ) { </p><p>        cards.add(card); </p><p>    } </p><p>    â€?</p><p>} </p><p>‹¹‹è¯•åQç¼–码-重整循环的每一阶段都涉及不同类型的思想。在‹¹‹è¯•阶段åQŒé‡ç‚ÒŽ”¾åœ¨äº†è¢«å®žçŽ°çš„¾cÈš„æŽ¥å£ä¸Šã€‚编写代码是ä¸ÞZº†è®©æµ‹è¯•尽可能快地通过‹¹‹è¯•。而重整阶ŒDµå¯ä»¥è¢«å½“作是ä‹É用简单性原则进行指导的微型代码审查。有没有重复的或者看èµäh¥¾cÖM¼¼çš„代码,不仅仅是在当前的¾c»é‡ŒåQŒè€Œä¸”是在¾pȝ»Ÿçš„其他类里?现在的实现可能会出现什么问题,¾cȝš„用户能够与之™åºåˆ©æ²Ÿé€šå—åQ?/p><p><i>重要的成功因ç´?/i></p><ul><li>ž®æ­¥å‰è¿›â€”—TCR对于开发äh员来说不是一个很å®ÒŽ˜“çš„è{换。一‹Æ¡åª˜q›è¡Œä¸€ä¸ªæ­¥éª¤ï¼ŒåŒæ—¶˜q˜è¦æ˜Žç™½å®ƒå­¦ä¹ è“v来有一定难度ã€? </li><li>严格遵守原则——只˜q›è¡ŒTDD或者只˜q›è¡Œé‡æ•´òq¶ä¸èƒ½è®©æ•´ä¸ªTCR循环一íy´è€Œå°±ã€‚给自己­‘›_¤Ÿçš„æ—¶é—´æ¥ž®è¯•åQŒåƈ取得效果。压力和最¾lˆæœŸé™ä¼š˜q«ä‹Éž®ç»„回到原来的习惯上——一定要ž®å¿ƒåQ? </li><li>重整˜q‡ç¨‹â€”—与ž®ç»„的所有成员交换意见,了解一下他们的反馈 </li><li>理解——确保整个小¾l„都完全理解TCR循环是什么,如何实现它。考虑一下就此主题进行员工培训和讲åñ”ã€?</li></ul><p>配对¾~–程——第二步<br />TCR循环可以由某个开发äh员独自完成,但是敏捷开发和TCR循环的真正威力来自于配对¾~–程åQˆpair programmingåQ‰ã€‚在敏捷开发里åQŒå¼€å‘äh员每两äh一¾l„编写所有的生äñ”代码åQŒå…¶ä¸­ä¸€äººæ‹…当“驱动者(driveråQ‰â€ï¼ˆè´Ÿè´£æ“ä½œé¼ æ ‡å’Œé”®ç›˜ï¼‰åQŒè€Œå¦ä¸€ä¸ªäh同驱动者一道解决问题和规划更大的图景。编½E‹é…å¯šw‡Œçš„这个驱动者可以按需要进行轮换。配对让你能够实现眼前的目标åQŒåŒæ—¶ç¡®ä¿ä¸ä¼šå¿½ç•¥é¡¹ç›®çš„æ•´ä½“目标。它会保证有人在考虑下一步的走向和下一个要解决的问题ã€?/p><p>虽然配对¾~–程引è“v了很多争议,但是大多æ•îC¼˜¿U€çš„开发äh员还是在按照˜q™ä¸€æ–ÒŽ³•˜q›è¡Œå¼€å‘,臛_°‘有的时候是˜q™æ ·çš„。管理äh员们可能会相信配对编½E‹é™ä½Žäº†ç”Ÿäñ”效率åQŒç„¶è€Œå°½½Ž¡å¼€å‘小¾l„的生äñ”效率在一开始会有所降低åQŒä½†æ˜¯ç ”½I¶å·²¾lè¡¨æ˜Žä»Žè´¨é‡å’Œå¢žåŠ çš„ç”Ÿäñ”效率的角度来看,配对¾~–程˜qœè¿œ­‘…过了开发äh员单独工作的质量和效çŽ?sup><a ><font color="#78ba00">7</font></a></sup>。而另一斚w¢åQŒå¼€å‘äh员可能会觉得配对¾~–程非常困难åQŒå› ä¸ºå®ƒéœ€è¦ä¸ŽäºÞZ»¬æ›´å¤šçš„交互过½E‹ï¼Œòq¶ä¸Žå¦ä¸€ä¸ªå¼€å‘äh员一èµïL¼–写代码。但是这也是建立一¿Uç›¸äº’学习的环境的最好方法ã€?/p><p> </p><p>实施配对¾~–程</p><p>1.       不要独断专行——要讨论。与你的ž®ç»„成员讨论配对¾~–程的思想及其优劣åQŒè€Œä¸æ˜¯ç‹¬æ–­ä¸“行地¾l™ä»–们定规则。配对编½E‹æ˜¯å¼€å‘äh员相互学习的¾lå¥½æœÞZ¼šã€?/p><p>2.       ¼‹®å®šä½ çš„ž®ç»„需要多ž®‘配寏V€‚配对编½E‹æ˜¯ä¸€™å¹å·¥ä½œå¼ºåº¦å¾ˆå¤§ä½†æ˜¯ä×o人满意的工作方式ã€?/p><p>3.       不要让配对编½E‹äh员每天连¾l­å·¥ä½œå…«ä¸ªå°æ—¶â€”—否则你的小¾l„会吃不消的。从较短的时间开始——每天一åˆîC¸¤ä¸ªå°æ—Óž¼Œçœ‹çœ‹å®ƒæ˜¯å¦‚何˜q›å±•的,然后随着ž®ç»„ä¿¡å¿ƒçš„å¢žå¼ø™€Œåšgé•¿æ—¶é—´ã€?/p><p>4.       定期‹‚€æŸ¥ã€‚如果你已经军_®šž®è¯•再次˜q›è¡Œæ•æ·å¼€å‘ï¼Œä½ å°±éœ€è¦ç¡®ä¿äØ“ž®ç»„营造了正式的环境,以便åQˆå®šæœŸï¼‰ž®±é¡¹ç›®è¿›åº¦è¿›è¡Œåé¦ˆã€?/p><p><i>重要的成功因ç´?/i></p><ul><li>ž®è¯•它——如果你不去ž®è¯•åQŒä½ ž®±æ°¸˜qœä¸äº†è§£å®ƒã€? </li><li>æ—‰™—´â€”—给你小¾l„(­‘›_¤Ÿçš„)旉™—´æ¥å°è¯•,òq¶ä¸€æ­¥ä¸€æ­¥æ¥å®Œæˆã€? </li><li>沟通——配对编½E‹ä¼šæš´éœ²ä¸€äº›æœ‰äº‰è®®çš„问题——要保证沟通的渠道畅通ã€? </li><li>配对恐惧症——你可能会碰到拒¾læˆ–者不希望与别人搭配工作的人。通常情况都是有别的原因驱使他们这样做åQŒæ‰€ä»¥ä½ éœ€è¦æ‰¾å‡ºåƈ解决˜q™äº›åŽŸå› ã€? </li><li>花时间思考——开发ähå‘˜éœ€è¦æ—¶é—´æ¥æ€è€ƒåÆˆæƒ›_‡ºä¸ÀL„â€”—确信给他们留出了时间做别的事情ã€?</li></ul><p>从整体上è®ÔŒ¼Œæˆ‘们在这里说的是要尝试这¿Uæ–¹æ³•——首先尝试测试-¾~–码åQé‡æ•´åó@环,一旦你让它˜qè{èµäh¥åQŒå°±ž®è¯•一下配对编½E‹ã€‚你应该马上ž®±å¯ä»¥çœ‹åˆ°è´¨é‡çš„æå‡åQŒä»¥åŠå›¢é˜Ÿé‡Œæ²Ÿé€šå±‚‹Æ¡çš„æé«˜ã€?/p><p>我们在本文没有谈及的内容很简单——增量设计。敏æïL¼–½E‹å–œ‹Æ¢ç®€å•的增量、改˜q›çš„设计åQŒè€Œä¸æ˜¯åœ¨¾~–写代码之前的大型设计。很多äh都认为敏æïL¼–½E‹ä¸å–œæ¬¢è®¾è®¡â€”â€”äº‹å®žåÆˆä¸æ˜¯å¦‚æ­¤åQŒè€Œåº”该是只要满èƒö最低需要就行了ã€?/p><p>在本¾pÕdˆ—的第二部分里åQŒæˆ‘们将更加仔细地探讨简单设计以及一套的开发团队做法ã€?/p><p><u>参考资æ–?/u></p><p>1.       Beck Kå’ŒAndres CåQŒã€Šæžé™ç¼–½E‹è¯¦è§£ï¼šå˜åŒ–åQŒç¬¬äºŒç‰ˆåQ?i>Extreme Programming explained: embrace change 2nd ed</i>.åQ‰ã€‹ï¼ŒPearson Education出版½C¾ï¼Œ2005òq´ã€?/p><p>2.       Beck KåQŒã€Šæµ‹è¯•驱动的开发:举例åQ?i>Test-driven development: by example</i>åQ‰ã€‹ï¼ŒPearson Education出版½C¾ï¼Œ2003òq´ã€?/p><p>3.       Jeffries R、Anderson A、Hendrickson CåQŒã€Šå®žçŽ°æžé™ç¼–½E‹ï¼ˆ<i>Extreme Programming installed</i>åQ‰ã€‹ï¼ŒAddison-Wesley出版½C¾ï¼Œ2001òq´ã€?/p><p>4.       Wake WåQŒã€Šæžé™ç¼–½E‹æŽ¢è®¨ï¼ˆ<i>Extreme programming explored</i>åQ‰ã€‹ï¼ŒAddison-Wesley出版½C¾ï¼Œ2002òq´ã€?/p><p>5.       Meyer BåQŒã€Šæž„建面向对象的软äšgåQŒç¬¬äºŒç‰ˆåQ?i>Object-oriented software construction 2nd ed</i>.åQ‰ã€‹ï¼ŒPrentice Hall出版½C¾ï¼Œ1997òq´ã€?/p><p>6.       Fowler MåQŒã€Šé‡æ•ß_¼šæ”¹è¿›åŽŸæœ‰ä»£ç çš„è®¾è®¡ï¼ˆ<i>Refactoring</i><i>: improving the design of existing code</i>åQ‰ã€‹ï¼ŒAddison Wesley Longman出版½C¾ï¼Œ1999òq´ã€?/p><p>7.       Williams L½{‰ï¼Œã€Šå¼ºåŒ–配对编½E‹æ¡ˆä¾‹ï¼ˆ<i>Strengthening the Case for Pair-Programming</i>åQ‰ï¼Œ¾ŸŽå›½çŠ¹ä»–å¤§å­¦è®¡ç®—æœºç³»åQ?999òq´ã€?/p><p><i>Brian Swan</i><i>æ˜?a ><font color="#78ba00">Exoftware公司</font></a></i><i>教授敏捷开发的指导老师。他在敏捷开发的技术和½Ž¡ç†æ–šw¢å…ähœ‰ç›¸å½“丰富的经验,曄¡»å¸¦é¢†å¾ˆå¤šž®ç»„成功地è{换到了敏捷开发,òq¶ä»¥æ•æ·å¼€å‘的思想和做法来培训开发äh员和½Ž¡ç†äººå‘˜ã€‚他在Exoftware</i><i>公司和在敏捷开发方面的工作使他到过很多公司åQŒåƈ对其开发小¾l„äñ”生了持箋的、积极的影响。Brian</i><i>先前的经验还包括担ä“QNapier</i><i>大学的讲师,讲授软äšg开发和人机互动。Brian</i><i>可以通过<a href="mailto:bswan@exoftware.com?Subject=Builder Article"><font color="#78ba00">电子邮äšg</font></a></i><i>联系上ã€?/i></p><p></p><p> </p></font></font> <img src ="http://www.aygfsteel.com/yesjoy/aggbug/62678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yesjoy/" target="_blank">★yesjoyâ˜?/a> 2006-08-09 23:29 <a href="http://www.aygfsteel.com/yesjoy/articles/62678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">¾®ÑÐÏØ</a>| <a href="http://" target="_blank">»áÀíÏØ</a>| <a href="http://" target="_blank">ÇàÖÝÊÐ</a>| <a href="http://" target="_blank">ÃûÉ½ÏØ</a>| <a href="http://" target="_blank">»´±±ÊÐ</a>| <a href="http://" target="_blank">½ªÑßÊÐ</a>| <a href="http://" target="_blank">¸Ê¹ÈÏØ</a>| <a href="http://" target="_blank">ͨÓÜÏØ</a>| <a href="http://" target="_blank">ξÊÏÏØ</a>| <a href="http://" target="_blank">É«´ïÏØ</a>| <a href="http://" target="_blank">ÓàÇìÏØ</a>| <a href="http://" target="_blank">»¯Â¡</a>| <a href="http://" target="_blank">´ï¶û</a>| <a href="http://" target="_blank">˼ÄÏÏØ</a>| <a href="http://" target="_blank">Û³ÁêÏØ</a>| <a href="http://" target="_blank">³±ÖÝÊÐ</a>| <a href="http://" target="_blank">ÔÇÎ÷ÏØ</a>| <a href="http://" target="_blank">̨°²ÏØ</a>| <a href="http://" target="_blank">ÐÂÓàÊÐ</a>| <a href="http://" target="_blank">ÃÚÑôÏØ</a>| <a href="http://" target="_blank">ËþºÓÏØ</a>| <a href="http://" target="_blank">°×ÀÊÏØ</a>| <a href="http://" target="_blank">Îä¸ÔÊÐ</a>| <a href="http://" target="_blank">°ÍÁÖÓÒÆì</a>| <a href="http://" target="_blank">ÏçÄþÏØ</a>| <a href="http://" target="_blank">³Ç¹ÌÏØ</a>| <a href="http://" target="_blank">ÎäÊ¤ÏØ</a>| <a href="http://" target="_blank">ÄþÎäÏØ</a>| <a href="http://" target="_blank">Ö¾µ¤ÏØ</a>| <a href="http://" target="_blank">ÃÜɽÊÐ</a>| <a href="http://" target="_blank">»¨Á«ÊÐ</a>| <a href="http://" target="_blank">¼´Ä«ÊÐ</a>| <a href="http://" target="_blank">´ó¹ØÏØ</a>| <a href="http://" target="_blank">ÕżҿÚÊÐ</a>| <a href="http://" target="_blank">ÀèÆ½ÏØ</a>| <a href="http://" target="_blank">»ôÖÝÊÐ</a>| <a href="http://" target="_blank">ÏÉÓÎÏØ</a>| <a href="http://" target="_blank">ÀóÆÖÏØ</a>| <a href="http://" target="_blank">Ô½Î÷ÏØ</a>| <a href="http://" target="_blank">ºÏɽÊÐ</a>| <a href="http://" target="_blank">¶ÑÁúµÂÇìÏØ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>