測試抓臭蟲

更新於 發佈於 閱讀時間約 4 分鐘

Game of Life的「核心計算」部分寫好了,短短的沒幾行,畢竟也就那麼幾條判斷規則而已,沒什麼太複雜的東東要處理。說是寫好了,但到底能不能跑、跑出來的結果對不對,那可還是在未定之天哩。

測試程式寫得對不對,是件很讓人頭大的事。第一步,也是最簡單的一步,當然是檢查語法有沒有寫錯。語法的正確性,依照使用的程式語言,可以由compiler或interpreter來檢查,以Python來說,就是使用interpreter。通過了這一關也別高興得太早,真正麻煩的是後續的部分,因為機器可是沒辦法告訴你,因為手殘,你把a = b + c,寫成了a = b – c;或者是,沒注意到a是浮點數,結果寫出a == 0這樣的判斷式。還有啊,Python的變數是不用宣告的,所以萬一把變數名稱打錯了,例如把center_x = int(width/2),打成centre_x = int(width/2),那interpreter也不會認為那是個錯誤。這種不是語法錯誤的問題,就只能靠人來處理了。debug功力的重要性,可是不亞於程式寫作的功力的。

那現在這個「核心計算」部分的程式要怎麼測試呢?先用個簡單的例子跑跑看結果正不正確好了。「柏拉圖的天空」這本書裡頭有個例子,剛好可以拿來用,跑出來的結果如果跟書上的結果一樣,就算初步過關。

測試用的例子有了,再來是,該怎麼呈現結果呢?畢竟只寫到「核心計算」部分,「視覺呈現」部分還沒動工。要看結果,最簡單的做法,就是把universe這個list給print出來,不過可得忍受畫面上一堆0、1和逗號。這倒無妨,先確定程式的正確性再說。

現在像Spyder這種IDE都有很好用的debug工具可以用,所以重點就在於,要怎麼找出有問題的地方然後修正。想找出有問題的地方,說難不難,可有時候又非常難。如果是像Game of Life這樣的程式,因為很單純,只要是相同的初始universe,就一定會有完全相同的執行過程和結果,所以錯誤的再現性很容易控制,找到問題點只是時間的問題。但如果是像牽涉到網路的程式,錯誤的再現性很難控制,那要找出問題點,可就沒那麼容易了。

修正幾個小問題後,總算,「核心計算」部分初步過關。唉!就只是初步過關而已啊,誰知道跑其他例子時,會不會又有問題。測試最困難的地方,就在於通常是沒有辦法把所有可能的狀況都試一遍。所以囉,也就只能盡量先把各種狀況考慮進去,保證至少在這些狀況下,程式是沒問題的。那以後又發現問題怎麼辦?就更新、修正咩!現在大家不是常常在那邊更新PC或手機的軟體嗎?就這麼回事。

說到測試,就不免想起微軟。以前微軟的Windows有新版要上市時,那可是轟動武林、驚動萬教的大事,就跟現在新iphone要問世一樣,很多人都引頸企盼。微軟很厲害,當Windows正式版本要出來之前,就會先出個「搶鮮版」,然後很多人就會搶著去買來嚐鮮。嚐鮮的結果就是一堆問題,然後微軟就趕快修正。等最後正式版本出來時,這些問題都處理掉了。多聰明的微軟啊!這些嚐鮮族不僅幫忙測試,還心甘情願付錢給微軟,這行銷手法實在是太高明了!

雖然微軟的行銷手法很厲害,不過再厲害、再高明的行銷手法,如果沒有相對應的產品品質,終究還是會被消費者給看破手腳的。現在的Windows,當有新版要推出,或者有新的更新時,雖然還是有許多人想要嚐鮮用看看,不過更多的人卻是避之唯恐不及,深怕更新之後不僅沒改善問題,反而帶來更多問題。有那麼好長一段時間,微軟強迫大家一定要馬上更新,沒得選擇,可是更新的結果,卻往往是哀鴻遍野、問題百出。搞到最後,各種躲避更新的手法紛紛出籠,Windows的更新,反倒成了令人聞之色變的災難了。

留言
avatar-img
留言分享你的想法!
avatar-img
ysf的沙龍
15會員
141內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
俗話說「萬事起頭難」還真是一點也沒錯,從開始動筆寫《The Nature of Code閱讀心得筆記——使用Python實作》,到寫完頭一章,再到把文章放上網站開始發表,總共隔了快三個月的時間。
Thumbnail
俗話說「萬事起頭難」還真是一點也沒錯,從開始動筆寫《The Nature of Code閱讀心得筆記——使用Python實作》,到寫完頭一章,再到把文章放上網站開始發表,總共隔了快三個月的時間。
Thumbnail
介紹 通常我們程式寫完之後,要確保程式沒問題我們就會進行測試 在這裡我們將測試分兩大類: 單元測試(Unit Test,UT):對程式碼的最小單位所進行的測試 整合測試(Integration Test):系統/模組之間的測試,通常會接觸到真實系統 在這裡只會簡單介紹一下單元測試的概念 這裡在將單元
Thumbnail
介紹 通常我們程式寫完之後,要確保程式沒問題我們就會進行測試 在這裡我們將測試分兩大類: 單元測試(Unit Test,UT):對程式碼的最小單位所進行的測試 整合測試(Integration Test):系統/模組之間的測試,通常會接觸到真實系統 在這裡只會簡單介紹一下單元測試的概念 這裡在將單元
Thumbnail
寫程式最怕碰到的,就是信心滿滿地寫好程式後,發現結果不如預期,而且完全看不出問題出在哪裡。這種慘況可以分成兩種:一種是程式很長、很複雜,想要把心機很重,躲在幽暗深處的臭蟲給抓出來,即使有功能強大的除錯工具,都不是件簡單的事;另一種是程式沒幾行,一切看起來都很清楚正常,臭蟲根本沒地方躲藏,可是結果就是
Thumbnail
寫程式最怕碰到的,就是信心滿滿地寫好程式後,發現結果不如預期,而且完全看不出問題出在哪裡。這種慘況可以分成兩種:一種是程式很長、很複雜,想要把心機很重,躲在幽暗深處的臭蟲給抓出來,即使有功能強大的除錯工具,都不是件簡單的事;另一種是程式沒幾行,一切看起來都很清楚正常,臭蟲根本沒地方躲藏,可是結果就是
Thumbnail
軟體開發是在虛擬的空間重新描述並解決現時的問題,多數時候並不存在正確答案。如何穿越這些不確定及未知就體現了開發者的功力以及對事物的把握度。 標題有點聳動,但且以這篇短文紀錄幾個印象比較深的、飛一陣後發現什麼節論都沒得到的可能作法(? 所以其實是要反著看 … 以下列舉三個常碰到的情況跟大家分享
Thumbnail
軟體開發是在虛擬的空間重新描述並解決現時的問題,多數時候並不存在正確答案。如何穿越這些不確定及未知就體現了開發者的功力以及對事物的把握度。 標題有點聳動,但且以這篇短文紀錄幾個印象比較深的、飛一陣後發現什麼節論都沒得到的可能作法(? 所以其實是要反著看 … 以下列舉三個常碰到的情況跟大家分享
Thumbnail
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
Thumbnail
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
Thumbnail
大多數的工程師常常會有一個疑問,就是「測試」應該要怎麼測試才是正確的?在過去,軟體測試大多還是以人工為主,在這幾年逐漸的出現自動化測試之後,實際上我們是不清楚應該要怎麼寫測試。
Thumbnail
大多數的工程師常常會有一個疑問,就是「測試」應該要怎麼測試才是正確的?在過去,軟體測試大多還是以人工為主,在這幾年逐漸的出現自動化測試之後,實際上我們是不清楚應該要怎麼寫測試。
Thumbnail
Game of Life的「核心計算」部分寫好了,短短的沒幾行,畢竟也就那麼幾條判斷規則而已,沒什麼太複雜的東東要處理。說是寫好了,但到底能不能跑、跑出來的結果對不對,那可還是在未定之天哩。
Thumbnail
Game of Life的「核心計算」部分寫好了,短短的沒幾行,畢竟也就那麼幾條判斷規則而已,沒什麼太複雜的東東要處理。說是寫好了,但到底能不能跑、跑出來的結果對不對,那可還是在未定之天哩。
Thumbnail
聽了描述之後我的直覺反應告訴他「會有這樣的問題,應該是設計時少考慮了什麼!」 大多數軟體工程師從初學者階段開始進入到能夠獨立工作的時候,大多會需要自己考慮一個功能的設計,直到一個完整的系統設計。然而,我們總是找不到正確答案。
Thumbnail
聽了描述之後我的直覺反應告訴他「會有這樣的問題,應該是設計時少考慮了什麼!」 大多數軟體工程師從初學者階段開始進入到能夠獨立工作的時候,大多會需要自己考慮一個功能的設計,直到一個完整的系統設計。然而,我們總是找不到正確答案。
Thumbnail
tl;dr, 沒有測試談不上好軟件! 軟件編碼的質素和一間公司發展的關係,在之前的文章《Code 寫得好對公司有用嗎?》已有討論,那麼有什麼因素會左右編碼的質素?其中一樣就是軟件測試。
Thumbnail
tl;dr, 沒有測試談不上好軟件! 軟件編碼的質素和一間公司發展的關係,在之前的文章《Code 寫得好對公司有用嗎?》已有討論,那麼有什麼因素會左右編碼的質素?其中一樣就是軟件測試。
Thumbnail
自己寫程式往往有兩個盲點:測試資源不夠,因而難以全盤瞭解用戶使用情形的全貌;另一個則是只有自己跟自己對話時,往往難以做出正確的判斷和決定。無論個人或團隊開發,都有各自的優缺點。
Thumbnail
自己寫程式往往有兩個盲點:測試資源不夠,因而難以全盤瞭解用戶使用情形的全貌;另一個則是只有自己跟自己對話時,往往難以做出正確的判斷和決定。無論個人或團隊開發,都有各自的優缺點。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News