看板 Soft_Job 關於我們 聯絡資訊
※ 引述《iPhoto (iPhoto)》之銘言: : 我是新人 工作不到三個月 在一家網路業寫php : [中略] : 原因都歸咎於 粗心 : [中略] : 連這種小細節都做不好以後怎寫大架構的code呢 QQ 我是個不新人,焊板子一年寫 Java 五年,現在在一家網路業寫 PHP 寫了一年 我非常的粗心,code 寫一寫結果有語法錯誤還想推出去是常有的事情 其他邏輯上的問題就更不用說了,變數名稱打或把測試 code 留在程式裡面是常有的 而所幸我在一間讓我能夠學習成長的公司 我學到一件很重要,能大幅提升 code 品質,但是會稍微讓心靈變的扭曲的事情 - 要歇斯底里地認為眼前所有東西都有可能會犯錯 對於寫 Code 的部分,這概念有個很帥的洋文名字叫做 Defensive Programing 例如說一些常被提到的「基礎」做法 - 別人呼叫自己寫的函數可能會傳入奇怪的東西,所以輸入變數一定要檢查形態 (這對PHP這種變數形態整個混亂的語言尤其重要) - 使用者輸入可能被塞入奇怪的東西,所以一定要做好 filter 或 escape 背後的思想都是這種讓人覺得病態但讓程式變得健康的歇斯底里... 然後 code 寫完了,準備要推出去了,這時候我開始歇斯底里地覺得自己一定會 寫爛什麼東西,所以 - 要檢查程式語法有沒有問題 - 要檢查程式邏輯有沒有問題 - 要思考萬一這邊上線之後出了問題會是什麼問題,然後去檢查那些東西 首先就是肉眼檢查,看邏輯有沒有問題,看跨號引號有沒有加 在測試環境測看看有沒有問題 不過當然,我不相信我靠自己就能檢查出問題,所以我需要工具幫助 例如最基本的, PHP 檔案推出去之前要用 php -l 檢查語法是否正確 進階一點的,程式要過自動測試程式,這邊上面推文有大概提到 不過如果是 PHP 網頁,一開始又沒有考慮 unit test,要能做到大概是得整套重寫... (沒辦法,PHP 如果醜起來真的是很醜,很醜,很醜...[回音]) 講到這邊我就得提到 git,git 這對大多數人來說只(?)是版本控制系統 但對我來說,是我歇斯底里防治的其中一環 首先不管要推什麼 code 我都會在 git add 之後再做一次 git diff --cached 重新檢查一次自己到底會推哪些 code 到版本控制裡面。尤其只列出「有修改的部分」 這點可以讓自己更容易看到自己可能犯錯的地方 (像是「啊幹那個 return true 是測試用的不能推出去」這種事對我來說常發生...) 然後是 git 可以設定各種 hook,所以我會在 pre-commit 裡面做檢查 例如 php -l 不過的 commit 就擋下來,不讓這個 commit 出去 不這樣做的話,我有十足的把握我會忘記跑自動測試... 不過「萬一這邊上線之後出了問題會是什麼問題」這就不見得是測試能夠幫你的了 你得對自家系統夠熟...經驗在這邊有幫助。 講到這邊會發現一個很有趣的事情,其實我作為寫程式的人,真的在「寫程式」 的時間很少,反而是做各種檢查的時間比較多 沒辦法,我又粗心又不是天才,為了品質犧牲一些生產力也是必然的 我能偷的懶就是在不影響檢查品質的狀況下,讓檢查儘量容易甚至自動化... -- 頂天立地:愛孩子就要支持蘿莉控 http://goo.gl/Bha7e -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.143.252.148 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1408191096.A.68A.html ※ 編輯: GALINE (220.143.252.148), 08/16/2014 20:15:38
qrtt1: 再多學學自動測試的方法,讓精神不要太緊繃。太緊繃會忽略 08/16 20:38
qrtt1: 掉一些該注意的週邊問題。目前的眼光太過焦中在避免錯誤了 08/16 20:39
agreerga: TDD 08/16 21:02
manlike: 測試再多都沒用, 寫程式沒想到狀況, 寫測試會想到? 08/16 21:24
manlike: 能測試的很有限, 重點還是寫程式的素養~ 08/16 21:32
manlike: TDD 又是一個造神產物, 好像很厲害, 就像脫褲子放屁一般 08/16 21:34
viper9709: 覺得很基本阿~並不算歇斯底里 08/16 21:35
我是想說自動測試終究不是三個月的新人能夠使的上太多力的東西... 而且 PHP 很容易弄髒到一個莫名其妙的境界 這種時候除了用 selenium 之類的東西做網頁功能測試以外拿他沒什麼辦法 連看懂都是一門藝術... 不知道他們家的 PHP 夠不夠乾淨,若不乾淨的話自動測試的建置成本不是新人能負擔的 要弄乾淨的成本也不會是新人能夠負擔的 只能從自己就能做的事情開始做了 ※ 編輯: GALINE (114.27.57.63), 08/16/2014 22:51:40
CRPKT: 推這篇, 省略檢查的風險會轉化成技術債, 之後還是要還 08/16 23:30
aacs0130: 推推,越寫越知道要注意什麼 08/17 02:03
neversay: 推這篇,正確的觀念,身為資深工程師必須是paranoid 08/17 09:09
andymai: 有素養就代表不會有疏忽?測試程式要保證的就是在修修改改 08/17 09:13
andymai: 的情況下還"至少"能確定思考過的案例都是對的~而不是連沒 08/17 09:15
andymai: 想過的都想保證~沒想過的就算是有素養也不會考慮到啊... 08/17 09:16
neo5277: 跟防衛性駕駛一樣 小心駛得萬年船 08/17 15:18
laikyo: 有學有推 08/18 12:43