結構化程式設計 | Clean Architecture 無瑕的程式碼:整潔的軟體設計與架構篇 閱讀筆記
12 Feb 2020本文為「Clean Architecture 無瑕的程式碼:整潔的軟體設計與架構篇」第 4 章「結構化程式設計」的閱讀筆記。
goto 的沒落
- goto 的某些使用情境會導致模組無法切小,進而無法使用分而治之(divide-and-conquer)來分解程式碼為更小的單元;而扣除掉這些不好的情境,使用 goto 的控制邏輯可對應到
if/then/else
和do/while
。 - 結構化程式的建立是指所有的程式都可以使用三種結構建立出來:循序(sequence)、選擇(selection)、迭代(iteration)。
- 結構化程式可將模組遞迴地分解為更小的單元,也就是可用循序、選擇、迭代這三種控制結構來無限分解為更小的模組、元件或更低一級的功能。在接下來的測試中,即可用這些小功能來做測試。
測試
- 結構化的程式可經由足夠多的測試來證明它是正確的。
- 測試顯示了錯誤的存在,而不是沒有錯誤。
- 測試可以證明程式是不正確的,但沒有辦法證明是正確的。
- 經過足夠的測試後,這些測試讓我們相信程式是足夠正確的。
- 將程式切小後,用小部份來分別做測試。
- 證明不正確的這個方法,僅限於「被證明的東西」是「可以被證明的」;一個不能被證明的程式(例如:無限制使用 goto 的程式)就無法用「證明不正確」這個方法來證明它是足夠正確的。