Testing and Debugging. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling (Reminder) Zuul Assignment Two.

Slides:



Advertisements
Similar presentations
FIT FIT1002 Computer Programming Unit 19 Testing and Debugging.
Advertisements

Comp1004: Building Better Classes I Testing and Debugging Partly based on BlueJ Book – Chapter 6.
Grouping Objects Arrays and for loops. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Fixed-Size Collections.
Well-behaved objects 4.0 Testing. 2 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Main concepts to.
Well-behaved objects Debugging. 2 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Prevention vs Detection.
Copyright © 2012 Pearson Education, Inc. Chapter 1: Introduction to Computers and Programming.
Understanding class definitions Looking inside classes 3.0.
Well-behaved objects Improving your coding skills 1.0.
Make Sure You Know All This!. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 2 Objects and Classes.
Object interaction Creating cooperating objects 5.0.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 1 Introduction.
Interfaces besides classes, Java recognizes another type, an interface interface is used to completely shield off all implementation from the programmer.
5.0 Objects First with Java A Practical Introduction using BlueJ David J. Barnes Michael Kölling.
CS1101: Programming Methodology Aaron Tan.
Microsoft Visual Basic 2005 CHAPTER 1 Introduction to Visual Basic 2005 Programming.
Copyright © 2012 Pearson Education, Inc. Chapter 1: Introduction to Computers and Programming.
Alternate Version of STARTING OUT WITH C++ 4 th Edition Chapter 1 Introduction to Computers and Programming.
Chapter Introduction to Computers and Programming 1.
CSC 125 Introduction to C++ Programming Chapter 1 Introduction to Computers and Programming.
P51UST: Unix and Software Tools Unix and Software Tools (P51UST) Compilers, Interpreters and Debuggers Ruibin Bai (Room AB326) Division of Computer Science.
Chapter 1: Introduction to Visual Basic.NET: Background and Perspective Visual Basic.NET Programming: From Problem Analysis to Program Design.
Testing. Definition From the dictionary- the means by which the presence, quality, or genuineness of anything is determined; a means of trial. For software.
Introduction to Python
Copyright © 2012 Pearson Education, Inc. Chapter 1: Introduction to Computers and Programming 1.
Copyright © 2012 Pearson Education, Inc. Chapter 1: Introduction to Computers and Programming.
Chapter 1: Introduction to Computers and Programming.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 1: Introduction to Computers and Programming.
1 Debugging and Testing Overview Defensive Programming The goal is to prevent failures Debugging The goal is to find cause of failures and fix it Testing.
5.0 Objects First with Java A Practical Introduction using BlueJ Introduction to Computer Science I Instructor: Allyson Anderson.
Programming Lifecycle
Designing and Debugging Batch and Interactive COBOL Programs Chapter 5.
1 Problem Solving with C++ The Object of Programming Walter Savitch Chapter 1 Introduction to Computers and C++ Programming Slides by David B. Teague,
Testing and Debugging Version 1.0. All kinds of things can go wrong when you are developing a program. The compiler discovers syntax errors in your code.
Testing. 2 Overview Testing and debugging are important activities in software development. Techniques and tools are introduced. Material borrowed here.
Well-behaved objects Main concepts to be covered Testing Debugging Test automation Writing for maintainability Objects First with Java - A Practical.
Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 5.0.
1 Chapter 3 Syntax, Errors, and Debugging Fundamentals of Java: AP Computer Science Essentials, 4th Edition Lambert / Osborne.
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Edition Chapter 1 Introduction to Computers and Programming.
Final Review. From ArrayLists to Arrays The ArrayList : used to organize a list of objects –It is a class in the Java API –the ArrayList class uses an.
OOPDA Intro 5.0. Topics Website and Syllabus Rowan VPN and H:drive BlueJ application and projects Programming Style (Appendix J) Javadoc (Appendix I)
Testing. Have you contacted your project members lately?
1 COS 260 DAY 14 Tony Gauvin. 2 Agenda Questions? 6 th Mini quiz graded  Oct 29 –Chapter 6 Assignment 4 will be posted later Today –First two problems.
CSI 1340 Introduction to Computer Science II Chapter 1 Software Engineering Principles.
Objects First With Java A Practical Introduction Using BlueJ Well-behaved objects 2.1.
1 COS 260 DAY 15 Tony Gauvin. 2 Agenda Questions? 6 th Mini quiz Today –Chapter 6 Assignment 4 posted –Due Nov 9 Capstone progress reports are due –Brief.
1 The Software Development Process ► Systems analysis ► Systems design ► Implementation ► Testing ► Documentation ► Evaluation ► Maintenance.
1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If.
Well-behaved objects Main concepts to be covered Testing Debugging Test automation Writing for maintainability Objects First with Java - A Practical.
Alexandria University Faculty of Science Computer Science Department Introduction to Programming C++
Chapter 1: Introduction to Computers and Programming.
Well-behaved objects Main concepts to be covered Testing Debugging Test automation Writing for maintainability © 2017 Pearson Education, Inc. Hoboken,
Review. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Objects and Classes Objects and Classes –State.
Objektorienterad programmering d2, förel. 6
Objects First with Java
Objektorienterad programmering d2, förel. 6
CS1101X Programming Methodology
Testing and Debugging.
Loop Structures.
COS 260 DAY 17 Tony Gauvin.
TRANSLATORS AND IDEs Key Revision Points.
Objects First with Java
Designing and Debugging Batch and Interactive COBOL Programs
COS 260 DAY 16 Tony Gauvin.
Chapter 1 Introduction(1.1)
COS 260 DAY 15 Tony Gauvin.
Exercise 1 Declare a constant of type int called SIZE and initialize it to value 10 Declare two int arrays of size “SIZE” Assume that those int arrays.
COS 260 DAY 16 Tony Gauvin.
Objects First with Java A Practical Introduction using BlueJ
Objects First with Java A Practical Introduction using BlueJ
Corresponds with Chapter 5
Presentation transcript:

Testing and Debugging

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling (Reminder) Zuul Assignment Two deliverables: Two deliverables: Code (to your submission folder by 23:59)Code (to your submission folder by 23:59) Report (to your submission folder or hard copy to the CAS office by 4pm)Report (to your submission folder or hard copy to the CAS office by 4pm) Deadline is Tuesday, December 8, 2009Deadline is Tuesday, December 8, 2009

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Code snippet of the day public void test () { int sum = 1; for (int i = 0; i <= 4; i++); { sum = sum + 1; } System.out.println ("The result is: " + sum); System.out.println ("Double result: " + sum + sum); } What is the output?

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling public void test () { int sum = 1; for (int i = 0; i <= 4; i++); { sum = sum + 1; } System.out.println ("The result is: " + sum); System.out.println ("Double result: " + sum + sum); } Code snippet of the day What is the output? The result is: This semi-colon marks the end of an empty statement, which is the loop body. This code block follows the loop. With the semi-colon above, it is not the loop body.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling The result is: The result is: Double result is: Code snippet of the day public void test () { int sum = 1; for (int i = 0; i <= 4; i++); { sum = sum + 1; } System.out.println ("The result is: " + sum); System.out.println ("Double result: " + sum + sum); } What is the output? This arithmetic is never done – the number is converted to a string and appended to the opening string (twice).

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling We have to deal with errors Early errors are usually syntax errors: Early errors are usually syntax errors: –the compiler will spot these Later errors are usually logic errors: Later errors are usually logic errors: –the compiler cannot help with these –also known as bugs Some logical errors have intermittent manifestation with no obvious trigger: Some logical errors have intermittent manifestation with no obvious trigger: –also known as bugs Commercial software is rarely error free: Commercial software is rarely error free: –often, it is much worse than this … ******

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Prevention vs Detection (Developer vs Maintainer) We can lessen the likelihood of errors: We can lessen the likelihood of errors: –encapsulate data in fields of an object –design each class to be responsible for one kind of thing We can improve the chances of detection: We can improve the chances of detection: –write documentation as we go –think about how to test as we go –test as we go (e.g. interact with classes/objects/methods using the facilities of BlueJ, build a suite of testing classes – see Unit Testing and Regression Testing in Chapter 6) We can develop detection skills. We can develop detection skills.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Testing and Debugging These are crucial skills. These are crucial skills. Testing searches for the presence of errors. Testing searches for the presence of errors. Debugging searches for the source of errors. Debugging searches for the source of errors. –the manifestation of an error may well occur some ‘distance’ from its source.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Unit Testing Each unit of an application may be tested: Each unit of an application may be tested: –each method –each class –each package Can (should) be done during development: Can (should) be done during development: –finding and fixing early lowers development costs (e.g. programmer time). –finding problems after deployment is very expensive. This is what usually happens. –if the system design lacks cohesion and has high coupling between units, the bugs may never be found and, if found, be unfixable.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Testing Fundamentals Understand what the unit should do (its contract): Understand what the unit should do (its contract): –look for violations (negative tests) –look for fulfillment (positive tests) Test boundaries: Test boundaries: –for example, search an empty collection –for example, add to a full collection

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Unit Testing within BlueJ Objects of individual classes can be created. Objects of individual classes can be created. Individual methods can be invoked. Individual methods can be invoked. Inspectors provide an up-to-date view of an object’s state. Inspectors provide an up-to-date view of an object’s state. Explore through the diary-prototype project (Chapter 6). This contains bugs!!! Explore through the diary-prototype project (Chapter 6). This contains bugs!!!

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Test Automation Good testing is a creative process. Good testing is a creative process. Thorough testing is time consuming and repetitive. Thorough testing is time consuming and repetitive. Regression testing involves re-running tests whenever anything is changed. Regression testing involves re-running tests whenever anything is changed. Use of a test rig can relieve some of the burden: Use of a test rig can relieve some of the burden: –write classes to perform the testing –creativity focused in creating these – BlueJ offers help for this: explore the project (Chapter 6). Human checking of the results still needed here.explore the diary-testing project (Chapter 6). Human checking of the results still needed here. explore the projects (Chapter 6). Machine checking of results – human intervention only if one or more checks fail.explore the diary-test-junit projects (Chapter 6). Machine checking of results – human intervention only if one or more checks fail.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Debugging Techniques OK, we found errors … how do we fix them? OK, we found errors … how do we fix them? –manual walkthoughs: read your code!read your code! why should it work? [Not: why doesn’t it work?!!]why should it work? [Not: why doesn’t it work?!!] it helps to explain this to someone else …it helps to explain this to someone else … –if light has not dawned: add print statements to your code to show the state of variables (at key points)…add print statements to your code to show the state of variables (at key points)… do they show what you expect?do they show what you expect? – if light has not still not dawned : run your code under an interactive debugger …run your code under an interactive debugger … BlueJ has support for this (see chapter 3.13) BlueJ has support for this (see chapter 3.13)

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling It always takes longer than you expect, even when you take Hofstadter's Law into account. Hofstadter's Law 90% Rule of Project Schedules The first ninety percent of the task takes ninety percent of the time … and the last ten percent takes the other ninety percent.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Modularisation in a Calculator Each module does not need to know implementation details of the other. User controls could be a GUI or a hardware device. Logic could be hardware or software.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Method Signatures as an ‘Interface’ // Return the value to be displayed. public int getDisplayValue(); // Call when a digit button is pressed. public void numberPressed(int number); // Call when a plus operator is pressed. public void plus(); // Call when a minus operator is pressed. public void minus(); // Call to complete a calculation. public void equals(); // Call to reset the calculator. public void clear();

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Debugging It is important to develop code- reading skills. Debugging will often be performed on others’ code. Techniques and tools exist to support the debugging process. Explore through the calculator- engine project.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Manual Walkthroughs Relatively underused. Relatively underused. A low-tech approach.A low-tech approach. More powerful than appreciated.More powerful than appreciated. Get away from the computer! Get away from the computer! ‘Run’ a program by hand. ‘Run’ a program by hand. High-level (Step) or low-level (Step into) views. High-level (Step) or low-level (Step into) views.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Tabulating Object State An object’s behaviour usually depends on its state. Incorrect behaviour is often the result of incorrect state. Tabulate the values of all fields. Record state changes after each method call.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Verbal Walkthroughs Explain to someone else what the code is doing: explain why should it work!explain why should it work! [don’t ask: why doesn’t it work?!!][don’t ask: why doesn’t it work?!!] the process of explaining helps you spot errors for yourself; often, it’s easier for someone else! Group-based processes exist for conducting formal walkthroughs or inspections.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Print Statements The most popular technique. No special tools required. All programming languages support them. Only effective if the right methods are documented. Output may be voluminous! Turning off and on requires forethought.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Interactive Debuggers Debuggers are language-specific and environment-specific. Debuggers are language-specific and environment-specific. BlueJ has an integrated debugger.BlueJ has an integrated debugger. Supports breakpoints. Supports breakpoints. Provides step and step-into controlled execution. Provides step and step-into controlled execution. Shows the call sequence (stack). Shows the call sequence (stack). Shows object state. Shows object state. Does not provide a permanent record. Does not provide a permanent record.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Review Errors are a fact of life in programs. Good software engineering techniques can reduce their occurrence. Testing and debugging skills are essential. Make testing a habit. Automate testing where possible. Practise a range of debugging skills.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Review Unit testing (with BlueJ ) –Chapter 6.3 Test automation (with BlueJ ) –Chapter 6.4 Manual walkthroughs (read the code!!!) –Chapter 6.8 Print statements (see what’s happening) –Chapter 6.9 Debuggers (with BlueJ ) –Chapter , 6.11