測試驅動開發–雙贏策略

敏捷從業人員談論測試驅動開發 (TDD),所以許多關心代碼質量和可操作性的開發人員也是如此。 我曾幾何時,不久前設法閱讀了有關TDD的文章。 據我了解,TDD的關鍵是:
  1. 編寫測試,但失敗
  2. 代碼,使測試成功
  3. 自動化測試
  4. 重構代碼以提高質量
  5. 重復

很容易理解。 惱火的開發人員大喊:“開發人員在編寫測試嗎? 您如何期望我們開發和測試并及時完成功能?”。 畢竟,所有開發人員都不想做無聊的測試工作。 我從事開發人員大約兩年了,在最初的幾天里,有時我會做出這種反應。 但是隨著時間的流逝,我已經開始理解軟件開發的癥結所在。 這次我想到嘗試TDD。

我的工作涉及使用Java EE Web框架通過UI在db中連接數據庫中的數據,這是典型的Web應用程序工作。

讓我解釋一下在采用TDD之前的測試策略:

  1. 編寫完整的代碼,其中包括-PLSQL過程,調用PLSQL過程的Java代碼,用于UI綁定的Java代碼以及JSP頁面本身。
  2. 手動測試db層和UI層代碼的功能。 它涉及導航到頁面,然后測試各種操作。 在這種情況下,UI問題和后端代碼問題都會出現。
  3. 正如我將進一步研究UI一樣,我將在代碼中發現一些錯誤,否則將編寫一個硒測試以自動測試一些用例。

通過上述3個步驟,我花了很多時間-

  1. 等待后端代碼編譯,然后重新啟動服務器以使UI反映更改。 即使它只是一個簡單的1詞/ 1語句更改,我也不得不等待大約5分鐘,有時甚至是8分鐘。 當我等待重新啟動時,我會失去對其他任務的關注,因此需要一段時間才能回到主要任務。
  2. 嘗試調試并找出異常/錯誤是由于UI代碼問題還是后端代碼問題引起的。
  3. 等待頁面加載并瀏覽頁面到正確的頁面。

好的,那是史前時代。 現在正走向現代。 我以為我無法完成TDD的工作,這是因為我編寫了后端和UI代碼耦合不良的代碼。 我想不出一種方法來獨立測試后端代碼,然后移至UI代碼,然后通過硒測試對其進行測試。 拋開這些概念,我試了一下。 我知道我與實際的TDD距離不太遠,但感覺有點接近。

  1. 我對如何實現邏輯,創建基本實現并使其成功編譯有一個很明確的想法。
  2. 創建了一些數據填充測試,以獲取用于測試的數據類型。
  3. 創建了JUnits以測試基本功能。 主要是通過Java API正確執行PLSQL過程。
  4. 更新了JUnits以添加更多測試以測試所需的實際功能,并更新了代碼以實現這些功能。
  5. 重構代碼以消除難聞的氣味,然后運行JUnits以確保沒有任何損壞。

我感到興奮的原因,以及我認為這是雙贏的策略:

  • 我開始考慮的是API用戶而不是API創建者。 這使我無法添加可以解決問題但難以測試的黑客。 與以前編寫的代碼相比,這極大??地改善了代碼結構。
  • 無需重新啟動服務器,每次重新啟動不會浪費?8分鐘,也不會浪費瀏覽頁面的時間。 我只需要編輯代碼,運行Junit并查看測試即可確定命運。 這對于我編寫的后端代碼更有用。
  • 我專注于代碼測試周期,因此不會失去重點。
  • 我看到測試顯示綠色的成就感。
  • 創建具有良好單元測試的代碼以測試后端功能的可能性,這也有助于更輕松地重構代碼。

現在,我只需要為UI和后端編寫粘合代碼,并通過硒測試來測試粘合代碼。

任何人開始使用TDD時都有類似的經歷嗎?

參考: 我在測試驅動開發中的第一步-我們的JCG合作伙伴 Mohamed Sanaulla在“ 體驗無限”博客上提出的雙贏策略 。


翻譯自: https://www.javacodegeeks.com/2012/05/test-driven-development-win-win.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式學習(三)——裝飾器模式

前言 距離上一次正兒八經地寫隨筆已經有一段時間了,雖然2月10號有一篇關于泛型的小記,但是其實只是簡單地將自己的學習代碼貼上來,為了方便后續使用時查閱,并沒有多少文字和理解感悟。之所以在今天覺得有必要寫點東西,…

swift - 導航欄設置

話不多,直接貼代碼: let nav UINavigationController.init(rootViewController: viewController) nav.topViewController?.title title// 設置導航欄的標題 nav.navigationBar.tintColor .whiteColor()// 設置push出的導航欄的返回顏色(箭頭及文字) …

mysql5.6主從復制(讀寫分離)方案_MySQL5.6主從復制(讀寫分離)方案

MySQL5.6主從復制(讀寫分離)方案一、前言:為什么MySQL要做主從復制(讀寫分離)?通俗來講,如果對數據庫的讀和寫都在同一個數據庫服務器中操作,業務系統性能會降低。為了提升業務系統性能,優化用戶體驗,可以通…

在實踐中使用延遲隊列

通常,在某些情況下,當您有某種工作或作業隊列時,有必要不立即處理每個工作項或作業,而是要延遲一些時間。 例如,如果用戶單擊一個按鈕來觸發要完成的某項工作,而一秒鐘后,用戶意識到他/她錯了&a…

PCL學習八叉樹

建立空間索引在點云數據處理中有著廣泛的應用,常見的空間索引一般 是自頂而下逐級劃分空間的各種空間索引結構,比較有代表性的包括BSP樹,KD樹,KDB樹,R樹,四叉樹,八叉樹等索引結構,而…

Android實現自定義帶文字和圖片的Button

在Android開發中經常會需要用到帶文字和圖片的button,下面來講解一下常用的實現辦法。 一.用系統自帶的Button實現 最簡單的一種辦法就是利用系統自帶的Button來實現,這種方式代碼量最小。在Button的屬性中有一個是drawableLeft,這個 屬性可以…

mysql語句中的注釋方法_MySQL語句注釋方式簡介

MySQL支持三種注釋方式:1.從‘#字符從行尾。2.從‘-- 序列到行尾。請注意‘-- (雙破折號)注釋風格要求第2個破折號后面至少跟一個空格符(例如空格、tab、換行符等等)。3.從/*序列到后面的*/序列。結束序列不一定在同一行中,因此該語法允許注釋跨越多行。…

aqlserver實用程序_sqlserver命令提示實用工具的介紹

除上述的圖形化管理工具外,SQL Server2008還提供了大量的命令行實用工具,包括bcp、dtexec、dtutil、osql、reconfig、sqlcmd、sqlwb和tablediff等,下面進行簡要說明。dtexec實用工具用于配置和執行SQL Server2008 Intgration Services包。用戶…

使用Java和Scala將Play Framework 2應用程序部署到Openshift

幾個星期, 馬克阿特伍德 ( Mark Atwood) , 豪爾赫阿里斯 ( Jorge Aliss )和我塞巴斯蒂安 斯卡塔諾 ( SebastinScarano)參加了紅帽網絡研討會LETS PLAY! 在云端&#xff1…

LintCode 387: Smallest Difference

LintCode 387: Smallest Difference 題目描述 給定兩個整數數組(第一個是數組A,第二個是數組B),在數組A中取A[i],數組B中取B[j],A[i]和B[j]兩者的差越小越好(|A[i] - B[j]|)。返回最小差。 樣例 給定數組A …

android框架----下沉文字Titanic的使用

Titanic is a simple illusion obtained by applying an animated translation on the TextView TextPaint Shaders matrix. Titanic的使用 Titanic的使用,項目結構如下: 一、下載Titanic并且部署到項目中 Titanic的項目地址: https://github…

linux 自動安裝mysql_Linux安裝mysql

一、下載這里我創建了一目錄software用于存放我們待會要下載的mysql包,先去到該目錄命令:cd /software命令:wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar下載完成后,你會在software這個…

Quartz Scheduler插件–隱藏的寶藏

盡管在官方文檔中進行了簡要描述,但我相信Quartz插件了解得還不夠多,看看它們有多有用。 本質上,Quartz中的插件是方便的類,用于包裝基礎偵聽器的注冊。 您可以自由編寫自己的插件,但我們將專注于Quartz隨附的現有插件…

mysql查詢表名匹配只有字母的_MySQL按某些匹配字母查詢表

MySQL查詢是MySQL的核心功能,有時候我們需要查找帶有某些匹配字母的表。下文對該MySQL查詢方式作了詳細的介紹,供您參考。在MySQL中我們可以使用LIKE或者NOT LIKE操作符進行比較。在MySQL中模式默認是不區分大小寫的。查詢示例,student表----…

hdu 1181(Floyed)

變形課 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 20748 Accepted Submission(s): 7494 Problem Description呃......變形課上Harry碰到了一點小麻煩,因為他并不像Hermione那樣能夠記住所有的咒語而隨意的…

讀書筆記-你不知道的JS上-混入與原型

繼承 mixin混合繼承 function mixin(obj1, obj2) {for (var key in obj2) {//重復不復制if (!(key in obj1)) {obj1[key] obj2[key];}}return obj1;} 這種復制是淺復制,對象或者數組函數等都是同一個引用,改變obj1的會同時影響obj2。 寄生繼承 ... 隱式…

JUnit和Hamcrest:在assertEquals上進行改進

在我的博客文章中,Java越來越接受靜態導入嗎? ,我討論了在Java中越來越多地使用靜態導入來使代碼在某些情況下更流暢。 Java 單元測試特別受靜態導入的影響,在此博客文章中,我提供了一個簡單的示例,說明如何…

mysql delete temporary denied_這些錯誤是什么意思?djang中的mysql

我試著運行一個程序,我被給予了一個例子,它就像一個購物網站,使用MySQL數據庫而不是Django提供的原始數據庫!我只是想看看有沒有人理解這些錯誤的含義?任何信息都將不勝感激!我本可以提供網頁的代碼&#x…

C語言 · 芯片測試

基礎練習 芯片測試 時間限制:1.0s 內存限制:512.0MB問題描述有n(2≤n≤20)塊芯片,有好有壞,已知好芯片比壞芯片多。每個芯片都能用來測試其他芯片。用好芯片測試其他芯片時,能正確給出被測試…

Animation用法

測試代碼及說明&#xff1a; <!DOCTYPE html> <html lang"en-US"> <head><meta charset"UTF-8"><title>Simple CSS3 Animation</title><style type"text/css">#demo {position: absolute;left: 30%;t…