軟體研發經驗談─觀念、紀律與個案 (書側有水漬,不介意再下單)
陳重嘉
- 出版商: 琢學
- 出版日期: 2006-09-29
- 定價: $650
- 售價: 9.0 折 $585
- 貴賓價: 8.5 折 $553
- 語言: 繁體中文
- 頁數: 514
- ISBN: 9868255503
- ISBN-13: 9789868255500
-
相關分類:
Engineer self-growth、軟體工程
立即出貨(限量) (庫存=5)
買這商品的人也買了...
-
$480$379 -
$880$695 -
$880$695 -
$650$514 -
$780$663 -
$680$578 -
$600$474 -
$650$507 -
$550$468 -
$980$774 -
$650$507 -
$750$593 -
$690$538 -
$680$537 -
$480$379 -
$720$569 -
$650$553 -
$1,200$948 -
$620$490 -
$580$493 -
$880$695 -
$990$891 -
$600$480 -
$460$414 -
$580$493
相關主題
商品描述
本書特色
作者創作本書的主要目的,是想將本身的知識與經驗,傳承給對軟體研發有興趣或有工作需要的讀者,並希望書中的內容能對讀者有所助益。
本書的副標題 ── 觀念、紀律與個案,為本書的創作主軸;書中的所有內容,皆是以此三大主軸為基礎,並結合軟體的相關議題與作者的經驗與見解,做進一步地延伸發展所獲得的成果。
就「觀念」主軸而言,作者嘗試透過日常生活的經驗與案例,來解釋或比喻軟體的相關議題,以助於讀者掌握其意義;例如,作者以不可移情別戀的指標,來形容constant pointer;以健身器材對人身肌肉的健身效果,來比喻與解釋code coverage analysis。
此外,「觀念」主軸亦包含了作者對於某些事物的主觀看法與見解;例如,作者將自己對於heap tree的主觀見解,濃縮成兩句口訣 ── 「視情況讓新的child node往上浮」與「視情況讓新的root node往下沈」;經由如此的見解分享,讀者不但可以清楚地感受到作者的觀點,亦可藉此激盪讀者自己的觀點,並由兩者的衝突與矛盾之中,繼續深化與擴大自己的見解與視野。
就「紀律」主軸而言,作者則是列舉常見的不當程式之範例,並搭配相關的軟體偵錯工具,讓讀者從中去摸索體會,撰寫程式與研發軟體時所應當秉持的紀律。
就「個案」主軸而言,其主要內容為作者解題與犯錯經驗的分享,並透過類似於故事的講述方式,來重現當時的情景;雖然這些個案所分享的解題或犯錯經驗,不一定對讀者有直接的幫助,但是多瞭解一些前車之鑑,或多或少能夠產生潛移默化的警惕與啟發之效,進而使得讀者在面對類似的情境時,能夠避免重蹈覆轍,或者少走一些冤枉路。
本書內容
1. 基本功
1-1 寫程式的基本規範... 1
標頭檔的規範... 1Include 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