390 likes | 500 Views
Advanced Programming in Java. Sadegh Aliakbary Sharif University of Technology Fall 2011. Agenda. Software Quality Characteristic of a good software Test Unit Testing Refactoring. Quality of Product. The producer should ensure about the quality of the products Quality Control
E N D
Advanced Programming in Java SadeghAliakbary Sharif University of Technology Fall 2011
Agenda • Software Quality • Characteristic of a good software • Test • Unit Testing • Refactoring Sharif University of Technology
Quality of Product • The producer should ensure about the quality of the products • Quality Control • Any business, any product Sharif University of Technology
A Cook Sharif University of Technology
Maintenance check of electronic equipment on a Navy aircraft. Sharif University of Technology
A Car Maker Sharif University of Technology
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
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
Test Target • System 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
How to Test Software • Manual Test • Try it! • Test Tools • Performance Test • Profiling • JProfiler, TPTP • Load Test • Jmeter • Test Code • Unit Tests • Test Teams Sharif University of Technology
Test Code • Business Code • The code, written for implementation of a requirement • Test Code • The code, written for test of an implementation Sharif University of Technology
Unit Testing • A process for the programmer • 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
Classical Unit Testing • Writing main() method • Some printlns • Drawbacks? Sharif University of Technology
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
A Good Unit Test Code • Repeatable • Automatic • Invocation • Acceptance (Pass/Failure) • JUnit helps you write such tests Sharif University of Technology
JUnit, First Example Sharif University of Technology
JUnit, The Green Bar Sharif University of Technology
publicclass Testing { @Test publicvoidtestNormal() { int[] array = {3,2,1,4}; int[] sorted = {1,2,3,4}; Business.sort(array); for (inti = 0; i < sorted.length; i++) { Assert.assertEquals(sorted[i], array[i]); } } @Test publicvoidtestEmptyArray() { int[] array = {}; try{ Business.sort(array); }catch(Exception e){ Assert.fail(); } Assert.assertNotNull(array); Assert.assertEquals(array.length, 0); } } Sharif University of Technology
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
Annotations • @Test • @Before • @After • @BeforeClass • @AfterClass Sharif University of Technology
A Good Unit Test is • Automated • Through • Repeatable • Independence • Professional Sharif University of Technology
Test Driven Development • Test First Development • Before writing a code, write the tests! Sharif University of Technology
TDD Sharif University of Technology
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
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
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
The Two Hats • Kent Beck's metaphor of two hats • Divide your time between two distinct activities • adding function • refactoring Sharif University of Technology
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
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
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
Bad Smells • If it stinks, change it! • 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
Bad Smells • Duplicated Code • Long Method • Large Class • Long Parameter List • … Sharif University of Technology
Refactoring Techniques • Extract Method • Move • Method • Variable • Class • Extract Class • Rename • Method • Variable • Class • Pull Up • Push Down Sharif University of Technology
IDE Support • Refactoring techniques are widely supported by IDEs • Practice it in Eclipse Sharif University of Technology
Reference • Refactoring: improving the design of existing code, Martin Fowler, Kent Beck,John Brant, William Opdyke, Don Roberts(1999) Sharif University of Technology