【code review V.S. pair programming】
網頁好讀版:https://tdd.best/blog/code-review-vs-pair-programming/
昨天大女兒早上去學校、下午去上美語、晚上去游泳,回來已經很累很晚了,一直猛打哈欠。在去游泳之前,已經讓她把學校作業先寫完了。
睡覺前收拾書包,太太檢查她新的國字(硬體字筆畫)作業寫得怎樣,因為是第一次練,當時寫作業又蠻趕時間的,又沒大人在旁一起看,所以蠻多內容寫得只是有形狀,但很多細節都不對。
我癱在按摩椅上,聽著太太跟女兒隔著餐桌坐在對面的對話。
—
太太:「你覺得你寫得跟上面的字有一樣嗎?」
女兒:「一樣啊!」
太太:「有嗎?你仔細看看」
女兒:「一樣啊...」
太太:「你那個字最後那邊勾了起來,上面的字有勾起來嗎?」
女兒:「我沒有勾起來啊...」
聽著這段對話,讓我想到一些軟體開發過程常見的場景....所以我正瞅著何時去摻一腳。
接著大概連續10次,女兒寫了字,太太只說著問題在哪,女兒擦掉,再寫一次,還是一樣的問題,不斷 repeat。
她一直在打哈欠,因為一天上三種課,從早到晚真的很累,之前有約定過要避免這樣上課,為了避免她在根本不知道怎麼寫才會「對」的無限循環中崩潰,我決定起身。
「將她們從 code review 的形式改成 pair programming」
—
我:「怎麼啦,唷,你開始練習寫國字啦」
女兒:(嘟著嘴巴,含著眼淚,沒力氣跟心情多說一句話,繼續把她寫的字擦掉)
我走到她的身後,伸出兩隻手環著她。
我:「我來看看是哪個字,哇,這筆畫也太特別了點,你這後面好像往上翹了」(我刻意不用勾的字眼,因為他們剛剛才吵過這件事)
我:「要不爸爸幫你用橡皮擦,你再寫一次我看看會不會就好了。」
擦掉之後,她再寫了一次,還是歪歪的。
我問她:「嗯,這邊還是有點問題,你覺得呢?要不要爸爸再幫你擦掉?」
她仍然沒講話的點點頭。(她處女座的完美主義)
我再擦掉之後,跟她說,爸爸握著你的手一起寫。
接著我就在後面握著她的手,告訴她另一隻手壓著本子,我們一起寫了那個字。(估計此時對面的老婆應該要很羨慕嫉妒渴望才是,但我無暇理會她的眼神,我現在要專心跟女兒寫作業)
結果我們一起寫的字還是歪七扭八。
我告訴她:「這真的不簡單,要不換爸爸試試寫寫看。」
我把字擦掉,寫了一遍。醜醜的,再擦掉,再寫一遍,還是不到位。我笑了笑:「這真的要寫漂亮沒那麼容易。」
女兒聽了,說著她要自己練習寫。我幫她擦掉之後,她照著上面的字描了一遍,再到格子裡練習一遍,終於通過媽媽的標準了。
昨晚的例子就到這邊終了。
—
很多目前軟體產品開發還蠻上軌道的客戶,他們現在的瓶頸都是在 code review. 要嘛 review 容易變成瓶頸、要嘛因為瓶頸導致時間緊迫而淪為橡皮圖章的形式,又或者只是看看 code diff 之間的差異、寫法有沒問題,只能指出寫得好不好,而無法確認寫得對不對。
「先落實 code review, 形成瓶頸之後 試著用 pair programming 解決」我經常這樣建議那些覺得該 code review 但覺得 pair 不實際或是有抗拒的團隊。
code review 就像稽核,常見有幾個特點:
1)稽核沒過,代表沒完成,不給過關的。
2)稽核人員跟開發人員的目標不完全一致,稽核人員更偏重於把關,尤其是品質。而開發人員最大壓力來自於時程。
3)稽核是落後指標,發現問題時間點越晚,修復成本越高。加上責任落在要扛時程的開發人員,往往來來回回壓力會越來越重,要嘛心情受影響,要嘛放掉品質受影響。
4)離線(非面對面)斷點式的往返(context switch),大部分工程師傾向在線上留下 review comments, 而不是坐在一起面對面溝通,哪邊寫法有問題,了解作者的考量是什麼,我們怎麼達成一致的共識後交付。
對雙方來說,這樣多次斷點式往返,只依賴 comments 上的文字描述,會有許多誤解、中斷、等待的浪費。
這很像甲乙方的驗收方式,只是都是團隊內的工程師罷了。
我們整體最終目標(也該是共同目標)應該是:「在時程內有品質地交付我們兩有共識的程式碼。」
所以建議大家從這種傳統的線上 code diff review, 線上 comments, 來來回回後允許 merge 的形式,改成 reviewer 要 review 時跟作者約個時間,帶著電腦坐在一起,照著 reviewer 對需求的瞭解,以及他自己的思路,去看跟作者設計、寫法不一致的地方(經過了共同的 refinement, 驗收情境, planning part2,再從 test case 出發來看整體產品程式碼的設計),進行瞭解與討論,雙方持續有共識地一起修改調整,最後兩人一起完成這段 feature final commit,merge 回 trunk。
By the way, 我通常建議 reviewer 主導這個過程,用她的思路往下推進,而不是讓作者自己先描述作法跟思路,一來避免錨定效應,二來實務上看code的人不會聽到作者解釋和說明,得試著在沒有作者解說下,讀者能用最短時間、最少腦力、正確地理解程式碼的意圖。
兩人一起承擔時間、品質、對程式碼有共同理解的責任,只是這次擔任的角色不同而已。當下雙方都專心的完成這個共同的任務與目標。
先從 review 練習 pair, 熟悉了之後他們就會覺得那一開始就pair不就可以更早發現問題了嗎?
再搭配 scrum 那種非派工而是value-first 領工作的方式,再配合 #向上pair 的原則,團隊內 pair programming 是一件再正常不過的事了,通常也是效果最好,產出最高,但也最累的開發方式。
更別說 as a team 學習型組織,互補、增加公車指數、避免破窗、共同制定/調整規範、避免盲點、避免過度設計等等好處。
code 只要是一個人寫,沒別人看,永遠都是自己會改的那種 #養code自重 的形式,裡面真的會比「長麵筋」還藏污納垢的....
搞產品的只要那種永遠特定模組都只有特定人維護,基本上死期不遠,腐敗發臭速度超乎想像,拖越久越沒辦法,慎之慎之。
#敏捷人生
「test case寫法」的推薦目錄:
- 關於test case寫法 在 91 敏捷開發之路 Facebook 的精選貼文
- 關於test case寫法 在 EZ Talk Facebook 的最讚貼文
- 關於test case寫法 在 軟體廚房 Facebook 的最佳解答
- 關於test case寫法 在 關於『測試』這件事 - Jack Yu 的評價
- 關於test case寫法 在 Laravel 5 測試起手式 的評價
- 關於test case寫法 在 91 敏捷開發之路- phpstorm 單鍵複製上個test case 的評價
- 關於test case寫法 在 Re: [請益] 請教高手要加3個月的程式寫法- soft_job | PTT職涯區 的評價
test case寫法 在 EZ Talk Facebook 的最讚貼文
#EZTALK #你不知道的美國大小事
#種族 #RayshardBrooks
America Is Still Burning🔥
美國怒火蔓延:一波未平,一波又起
繼上次 #佛洛伊德之死,美國喬治亞州又發生一起白人警察射殺黑人的憾事
進入文章之前,還記得 protestor 是什麼意思嗎?🤔
1. in response to …「作為……的回應」
2. pat sb. down「搜某人身」:pat本是「輕拍」的意思,pat down就是從頭拍到尾的意思,也就是「搜身」的意思,名詞寫法:pat-down或patdown。
3. sobriety test「酒測」:名詞 sobriety 是 sober「清醒的」的狀態。「(警察)給人做酒測」就說 give sb. a sobriety test,「接受酒測」就說 take a sobriety test。
4. fail「沒通過;不及格」
5. Taser「電擊槍」
6. Opinions about … are divided.「關於……的意見不一。」
7. justified「正當的」
8. in any case「無論如何;反正」
9. engulf in flames「被火吞噬」
--
Just weeks after George Floyd lost his life at the hands of Minneapolis police officers, another African-American man has been fatally shot by police outside of a Wendy’s restaurant in Atlanta, Georgia.
佛洛伊德死在明尼阿波利斯警察手上的事情才過去沒幾週,在喬治亞州的亞特蘭大,又發生一起非裔美國人在溫蒂漢堡外面被警察射殺的事件。
On the evening of June 12, police arrived at the Wendy’s parking lot in response to a call about a car blocking the drive-through lane. Finding 27-year-old Rayshard Brooks asleep in his car, Officer Devin Brosnan wakes him up and asks him if he’s been drinking. Brooks admits that he has, and after checking his driver’s license, Brosnan calls for backup.
六月 12 日晚上,警察抵達溫蒂漢堡的停車場,因為他們收到一通電話,通報有台車擋住了得來速車道。原來是 27 歲的雷沙德布魯克斯睡在車內,警察迪文布洛斯南將他叫醒,問他是否喝醉了。布魯克斯承認自己酒醉,而在檢查他的駕照之後,布洛斯南呼叫支援。
When Officer Garrett Rolfe arrives several minutes later, he pats Brooks down and gives him a sobriety test, which he fails. “I think you’ve had too much to drink to be driving,” Rolfe tells Brooks. “Put your hands behind your back.” But when Rolfe tries to handcuff Brooks—who was calm and cooperative up till then—he begins resisting arrest.
警察葛內特羅爾夫幾分鐘內抵達現場,他對布魯克斯搜身,並讓他做酒測,而布魯克斯酒測沒過。「我覺得你喝太多,不能開車。」羅爾夫告知布魯克斯,「把雙手放在背後。」正當羅爾夫將布魯克斯上銬時,布魯克斯開始掙扎拒捕,而在這之前,他一直表現得相當平靜且合作。
After a struggle with the two officers, Brooks manages to grab Brosnan’s Taser and escape. As Rolfe chases Brooks, he turns around and fires the Taser at the officer. Rolfe then draws his gun and fires three shots, two of which hit Brooks in the back. An ambulance arrives for Brooks several minutes later, but he dies during surgery shortly thereafter.
與兩名警察一番掙扎之後,布魯克斯奪走布洛斯南的電擊槍並掙脫逃跑。羅爾夫追捕布魯克斯時,布魯克斯轉身以電擊槍攻擊警察,接著羅爾夫拔槍射了三槍,兩發擊中布魯克斯的背部。救護車在幾分鐘內到達,但布魯克斯稍後在手術中死亡。
Opinions about the shooting are divided. Many believe the use of lethal force against Brooks wasn’t justified, while others feel that Rolfe made the right decision in shooting a fleeing criminal who’s just taken a police weapon and fired it at him.
針對這起槍殺事件的意見分歧。許多人認為,運用致死手段制服布魯克斯並不合理,而部分人則認為,羅爾夫對一名搶走警察武器並朝他開槍的逃犯做出開槍的決定是正確的。
In any case, the Atlanta police chief resigned the next day, Rolfe was fired, and Brosnan was placed on desk duty. That same evening, protesters began gathering at the Wendy’s where Brooks was shot, and within hours the restaurant was engulfed in flames. Yes, America is still burning.
無論如何,亞特蘭大警察局長隔天請辭,羅爾夫被解雇,布洛斯南被調任文職。當天晚上,示威者開始聚集在布魯克斯被射殺的溫蒂漢堡前。數小時內,那間餐廳便被火吞沒。沒錯,美國人的怒火持續延燒中。
test case寫法 在 軟體廚房 Facebook 的最佳解答
介紹一個 JavaScript Benchmark 的網站,有任何不同寫法的效能想要測試,可以到這個網站建立 Test Case。
https://measurethat.net/
test case寫法 在 Laravel 5 測試起手式 的推薦與評價
laravel 5.6中預設test case 寫法不同,但不需要特別更動,將新建的方法寫入即可 ... class ArticleTest extends TestCase { // 測試如果文章為空 public function ... ... <看更多>
test case寫法 在 91 敏捷開發之路- phpstorm 單鍵複製上個test case 的推薦與評價
phpunit 兩種形式的測試,一種是透過@test 做標記,一種是在function name 前加上test 前綴做標記 ... ... <看更多>
test case寫法 在 關於『測試』這件事 - Jack Yu 的推薦與評價
接下來就是開發程式,讓程式可以通過這個Test Case. 那關於測試API 和Uesr Story 的方式大體上跟Unit Test 很相似,差在Test Case 的寫法不太一樣而已. ... <看更多>