用測試來提升品質與開發速度 aka PyCon Taiwan 2021 講題【成功地測試失敗】 的補充
本文會簡單摘要並補充作者在 PyCon Taiwan 2021 研討會裡分享的講題:【成功地測試失敗】(相關連結附於文末);講題濃縮了相當的資訊量,在這邊補充一些軟體開發心得。
簡單介紹講題大網:
一.測試不是為了拖慢速度,相反地,是為了增加速度,同時還可以提高產品與工程的品質。
二.分享在 iCHEF 後端使用 pytest、mock、VCR、GraphQL 與 Django Unit Tests 搭配 parameterized,寫測試的一些常見問題,上線後遇到各種 priority issue (P1, P2, P3) 的回顧:怎麼從測試來防守。
三.不好的快可能不是真的快,愈急愈需要做好關鍵測試;沒時間寫關鍵測試就是一個很重大的指標:假裝工程品質與時程沒事,最後對大家都沒有好處。
心法是:寫起來不容易測試的程式碼,很可能意味著從今而後不容易維護,未來也難以成為開發的基底。想要快速開發,通常寫的程式也是容易測試並快速取得回饋;可說是把程式、模組、元件切得夠乾淨而又不多餘的工藝。
“遊戲手把的硬體試作、與新手把的軟體試作,兩邊的迅速聯動、相輔相成,這就是任天堂手把的開發祕辛。”
— ほぼ日刊イトイ新聞,2021,《岩田聰如是說:從天才程式設計師到遊戲公司社長,任天堂中興之主傳奇的一生》
在軟體開發生命週期中,常常做第一輪時可能有不完美的感覺,或更常的是:放在當時的團隊與時程情境裡,沒有後續的產品開發本來就無法定義完美。在第二、第三次時整個輪廓出來才比較清楚,所以保有敏捷開發的心態來實作夠用而輕巧簡明有彈性的架構會很有幫助。
開發軟體的原則口頭說起來簡單,難的是在「組織、部門、團隊」與「目標時程」的加入後,各種大大小小的取捨,有些原則與執行可能與 SRE (Site Reliability Engineering) 最佳實踐與最糟困境相似,如「被閃電擊中兩次」可能嗎?「不遷怒,不貳過」可能嗎?單靠人與人口頭提醒與傳承的,到開始有兩三個開發團隊展開後,漸漸不如將開發原則與 Design Review 設計文件寫下;同理在五至十個開發團隊時,利用架構模式,以及能自我表述的程式碼與測試規格,來提供更有力直接的支撐變得更加需要。而 CI 與測試可以是每一個階段與每一個規格、Design Review 的確認點,也將隨著組織與團隊的成長而益發重要。
iCHEF 在提供餐廳更多價值的同時,組織大船航行於組織架構、產品開發,以及工程系統交融的大海上,很需要主動的追求與行動,來實現對產品與工程品質的重視,因為品質最後終將反映在產品的各方面體驗上,有時候就是一行 code,一個 log,一個 database migration,讓大家下巴掉下來。各種經驗顯示:可以不測試,而現實的考驗會讓人很難不謙虛;在讓「可能」成為「沒意外都會(不貳過)」的同時,不時需要做出取捨「防守被閃電擊中兩次」所需花費的成本 vs 意外發生的機率 x 損害程度。
“我們忘記「過程」只是工具、框架,我們必須更主動負責,有紀律地完成目標。”
“「品質是最好的商業計畫書。」…品質不是遵循特定做法的結果,而是做決定之前的前提和心態。”
“健全的組織是由任務不同、但目標相同的部門組成。如果只有一個部門獲勝,大家就都輸了。”
— 艾德.卡特莫爾,2020,《創意電力公司:我如何打造皮克斯動畫》
距 iCHEF 第一篇 tech blog 也滿三年了,回顧這一路上只看後端 Jenkins 就從兩千到近六千個測試,隨手拿最近一個 release 剛好有吉祥數字 168 個 commits,硬算相乘也是跑了近百萬個測試(笑),而這還不含前端、iOS 與 QE、QA 與產品團隊在每個版本釋出前後的各種自動化、手工與前導店家測試。為了讓 CI 這顆心臟儘速為每一個 commit 與 test 跳動,工程團隊投入了相當的努力,並享受著每一個 commit 測完最基本的安心上路回報。
要找這樣多元而強勁有趣的專業隊友與包容而正向積極的組織團隊文化真的是相當不容易。歡迎參考關注 iCHEF 各類職缺。
【成功地測試失敗】講題相關連結:
投影片:https://speakerdeck.com/keitheis/cheng-gong-di-ce-shi-shi-bai-fail-tests-successfully-talk-slides-pycon-taiwan-2021
PyConTW 錄製的影片:https://www.youtube.com/watch?v=lq4NPoouShY
會眾的共筆:https://hackmd.io/@pycontw/2021/%2F%40pycontw%2FByIlgkYzt
感謝 PyCon 台灣團隊從投稿建議、精美的審稿系統、如何錄製影片、在 gather 舉辦線上研討會各個奇幻場景與議程安排,到最後用心的後製。同場推薦魏澤人老師在研討會裡的精彩 Keynote【Keynote: When everyone knows how to code in Python】,在講從早期沒人到現有人人都會 Python(或說,都會寫程式)之後的世界,接下來呢?