出版時間:2010年1月 出版社:機械工業(yè)出版社 作者:Donis Marshall,John Bruno 頁數:229 譯者:徐旭銘
Tag標簽:無
前言
軟件工程和傳統(tǒng)意義上的工程完全不同。作為一名軟件程序員,我非常自豪可以自稱是一名工程師。工程師能夠通過細致的計劃思考并制造出一次就能工作的東西。所以,在我的職業(yè)里包含“工程師”這個詞實在是一件很酷的事情。我們先來看看要是把普通的軟件工程方法應用到航空工程里會發(fā)生什么事情。一駕飛機正停在登機口等待乘客登機,這時一名航空工程師(不管是一時興起還是被老板強迫)打算要換掉尾翼部分。畢竟那只是一個尾翼而已,直接把它弄下來換一個上去就好了。絕對沒問題,絕對能行!要是航空工程采用和軟件工程一樣的流程的話,我估計乘客都會瞬間逃離飛機的。但是,這類改變在軟件項目的世界里基本上每天都要發(fā)生。過去有種自相矛盾的老笑話說是“軍事情報”,我覺得“軟件工程”也屬于這類范疇(這種笑話就是把兩個矛盾或者互斥的詞放在一起,通常都是為了幽默搞笑——譯者注)。而更讓人頭疼的是,雖然軟件真的是在“統(tǒng)治”這個世界,但是幾乎所有人在創(chuàng)建它時所采用的方法無一可以稱得上是“工程”。為什么我敢說我現在正在使用的計算機可以正常工作,但是我正在使用的程序(MicrosoftWord)卻可能會搞亂我列表的自動編號呢?我這么說可能會得罪我那些電子工程的朋友,但是我還是要說,因為硬件比較簡單。電子工程師要對付的只是很有限的輸入,不像軟件工程師要面對幾乎無限可能的輸入。管理學也認為電子工程是“真正的工程”,所以管理的時候可以給予適當的時間和資源。而軟件業(yè),作為一個獨特的領域,還算不上成熟,它真正存在的時間不是很長。其實說起來,我比軟件這個行業(yè)年輕不了多少,所以我“不成熟”的看法才能透露出這些問題。要是我和電子工程一樣老的話,那么現在我就該躺在墳墓里寫書了。軟件開發(fā)的另一個難題有時候是軟件工程師自己。老實說,成為一名軟件工程師的門檻還是很低的。我就是一個現成的例子:在獲得計算機科學學士學位之前,我就已經是一名全職的軟件工程師了。當初獲得這份寫程序的工作只不過是因為我在面試的時候“特別能吹”而已。我的老板根本就不在乎我沒有受過正規(guī)的教育,畢竟我要求的工資比較低。在所有真正的工程領域里,你都必須先獲得認證資格后才能在名字里加上專業(yè)工程師(Pro.fessional Engineer,PE)的頭銜。在軟件行業(yè)里就沒這種規(guī)定。其中一部分原因是這個行業(yè)太年輕了,沒有人知道在從業(yè)之前應該必須掌握什么知識才能成為一個軟件工程師。而在其他領域里,專業(yè)工程師通常意味著大量管理上的責任。如果一名有資格的工程師覺得一個設計是行不通的,她就不會在計劃書上簽名,項目也就不可以進行下去。
內容概要
本書簡單明了地介紹了軟件開發(fā)中的最佳實踐,展示了工程流程在編寫優(yōu)質代碼上的重要性以及測試的重要性,總結了很多資深工程師的經驗教訓,并提供了很多真實案例。書中介紹的經驗可以應用到產品開發(fā)周期的每個環(huán)節(jié),從設計到開發(fā)以及最后的發(fā)布和維護。本書的中心思想就是要在設計和實現的過程中改進代碼質量,包括類建模、性能、安全性、內存使用以及調試,幫助讀者構建完美的項目。本書適合專業(yè)及業(yè)余程序員閱讀?! 〔捎靡涣鞯墓こ虒嵺`來幫助你編寫更健壯、無錯的代碼。兩位微軟的.NET開發(fā)專家與你分享優(yōu)化軟件開發(fā)生命周期的真實案例和經過實戰(zhàn)考驗的解決方案——從避免代價昂貴的編程陷阱,到提高開發(fā)團隊整體效率的方法等。無論你是來自哪個層次的托管代碼程序員,都能在這里找到設計、原型開發(fā)、實現、調試以及測試的技巧,進一步提升代碼的品質?! ”緯婕伴_發(fā)流程中每一個階段的優(yōu)化(從設計到測試),以及如何開發(fā)出更優(yōu)質的應用程序軟件: 通過元編程來降低代碼的復雜度,同時還能增加靈活性和可維護性。 把性能當做一項功能,并且在開發(fā)周期中對它進行管理?! 閼贸绦虻纳炜s性采取各種最佳實踐?! ⊥ㄟ^預防性的安全措施來抵御各種惡意攻擊。 在運行之前通過防御性編程來捕捉錯誤?! ≡诿咳展こ塘鞒汤镏踩胱詣踊瘶嫿?、代碼分析和測試等工作?! 崿F更好的源碼控制管理和提交流程?! 〗⒁惶踪|量驅動、基于里程碑的項目節(jié)奏,并最終產生更好的結果。
作者簡介
Donis Marshall 是Debuglive.com的CEO,他管理的專家軟件工程師團隊開發(fā)出第一個基于Web的Windows應用程序調試器。憑借20年的開發(fā)經驗以及深厚的微軟.NET背景,他編寫了好幾本書,其中包括《Programming Microsoft Visual C# 2008: The Language and .NET Security Progr
書籍目錄
專家推薦 序 前言 第1章 敏捷世界里的代碼質量 1.1 軟件開發(fā)的傳統(tǒng)方法 1.2 軟件開發(fā)的敏捷方法 1.2.1 Scrum 1.2.2 eXtreme Programming 1.2.3 測試驅動開發(fā) 1.3 盡早進行質量控制 1.4 微軟內幕:Windows Live Hotmail工程 1.4.1 工程準則 1.4.2 成功的關鍵因素 1.5 編寫堅實代碼的方法 1.5.1 專注設計 1.5.2 防御和調試 1.5.3 分析與測試 1.5.4 改進流程和態(tài)度 1.6 總結 1.7 本章要點 第2章 類設計和原型開發(fā) 2.1 Visual Studio中的協作 2.2 磨刀不誤砍柴工 2.3 軟件建模 2.3.1 統(tǒng)一建模語言 2.3.2 Visio示例 2.4 原型開發(fā) 2.5 跟蹤 2.6 Visual Studio類設計器 2.6.1 創(chuàng)建一個類圖 2.6.2 使用類設計器進行原型開發(fā) 2.6.3 原型開發(fā)示例 2.7 總結 2.8 本章要點 第3章 元編程 3.1 什么是元數據 3.2 托管應用里的元數據 3.3 應用程序中的元數據 3.4 微軟內幕:Windows Live Spaces中的配置管理 3.5 總結 3.6 本章要點 第4章 性能也是功能 4.1 常見的性能難點 4.1.1 網絡延時 4.1.2 負載大小和網絡往返時延 4.1.3 受限的TCP連接 4.1.4 未優(yōu)化的代碼 4.2 分析應用程序性能 4.3 提升Web應用性能的技巧 4.3.1 減小負載大小 4.3.2 有效利用緩存 4.3.3 優(yōu)化網絡通信 4.3.4 為性能組織編寫代碼 4.4 采用性能最佳實踐 4.5 微軟內幕:解決Live Search的性能問題 4.5.1 Web性能準則 4.5.2 成功的關鍵要素 4.6 總結 4.7 本章要點 第5章 伸縮性設計 5.1 理解應用程序伸縮性 5.1.1 伸縮性之路 5.1.2 數據庫的伸縮性 5.2 伸縮Web應用程序的技巧 5.2.1 選擇可伸縮的應用程序設計 5.2.2 設計可伸縮的應用程序基礎設施 5.2.3 抵御應用程序故障 5.2.4 保證可管理性和可維護性 5.3 微軟內幕:管理Windows Live Messenger服務基礎設施 5.4 總結 5.5 本章要點 第6章 安全性設計和實現 6.1 常見的應用程序安全威脅 6.2 設計安全的應用程序的原則 6.3 安全的應用程序的SD3+C策略和實踐 6.3.1 設計上的安全性 6.3.2 默認值的安全性 6.3.3 部署和通信中的安全性 6.4 理解.NET框架的安全性原則 6.4.1 運行時安全策略 6.4.2 代碼訪問安全 6.4.3 應用運行時安全策略 6.5 其他安全性最佳實踐 6.6 總結 6.7 本章要點 第7章 托管內存模型 7.1 托管堆 7.2 垃圾回收 7.2.1 原生對象的托管包裹 7.2.2 GC類 7.2.3 大型對象堆 7.3 終止 7.3.1 不確定的垃圾回收 7.3.2 可丟棄對象 7.3.3 丟棄模式 7.3.4 弱引用 7.4 固定 7.5 托管堆的技巧 7.6 CLR Profiler 7.7 總結 7.8 本章要點 第8章 防御式編程 8.1 防御式編程和C# 8.2 警告 8.3 代碼檢查 8.4 軟件測試 8.4.1 測試驅動開發(fā) 8.4.2 代碼覆蓋 8.4.3 自我描述的代碼 8.4.4 命名規(guī)則 8.4.5 偽代碼 8.4.6 注釋 8.5 用類實現防御式編程 8.5.1 修飾符 8.5.2 接口 8.6 防御式編程小結 8.7 設計模式 8.8 總結 8.9 本章要點 第9章 調試 9.1 溢出bug 9.2 Pentium FDIV bug 9.3 符號 9.3.1 符號服務器 9.3.2 源碼服務器 9.4 搶先式調試 9.5 主動型調試 9.5.1 托管調試助手 9.5.2 MDA舉例 9.5.3 代碼分析 9.5.4 性能監(jiān)視 9.6 調試 9.7 調試工具 9.7.1 Visual Studio 9.7.2 .NET框架工具 9.7.3 Windows調試工具 9.7.4 CLRProfiler 9.7.5 Sysinternals 9.8 跟蹤 9.8.1 Web應用程序跟蹤 9.8.2 異常處理 9.9 生產調試 9.10 總結 9.11 本章要點 第10章 代碼分析 10.1 投資測試過程 10.1.1 定義測試的節(jié)奏 10.1.2 建立測試工作項的跟蹤 10.2 采用自動化的代碼分析 10.2.1 使用靜態(tài)代碼分析工具 10.2.2 編寫應用程序測試代碼 10.2.3 使用Visual Studio進行測試 10.3 通過度量來理解質量 10.3.1 衡量代碼的復雜度和可維護性 10.3.2 通過透視來理解質量 10.4 微軟內幕:Microsoft.com的Web分析平臺的質量管理 10.4.1 代碼質量的重要性 10.4.2 測試投資 10.4.3 管理質量 10.5 總結 10.6 本章要點 第11章 改進工程流程 11.1 工程流程改進的技巧 11.1.1 建立起關注質量的項目節(jié)奏 11.1.2 實現源碼控制和提交流程 11.1.3 每日發(fā)布和測試代碼 11.1.4 自動化每日構建 11.1.5 使用MSBuild 11.1.6 創(chuàng)建并執(zhí)行質量指標 11.2 總結 11.3 本章要點 第12章 態(tài)度決定一切 12.1 激情 12.2 線性還是迭代 12.3 銷售為王 12.4 靈活性 12.5 解決實際問題 12.6 你要負責 12.7 把移植代碼當做新代碼來寫 12.8 重構 12.9 優(yōu)先級 12.10 從實際出發(fā) 12.11 擁抱變化 12.12 拓展視野 附錄A 敏捷開發(fā)資源 附錄B Web性能資源
章節(jié)摘錄
插圖:作為軟件工程師,我們都希望自己的產品是出色的。我們希望能讓用戶享受到無錯的使用體驗以及最佳的程序質量。而在同行之間,我們希望能用優(yōu)雅和穩(wěn)定的代碼展示出自己超凡的技藝。每天我們都在向著這些目標努力工作。我們不斷地重復努力開發(fā)出高質量的軟件,加上我們不斷的對改進方法和實踐的渴望,凝聚成程序員的習慣。正如亞里士多德所說,卓越是通過重復不斷的練習而達到的。然而,構建高質量的軟件是一件非常困難的工作。即便是最基本的程序里也有會bug。每個人(包括最好的工程師)都會寫出有bug的代碼來。而人類本身就是不完美的,我們經常會犯錯。因此當我們將人類語言翻譯成按照我們的指令來工作的軟件應用程序時,它一定會出錯,一定會有意外發(fā)生,所以出現質量問題也就沒什么好奇怪的了。但是,僅僅把軟件質量的責任歸咎于程序員是不公平的。軟件工程是一個有很多來自不同領域的人參與的過程。例如在微軟,工程團隊通常會分成三塊:程序管理、開發(fā)以及測試。程序管理保證了產品的設計規(guī)范是準確的,經過充分考量的,并且他們會明確最終產品所要達到的質量目標。程序員負責創(chuàng)建最有效以及最靈活的設計,保證算法的準確性,以及在代碼實現里應用各種最佳實踐。測試人員考慮代碼和應用程序行為的每一種可能的組合,并且完整檢查軟件的每一條代碼路徑。質量屬于工程生命周期里的每一個環(huán)節(jié),因此每一位參與者都對它負有責任。軟件開發(fā)組織對此有著深刻的理解,并且花費了大量的時間和精力來實現各種過程和程序以確保每一位團隊成員都能專注于質量的保證上。軟件開發(fā)過程和方法論自20世紀90年代末就在業(yè)界存在了。隨著計算能力的增加,軟件程序變得越來越復雜。而在軟件開發(fā)里增加的復雜度,再加上業(yè)界相對的不成熟,導致了軟件項目里的諸多問題,這包括了成本超支,缺乏形式化的質量保證過程而導致糟糕的軟件質量,以及代碼的低可維護性等。因此,誕生了形式化的軟件開發(fā)過程。它們的主要目標是把一系列的任務放到形式化的結構里,最終能讓開發(fā)工作產生更好的結果。簡單來說,采用形式化的工程流程的目的就是為了產生更優(yōu)質的產品,讓市場或者部署更加容易對其進行預測。使用過程來保證產品的質量是所有提供產品或者服務的產業(yè)進行工作的基礎。
媒體關注與評論
《完美代碼》在管理書籍和技術書籍之間做到了出色的平衡。從如何進行軟件建模,到安全性設計,再到防御性編程,本書展示了可以改進開發(fā)工作的各種最佳實踐?! 猈intellect聯合創(chuàng)始人,John Robbins《完美代碼》不僅僅是一本關于代碼的書,它闡述了如何開發(fā)一個健壯的項目。這本書簡單明了地介紹了軟件開發(fā)中的最佳實踐,并提供了很多實際產品中的案例和經驗教訓,幫助讀者構建完美的項目——從設計到開發(fā),以及最后的發(fā)布和維護?! ④?軟件開發(fā)工程師,Jason Blankman作為一名有20年經驗的軟件工程師,能讓我每過幾年就重讀一遍的書并不多見,而《完美代碼》就是其中之一,每次溫故都能知新?! ④?軟件開發(fā)工程師,Don Reamey對任何專業(yè)軟件工程師來說,《完美代碼》的價值都是無法衡量的,書中到處都是可以立刻投入使用的實踐經驗?!锻昝来a》絕對是一本讓你愛不釋手的必讀書籍?! 狝LL Software執(zhí)行股東,微軟區(qū)域總裁,John Alexander《完美代碼》對任何rr從業(yè)人員來說都是必讀書籍,特別是如果你打算使用托管代碼的話。它不僅涵蓋了工程上的最佳實踐,還通過已經過實踐檢驗的案例來展示它們?! ④?發(fā)布經理,Andres Juarez這本書提供了在高效軟件開發(fā)過程中的最佳實踐,因此可以避免很多典型的程序員錯誤。作者提供了可實踐的檢測錯誤的方案,并解釋了微軟是如何進行軟件開發(fā)和測試的。 ——微軟,測試經理,Venkat B.Iyer無論你是新手還是專家,任何級別的程序員都可以閱讀本書。它為優(yōu)秀的開發(fā)實踐提供了堅實的基礎,不管開發(fā)團隊的規(guī)模是大還是小,甚至只有一名程序員,也應該采用書中的經驗?! 毩④浖こ處?,John Macknight
編輯推薦
《完美代碼》:采用一流的工程實踐來幫助你編寫更健壯、無錯的代碼。兩位微軟的.NET開發(fā)專家與你分享優(yōu)化軟件開發(fā)生命周期的真實案例和經過實戰(zhàn)考驗的解決方案——從避免代價昂貴的編程陷阱,到提高開發(fā)團隊整體效率的方法等。無論你是來自哪個層次的托管代碼程序員,都能在這里找到設計、原型開發(fā)、實現、調試以及測試的技巧,進一步提升代碼的品質。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載