字體:小 中 大 | |
|
|
2009/10/26 21:30:10瀏覽2294|回應0|推薦0 | |
欲購買本書者請洽台北天瓏書局或三民書局,抑或新竹的華通書局或交大全民書局,南部讀者請洽成大圖書部。 欲索取本書的 Source Code Tar Ball 者請來信至 learntus@gmail.com,title 請註明為「索取《軟體研發經驗談》的 Source Code Tar Ball」。 主要興趣是在 Web Design、Javascript、Python、C Sharp、Microsoft .Net、IT 開發工具、以及對套裝軟體研發沒有興趣的讀者,請勿購買本書。 簡介內容:...... 建構中 ...... 本書之章節目錄: 1. 基本功 1-1 寫程式的基本規範 ...... 1 標頭檔的規範 ...... 1 Include Guard ...... 1 盡可能使用標準的定義與程式庫 ...... 6 Conditional Compilation ...... 7 函式的規範 ...... 9 Prototype ...... 9 程式碼的規範 ...... 10 慎重選擇變數的 Scope 與 Life Time ...... 10 慎重選擇函式的 Scope 與 Life Time ...... 12 盡可能地不做任何的假設(Assume Nothing)...... 16 適時、適當與適量地加入註解 ...... 18 使用巨集時盡量避免在expression中嵌入運算符號 ...... 19 變數與函式的命名規範(Naming Conventions)..... 23 Hungarian Convention ...... 23 X Window Convention ...... 24 My Convention ...... 27 1-2 Pointer ...... 29 Pointer 就是 Address ...... 29 Generic Pointer ...... 32 Pointer Arithmetic ...... 32 Pointers versus Const Modifier ...... 40 1-3 Pointer versus Array ...... 47 Pointer versus One-Dimension Array ...... 47 Pointer versus Multi-Dimension Array ...... 51 Array of Pointer ...... 55 1-4 Pointer versus Function ...... 59 Pointer to Function (Function Pointer) ...... 59 Callback Function ...... 63 個案:好朋友就是「有福必通報」、「有好康耶愛倒相報」...... 64 1-5 Information Hiding ...... 76 Pointers to Incomplete Type ...... 76 1-6 Reference ...... 81 Copy Constructor ...... 86 自行定義的Copy Constructor ...... 93 禁止Copy Constructor被觸發 ...... 97 1-7 輔助型技巧 ...... 98 參數個數不確定的函式 ...... 98 Assertion ...... 105 Assertion in Hardware Description Language ...... 107 如何定義客製化的 Assertion ...... 109 Predefined Macros ...... 109 客製化的 Assert ...... 110 1-8 個案:記憶體綽綽有餘卻要不到 ...... 117 2. 循規蹈矩使用記憶體 ...... 123 2-1 Run Time Memory Layout ...... 123 Stack Frame and Call Stack ...... 124 2-2 Alignment Restriction on Address ...... 126 變數所佔用的記憶體大小與起始位址值 ...... 127 客製化的 Memory Pool ...... 129 Struct 內部的 Padding Bytes ...... 133 個案:物件的Starting Address之應用 ...... 136 2-3 SIGSEGV 與 SIGBUS ...... 145 2-4 檢查 Run Time Memory Error 的工具 ...... 146 Purify 的歷史 ...... 146 Purify 如何偵測 Run Time Memory Error ...... 147 2-5 記憶體使用不當的常見案例 ...... 149 Uninitialized Memory Read (UMR) ...... 149 The Operation Beyond Array Bounds ...... 151 Stack Bound Read/Write (SBR/SBW) ...... 152 Array Bound Read/Write (ABR/ABW) ...... 160 個案:分析消費者行為的應用程式 ...... 163 Null Pointer Read/Write (NPR/NPW) ...... 178 Freeing Mismatched Memory (FMM) ...... 183 Free Memory Read/Write (FMR/FMW) ...... 189 Dangling Pointer與FMR/FMW ...... 193 Free Non-Heap Memory (FNH) ...... 194 Free Unallocated Memory (FUM) ...... 196 Memory Leak (MLK) ...... 198 Lost Memory Block ...... 198 Undeallocated Memory Block ...... 200 3. 檔案處理 ...... 203 3-1 檔案的內容與格式 ...... 203 3-2 檔案處理的基本概念 ...... 204 Formatted IO ...... 209 Binary IO ...... 214 個案:聯盟公司忘了關閉檔案 ...... 220 3-3 位元組順序(Byte Ordering)...... 235 Big Endian versus Little Endian ...... 235 由程式實作來理解 Endian ...... 236 謬誤之澄清 ...... 239 Endian 的起源 ...... 240 Byte Swapping ...... 242 Bitwise Operations for Byte Swapping ...... 242 Pointer Operations for Byte Swapping ...... 242 如何讓 Binary File 跨越 Endian 的藩籬 ...... 244 Binary File Format 之設計 ...... 245 Writer Application 之實作 ...... 246 Reader Application 之實作 ...... 248 3-4 檔案鎖定(File Locking)...... 257 Advisory Locking ...... 258 動手實作 File Locking 的範例 ...... 260 個案:The Lock Daemon Is Missing ...... 266 個案:自行設計的Locking Mechanism ...... 267 3-5 多檔協同工作模式 ...... 286 個案:當多檔協同工作模式遇上NFS Cache Delay ...... 288 4. 軟體鎖 ...... 293 4-1 FLEXlm 軟體鎖 ...... 294 FLEXlm 的架構 ...... 295 License Model ...... 297 FLEXlm 是一種軟體開發工具 ...... 298 FLEXlm Client Library ...... 299 Basic APIs for Software License Control ...... 299 早期的防盜漏洞 ...... 300 如何防範 Kill-Restart Approach ...... 303 持續監督的重要性 ...... 305 4-2 為何放任盜版橫行 ...... 305 網路效果(Network Effect)...... 306 正向回饋循環(Positive Feedback Loop)...... 307 軟體鎖是否自製的考量 ...... 308 4-3 小專題:動手設計軟體鎖 ...... 310 Daemon Process ...... 311 動手實作 Daemon Process ...... 313 Socket ...... 316 Basic Functions for Socket Programming ...... 317 建立 Stream Socket 的基本程序 ....... 322 Concurrent Server ...... 325 建立 Concurrent Server 的基本程序 ...... 325 動手實作 Concurrent Server ...... 327 Multiplexing Stream Socket ...... 340 建立 Multiplexing Stream Socket 的基本程序 ...... 341 Function for IO Multiplexing ...... 343 動手實作 Mux-Server ...... 345 軟體鎖的設計與實作 ...... 355 軟體鎖的架構設計 ...... 355 License File 的格式設計 ...... 356 Packet 的格式設計 ...... 357 Generating a License File ...... 360 Parsing the License File ...... 362 License Server (License Manager) ...... 368 Application ...... 378 5. 軟體測試 ...... 391 5-1 軟體的研發成本 ...... 391 軟體臭蟲的除錯成本 ...... 391 軟體臭蟲被解掉的機率 ...... 393 軟體品質與產品利潤的關連性 ...... 394 5-2 知名的軟體臭蟲 ...... 396 Toyota Prius Hybrid 汽油引擎無預警熄火事件 ...... 396 US Yorktown Ship 推進系統停擺事件 ...... 396 亞利安五號火箭爆炸事件 ...... 397 5-3 軟體測試的基本觀念 ...... 399 常見的基本術語 ...... 399 Black Box Testing versus White Box Testing ...... 399 Static Testing versus Dynamic Testing ...... 401 Validation versus Verification ...... 401 軟體研發流程 versus 軟體測試 ...... 402 Testbench ...... 405 Test Pattern Generation ...... 407 5-4 衡量程式複雜度的方法 ...... 411 Cyclomatic Complexity ...... 411 實例解析 ...... 414 Software Reliability ...... 417 Non-Nested Control Flow versus Nested Control Flow ...... 417 Nested Cyclomatic Complexity (NCC) ...... 419 My Diagram Constructs for Control Flow Graph ...... 421 Information Flow Complexity ...... 424 5-5 Code Coverage Analysis ...... 425 基本的衡量指標 ...... 425 Method/Function Coverage ...... 425 Statement Coverage ...... 426 Decision/Branch Coverage ...... 426 Condition Coverage ...... 426 實例解析 ...... 427 Method/Function Coverage ...... 427 Statement Coverage ...... 427 Decision/Branch Coverage ...... 427 Condition Coverage ...... 429 5-6 個案:Heap Tree ...... 436 Heap Tree 簡介 ...... 436 Heap Tree 的實作 ...... 440 Heap Tree 之測試 ...... 447 Directed Test with Two Keys ...... 447 Directed Test、Random Test 與 Directed Random Test ...... 451 6. 軟體研發流程管理 ...... 465 6-1 概述 ...... 465 6-2 軟體發展環境 ...... 469 階層式架構 ...... 469 Work Space ...... 469 6-3 Configuration Management ...... 470 Revision Control System ...... 471 Codeline and Branch ...... 475 Branch Model ...... 475 Branch-by-Release ....... 476 Branch-by-Purpose ...... 477 Feature and Code Freeze Dates (Code Chill Period) ...... 479 Bug Tracking System ...... 480 軟體臭蟲的生命週期 ...... 481 6-4 回顧與檢討 ...... 485 Adjust Build Time to Rescue Broken Build ...... 485 Change Set over Code Changes ...... 486 Merge and Redesign Testcases Periodically ...... 487 Adding Diversity to Testing Methodology ...... 488 7. 知識的吸收、積蓄與創造 ...... 491 7-1 前言 ...... 491 Push Strategy versus Pull Strategy ...... 491 7-2 內隱知識(Tacit Knowledge)...... 492 斲輪老手的故事 ...... 492 隱喻(metaphor)與類比(analogy)...... 494 松下電器的家用麵包機 ...... 496 知識螺旋 ...... 497 知識追求的方向感 ...... 498 7-3 知識管理的修練方法 ...... 500 跨領域的學習 ...... 500 跨領域學習的模範生 —— Pearce McComish Coporation ...... 502 接觸多元文化與價值觀 ...... 503 行動後回顧(After Action Review)...... 504 學習歷史 ...... 505 7-4 知識創造活動的系統化流程 ...... 507 專案指導遠景 ...... 508 隱喻、類比與原型製作 ...... 509 原型製作 ...... 510 專案回顧 ...... 510 結語 ...... 510 |
|
( 創作|其他 ) |