Re: [請益] 難以偵錯的問題
※ 引述《yauhh (喲)》之銘言:
: 至於,資料看起來隨機出現一些改變,通常不會是隨機,而是程式中隱含了一些你
: 沒有想到的規則,使資料誤植生效.
:
:
: 是Java程式,可以準備一些業務中會遭遇的資料,並將程式單元拆出來用JUnit或
: 簡單的assert檢測檢測. 細處著手,應該過得去的.
:
: 祝
: 完成工作.
:
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 218.160.110.179
: 推 atpx:請問這些檢測方式或工具, 有沒有建議的網頁能夠參考? 06/02 20:30
: → andymai:JUnit和assert都是可以google的關鍵字啊~不是嗎??? 06/02 21:28
首先你必須釐清是系統問題還是程式問題。
你說這個事件是隨機發生的,那麼你就必須先降低事件的隨機性,固定變數。
最終目的是能夠穩定的Reproduce這個問題,才能夠去解決問題。
1.使用一模一樣的測試資料,輪流依序測試多次
你必須要選擇測試範圍,你可以透過JUnit Framework重複執行同樣的測試程式碼
去檢測資料,或者是透過Selenium從UI重複輸入一樣的資料,當然,驗證的部分
也要自動化。通過驗證以後,把資料清除再重複驗證。
重複測試很多次以後,如果單元測試沒錯,整合測試有錯,那表示是你的環境問題。
如果單元測試有錯,整合測試也有錯,那麼就是你程式碼的問題,是不是隱含了某種
程度的隨機性。
如果單元測試有錯,整合測試沒錯...那...應該是你的測試程式寫錯
2.如果以上的狀況都沒錯,那開始邊界值測試輪流測試
分析你的程式碼,找到所有邏輯條件的邊界值依序進行整合或單元測試。測試方法
同上,看看會不會有穩定的錯誤發生。
3.如果以上都還是沒錯,開始隨機性測試,用開發好的隨機資料產生工具產生無數的
隨機資料輪流測試(通常如果你第二階段的邊界值測試做得好,那這測試通常不必要)
4.依序資料的測試如果完全沒有發生錯誤。那你必須考慮這是不是效能問題、記憶體
問題或是同步問題。開始設計多執行緒資料測試,將以上三種資料準備法採用多執行
緒方式進行測試,你可以使用JMeter設計壓力測試流程(Google 有JMeter的Plug-in,
可以做遞增的壓力測試),如果你想把UI包括在測試範圍裡面,用Selenium-Grid做
分散式測試,不過理論上,若是資源問題,不需要把Web UI考慮到範圍內,因為
不同機器的瀏覽器之間不存在資源問題。
5.做到第四個程度,理論上就應該會發生問題了,因為這已經完全模擬用戶送出去的
Request,不可能用戶會發生但是你的測試不會發生...真的有這種事的話,那也真是
見鬼了。假設在第四個步驟終於發生錯誤,記得把所有介面呼叫、物件建立的程式碼
前後全部Log下來,加入Assert檢查預期值與實際值,看看到那個環節的前後會發生錯
誤。用Log4j
6.這時你應該就可以釐清出問題的段落,並且能穩定的Reproduce問題,才有辦法繼續
往後解決問題。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.181.113.203
※ 編輯: derekhsu 來自: 175.181.113.203 (06/02 23:37)
※ 編輯: derekhsu 來自: 175.181.113.203 (06/02 23:37)
推
06/04 00:01, , 1F
06/04 00:01, 1F
→
06/04 00:11, , 2F
06/04 00:11, 2F
→
06/04 00:11, , 3F
06/04 00:11, 3F
→
06/04 00:14, , 4F
06/04 00:14, 4F
→
06/04 00:29, , 5F
06/04 00:29, 5F
→
06/04 07:32, , 6F
06/04 07:32, 6F
→
06/04 07:32, , 7F
06/04 07:32, 7F
→
06/04 07:34, , 8F
06/04 07:34, 8F
討論串 (同標題文章)