Presentation is loading. Please wait.

Presentation is loading. Please wait.

Advanced Programming in Java

Similar presentations


Presentation on theme: "Advanced Programming in Java"— Presentation transcript:

1 Advanced Programming in Java
Salman Marvasti Sharif University of Technology Fall 2015

2 Review Java Programming Language
Principles of Object Oriented Programming Characteristics of objects Encapsulation Objects in memory References Heap Stack Parameter Passing Sharif University of Technology

3 Review (2) Initialization and Cleanup Access specifiers Constructor
finalize() Order of initialization Initialization blocks Access specifiers Public Private Package access Sharif University of Technology

4 Review (3) Package Static The this reference Method overloading
toString() equals() Polymorphism Overriding , Upcasting Interface Sharif University of Technology

5 Agenda Software Quality Characteristic of a good software Test
Unit Testing Refactoring Sharif University of Technology

6 Quality of Product The producer should ensure about the quality of the products Quality Control Any business, any product Sharif University of Technology

7 A Cook Sharif University of Technology

8 In surgery Sharif University of Technology

9 A Car Maker Sharif University of Technology

10 Quality Control Quality should be tested
A product is not finalized, before the test Different kinds of test, check different kinds of quality Sharif University of Technology

11 Software Quality We are programmers Programmers produce software
What are characteristics of a good software? Many parameters. E.g. Conformance to requirements Performance Time Memory Maintainability Changeability Different kinds of test, check different kinds of quality Sharif University of Technology

12 Test in Other Industries
Test side effects A damage to the product Test of a building Test of a car Test of a part of a product Sharif University of Technology

13 Test Side Effects Sharif University of Technology

14 What to do with Test Side Effects?
Testing a sample of the product Simulation Mathematical analysis In software testing Along with all of these techniques And we can also test the software itself! (Usually) no damage to the software Sharif University of Technology

15 Test Target System Test Unit Test Test the system as a whole
For performance, correctness and conformance. Unit Test Test the units and modules Test of a component Test of a class Test of a method Sharif University of Technology

16 How to Test Software Manual Test Test Tools Test Code Test Teams
Try it! Test Tools Performance Test Profiling JProfiler, TPTP Load Test Jmeter Test Code Unit Tests Test Teams Sharif University of Technology

17 Test Code Business Code Test Code
The code, written for implementation of a requirement Test Code The code, written for test of an implementation Sharif University of Technology

18 Unit Testing A process for the programmer Test of units of software
Not a test team procedure For improving the code quality Reduces bugs Test of units of software before the software is completed Unit: method, class Sharif University of Technology

19 Classical Unit Testing
Writing main() method Some printlns Drawbacks? Sharif University of Technology

20 Drawbacks Test code coupled with business code
In the same class Written tests are discarded One test at a time The programmer executes the tests himself Test execution is not automatic The programmer should check the result of each test himself The test is passed or failed? The test result interpretation is not automatic Sharif University of Technology

21 A Good Unit Test Code Repeatable Automatic
Invocation Acceptance (Pass/Failure) JUnit helps you write such tests Sharif University of Technology

22 JUnit, First Example Sharif University of Technology

23 JUnit, The Green Bar Sharif University of Technology

24 public class Testing public void testNormal() { int[] array = {3,2,1,4}; int[] sorted = {1,2,3,4}; Business.sort(array); for (int i = 0; i < sorted.length; i++) { Assert.assertEquals(sorted[i], array[i]); } public void testEmptyArray() { int[] array = {}; try{ }catch(Exception e){ Assert.fail(); Assert.assertNotNull(array); Assert.assertEquals(array.length, 0); Sharif University of Technology

25 Assertions assertNull(x) assertNotNull(x) assertTrue(boolean x)
assertFalse(boolean x) assertEquals(x, y) Uses x.equals(y) assertSame(x, y) Uses x ==y assertNotSame fail() Sharif University of Technology

26 Annotations @Test @Before @After @BeforeClass @AfterClass
Sharif University of Technology

27 Sharif University of Technology

28 A Good Unit Test is Automated Through Repeatable Independence
Professional Sharif University of Technology

29 Test Driven Development
Test First Development Before writing a code, write the tests! Sharif University of Technology

30 TDD Sharif University of Technology

31 Refactoring

32 Refactoring A disciplined way to restructure code In order to improve code quality Without changing its behavior a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. Martin Fowler Sharif University of Technology

33 Refactoring Refactoring is the process of changing a software system
In such a way that it does not alter the external behavior of the code But improves its internal structure It is a disciplined way to clean up code It minimizes the chances of introducing bugs When you refactor, you are improving the design of the code after it has been written. Martin Fowler Sharif University of Technology

34 Refactoring By continuously improving the design of code, we make it easier and easier to work with Joshua Kerievsky, Refactoring to Patterns Sharif University of Technology

35 Example Duplicate Code What are the drawbacks? What is the solution?
Refactoring: Finding a “Bad Smell” Changing the code to remove the bad smell Some well-known bad smells are reported Sharif University of Technology

36 Bad Smell A bad smell in code
Any symptom in the source code that possibly indicates a deeper problem. The term is coined by Kent Beck. Sharif University of Technology

37 Bad Smells If it stinks, change it! Bad smells in code
Kent Beck and Martin Fowler. Bad smells in code Bad smells are source of problems Remove bad smells How? By Refactoring Sharif University of Technology

38 Bad Smells Duplicated Code Long Method Large Class Long Parameter List
Sharif University of Technology

39 Refactoring Techniques
Extract Method Move Method Variable Class Extract Class Rename Pull Up Push Down Sharif University of Technology

40 IDE Support Refactoring techniques are widely supported by IDEs
Practice it in Eclipse Sharif University of Technology

41 The Two Hats Kent Beck's metaphor of two hats
Divide your time between two distinct activities adding function refactoring Sharif University of Technology

42 Why Should I Refactor? Refactoring Improves the Design of Software
Refactoring Makes Software Easier to Understand Refactoring Helps You Find Bugs Refactoring Helps You Program Faster Refactoring makes your code more maintainable Sharif University of Technology

43 When Should You Refactor?
The Rule of Three: Refactor When You Add Function Refactor When You Need to Fix a Bug Refactor As You Do a Code Review Sharif University of Technology

44 Find bad smells! Refactor the Code!
Scanner s = new Scanner(System.in); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int a1 = s.nextInt(); System.out.print("Enter the length: "); int a2 = s.nextInt(); int b1 = s.nextInt(); int b2 = s.nextInt(); int x = a1*a2; int y = b1*b2; if(x == y) System.out.println("Equal"); Find bad smells! Refactor the Code! Sharif University of Technology

45 Scanner scanner = new Scanner(System. in); System. out
Scanner scanner = new Scanner(System.in); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int width1 = scanner.nextInt(); System.out.print("Enter the length: "); int length1 = scanner.nextInt(); int width2 = scanner.nextInt(); int length2 = scanner.nextInt(); int area1 = width1*length1; int area2 = width2*length2; if(area1 == area2) System.out.println("Equal"); Rename… Sharif University of Technology

46 class Rectangle{ private int length , width; public int getLength() { return length; } public void setLength(int length) { this.length = length; public int getWidth() { return width; public void setWidth(int width) { this.width = width; public Rectangle(int length, int width) { Extract Class… Sharif University of Technology

47 Scanner scanner = new Scanner(System. in); System. out
Scanner scanner = new Scanner(System.in); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int width = scanner.nextInt(); System.out.print("Enter the length: "); int length = scanner.nextInt(); Rectangle rectangle1 = new Rectangle(length, width); width = scanner.nextInt(); length = scanner.nextInt(); Rectangle rectangle2 = new Rectangle(length, width); int area1 = rectangle1.getWidth()*rectangle1.getLength(); int area2 = rectangle2.getWidth()*rectangle2.getLength(); if(area1 == area2) System.out.println("Equal"); Sharif University of Technology

48 int area1 = rectangle1.area(); int area2 = rectangle2.area();
class Rectangle{ ... public int area(){ return length * width; } int area1 = rectangle1.area(); int area2 = rectangle2.area(); Extract Method… Sharif University of Technology

49 private static Rectangle readRectangle(Scanner scanner) { int width; int length; System.out.println("Rectangle Info."); System.out.print("Enter the width: "); width = scanner.nextInt(); System.out.print("Enter the length: "); length = scanner.nextInt(); Rectangle rectangle2 = new Rectangle(length, width); return rectangle2; } Extract Method… Sharif University of Technology

50 Refactored Code Scanner scanner = new Scanner(System.in); Rectangle rectangle1 = Rectangle.readRectangle(scanner); Rectangle rectangle2 = Rectangle.readRectangle(scanner); int area1 = rectangle1.area(); int area2 = rectangle2.area(); if(area1 == area2) System.out.println("Equal"); Sharif University of Technology

51 Reference Refactoring: improving the design of existing code, Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts (1999) Sharif University of Technology

52 Additional Info for Bulk Test and Bulk Data Operations – ONLY JAVA 1.8
List<String> names = Arrays.asList("Smith", "Adams", "Crawford"); List<Person> people = peopleDAO.find("London");   // Using anyMatch and method reference List<Person> anyMatch = people.stream().filter(p -> (names.stream().anyMatch(p.name::contains))). collect(Collectors.toList());   // Using reduce List<Person> reduced = people.stream(). filter(p -> names.stream().reduce(false, (Boolean b, String keyword) -> b ||  p.name.contains(keyword), (l, r) -> l | r)).collect(Collectors.toList()); Sharif University of Technology


Download ppt "Advanced Programming in Java"

Similar presentations


Ads by Google