跳到正文

敏捷开发与 XP 的实践方法

頻出约 37 分钟7 个术语过去问 6 题

本单元目标

  • 能够说明敏捷是一种以短周期反复、逐步积累可运行的成果,并吸收中途需求变化的开发理念。
  • 能够把 XP 定位为将敏捷理念落实为一组具体习惯的方法之一。
  • 能够根据先做什么、是否改变外部可见的行为,区分测试驱动开发和重构。
术语总表(7 个)
术语一句话定位线索
アジャイル通过反复的短周期、随变化推进开发的理念理念的总称尽早展示可运行的成果
ユーザーストーリー从用户立场简短写出想要什么及其理由的需求需求的写法谁·做什么·为什么
XP彻底贯彻良好开发习惯的一种敏捷方法具体的方法一组习惯
エクストリームプログラミングXP 的正式名称与 XP 相同Extreme 的 X
テスト駆動開発先写测试,再写让测试通过的代码的开发方式XP 的习惯测试在先
ペアプログラミング两人共用一台电脑,边写边相互确认的编程方式XP 的习惯写的人与看的人
リファクタリング保持外部可见的行为不变,整理内部结构的工作XP 的习惯不改变行为

术语

敏捷(アジャイル)是一种开发理念:以较短的周期反复进行从计划到确认的过程,一点点增加可运行的软件。

  1. 选出优先级高的需求
  2. 在短期内做出并试用
  3. 以可运行的形式展示给用户
  4. 把意见带入下一轮计划

把收到的意见和变化的需求放进下一轮,再回到起点。

4 / 4

这个短周期称为迭代(イテレーション),每次都从当时优先级高的功能做起。不是一开始就定死全部规格,而是边与用户沟通边调整要做的范围。比起把文档整理得细致周全,更看重尽早展示能运行的东西并获取意见。

类比就像旅行时不在出发前把行程精确到分钟,而是每天看天气和身体状况,重新安排第二天的计划。

记法英语 agile 意为“灵活、敏捷”。想象不背沉重的计划书、能随时转向的轻快身手。

考点

  • 常考敏捷(アジャイル)的优点是,即使中途规格或需求发生变化,也能纳入下一次迭代的计划。比按顺序逐一完成各工序的瀑布模型(ウォーターフォール型)更能应对变化。
  • 常考敏捷重视可运行的软件胜过详细的文档,并把客户的新需求尽早反映到产品中。

ユーザーストーリー用户故事

在术语表中打开 ユーザーストーリー

用户故事(ユーザーストーリー)是敏捷中描述需求的一种方式,从使用者的立场用简短的句子写出“作为谁、想做什么、为什么”。

要素写法示例
作为谁作为图书馆的读者
想做什么想用手机查看所借图书的归还日期
为什么因为想避免忘记还书

一个故事要短到能写在一张卡片上,细节条件在动手制作前再与用户商量决定。连理由也写下来,制作方就不容易忽略这个功能要为谁解决什么困扰。故事会标上优先级,每次迭代按从高到低的顺序制作。

类比就像餐馆里客人点餐时说“我不太能吃辣,想要孩子也能吃的菜”。菜谱的细节由后厨和客人商量着定。

记法story 就是“故事”。故事的主角永远是用户,制作方或系统不会成为主语。

考点

  • 易混用户故事(ユーザーストーリー)是用用户自己的话传达目的的简短需求,与把界面和处理细节都定死的详细规格书作用不同。

该术语的过去问 1 题 ユーザーストーリー

XP 是一种开发方法,它把敏捷理念整理成日常开发中要遵守的一组具体习惯(实践,プラクティス)。

  • XP 的实践(示例)
    • 先写测试
    • 两人一组编写
    • 不改变行为地整理结构
    • 频繁集成变更

它面向规模较小的团队,以短周期反复发布,在跟上不断变化的需求的同时保持软件质量。实践包括测试驱动开发和结对编程等,都是把公认有益的习惯每次都不落下地执行。

类比就像运动队每次都坚持热身、互相喊话、赛后复盘这些基本功,从而变强。

记法这个两字母缩写取自 Extreme 的 X 和 Programming 的 P。

考点

  • 常考XP 是敏捷(アジャイル)的开发方法之一,通过短周期多次发布,在跟上不断变化的需求的同时追求高质量的软件。
  • 易混敏捷是泛指一种开发理念的名称,XP 则是实践这种理念的具体方法之一。

该术语的过去问 2 题 XP

「敏捷」与「XP」的区别

比较点敏捷XP
关键定位泛指开发理念的名称实践该理念的具体方法之一
内容以短周期反复吸收变化的方针日常遵守的一组实践

エクストリームプログラミング极限编程

在术语表中打开 エクストリームプログラミング

极限编程(エクストリームプログラミング)是 XP 的正式名称,两者指同一种开发方法。

英语写作 Extreme Programming,含有把公认良好的开发习惯贯彻到极致的意思。内容与缩写 XP 完全相同,无论以哪种叫法出现,都当作同一种方法来理解。

记法extreme 意为“极端的”。名字体现的是毫不打折地把基本习惯做到底的态度。

考点

  • 常考极限编程(エクストリームプログラミング)与 XP 是正式名称与缩写的关系,表示同一种敏捷(アジャイル)开发方法。

该术语的过去问 1 题 エクストリームプログラミング

テスト駆動開発测试驱动开发

在术语表中打开 テスト駆動開発

测试驱动开发(テスト駆動開発)是一种开发方式:先写要做的功能的测试,再写能通过该测试的代码。

  1. 写一个还不能通过的测试
  2. 写出让测试通过的最少代码
  3. 保持测试通过并整理代码

在保持测试通过的状态下整理结构,然后进入下一个测试。

3 / 3

先写好的测试表明了“做到什么才算完成”,因此在动手之前规格就已清晰。写测试、让它通过、整理代码,这个小循环反复进行,每次都用测试确认行为。英文缩写为 TDD,是 XP 的代表性实践。

类比就像组装家具之前,先定下“这个书架放 30 本书也不会歪”这一合格标准,再开始动手。

记法“驱动”就是“推动的力量”。从字面就能读出:由测试打头阵,带动整个开发。

考点

  • 易混在测试驱动开发(テスト駆動開発)中,写测试是第一项工作,与全部做完之后再集中测试的方式顺序相反。

该术语的过去问 1 题 テスト駆動開発

ペアプログラミング结对编程

在术语表中打开 ペアプログラミング

结对编程(ペアプログラミング)是两个人并排坐在同一屏幕前,一边商量一边编写同一段代码的开发方式。

角色职责
驾驶员握着键盘输入代码
领航员在旁边找出错误,思考推进方式和设计
轮换按时间段互换角色

握键盘输入的人称为驾驶员(ドライバー),在旁边一边确认一边考虑方针的人称为领航员(ナビゲーター),两人不时互换角色。编写过程中另一人同步查看,因此能尽早发现错误,知识和写法也能在团队中传开。这是 XP 的实践之一。

类比就像汽车拉力赛中,车手握方向盘,副驾驶座上的搭档看着地图报出路线。

记法pair 和鞋子、手套一样,是“两个一组”。用“一张桌子前并排放两把椅子”的画面来记。

考点

  • 易混代码评审(コードレビュー)是写完之后由别人再读代码的检查,而结对编程(ペアプログラミング)的不同之处在于,旁边的人在编写的当下就进行确认。

该术语的过去问 2 题 ペアプログラミング

重构(リファクタリング)是在不改变程序外部可见行为的前提下,把命名、结构等内部构造整理得更易读、更易修改的工作。

区分内容示例
不变的部分对同一输入返回的结果、界面的动作
改变的部分难懂的变量名、重复的处理、过长的函数

这里所说的外部可见行为,是指给出相同输入时返回的结果以及用户能看到的表现。即使表面上的动作不变,减少重复或重新划分处理,也能让之后的修改和功能追加更容易。整理之后行为是否保持不变,要通过运行测试来确认。

类比就像整理房间时一件东西都不扔,只是重新给抽屉分隔,让东西更好找。

记法re-factor 可以想成把数学里的因式分解重新做一遍:值保持不变,只重组式子的形式。

考点

  • 常考重构(リファクタリング)只改动内部结构,用户看到的功能和行为保持不变。
  • 易混逆向工程(リバースエンジニアリング)是分析已有程序、从中读出规格的活动,与改写代码进行整理的重构方向不同。
  • 易混测试驱动开发(テスト駆動開発)是从测试开始推进开发的方式,重构则是在保持行为不变的前提下整理已有代码的工作。

该术语的过去问 2 题 リファクタリング

「测试驱动开发」与「重构」的区别

比较点测试驱动开发重构
做什么先写测试,再写能通过测试的代码整理已有代码的内部
关键外部可见的行为逐步加入由测试确定的新行为不改变

要点

  • 敏捷是一种开发理念:每个短周期都展示可运行的成果,把用户的意见和需求变化带入下一轮。
  • 用户故事用用户的话简短写出“作为谁、做什么、为什么”,细节在动手前再商量决定。
  • XP 与极限编程是同一种方法,重视每次都把良好的开发习惯做到底。
  • 结对编程中输入的人和确认的人并排工作,编写过程中就能发现错误。
  • 重构的关键在于保持外部可见的行为不变,只整理内部结构。

确认题

从本单元的过去问中选 5 题

开始做确认题

查看这个领域的全部过去问