2023/04/17

布魯克斯法則 (Brooks's Law) - 人月神話

Frederick P. Brooks, Jr. 於 IBM System/360 開發階段任職專案經理,OS/360設計階段任職軟體專案經理。在他管理的軟體專案經驗中,他將經歷寫成一本著名的軟體開發管理書本,名為「人月神話」。

在人月神話中,他提出一個觀念:在一個進度已經落後的專案再增加人手時,只會讓這個專案進度拖延更久。

在軟體專案管理中,有一些重要的事項,就是開發人力跟耗費的時間。這些估算工作,很多時候只能用經驗法則來判斷,由於這個估算無法非常準確,而且會隨著時間的前進,一直不斷地變化。

多數的管理人員都會用很單純的人月互換法則,來進行工作的估算,例如一個 10 人月的工作量,要直接分配給 5 個人用 2 個月的時間開發。

這是因為工作項目在切割的同時,就發生了項目的先後關係,且每一個項目在不同人員開發時,得到的成果跟品質不同,最後也會在整合階段,發生不同的問題,導致實際上不可能發生 10 人月 = 5 人 x 2 月。

一般在遇到進度延遲的狀況時,第一個反應會是增加人手,就像是蓋房子蓋到一半趕進度,就會想要從別的地方調派人力過來幫忙。但軟體專案沒有辦法依照這種想法處理,任意增加人手,很有可能會讓專案問題更亂更複雜。

造成這種現象的原因可能有:

  1. 專業工作無法任意切割

  2. 溝通成本大幅增加

  3. 新人無法快速融入團隊開發

  4. 舊人要暫停工作,做新人的教育訓練,需要更多時間,這些時間無法反映到實際的專案進度上

最明顯的實例,就是一個女人生小孩需要耗費 10 個月的時間,但十個女人生小孩,一樣需要 10 個月,因為這是一項專業工作,無法任意切割。

References

布魯克斯法則 - MBA智库百科

又delay了...為什麼人手增加後,專案進度反而死更慘? - Project Club 專案管理輕鬆學

專案管理你要知道事情 布魯克斯法則 ( Brook’s Law ) | lalacube

浅谈软件开发定律系列之布鲁克斯定律_柳记的技术博客_51CTO博客

2023/04/10

阿姆達爾定律 Amdahl's Law

Amdahl's Law 是 1967 年 Amdahl 發表的論文提出的法則。

當時的命題是,在平行運算的研究領域中,一個程式可以分為可被平行運算與不能被平行運算兩個部分,當我們針對平行運算做效能提升的研究時,應該把時間跟經費做最有效率的投資,但究竟平行運算可以帶來多少效益?

\[ T = 程式以序列運算的總時間 \\ B = 程式中,無法被平行化運算的部分的運算時間 \\ T-B = 可被平行化運算的總時間 \\ N = number of Threads/CPUs \\ T = B + (T-B) \\ (T-B) 部分可被平行化,變成耗費時間 (T-B)/N \]

假設 T 為 1

\[ \text{if N=2} => T(N) = B + (T-B)/2 \\ \text{if N=3} => T(N) = B + (T-B)/3 \]

可得到程式運算的總時間

\[ T(N) = B + (T-B)/N \]

假設 T = 1, 只能序列運算的部分 B = 0.5, N = 2

\[ T(2) = 0.5 + (1-0.5)/2 \\ = 0.5+0.5/2 \\ = 0.75 \]

當 Thread/CPU 越多,就代表程式運算的總時間會減少。


另外有一個程式加速的指標參數

\[ Speedup = \frac{Original Execution Time}{Execution Time After Enhancement} \\ = \frac{1}{B+(1-B)/N} \]

如果程式有一半的部分可被平行化加速

\[ N=2, Speedup = \frac{1}{0.5+(1-0.5)/2} = 1.33 \\ N=4, Speedup = 1.6 \\ N=100, Speedup = 1.98 \\ N=1000, Speedup = 1.998 \\ N=10000, Speedup = 1.99998 \\ N=\infty, Speedup = 2 \]

意思就是,就算平行化運算可以無限的加強效能,減少運算時間,程式的總運算時間,會被無法平行化運算加速的部分限制住。

如果有兩件事,我們不知道應該去做哪一項時,也可以利用這個法則決定,取效益比較高的那一個。例如:讀書時不知道要先讀數學還是英文,先假設數學是無法提升的部分,算出 Speedup,再用英文為B,算出 Speedup,兩個互相比較,就可以知道哪一個效益較高。

但真實世界也不是那麼簡單的事,因為我們無法預先知道,最佳化後的成果,是不是跟預先假設的成果效益一樣。另外以讀書為例,我們也不知道一直都看不懂的英文,要花多少時間,才能改進並得到效益,反而是比較熟悉的數學還有進步空間,因為看不懂的東西,再怎麼看也不懂,就算看懂以後的效益很高也沒有用。

References

OpenMP: Amdahl's Law - YouTube

阿姆達爾定律 - 維基百科,自由的百科全書

Day27:阿姆達爾定律(Amdahl's law)——資源配置的哲學 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

Amdahl's Law · 課程筆記

阿姆达尔定律(Amdahl’s Law) 计算51CTO博客amdahl 定律