2023年10月31日 星期二

《Specification by Example 中文版:團隊如何交付正確的軟體》金句

 1. P3 在實作敏捷開發的程序中,團隊碰到的問題通常都很少用文字記載下來,所以每一個受挫的團隊都認為,自己遇到的問題比較特殊,而這些理念無法在他們的「現實世界」裡發揮作用。

2. P5 比爾·蓋茲說過:「在企業中應用任何一項技術時,首要的法則是,在有效率的系統中導入自動化,將使效率倍增。第二條法則是,在缺乏效率的系統中導入自動化工具反而導致他們的程序更於低效。」

3. P7 Eric Evans 跟別人爭論說敏捷作為一個術語已經失去了一切意義,因為現在什麼都可以稱為敏捷。(skillsmatter.com/event/design-architecture/ddd-exchange-2010)

4. P8 一個好的名稱能夠將預期的結果說明的更好,而且還能清楚指出這些實踐作法的關鍵差異。

5. P13 變化速率如此之高,說明文件總是很快就過時。不斷更新詳細的Spec.(Specification,需求規格)和測試計畫(Test Plan)需要投入大量精力,相當浪費。以此維生的人們(例如:業務分析師或測試人員),在這個每周更新的環境中經常會無所適從。

6. P23 加快循環並不能避免錯誤。

7. P31 許多團隊在開始實作軟體之前(在此之前所發生的一切往往會被軟體開發團隊所忽略),總期望客戶、產品負責人或商務使用者能先確定工作的範圍。...若軟體交付團隊依賴客戶給出使用者故事(user story)、使用案例(use case)清單或其他相關資訊,那麼他們其實是在『讓客戶設計解決方案』。但是商務使用者不適軟體設計師。如果我們讓客戶去界定範圍,專案就無法從交付團隊已有的知識中獲益。這樣開發出來的軟體是客戶所要求的,『卻步是他們真正想要的』。

8. P31 成功的團隊不會盲目地接受軟體需求,並將其當作是未知問題的解決方案,相反的,他們會從目標中獲取範圍。他們以客戶的業務目標為起始,接著經由協作來界定可以達成的目標範圍。團隊與商務使用者一起工作確定解決方案。商務使用者則專注於傳達所需功能中希望達到的目的,以及他們期望由此帶來的價值,這樣有助於所有人了解所需的功能。然後再由團隊提議一個解決方案,這要比商務使用者想出來的方案更實惠、更快,並且更容易交付或維護。

9. P31 設計Spec.的階段,如果開發人員和測試人員都沒有參與,我們就必須單獨將Spec.傳達給他們。這在實踐上會很容易造成一些誤解,尤其是資料遷移期間會遺失很多細節。...成功的團隊不會依賴某個獨自去收集正確的Spec.,而會與商務使用者一起協作制定解決方案。

10. P32 過多的細節會讓實例更難溝通和理解。有用的關鍵實例必須要精簡。...提煉好的實例可以當作交付的驗收標準。只有當所有實例在系統中都可以正常工作時,開發才算完成。

11. P36 可執行的Spec.可以很容易地驗證系統。如果能頻繁地驗證就能信任可執行的Spec.,就如同信任程式碼一般。

12. P36 最成功的團隊部會滿足於頻繁驗證一組可執行的Spec.。他們能確保Spec.清楚明確,便於尋找和獲取,而且還具有一致性。...Living documentation(活的說明文件)對於系統功能而言,是個可靠且權威的資訊來源,任何人都能夠讀取它。

13. P37 商業目標是專案或專案里程碑的潛在原因。它是指導企業專案關係人(無論是內部的還是外部的)決定是否投資軟體開發的因素。商業組織應當能清楚地看到這些目標能如何賺取、節省或保障財富。....可衡量的目標能夠確認專案的成敗、追蹤進度和改善優先順序的排序。

14. P39 當整個使用者故事完成時,需要進行首次驗證來確保其確實完成,並重組Spec.證實它和已時做功能的Spec.一致。

15. P43 注重編寫和執行測試的團隊往往會編寫出不易維護的測試。隨著時間的推移,許多問題會迫使這類型的團隊去尋求制定測試並將測試自動化的方法,以便讓測試更容易更新。

16. P84 從目標中獲取正確範圍的好方法之一,就是堅定不移地把提供解決方案的責任交付給開發團隊。

17. P85 我們應該詢問高層次的實例,來說明某個功能要如何產生實際價值,而不是去詢問技術上的功能Spec.。這才能指引我們找到真正的問題。

18. P86 有時候,要人們解釋某個功能的價值時,仍會發生困難(即便可能僅是要求提供實例)。更進一步,我會請他們舉例說明,如果系統不提供某個功能,他們該怎麼辦(臨時解決方案)。通常這會幫助他們表達出特定功能的價值。

19. P86 較低層次的Spec.和測試可以告訴我們已經交付部分的邏輯是否正確;而較高層次的驗收測試則可以告訴我們那些部分的元件是否按預期方式工作。

20. P93 讓團隊全體參加大型的『Spec.的Workshop』是建立共識並獲取可解釋功能之實例最有效的途徑之一。

21. P94 《Practices for Scaling Lean and Agile》一書中,Bas Vodde和Craig Larman建議PBR的Workshop應該佔每個Iteration中 5%~10%的時間。

22. P95 若領域的邏輯很複雜,程式設計師和測試人員需要頻繁釐清,...。《Agile Testing》一書中提到一個類似的協作模型,叫做「三個人的力量」。...舉辦小型的Workshop,由一個開發人員,一個測試人員和一個業務分析師參與。...想要有效地舉辦一場「神勇三劍客」會議,與會的三個人必須在該領域上有相似的理解。如果他們沒有達到相似的理解,可以考慮讓大家在會前做好準備,而不是隨時舉辦。...「神勇三劍客」會議的結果是一份實際的功能檔案--Given-When-Then。

23. P105 確定初始的實例能說明我們獲得Spec.的基本結構,並可以讓討論更有效率。

24. P113 舉例說明,範例必須精確、範例必須完整、範例必須真實、範例應該易於理解。

25. P129 Edward Jay Epstein,The Diamond Invention:「原鑽飾無光澤的、半透明的晶體,類似於玻璃碎片。為了加工成首飾,必須把它切割成特定的寶石形狀,再一面一面的拋光。」

26. P130 成功的團隊不會直接使用原始的例子,他們會從中提煉Spec.(Refining the specification)。他們會從關鍵實例中提取精華,將其轉化成清楚且明確的定義,並去除不相關的細節,讓實作變得完整。

27. P130 附帶實例的Spec.即為驗收測試。一個良好的Spec.,再與實例結合後,其實就是有效的驗收測試所描述的功能。

28. P142 Spec.只需列出關鍵且具有代表性的實例。這有助於Spec.保持簡短易懂。關鍵實例通常具備以下特點:

  • 它是一個具有代表性的實例,其描述了業務功能中的每一個重要觀點。通常商務使用者、分析師或客戶會對其進行定義。
  • 它會描述每個重要技術的邊緣情況,例如:技術上的邊界條件。通常當開發人員擔心功能分期或不一致時,他們會使用這類的範例。商務使用者、分析師或客戶則會對其定義正確的預期行為。
  • 它會描述愈其實作中每一個棘手之處,例如,過去曾導致缺陷的情況,或以前的實例中未描述清楚的邊界條件。通常測試人員會列舉出這種範例,而商務使用者、分析師或客戶則會定義其正確的行為。

29. P144 在需求規則中使用「Given-When-Then」語言,目的為讓測試更容易理解。一般來說,一個Spec.應該要聲明背景環境,指定一個單一的動作,接著定義預期的後置條件。...Given-When-Then市定易系統行為的一種常見格式,它由早期關於BDD的文章推廣而來。它要求我們分成3個部份來編寫系統行為的場景:

  • 假設(Given)一個前提;
  • 當(When)某個行為發生時;
  • 接著(Then)後置條件就會得到滿足。
一次只會觸發一個動作是置關重要的。這可以確保Spec.只聚焦於該動作。

30. P150 問題的癥結不在於工具;同時,解決方案也與工具無關。問題主要是團隊未曾努力於讓Spec.變得更易於理解。提煉Spec.無須花費太多努力,卻可以帶來更多的價值。

31. P157 務必為生產力的降低做好預先計畫。為了在當前 Iteration 內完成自動化,團隊必須減少交付範圍。

32. P160 剛開始使用 Spec.實例化時,如果團隊成員質疑自動化的必要性,那你們可以嘗試透過UI來執行Spec.。請注意,不要修改Spec.用描述與UI交互作用之處,但你可以在自動化層(Automation layer)裡隱藏這些動作。

33. P162 追根究柢,要取得成功,更重要的是要解決如何建置正確的東西,而不是正確地建置。

34. P162 附帶實例的Spec. (Specification with example) -- 最終會以 Living documentation形式存在 -- 比生產程式碼存在更久。

35. P171 如果你的可執行的Spec.是以與UI元素的交互作用來描述的,那Spec.中請只敘述UI的功能。

2023年10月7日 星期六

《最高學以致用法:讓學習發揮最大成果的輸出大全》金句

1. P5 能夠持續交出成果的人,絕大多數都是重視輸出勝於輸入。

2. P18 輸出是一種「行動」。唯有透過輸出,才有辦法對真實世界帶來變化和影響。

3. P22 用身體去記憶的「運動性記憶」,是牢記的關鍵。

4. P24 兩週內運用超過三次的情報,大腦會自動轉為長期記憶。

5. P26 作家立花隆:「只有透過無止境的輸入,累積形成多元而充滿自我風格的知性世界,才有辦法達到源源不絕的輸出。」

6. P28 輸入和輸出的黃金比例為 3:7。

7. P29 與其死讀課本,不如多多練習解題。

8. P36 一旦自己的行為改變,也會為周遭帶來各種影響,進而改變現況,讓現實朝正向的方向前進。

9. P41 你的想法是什麼?你有什麼感覺?只要盡量說出「你個人的意見」,你說的「話」就會有價值,讓人願意傾聽。

10. P42 在正向心理學的研究中發現,只要改變正面語言和負面語言的比例,無論是工作或人生、婚姻生活,一切都會變得更美好。

11. P43 正面語言必須要是負面語言的三倍以上。

12. P43 想要成功,就隨時保持正面語言吧。

13. P47 即便對自己所說的內容沒有信心,也要面帶笑容、落落大方地發言。

14. P58 接觸次數愈多,人的好感度也會愈高。

15. P66 「不懂拒絕的人」,會愈來愈沒有體力和時間做自己真正想做的事。

16. P75 心理學實驗發現,會議流程會受「最先提出的意見」很大的影響,以結論來看,很多都是「最先提出的意見」。

17. P84 一般大部分的情況,幾乎都是口頭上的讚美,事實上,透過書信等文字上的讚美,效果會更好。

18. P95 只要「充滿自信地」「從結論」說起,說服力就會大幅提升。

19. P166 用 140 個字鍛練「摘要能力」=「思考力」。

20. P179 想說明的事情,就透過圖片來解釋吧。

21. P191 比起昨天之前,今天的行為變得不一樣,這才叫做自我成長。

22. P193 「開心」會刺激多巴胺分泌。只要感到「開心」,就算不努力、不強迫自己,自然也能持之以恆。

23. P197 想學會什麼,就以「能夠說明給他人聽」為目標。

24. P208 在這個世界上,根本沒有什麼「失敗」。所有的「不順利」和「出乎意料」,都不是「失敗」,而是「犯錯」。只要找出犯錯的原因,思考對策,再繼續挑戰就行了。針對錯誤不斷進行反饋,就能破關,往下一關繼續前進。

25. P211 無論做任何事,都要找出屬於自己的「快樂」。

26. P212 「五秒鐘」內選擇「令自己興奮的」。

27. P267 把自己的「喜好」,用更狂熱、專精的方式寫出來就好。


《新.斷捨離:斷絕不需要的東西,捨棄多餘的廢物,脫離對物品的執著,改變650萬人的史上最強人生整理術再進化!》金句

1. P5 清理雜物,只是「斷捨離」的入口而已。

2. P5 我們總是喜歡自行創造烏雲遮天蔽日,把自己搞得烏煙瘴氣,但如果能學到如何讓心「放晴」,人生就能變得無法地明亮快樂。

3. P8 斷捨離,就是「出」的美學。

4. P24 我們活在「東西會自己上門的社會」。

5. P47 以長遠的目光來看,不管是物品還是人,都是在某個時刻誕生在這個世上,有朝一日會消逝的生命。雖然每一段生命都不同,可能稍縱即逝、或長或短,但盡全力去珍惜這短暫的緣分,才是真正的「惜物」實踐。

6. P50 想要卻得不到固然難受,但應該要丟掉的東西卻不能丟,一樣痛苦。

7. P51 最起碼自己的東西,就憑自己的意思自由處置吧!

8. P55 思考的斷捨離:

1) 認清現狀

2) 停止自我否定

3) 描繪出明確的住家願景

9. P65 說到底,我們的目的是「整理」嗎?...應該最優先去做的,是釐清你的願景,「想要在整理後的住處,過著什麼樣的生活?」

10. P91 斷捨離式的收納發想是「如何不收納物品」。

11. P98 從大框架漸漸地縮小到細微處,才是有效避免混亂的思考順序。

12. P103 先將過去收拾好了,下次「獲得」的才會更好。

13. P114 物品過多的人,往往也扛著過多要做的事,因此必須暫時先限制一下代辦事項。

14. P128 精選書本的訣竅,在於那本書對自己來說「好不好吃」。

15. P135 把手鬆開來,不僅少去了壓力,更多了笑容。

16. P141 

扔掉一件無用之物,就多出一點空間。

扔掉一件多餘之物,就免去一樣負擔。

扔掉一件無益之物,就恢復一絲清爽。

17. P143 附著在物品上的沈重『執著』,是現在的我所不需要的。清除物品,物品和心靈就會更強烈地彼此互動。

18. P146 為學日益,為道日損,損之又損,以至於無為,無為而無不為。《老子》四十八章

如果想要得到知識,就要每天增加。

如果想要得到智慧,就要每天減少。

是的,因為知識是透過行動轉化為智慧的。

19. P147 捨掉放手之難,就能得到應得之物。《千賀一生》

20. P150 「關係的質」提升,「思考的質」也會提升;「思考的質」提升,「行動的質」也會提升;「行動的質」提升,「成果的質」也會提升。

21. P155 「有捨才有得」是真理。斷捨離就是在促進人生的新陳代謝。

22. P172 意識到時間、空間、「手間」(勞力)等個別的「間」,臨機應變,人際關係就能更圓滑,溝通的品質也會更好,人生過得更愉悅。

23. P175 空白並非真的完全空無一物。

24. P181 德國詩人歌德:「人類最大的罪,就是不快樂。」

25. P185 愈是覺得別人的東西礙眼的人,愈處理不好自己的東西。

26. P202 現在手頭上的預定和待辦事項,對你來說是需要、合適、舒服嗎?有沒有哪些預定事項,其實只是你單方面地認為非做不可罷了?

27. P212 家事就是家庭裡面的新陳代謝,不是嗎?

28. P220 需要的物品,一定能在需要的時候得到。

29. P226 斷捨離就是在練習接受自己和重要的人的死亡。

30. P228 物品愈精簡,就愈會萌生出珍惜當下在此處之物的精神。

31. P230 斷捨離就是藉由有意識地「清出」,讓物品、空間、自我變得洗鍊,活在「當下、此處、我」的「美學」。


《OKR:做最重要的事》金句

金句列表 美國洋基隊傳奇捕手 Yogi Berra:「如果你不知道自己的目的地,就可能無法抵達。」 點子不值錢,執行才是關鍵。(p.16) 「OKR」,全名是「目標與關鍵結果」(Objectives and Key Results)。它是一套設定目標的守則,適用於公司、團隊和個人...