Presentation is loading. Please wait.

Presentation is loading. Please wait.

COS 260 DAY 15 Tony Gauvin.

Similar presentations


Presentation on theme: "COS 260 DAY 15 Tony Gauvin."— Presentation transcript:

1 COS 260 DAY 15 Tony Gauvin

2 Agenda Assignment 5 will be posted soon Questions?
Assignment 3 Over Due Assignment 4 posted Due 0ct 31 Assignment 5 will be posted soon Mini-quiz Six today Chapter 7 30 min Password “JohnvonNeumann” Mini-Quiz 7 Friday Oct 27 Chap 8 Finish Designing classes

3 Capstone Project Capstone Project Description Fall 2017.pdf
October Proposal Due ed to Tony in Blackboard October 27 Progress Report ed to Tony in Blackboard November 16 Progress Report ed to Tony in Blackboard November Progress Report ed to Tony in Blackboard December All Deliverables & Presentation Due Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

4 Review Explain & Discuss Cohesion Coupling Code Duplications
Responsibility-driven design Localizing Change Implicit Coupling Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

5 Thinking ahead When designing a class, we try to think about changes likely to be made in the future. We aim to make those changes easy. Requires a little more effort now to greatly reduce effort later. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

6 Refactoring When classes are maintained code is usually added.
Classes and methods tend to become longer. Every now and then, classes and methods should be refactored to maintain cohesion and low coupling. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

7 An exercise in the need for refactoring
Start with Zuul-better See on page Add item to rooms One item for room One item for player Add more items to room and player Player limited by weight Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

8 Refactoring and testing
When refactoring code, separate the refactoring from making other changes. First do the refactoring only, without changing the functionality. Test before and after refactoring to ensure that nothing was broken. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

9 Design questions Common questions:
How long should a class be? How long should a method be? These can now be answered in terms of cohesion and coupling. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

10 Design guidelines A method is too long if it does more then one logical task. A class is too complex if it represents more than one logical entity. Note: these are guidelines - they still leave much open to the designer. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

11 Enumerated Types A language feature.
Uses enum instead of class to introduce a type name. Their simplest use is to define a set of significant names. Alternative to static int constants. When the constants’ values would be arbitrary. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

12 A basic enumerated type
public enum CommandWord { // A value for each command word, // plus one for unrecognised commands. GO, QUIT, HELP, UNKNOWN; } Each name represents an object of the enum type, e.g., CommandWord.HELP. Enum objects are not created directly. Enum definitions can also have fields, constructors and methods. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

13 The Switch Statement switch (something) { case valueofsomething: java statement; break; break: default: } Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

14 Review Programs are continuously changed.
It is important to make this change possible. Quality of code requires much more than just performing correct at one time. Code must be understandable and maintainable. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

15 Review Good quality code avoids duplication, displays high cohesion, low coupling. Coding style (commenting, naming, layout, etc.) is also important. There is a big difference in the amount of work required to change poorly structured and well structured code. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

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

17 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

18 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

19 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

20 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

21 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

22 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.

23 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

24 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

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

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

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

28 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.

29 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

30 Demo of online-shop

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

32 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.

33 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

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

35 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.

36 Well-behaved objects Debugging

37 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.

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

39 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

40 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

41 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

42 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

43 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

44 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

45 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

46 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

47 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

48 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

49 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.

50 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


Download ppt "COS 260 DAY 15 Tony Gauvin."

Similar presentations


Ads by Google