• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • TDD中Transformation動作的優先順序 Transformation Priority Premise

    發表于:2014-03-27來源:不祥作者:不詳點擊數: 標簽:tdd
    TDD中Transformation動作的優先順序 Transformation Priority Premise.在TDD循環中,重構(Refactoring)是不改變行為而改變內部結構的動作,保持測試常綠。而變形(Transformation)是改變內部實現來使測試由紅變綠。這些變形的變化使代碼形式從特殊specific到一般generic

      在TDD循環中,重構(Refactoring)是不改變行為而改變內部結構的動作,保持測試常綠。而變形(Transformation)是改變內部實現來使測試由紅變綠。這些變形的變化使代碼形式從特殊specific到一般generic。

      Uncle Bob的一篇文章。http://blog.8thlight.com/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html

      中用了bowling game kata 和 Prime Factor kata來解釋。

      然后,基于變形的復雜度,Uncle Bob列舉出來并認為它們有如下優先順序。

      ({}–>nil) no code at all->code that employs nil

      (nil->constant)

      (constant->constant+) a simple constant to a more complex constant

      (constant->scalar) replacing a constant with a variable or an argument

      (statement->statements) adding more unconditional statements.

      (unconditional->if) splitting the execution path

      (scalar->array)

      (array->container)

      (statement->recursion)

      (if->while)

      (expression->function) replacing an expression with a function or algorithm

      (variable->assignment) replacing the value of a variable.

      結論是,要規避TDD常見的僵局(Impasse),即某個新test必須對代碼進行巨大變化才能滿足,且測試順序的選擇非常重要———那就要盡量選擇高優先級(簡單的)變形來滿足測試,或是選擇能由高優先級滿足的新test case來繼續,當看起來需要低優先級(復雜的)變形時,回退回去,看看還有沒有更簡單的test。

      他用了word wrap kata來解釋這一模式。其中,為了使

      assertThat(wrap(“word word”, 6), is(“word\nword”));

      通過,Bob故意用

      return s.replaceAll(” “, “\n”); //(expression->function)transformation

      ,結果陷入困境。

      然后Bob嘗試認為此案例沒有更好的方案,于是換了另一個測試

      assertThat(wrap(“longword”, 4), is(“long\nword”));

      assertThat(wrap(“longerword”, 6), is(“longer\nword”));

      然后用 (null->constant) 和(expression->function) 得到

      return s.substring(0, length) + “\n” + s.substring(length);

      TDD困境主要還是在于,如果低優先級的復雜(expression->function)變形,步子更大更死板,看似簡潔,實則隱藏了細節,更難“演進”實現。

      個人任務,第一個case同樣可以用 (null->constant) 和(expression->function) 得到類似的方案。

      Bob的這個思路是對的,但是例子以及背后的理論證明尚不完善。

    原文轉自:http://jackyshen.com/wordpress/2014/02/28/transformation-priority-premise-in-tdd/

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>