Find the Bug : A Book of Incorrect Programs (Paperback)
暫譯: 找出錯誤:錯誤程式的書籍 (平裝本)

Adam Barr

  • 出版商: Addison Wesley
  • 出版日期: 2004-10-16
  • 售價: $1,225
  • 貴賓價: 9.5$1,164
  • 語言: 英文
  • 頁數: 336
  • 裝訂: Paperback
  • ISBN: 0321223918
  • ISBN-13: 9780321223913
  • 相關分類: 程式語言軟體測試
  • 立即出貨(限量) (庫存=2)

買這商品的人也買了...

相關主題

商品描述

Description:

50 exercises to help you find bugs faster -- with less aggravation!

Bug hunting is an art, and you need to be a master. Get Find the Bug, and you'll become one. Long-time Microsoft programmer Adam Barr presents 50 programs, each with exactly one bug. Your assignment: find it. As you do, Barr will teach you how to "think like your processor"... anticipating exactly how code will behave, even without running it. You'll learn better ways to read code, understand it -- and above all, improve it. Whether you're building new systems or maintaining someone else's, you'll find bugs earlier, faster, with less frustration... and write cleaner code to begin with.

  • Presents "bugged" programs in C, Java, Python, Perl, and x86 assembly language, with carefully explained solutions
  • Includes language overviews to help you debug all 50 examples, even if you don't know the language
  • Shows how to look past the "surface" of code to uncover its hidden internal logic
  • Offers practical guidance on analyzing programs, including specific inputs to test
  • Presents a wide range of realistic bugs, with no phony "gotchas"
  • Draws on the types of coding and debugging challenges Microsoft uses to interview new programmers
  • An indispensable resource for working programmers, maintainers, testers, quality specialists, and everyone involved in code reviews

 

Table of Contents:

Preface.

1. Bug Classification.

2. Tips on Walking Through Code.

    Split the Code into Sections with Goals.

      Identify the Sections in the Code.

      Identify Goals for Each Section.

      Comments.

    Identify the Meaning of Each Variable.

      Variable Names.

      Look at the Usage of Each Variable.

      Restricted Variables.

      Invariant Conditions.

      Track Changes to Restricted Variables.

    Look for Known Gotchas.

      Loop Counters.

      Same Expression on Left- and Right-Hand Side of Assignment.

      Check Paired Operations.

      Function Calls.

      Return Values.

      Code That Is Similar to an Existing Error.

    Choose Inputs for Walkthroughs.

      Code Coverage.

      Empty Input.

      Trivial Input.

      Already Solved Input.

      Error Input.

      Loops.

      Random Numbers.

    Walk Through Each Section.

      Track Variables.

      Code Layout.

      Loops.

    Summary.

3. C.

    Brief Summary of C.

      Data Types and Variables.

      Strings.

      Pointers.

      Structures.

      Conditionals.

      Loops.

      Functions.

    Selection Sort.

    Linked List Insertion.

    Linked List Removal.

    Memory Copy.

    Parse a String into Substrings.

    Memory Allocator.

    Memory Free.

    Recursive Word Reversal.

    Calculate All Possible Routes.

    Kanji Backspace.

4. Python.

    Brief Summary of Python.

      Data Types and Variables.

      Strings.

      Lists and Tuples.

      Dictionaries.

      Conditionals.

      Loops.

      Functions.

      Classes.

      Exceptions.

      Importing Other Code.

      Output.

    Is a Number Prime?

    Find a Substring.

    Alphabetize Words.

    Encode Strings Using a Character Map.

    Print the Month and Day.

    Go Fish, Part I: Draw a Card from a Deck.

    Go Fish, Part II: Ask if Another Hand Has a Card.

    Go Fish, Part III: Play a Full Game.

    Parse Numbers Written in English.

    Assign Gift Givers.

5. Java.

    Brief Summary of Java.

      Data Types and Variables.

      Strings (and Objects).

      Arrays.

      Conditionals.

      Loops.

      Classes.

      Exceptions.

      Importing Other Code.

      Command-Line Applications and Applets.

    Is a Year a Leap Year?

    Convert a Number to Text.

    Draw a Triangle on the Screen, Part I.

    Draw a Triangle on the Screen, Part II.

    Reverse a Linked List.

    Check if a List Has a Loop .

    Quicksort.

    Play the Game Pong, Part I.

    Play the Game Pong, Part II.

    Compute Bowling Scores.

6. Perl.

    Brief Summary of Perl.

      Data Types and Variables.

      Strings.

      Lists.

      Hashes.

      Conditionals.

      Loops.

      Subroutines.

      Scalar Versus List Context.

      File Handles.

      Regular Expressions.

      Output.

      Command-Line Parameters.

    Sort a File by Line Length.

    Print the Prime Factors of a Number.

    Tab Expansion.

    Simple Database.

    Find Repeating Part of a Fraction.

    Expand Indented File List to Full Paths.

    Sort All the Files in a Directory Tree.

    Calculate Student Test Averages.

    Merge Sort of Multiple Files.

    Play the Game Mastermind.

7. x86 Assembly Language.

    Brief Summary of x86 Assembly Language.

      Data Types and Variables.

      Arithmetic Operations.

      Flags, Conditionals, and Jumps.

      Loops.

      Procedures.

      Output.

    Make Change for a Dollar.

    Multiply Two Numbers Using Shifts.

    Join Strings with a Delimiter.

    Calculate Fibonacci Numbers.

    Check if Two Words Are Anagrams.

    Convert a 64-Bit Number to a Decimal String.

    Sum a Signed Array.

    Play the Simulation Game Life.

    Check if Parentheses Match in Source Code.

    Radix Exchange Sort.

Appendix A. Classification of Bugs.

    Syntax Versus Semantics.

    Classification Used in This Book.

    A—Algorithm.

      A.off-by-one.

      A.logic.

      A.validation.

      A.performance.

    D—Data.

      D.index.

      D.limit.

      D.number.

      D.memory.

    F—Forgotten.

      F.init.

      F.missing.

      F.location.

    B—Blunder.

      B.variable.

      B.expression.

      B.language.

    Summary.

Appendix B. Index of Bugs by Type.

Appendix C. References.

    Classification of Bugs.

    General Sources for Bug Types.

    C.

    Python.

    Java.

    Perl.

    x86 Assembly Language.

Index.

商品描述(中文翻譯)

描述:
50 個練習幫助你更快找到錯誤——減少挫折感!

錯誤偵測是一門藝術,你需要成為一位大師。獲得《Find the Bug》,你將成為其中之一。資深微軟程式設計師 Adam Barr 提出了 50 個程式,每個程式都有一個錯誤。你的任務是:找到它。當你這樣做時,Barr 將教你如何「像處理器一樣思考」……預測程式碼的行為,即使不執行它。你將學會更好的閱讀程式碼的方法,理解它——最重要的是,改善它。無論你是在構建新系統還是維護他人的系統,你都能更早、更快地找到錯誤,並減少挫折感……並且一開始就寫出更乾淨的程式碼。

- 提供 C、Java、Python、Perl 和 x86 組合語言的「有錯誤」程式,並附有詳細解釋的解決方案
- 包含語言概述,幫助你調試所有 50 個範例,即使你不熟悉該語言
- 展示如何超越程式碼的「表面」,揭示其隱藏的內部邏輯
- 提供分析程式的實用指導,包括測試的具體輸入
- 提供各種現實的錯誤,沒有虛假的「陷阱」
- 參考微軟用於面試新程式設計師的編碼和調試挑戰類型
- 對於在職程式設計師、維護人員、測試人員、質量專家以及所有參與程式碼審查的人來說,都是不可或缺的資源

目錄:
前言
1. 錯誤分類
2. 逐步走過程式碼的技巧
- 將程式碼分成有目標的區段
- 確定程式碼中的區段
- 確定每個區段的目標
- 註解
- 確定每個變數的意義
- 變數名稱
- 查看每個變數的使用情況
- 受限變數
- 不變條件
- 追蹤受限變數的變化
- 尋找已知的陷阱
- 迴圈計數器
- 指派左側和右側相同的表達式
- 檢查配對操作
- 函數調用
- 返回值
- 與現有錯誤相似的程式碼
- 選擇逐步走過的輸入
- 程式碼覆蓋率
- 空輸入
- 微不足道的輸入
- 已解決的輸入
- 錯誤輸入
- 迴圈
- 隨機數
- 逐步走過每個區段
- 追蹤變數
- 程式碼佈局
- 迴圈
- 總結
3. C
- C 的簡要總結
- 數據類型和變數
- 字串
- 指標
- 結構
- 條件語句
- 迴圈
- 函數
- 選擇排序
- 鏈結串列插入
- 鏈結串列刪除
- 記憶體複製
- 將字串解析為子字串
- 記憶體分配器
- 記憶體釋放
- 遞迴單詞反轉
- 計算所有可能的路徑
- 漢字退格
4. Python
- Python 的簡要總結
- 數據類型和變數
- 字串
- 列表和元組
- 字典
- 條件語句
- 迴圈
- 函數
- 類別
- 異常
- 匯入其他程式碼
- 輸出