軟件工程是困難的, 因為
software project, at least as seen by the nontechnical manager, has the character of werewolves; it is usually innocent and straightforward, but is capable of becoming a monster of missed? schedules, blown budgets, and flawed products.
本文主要從軟件開發(fā)的復雜本質(zhì)和曾經(jīng)這一領(lǐng)域的重大變革的性質(zhì)鲫忍,論述了到目前為止還沒有解決軟件工程問題的方法的論點。
There is no single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity.
作者主張看似帶來變革的解決方法實際上只解決了表面的難點(accidental difficulty),沒有從本質(zhì)上解決問題(essence difficulty)。
本質(zhì)的難題是指 【1】復雜度,【2】同形度(復雜軟件并非簡單疊加)滔驶,【3】多變性,【4】不可見(不易可視化,不易交流)
曾經(jīng)解決了表面難點而帶來巨大變革的成功嘗試是指?(“ | ” 后接此方法解決的表面難點)
【1】高階程式語言 | 復雜的底層實現(xiàn)細節(jié)
To the extent that the high-level language embodies the constructs one wants in the abstract program and avoids all lower ones, it eliminates a whole level of complexity that was never inherent in the program at all.
【2】時間分享 | 刷新記憶所需的時間
Time-sharing preserves immediacy, and hence enables one to maintain an overview of complexity...Slow turnaround, like machine-language complexities, is an accidental rather than an essential difficulty of the software process.
【3】整合的編程環(huán)境 | 整合不同程序的復雜過程
They attack the accidental difficulties that result from using individual programs together, by providing integrated libraries, unified file formats, and pipes and filters.
現(xiàn)有的研究的方向以及其不能成為解決方法的原因(“ | ” 后接此方法無法成為 silver bullet 的原因)
【1】Ada 及其他高階程式語言 | 同HLL無法提供更多的進步
【2】面向?qū)ο蟮某绦蛟O(shè)計 | 包括 abstract data type 和 hierarchical data type 兩個相互垂直的理念铣缠,但都只是移除了設(shè)計表達的表面困難
【3】人工智能,專家系統(tǒng) | 有應用前景昆禽,但目前仍有諸多困難
【4】自動化編程 | e.g.generator 僅適用于特定情境攘残,無法泛化
【5】可視化編程 | 流程圖的表達能力很有限,程序很難可視化为狸,電腦屏幕大小有限
【6】程序驗證 - 在實現(xiàn)程序之前對程序設(shè)計進行驗證 | 程序驗證首先不保證程序設(shè)計絕對正確歼郭,所以只能減少測試的工作量而不能完全免除;其次程序驗證本身是非常費時的辐棒,因此只能應用在關(guān)鍵程序上病曾;最后程序驗證只能檢測程序設(shè)計是否符合程序說明,而程序說明本身需要不斷除錯漾根。
【7】環(huán)境和開發(fā)工具 | 減少語法泰涂,語義錯誤,同樣只是表面難點
【8】工作站(計算存儲能力)| 編譯所需的時間目前已經(jīng)不會影響程序員的思考辐怕,所以同樣不是關(guān)鍵
相反逼蒙,Promising Attacks on the Conceptual Essence:
【1】buys vs build?
【2】Requirements refinement and rapid prototyping
【3】Great designers