390 likes | 511 Vues
This presentation from Sharif University of Technology's Advanced Programming in Java course (Fall 2011) focuses on software quality, emphasizing the characteristics of good software, various testing methodologies, and the importance of refactoring. It explores unit testing, manual testing, and the use of tools like JUnit and JMeter. The agenda highlights crucial aspects like maintainability, performance, and changeability, along with concepts of Test Driven Development (TDD) and the disciplined art of refactoring to enhance code quality without altering its behavior.
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