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個練習幫助您更快地找到錯誤 - 並減少煩惱!
《找出錯誤》是一門藝術,您需要成為一位大師。長期在微軟工作的程式設計師Adam Barr提供了50個程式,每個程式都有一個錯誤。您的任務是找到它。在此過程中,Barr將教您如何“像處理器一樣思考”...即使不運行代碼,也能預測代碼的行為。您將學習更好的閱讀代碼的方法,理解代碼 - 最重要的是,改進代碼。無論您是在建立新系統還是維護他人的系統,您都能更早地、更快地找到錯誤,減少挫折感...並且一開始就編寫更乾淨的代碼。


  • 以C、Java、Python、Perl和x86組合語言呈現“有錯誤”的程式,並提供詳細解釋的解決方案

  • 包括語言概述,以幫助您調試所有50個示例,即使您不熟悉該語言

  • 展示如何超越代碼的“表面”,揭示其隱藏的內部邏輯

  • 提供有關分析程式的實用指南,包括特定的輸入測試

  • 提供各種現實錯誤,沒有虛假的“陷阱”

  • 借鑒微軟用於面試新程式設計師的編碼和調試挑戰的類型

  • 對於工作中的程式設計師、維護人員、測試人員、質量專家以及參與代碼審查的所有人來說,這是一個不可或缺的資源

目錄:


  • 前言

  • 1. 錯誤分類

  • 2. 代碼遍歷技巧

  • 將代碼分為具有目標的部分

  • 識別代碼中的部分

  • 為每個部分確定目標

  • 註釋

  • 識別每個變量的含義

  • 變量名稱

  • 查看每個變量的使用情況

  • 受限變量