qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          沒有測試怎么敏捷?

           Bug是什么?

            警告:如果你有挑剔的眼光,并且你已經(jīng)發(fā)現(xiàn)了寫軟件的唯一正確方法,你可能會感到被挑戰(zhàn)。

            新來的開發(fā)人員提交了代碼,但是有bug。他們搞砸了代碼,一個鏈接顯示為明亮的、刺眼的紅色,而不是公司要求的柔和的藍色。你找到她,坐在一起,開始教導她測試的重要性,這時接到市場部的祝賀——因為最近一次發(fā)布,銷售額上漲了了50%。

            你知道唯一的修改是鏈接的顏色。

            代碼真的有bug?你還要誠實的把它回退?

            更重要的是,這也是許多人搞錯的問題:你從這件事得到什么教訓?

            為什么要測試

            我們使用敏捷開發(fā)是希望改善開發(fā)過程,更好的分享信息,特別是更加方便頻繁的獲得反饋(這是一個反復發(fā)生的流程)。有趣的是所有的敏捷開發(fā)理論都要求使用者調(diào)整敏捷開發(fā)理論來滿足個性的需求。我之前說過并且現(xiàn)在重復一下:你不能敏捷開發(fā)除非你自身是敏捷的。所以一些敏捷團隊沒有固定的迭代過程。其余的(大多數(shù)?)不搞結(jié)對編程。代碼審查成了tricky bits(譯注:不了解的詞匯)和初級程序員。然而,盡管方法不同,這些公司往往做的很好。

            但是他們都沒有想要不做測試,他們沒有想過。

            在我們的“紅色鏈接”例子中,如果進行了測試,那么就不會有50%的銷售額增長。

            我們大多數(shù)人很早就接觸測試并且認為它不錯。然后我們了解了TDD 并且意識到這就是測試的涅磐。 FIT testing 被那些FIT測試咨詢機構(gòu)過分的夸大了。現(xiàn)在BDD的情況也是如此:一些人興奮的不得了,另一些人不以為意。我想這不過是另一次炒作,不是么?

            但是測試是為了什么?從技術(shù)的角度來看,我們也許會爭論說測試就是確保軟件按我們希望的方式運行。但是這是最重要的事嗎?請銘記一點就是:在一咕噥行代碼里,所有軟件都有bugs,所有的!

            相反的,我認為更好的說法是所有軟件都有無法預料的behavior.我們寫測試是因為我們希望軟件會按我們期望的那樣運行。但是反過來,如果用戶按我們希望他們做的方式去操作不是更好嗎?你可以建立一個更好的捕鼠器,但是不能確保它們會鉆進去。如果有些是從Digg或者一些技術(shù)災害學習來的,那就會是這樣:客戶將會按他們該死的很樂意的方式去操作,無視你的軟件是否是“正常工作”、你咨詢的專家們和你舉行了多少次討論組。

            與其說軟件測試是客戶行為的一種代理,還不如我們靜下來為軟件的客戶好好想一會兒。

            意外列表

            考慮上面的“閃亮紅色鏈接”的例子,再問一次:什么是bug?在那個例子中(不是隨機選取的),可以簡單說是一個軟件bug,僅僅因為按意料外的行為。在這個例子中,是50%的銷售增長。

            現(xiàn)在,bug不再總是壞事情!我們可以用“意料外的行為”來思考——有時好,有時壞。

            那怎么知道到底是好還是壞呢?

            做一個意外列表。網(wǎng)站的500錯誤是壞的,而302呢?難說。也許你希望RAM使用率低于一定水平,或不像看到明顯的銷售額下降。也可能希望響應時間永遠不超過$x毫秒。

            列出所有明確不合預期的事件(例如:Facebook沒有“like”按鈕不屬此列)并對所有這些行為進行監(jiān)控。每當你修改或添加一些技術(shù),請再次仔細檢查你的不合預期列表。它們是不是最新的?你是否需要修改什么?

            一些不合預期事情是可逆的(銷售下降)且替代方法是好的。因此,也要監(jiān)控這些。或許當一個版本提升了10%的響應速度時你想得到通知。

            那然后呢?

            嗯,這是偉大的但絕對不可能代替測試。你提交了兩周的版本,內(nèi)存消耗猛增,你瘋狂地交換以致現(xiàn)在需要檢查300行的文件差異。你很難在最佳時間找到內(nèi)存泄露問題并且正常的測試經(jīng)常遺漏它們(除了檢查Test::LeakTrace),但現(xiàn)在你要回滾一個巨大的修改然后檢查3000行代碼來找出你的問題。

            因此你不必那么多。相反,你可以轉(zhuǎn)換為不間斷部署。在這個模型下,在準備好的前提下,可以把代碼推送到產(chǎn)品里面。當然,假如你把它推送到盒子里面的話也很好,觀察它,推送它到集群里面,觀察它,然后把它推送到所有的服務(wù)器。通過多方面的監(jiān)控,不尋常的情況常常出現(xiàn)的很快。并且你的內(nèi)存泄露是30行的diff而不是3000行的diff.

            你想處理那種情況呢?

            (理所當然,我用內(nèi)存泄露作為例子,但是這是一件經(jīng)常花很長時間才顯露出來的,而且我也懶得去改變這個例子。假裝我過去寫了5%的增加在404.)

            在我的這個經(jīng)驗中,顧客對一些小異常簡直就是很寬容,像大部分意料之外的行為都是一些諸如“圖片不能顯示”或者“這些查詢結(jié)果排序是不正確的。”這些并不會趨向于導致災難性。事實上,許多次這種異常的行為是被忽視的。就不良的事情而言,大部分時間意料之外的的行為將轉(zhuǎn)變?yōu)橹行曰蛘卟涣肌5怯袝r候他們也會轉(zhuǎn)變成為好的意想不到的行為。假如你不試一試的話是永遠不會知道的。

            正如你所預料的,這個技術(shù)在“A/B testing”這本書中運用得很好。如果你有勇氣查找非預期的行為而不是bugs的話,這本書將是下一個合符邏輯的計劃。

            注意:以上并沒有排除編寫測試(用例)。我看過“監(jiān)控不合預期的事件”戰(zhàn)略工作得非常好也堅信它可以結(jié)合軟件測試進行工作。然而,測試軟件是不同的,它更依賴客戶行為而不是嚴格規(guī)范。因此,這篇博文的標題實際上是有點不對,它只是一個看待測試的不同想法。

            而這正是這篇博文真正最有趣的想法:客戶的行為比你應用的行為更重要。

            原文鏈接:http://www.oschina.net/translate/how-to-be-agile-without-testing

          posted on 2013-05-13 09:20 順其自然EVO 閱讀(148) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石狮市| 洛川县| 临桂县| 六安市| 松原市| 濮阳县| 西平县| 巴彦淖尔市| 兴化市| 开阳县| 新平| 通许县| 大英县| 高淳县| 郓城县| 凤冈县| 亚东县| 新闻| 巨鹿县| 耿马| 施秉县| 宜州市| 神农架林区| 托克逊县| 大英县| 巨野县| 丰县| 定南县| 托里县| 江津市| 德化县| 昌都县| 桂东县| 瑞安市| 团风县| 黄陵县| 新河县| 葫芦岛市| 霞浦县| 璧山县| 马龙县|