Objects First with Java

Slides:



Advertisements
Similar presentations
Comp1004: Building Better Classes I Testing and Debugging Partly based on BlueJ Book – Chapter 6.
Advertisements

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.
Well-behaved objects Improving your coding skills 1.0.
Testing and Debugging. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling (Reminder) Zuul Assignment Two.
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
ECE122 L17: Method Development and Testing April 5, 2007 ECE 122 Engineering Problem Solving with Java Lecture 17 Method Development and Testing.
CS1101: Programming Methodology Aaron Tan.
Your Interactive Guide to the Digital World Discovering Computers 2012.
Unit Testing & Defensive Programming. F-22 Raptor Fighter.
Testing. Definition From the dictionary- the means by which the presence, quality, or genuineness of anything is determined; a means of trial. For software.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 12 Object-Oriented.
CMSC 345 Fall 2000 Unit Testing. The testing process.
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.
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.
Introduction CS 3358 Data Structures. What is Computer Science? Computer Science is the study of algorithms, including their  Formal and mathematical.
COMP 121 Week 1: Testing and Debugging. Testing Program testing can be used to show the presence of bugs, but never to show their absence! ~ Edsger Dijkstra.
Well-behaved objects Main concepts to be covered Testing Debugging Test automation Writing for maintainability Objects First with Java - A Practical.
The Software Development Process
Week 14 Introduction to Computer Science and Object-Oriented Programming COMP 111 George Basham.
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
Software Engineering 2004 Jyrki Nummenmaa 1 BACKGROUND There is no way to generally test programs exhaustively (that is, going through all execution.
© 2006 Pearson Addison-Wesley. All rights reserved 2-1 Chapter 2 Principles of Programming & Software Engineering.
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?
Objects First With Java A Practical Introduction Using BlueJ Well-behaved objects 2.1.
Software Quality Assurance and Testing Fazal Rehman Shamil.
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.
Well-behaved objects Main concepts to be covered Testing Debugging Test automation Writing for maintainability Objects First with Java - A Practical.
6.0 Objects First with Java A Practical Introduction using BlueJ David J. Barnes Michael Kölling.
Well-behaved objects Main concepts to be covered Testing Debugging Test automation Writing for maintainability © 2017 Pearson Education, Inc. Hoboken,
Principles of Programming & Software Engineering
Objektorienterad programmering d2, förel. 6
Objects First with Java
for-each PROS CONS easy to use access to ALL items one-by-one
SOFTWARE TESTING Date: 29-Dec-2016 By: Ram Karthick.
Unit Testing.
ME 142 Engineering Computation I
Objects First with Java A Practical Introduction using BlueJ
Objects First with Java Creating cooperating objects
Software Testing.
Objektorienterad programmering d2, förel. 6
Chapter 11 Object-Oriented Design
Chapter 8 – Software Testing
Testing and Debugging.
Principles of Programming and Software Engineering
Loop Structures.
Some Simple Definitions for Testing
Chapter 18 Software Testing Strategies
Microsoft Access Illustrated
COS 260 DAY 17 Tony Gauvin.
Objects First with Java A Practical Introduction using BlueJ
Unit# 8: Introduction to Computer Programming
Designing and Debugging Batch and Interactive COBOL Programs
Objects First with Java
COS 260 DAY 16 Tony Gauvin.
Testing and Test-Driven Development CSC 4700 Software Engineering
COS 260 DAY 2 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.
Test Case Test case Describes an input Description and an expected output Description. Test case ID Section 1: Before execution Section 2: After execution.
CS310 Software Engineering Dr.Doaa Sami Khafaga
CS 240 – Advanced Programming Concepts
Test Cases, Test Suites and Test Case management systems
Chapter 7 Software Testing.
Presentation transcript:

Objects First with Java Well-behaved objects 6.0 © David J. Barnes and Michael Kölling

Main concepts to be covered Objects First with Java Main concepts to be covered Testing Debugging Test automation Writing for maintainability © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java 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? The result is: 2 Double result: 22 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Possible results Which is printed? The result is: 5 The result is: 6 The result is: 11 The result is: 2 Double result: 22 The result is: 2 Double result: 12 Double result: 4 Double result: 22 Double result: 66 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java 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); The result is: 2 Double result: 22 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

We have to deal with errors Objects First with Java We have to deal with errors Early errors are usually syntax errors. The compiler will spot these. Later errors are usually logic errors. The compiler cannot help with these. Also known as bugs. Some logical errors have no immediately obvious manifestation. Commercial software is rarely error free. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Prevention vs Detection (Developer vs Maintainer) We can lessen the likelihood of errors: Use software engineering techniques, like encapsulation. Pay attention to cohesion and coupling. We can improve the chances of detection: Use software engineering practices, like modularization and good documentation. We can develop detection skills. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Objects First with Java Testing and debugging These are crucial skills. Testing searches for the presence of errors. Debugging searches for the source of errors. The manifestation of an error may well occur some ‘distance’ from its source. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Testing and debugging techniques Objects First with Java Testing and debugging techniques Unit testing (within BlueJ) Test automation Manual walkthroughs Print statements Debuggers © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Unit testing Each unit of an application may be tested. Method, class, module (package in Java). Can (should) be done during development. Finding and fixing early lowers development costs (e.g. programmer time). A test suite is built up. The term unit testing refers to a test of individual parts of an application, as opposed to application testing, which is testing of the complete application. Any single method, once compiled, can be tested. It is never too early to start testing. There are several benefits to early testing. The earlier an error is found and corrected, the cheaper the cost. Also, we can start to build up a series of test cases and results that can be used over and over again as the system grows. Each time a change is made to the system, these test cases allow us to check that we have not inadvertently introduced errors in the rest of the system as a result of the changes. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Testing fundamentals Understand what the unit should do – its contract. You will be looking for violations. Use positive tests and negative tests. Test boundaries. Zero, One, Full. Search an empty collection. Add to a full collection. Search for/remove the only element. When deciding about what to test, we generally distinguish positive and negative test cases. Positive testing is the testing of functionality that we expect to work. When testing positive test cases, we have to convince ourselves that the code did work as expected. In the online shop project, adding a comment by a new author with a valid rating is a positive test. Negative testing is the test of cases that we expect to fail. When testing negative cases, we expect the program to handle this error in some specified, controlled way. In the online shop project, using an invalid rating or attempting to store a second comment from the same author are both negative tests. It is a very common error for inexperienced testers to conduct only positive tests. Negative tests – testing that what should go wrong, indeed does go wrong, and does so in a well-defined manner – is crucial for a good test procedure. A key feature of good testing is to ensure that boundaries are checked, because these are often the places at which things go wrong. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Test automation Well-behaved objects Test automation © David J. Barnes and Michael Kölling

Main concepts to be covered Unit testing JUnit Regression testing Test cases Test classes Assertions Fixtures © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Unit testing within BlueJ Objects First with Java Unit testing within BlueJ Objects of individual classes can be created. Individual methods can be invoked. Inspectors provide an up-to-date view of an object’s state. Explore through the online-shop project. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Demo of online-shop

Objects First with Java Test automation Good testing is a creative process, but ... ... thorough testing is time consuming and repetitive. Regression testing involves re-running tests. Use of a test rig or test harness can relieve some of the burden. It is easy to introduce further errors when modifying software. Thus, fixing an error at one spot may introduce another error a the same time. As a consequence it is desirable to run regression tests whenever a change is made to software. Regression testing involves re-running test that have previously been passed, to ensure that the new version still passes them. One of the easiest ways to automate regression tests is to write a program that acts as a test rig or test harness. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Test harness Additional test classes are written to automate the testing. Objects of the harness classes replace human interactivity. Creativity and imagination required to create these test classes. Test classes must be kept up to date as functionality is added. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Objects First with Java Test automation Test frameworks exist to support automation. Explore fuller automation through the online-shop-junit project. Intervention only required if a failure is reported. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Demo of online-shop-junit © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

JUnit JUnit is a Java test framework Test cases are methods that contain tests Test classes contain test methods Assertions are used to assert expected method results Fixtures are used to support multiple tests © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Well-behaved objects Debugging

Prevention vs Detection (reprise) We can lessen the likelihood of errors: Use software engineering techniques, like encapsulation. Pay attention to cohesion and coupling. We can improve the chances of detection: Use software engineering practices, like modularization and good documentation. We can develop detection skills. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Debugging techniques Manual walkthroughs Print statements Debuggers © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Modularization and interfaces Objects First with Java Modularization and interfaces Applications often consist of different modules: E.g. so that different teams can work on them. The interface between modules must be clearly specified. Supports independent concurrent development. Increases the likelihood of successful integration. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Modularization in a calculator Objects First with Java Modularization 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. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Method headers as an interface Objects First with Java Method headers as an interface // Return the value to be displayed. public int getDisplayValue();   // Call when a digit button is pressed. public void numberPressed(int number); // Plus operator is pressed. public void plus(); // Minus operator is pressed. public void minus(); // Call to complete a calculation. public void equals(); // Call to reset the calculator. public void clear(); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java 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. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Manual walkthroughs Relatively underused. A low-tech approach. More powerful than appreciated. Get away from the computer! ‘Run’ a program by hand. High-level (Step) or low-level (Step into) views. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Tabulating object state Objects First with Java Tabulating object state An object’s behavior is largely determined by its state … … so incorrect behavior is often the result of incorrect state. Tabulate the values of key fields. Document state changes after each method call. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Verbal walkthroughs Explain to someone else what the code is doing: They might spot the error. You might spot the error, through the process of explaining. Group-based processes exist for conducting formal walkthroughs or inspections. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java 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. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Choosing a test strategy Objects First with Java Choosing a test strategy Be aware of the available strategies. Choose strategies appropriate to the point of development. Automate whenever possible. Reduces tedium. Reduces human error. Makes (re)testing more likely. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Objects First with Java Debuggers Debuggers are both language- and environment-specific. BlueJ has an integrated debugger. Support breakpoints. Step and Step-into controlled execution. Call sequence (stack). Object state. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling

Debugging streams (advanced) A pipeline of multiple operations might be hard to debug. The peek operation can provide insights. Consumer that passes on its input unchanged; e.g.: peek(s -> System.out.println(s)) © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Objects First with Java Review Errors are a fact of life in programs. Good software development techniques can reduce their occurrence. Testing and debugging skills are essential. Make testing a habit. Automate testing where possible. Continually repeat tests. Practice a range of debugging skills. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. © David J. Barnes and Michael Kölling