<ruby id="rxdll"></ruby><strike id="rxdll"></strike>

    <rp id="rxdll"></rp>
      <del id="rxdll"><meter id="rxdll"></meter></del>
      <pre id="rxdll"><font id="rxdll"></font></pre>
        <pre id="rxdll"></pre>
      <p id="rxdll"><thead id="rxdll"></thead></p><dl id="rxdll"><progress id="rxdll"><form id="rxdll"></form></progress></dl>

      <ol id="rxdll"><thead id="rxdll"><track id="rxdll"></track></thead></ol>
      <i id="rxdll"><dfn id="rxdll"></dfn></i>
      <font id="rxdll"><meter id="rxdll"></meter></font>

        <mark id="rxdll"><dfn id="rxdll"></dfn></mark>
        • 軟件測試技術
        • 軟件測試博客
        • 軟件測試視頻
        • 開源軟件測試技術
        • 軟件測試論壇
        • 軟件測試沙龍
        • 軟件測試資料下載
        • 軟件測試雜志
        • 軟件測試人才招聘
          暫時沒有公告

        字號: | 推薦給好友 上一篇 | 下一篇

        程序員為什么不寫單元測試

        發布: 2009-2-17 13:44 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 42次 | 進入軟件測試論壇討論

        領測軟件測試網 內容提要:賽門鐵克誤殺門事件在一片爭議聲中落下了帷幕,但是它身后隱蔽的問題還遠未結束,諾頓誤殺彰顯測試價值的回歸,同時也向廣大的程序員們敲響了警鐘,不做單元測試的程序員在未來發展中絕對無路可走。本文中作者就單元測試、程序員為什么不寫單元測試做了分析,希望引起廣大開發人員的共鳴。
            賽門鐵克誤殺門事件在一片爭議聲中落下了帷幕,但是它身后隱蔽的問題還遠未結束,諾頓誤殺彰顯測試價值的回歸,同時也向廣大的程序員們敲響了警鐘,不做單元測試的程序員在未來發展中絕對無路可走,以下是筆者的一些分析。

        一、為了單元測試而寫單元測試

        最近筆者曾經做過一次“程序員在項目開發中編寫單元測試的情況”的調查。

        調查結果顯示:

        1. 幾乎沒有嚴格在項目中執行TDD(,TDD)。
        2. 為大部份業務方法編寫單元測試,并保證方法測試通過,占16.6%。
        3. 偶爾編寫單元測試,一般情況下不寫單元測試,占58.3%。
        4. 為了應付項目檢查而寫單元測試,但并不保證方法是否測試通過, 占8.3%。
        5. 從來不編寫單元測試,占16.6%。


        雖然調查的結果有一定的片面性,但是占58.3%比例的確高的驚人,同時,從來不編寫單元測試16.6%人層也基本反映國內程序員編寫單元測試的狀況,很少有程序員能夠比較認真地去編寫單元測試。那么,到底又是什么原因導致程序員不編寫單元的測試的?根據筆者參與的多個討論,主要有下面幾種原因使程序員不編寫單元測試:

        1. 為了完成編碼任務,沒有足夠的時間編寫單元測試。編寫單元測試會導致不能按時完成編碼任務,推遲項目進度。
        2. 單元測試的價值不高,完全是浪費時間。
        3. 業務邏輯比較簡單,不值得編寫單元測試。
        4. 不知道怎么編寫單元測試。
        5. 項目沒有要求,所以不編寫。
        6. 在項目的前期還是盡量去編寫單元測試,但是越到項目的后期就越失控。

        測試常常是程序員十分厭倦的一個項目活動。測試能夠為我們帶來什么?了解這些非常的重要,測試不可能保證一個程序是完全正確的,但是測試卻可以增強我們對程序完整的信心,測試可以讓我們相信程序做了我們期望它做的事情。測試能夠使我們盡早地發現程序的bug和不足。

        一個bug被隱藏的時間越長,修復這個bug的代價就越大。在《快速軟件開發》一書中已引用了大量的研究數據指出:最后才修改一個bug的代價是在bug產生時修改它的代價的10倍。

        在這里,我們需要討論的重點是單元測試。單元測試是一個方法層級上的測試,單元測試也是最細粒度的測試。用于測試一個類的每一個方法都已經滿足了方法的功能要求。

        在現代軟件開發過程中,不管是XP還是RUP都是十分重視單元測試。已經把單元測試作為貫穿整個開發周期的一項重要的開發活動。特別是在現代軟件開發過程中,有經常集成和漸近提交的方法論。由此,總結出了非常好的單元測試理論和實踐。

        二、在編寫代碼之前先編寫單元測試,即測試先行

        單元測試是代碼的一部份,所有的代碼必須有單元測試,并使測試通過(像在Spring這些優秀的開源項目中在這方面做出了非常好的例子)。

        在修改代碼之前先修改單元測試,并使它測試通過。

        在編寫代碼之前先編寫單元測試,會帶來非常多的好處。

        在編寫代碼之前先編寫單元測試,并不是編寫代碼之前需要一次性為所有的類都事先編寫單元測試,這需要有一個粒度的控制。最大的粒度應該控制在一個類級別上,最合適的粒度是控制在一個方法級別上。先為某一個方法編寫測試代碼,然后再為該方法編寫實現代碼,直到其測試通過后再為另一個方法編寫測試代碼,如此循環。單元測試在這里已經是一個契約規范了,它規范了方法應該做什么、實現什么。測試代碼遠遠要比難以閱讀和不會及時更新的需求文檔更有價值得多。 [Page]

        測試先行,鼓勵對需求的理解。如果沒有理解需求,你是不可能寫出測試代碼的,當然你也不可能寫出好的實現代碼。

        測試代碼與其它文檔相比會更有價值。當需求發生改變,實現代碼也相應改變。而往往需求文檔、設計文檔得不到及時更新。測試代碼相比那些過期的文檔更具有價值。

        測試先行可以編寫出最大覆蓋率的測試代碼。如果在方法的實現代碼編寫完后再編寫測試代碼,這時開發人員總是編寫一個正確路徑的測試代碼。它已經很難全面的去分析其它分支邏輯。

        如果我們采用測試先行,那么就自動地完成了為所有的類都編寫測試。為所有的類都編寫測試會將為你帶來非常多的好處。

        延伸閱讀

        文章來源于領測軟件測試網 http://www.k11sc111.com/

        TAG: 程序員 單元

        51/512345>

        關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
        版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
        北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
        技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

        軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

        国产女主播精品_国产片婬乱18一级毛片视频_国产午夜激无码av毛片不卡_国产精品欧美久久久天天影院
          <ruby id="rxdll"></ruby><strike id="rxdll"></strike>

          <rp id="rxdll"></rp>
            <del id="rxdll"><meter id="rxdll"></meter></del>
            <pre id="rxdll"><font id="rxdll"></font></pre>
              <pre id="rxdll"></pre>
            <p id="rxdll"><thead id="rxdll"></thead></p><dl id="rxdll"><progress id="rxdll"><form id="rxdll"></form></progress></dl>

            <ol id="rxdll"><thead id="rxdll"><track id="rxdll"></track></thead></ol>
            <i id="rxdll"><dfn id="rxdll"></dfn></i>
            <font id="rxdll"><meter id="rxdll"></meter></font>

              <mark id="rxdll"><dfn id="rxdll"></dfn></mark>