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