網路城邦
上一篇 回創作列表 下一篇   字體:
《軟體研發經驗談:觀念、紀律與個案》之簡介
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
( 創作其他 )
推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=chungchia&aid=3440009