چه کسانی این کتاب را می‌خوانند

دانشجوعلاقه‌مند یادگیری
کتابخوان حرفه‌ایلذت مطالعه
نویسندهالهام‌گیری

Why Programs Fail : A Guide to Systematic Debugging

Andreas Zeller

قیمت نهایی

۴۹٬۰۰۰ تومان

نسخه اصلی و اورجینال

بلافاصله پس از خرید، فایل کتاب روی دستگاه شما آمادهٔ دانلود است.

تحویل فوری
پرداخت امن
ضمانت فایل
پشتیبانی

مشخصات کتاب

نویسنده
Andreas Zeller
سال انتشار
۲۰۰۹
فرمت
PDF
زبان
انگلیسی
حجم فایل
۱۰٫۴ مگابایت
شابک
9780080923000، 9780123745156، 9783898646208، 9785699441600، 0080923003، 0123745152، 3898646203، 5699441603

دربارهٔ کتاب

Why Programs Fail: A Guide to Systematic Debugging is proof that debugging has graduated from a black art to a systematic discipline. It demystifies one of the toughest aspects of software programming, showing clearly how to discover what caused software failures, and fix them with minimal muss and fuss. The fully updated second edition includes 100+ pages of new material, including new chapters on Verifying Code, Predicting Erors, and Preventing Errors. Cutting-edge tools such as FindBUGS and AGITAR are explained, techniques from integrated environments like Jazz.net are highlighted, and all-new demos with ESC/Java and Spec#, Eclipse and Mozilla are included. This complete and pragmatic overview of debugging is authored by Andreas Zeller, the talented researcher who developed the GNU Data Display Debugger(DDD), a tool that over 250,000 professionals use to visualize the data structures of programs while they are running. Unlike other books on debugging, Zeller's text is product agnostic, appropriate for all programming languages and skill levels. The book explains best practices ranging from systematically tracking error reports, to observing symptoms, reproducing errors, and correcting defects. It covers a wide range of tools and techniques from hands-on observation to fully automated diagnoses, and also explores the author's innovative techniques for isolating minimal input to reproduce an error and for tracking cause and effect through a program. It even includes instructions on how to create automated debugging tools. The text includes exercises and extensive references for further study, and a companion website with source code for all examples and additional debugging resources is available. The new edition of this award-winning productivity-booster is for any developer who has ever been frustrated by elusive bugs Brand new chapters demonstrate cutting-edge debugging techniques and tools, enabling readers to put the latest time-saving developments to work for them Learn by doing. New exercises and detailed examples focus on emerging tools, languages and environments, including AGITAR, FindBUGS, Python and Eclipse Foreword Foreword Preface Preface Acknowledgments 1 How Failures Come to Be 1 How Failures Come to Be My Program Does Not Work! From Defects to Failures Lost in Time and Space From Failures to Fixes Track the Problem Reproduce the Failure Automate and Simplify the Test Case Find Possible Infection Origins Focus on the Most Likely Origins Isolate the Origin of the Infection Correct the Defect Automated Debugging Techniques Bugs, Faults, or Defects? Concepts Tools Further Reading Exercises 2 Tracking Problems 2 Tracking Problems Oh! All These Problems Reporting Problems Problem Facts Product Facts Querying Facts Automatically Managing Problems Classifying Problems Severity Priority Identifier Comments Notification Processing Problems Managing Problem Tracking Requirements as Problems Managing Duplicates Relating Problems and Fixes Relating Problems and Tests Concepts Tools Further Reading Exercises 3 Making Programs Fail 3 Making Programs Fail Testing for Debugging Controlling the Program Testing at the Presentation Layer Low-Level Interaction System-Level Interaction Higher-Level Interaction Assessing Test Results Testing at the Functionality Layer Testing at the Unit Layer Isolating Units Designing for Debugging Preventing Unknown Problems Concepts Tools Further Reading Exercises 4 Reproducing Problems 4 Reproducing Problems The First Task in Debugging Reproducing the Problem Environment Reproducing Program Execution Reproducing Data Reproducing User Interaction Reproducing Communications Reproducing Time Reproducing Randomness Reproducing Operating Environments Reproducing Schedules Physical Influences Effects of Debugging Tools Reproducing System Interaction Focusing on Units Setting Up a Control Layer A Control Example Mock Objects Controlling More Unit Interaction Reproducing Crashes Concepts Tools Further Reading Exercises 5 Simplifying Problems 5 Simplifying Problems Simplifying the Problem The Gecko BugAThon Manual Simplification Automatic Simplification A Simplification Algorithm Simplifying User Interaction Random Input Simplified Simplifying Faster Caching Stop Early Syntactic Simplification Isolate Differences, Not Circumstances Concepts Tools Further Reading Exercises 6 Scientific Debugging 6 Scientific Debugging How to Become a Debugging Guru The Scientific Method Applying the Scientific Method Debugging sample---Preparation Debugging sample---Hypothesis 1 Debugging sample---Hypothesis 2 Debugging sample---Hypothesis 3 Debugging sample---Hypothesis 4 Explicit Debugging Keeping a Logbook Debugging Quick-and-Dirty Algorithmic Debugging Deriving a Hypothesis The Description of the Problem The Program Code The Failing Run Alternate Runs Earlier Hypotheses Reasoning About Programs Concepts Further Reading Exercises 7 Deducing Errors 7 Deducing Errors Isolating Value Origins Understanding Control Flow Tracking Dependences Effects of Statements Affected Statements Statement Dependences Following Dependences Leveraging Dependences Slicing Programs Forward Slices Backward Slices Slice Operations Leveraging Slices Executable Slices Deducing Code Smells Reading Uninitialized Variables Unused Values Unreachable Code Limits of Static Analysis Concepts Tools Further Reading Exercises 8 Observing Facts 8 Observing Facts Observing State Logging Execution Logging Functions Logging Frameworks Logging with Aspects Logging at the Binary Level Using Debuggers A Debugging Session Controlling Execution Postmortem Debugging Logging Data Invoking Functions Fix and Continue Embedded Debuggers Debugger Caveats Querying Events Watchpoints Uniform Event Queries Hooking into the Interpreter Visualizing State Concepts Tools Further Reading Exercises 9 Tracking Origins 9 Tracking Origins Reasoning Backward Exploring Execution History Dynamic Slicing Leveraging Origins Tracking Down Infections Concepts Tools Further Reading Exercises 10 Asserting Expectations 10 Asserting Expectations Automating Observation Basic Assertions Asserting Invariants Asserting Correctness Assertions as Specifications From Assertions to Verification Reference Runs System Assertions Validating the Heap with MALLOC_CHECK_ Avoiding Buffer Overflows with ELECTRICFENCE Detecting Memory Errors with VALGRIND Language Extensions Checking Production Code Concepts Tools Further Reading Exercises 11 Detecting Anomalies 11 Detecting Anomalies Capturing Normal Behavior Comparing Coverage Statistical Debugging Collecting Data in the Field Dynamic Invariants Invariants on-the-Fly From Anomalies to Defects Concepts Tools Further Reading Exercises 12 Causes and Effects 12 Causes and Effects Causes and Alternate Worlds Verifying Causes Causality in Practice Finding Actual Causes Narrowing Down Causes A Narrowing Example The Common Context Causes in Debugging Concepts Further Reading Exercises 13 Isolating Failure Causes 13 Isolating Failure Causes Isolating Causes Automatically Isolating versus Simplifying An Isolation Algorithm Implementing Isolation Isolating Failure-inducing Input Isolating Failure-inducing Schedules Isolating Failure-inducing Changes Problems and Limitations Concepts Tools Further Reading Exercises 14 Isolating Cause--Effect Chains 14 Isolating Cause--Effect Chains Useless Causes Capturing Program States Comparing Program States Isolating Relevant Program States Isolating Cause--Effect Chains Isolating Failure-Inducing Code Issues and Risks Concepts Tools Further Reading Exercises 15 Fixing the Defect 16 Learning from Mistakes 16 Learning from Mistakes Where the Defects are Mining the Past Where Defects come from Errors during Specification What You Can Do What You Should Focus On Errors during Programming What You Can Do What You Should Focus On Errors during Quality Assurance What You Can Do What You Should Focus On Predicting Problems Predicting Errors from Imports Predicting Errors from Change Frequency A Cache for Bugs Recommendation Systems A Word of Warning Fixing the Process Concepts Further Reading Exercises A Formal Definitions A Formal Definitions Delta Debugging Configurations Passing and Failing Run Tests Minimality Simplifying Differences Isolating Memory Graphs Formal Structure Unfolding Data Structures Matching Vertices and Edges Computing the Common Subgraph Computing Graph Differences Applying Partial State Changes Capturing C State Cause--Effect Chains Glossary Glossary Bibliography Bibliography This book is proof that debugging has graduated from a black art to a systematic discipline. It demystifies one of the toughest aspects of software programming, showing clearly how to discover what caused software failures, and fix them with minimal muss and fuss.

The fully updated second edition includes 100+ pages of new material, including new chapters on Verifying Code, Predicting Erors, and Preventing Errors. Cutting-edge tools such as FindBUGS and AGITAR are explained, techniques from integrated environments like Jazz.net are highlighted, and all-new demos with ESC/Java and Spec#, Eclipse and Mozilla are included.

This complete and pragmatic overview of debugging is authored by Andreas Zeller, the talented researcher who developed the GNU Data Display Debugger(DDD), a tool that over 250,000 professionals use to visualize the data structures of programs while they are running. Unlike other books on debugging, Zeller's text is product agnostic, appropriate for all programming languages and skill levels.

The book explains best practices ranging from systematically tracking error reports, to observing symptoms, reproducing errors, and correcting defects. It covers a wide range of tools and techniques from hands-on observation to fully automated diagnoses, and also explores the author's innovative techniques for isolating minimal input to reproduce an error and for tracking cause and effect through a program. It even includes instructions on how to create automated debugging tools.

The text includes exercises and extensive references for further study, and a companion website with source code for all examples and additional debugging resources is available.

*The new edition of this award-winning productivity-booster is for any developer who has ever been frustrated by elusive bugs

*Brand new chapters demonstrate cutting-edge debugging techniques and tools, enabling readers to put the latest time-saving developments to work for them

*Learn by doing. New exercises and detailed examples focus on emerging tools, languages and environments, including AGITAR, FindBUGS, Python and Eclipse. This fully updated second edition includes more than hundred pages of new material, including new chapters on Verifying Code, Predicting Errors, and Preventing Errors. Cutting-edge tools such as FindBUGS and AGITAR are explained, techniques from integrated environments like Jazz.net are highlighted, and all-new demos with ESC/Java and Spec#, Eclipse and Mozilla are included. This complete and pragmatic overview of debugging is authored by Andreas Zeller, the talented researcher who developed the GNU Data Display Debugger (DDD), a tool that over 250,000 professionals use to visualize the data structures of programs while they are running. Unlike other books on debugging, Zeller's text is product agnostic, appropriate for all programming languages and skill levels. "Why Programs Fail" explains best practices ranging from systematically tracking error reports, to observing symptoms, reproducing errors, and correcting defects. It covers a wide range of tools and techniques from hands-on observation to fully automated diagnoses, and also explores the author's innovative techniques for isolating minimal input to reproduce an error and for tracking cause and effect through a program. It even includes instructions on how to create automated debugging tools. The new edition of this award-winning productivity-booster is for any developer who has ever been frustrated by elusive bugs. It features brand new chapters that demonstrate cutting-edge debugging techniques and tools, enabling readers to put the latest time-saving developments to work for them. You can learn by doing. New exercises and detailed examples focus on emerging tools, languages and environments, including AGITAR, FindBUGS, Python and Eclipse. The text includes exercises and extensive references for further study, and a companion website with source code for all examples and additional debugging resources This book is proof that debugging has graduated from a black art to a systematic discipline. It demystifies one of the toughest aspects of software programming, showing clearly how to discover what caused software failures, and fix them with minimal muss and fuss. The fully updated second edition includes 100+ pages of new material, including new chapters on Verifying Code, Predicting Errors, and Preventing Errors. Cutting-edge tools such as FindBUGS and AGITAR are explained, techniques from integrated environments like Jazz.net are highlighted, and all-new demos with ESC/Java and Spec#, Eclipse and Mozilla are included. Unlike other books on debugging, Zeller's text is product agnostic, appropriate for all programming languages and skill levels. The book explains best practices ranging from systematically tracking error reports, to observing symptoms, reproducing errors, and correcting defects. It covers a wide range of tools and techniques from hands-on observation to fully automated diagnoses, and also explores the author's innovative techniques for isolating minimal input to reproduce an error and for tracking cause and effect through a program. It even includes instructions on how to create automated debugging tools. The text includes exercises and extensive references for further study, and a companion website with source code for all examples and additional debugging resources is available This fully updated second edition includes 100+ pages of new material, including new chapters on Verifying Code, Predicting Errors, and Preventing Errors. Cutting-edge tools such as FindBUGS and AGITAR are explained, techniques from integrated environments like Jazz.net are highlighted, and all-new demos with ESC/Java and Spec#, Eclipse and Mozilla are included. This complete and pragmatic overview of debugging is authored by Andreas Zeller, the talented researcher who developed the GNU Data Display Debugger(DDD), a tool that over 250,000 professionals use to visualize the data structures of p

قیمت نهایی

۴۹٬۰۰۰ تومان