SlideShare a Scribd company logo
1 of 55
Test Driven Development and Quality
Improvement
Carlos Solis, John Noll, and Xiaofeng
Wang
Carlos.Solis@lero.ie

Lero© 2010
Contents
•
•
•
•

Test Driven Development
Unit testing
Code coverage
The analysis of two open source projects

Lero© 2010
Waterfall model

Lero© 2010
Prioritizing the requirements

Lero© 2010
Iterative and incremental
development
Initial
Requirements
List

Analysis
-i
Design-i
Testing-i
Implementation-i

Cycle-1
Lero© 2010

Cycle-2

Cycle-i

Cycle-n-1

Cycle-n
Interlinked failures

•The newer code can cause a failure in the
code developed in previous iterations.

Lero© 2010
Iterative and incremental
development
Initial
Requirements
List

Analysis
Set-i
Design-i

Testing-i,
Testing-i-1
…
Testing-1

Implementation-i
Cycle-1

Lero© 2010

Cycle-2

Cycle-n
Test Driven Development
Test Driven Development is an evolutionary
approach that relies on very short
development cycles and the practices of
writing automated tests before writing
functional code, refactoring and continuous
integration.

Lero© 2010
Agile methods
• Agile methods are the most popular iterative
and incremental software methods.

Lero© 2010
Testing scope by granularity
• Unit test. Do functions, classes and modules
work as expected?
• Integration Test. Do modules interact and
work with other modules as expected?
• Acceptance Test. Does the system work as
expected?
Lero© 2010
White box testing
• In white box testing the tester has access to
the code that wants to tests, and often
requires to program the test.
• Unit test and Integration Test are whites box
tests.
Input

Lero© 2010

Output
Black box testing
An acceptance test is a black box test.
It is a test of the functionality of a system or
module without knowing its internal
structure.
Output
Input

Lero© 2010
Test Driven Development
Initial
Requirements
List

Requirements
Set-i
Design-i

Acceptance
Acceptance
Test-i
testing

Refactor
UnitTest-i

Cycle-1

Lero© 2010

Cycle-2

Implementation-i

Cycle-n
Unit testing
• A unit test tests a small portion of code
usually methods and classes, in an
independent way.

Lero© 2010
Unit testing in JUnit
public class WikiPageTest extends TestCase {
protected WikiPage fixture = null;
protected void setUp() throws Exception {
setFixture(ShywikisFactory.createWikiPage());
}
protected void tearDown() throws Exception {
setFixture(null);
}
protected void setFixture(WikiPage fixture) {
this.fixture = fixture;
}
Lero© 2010
Unit testing in JUnit
public void testAddVersion() {
WikiPage wp = this.fixture;
User user1 = ShywikisFactory.createUser();
user1.setName("user1");
String body = "Hi!";
Version actual = wp.getActual();
assertNull(actual);
Version newVer = wp.addVersion(user1, body);
actual = wp.getActual();
assertEquals(actual,newVer);
assertEquals(user1,actual.getUser());
assertEquals(body,actual.getBody());
…
Lero© 2010
Unit testing in JUnit
public void testVersionsOrder() { …
for(i=0;i<5;i++){
body = "body" + i;
wp.addVersion(user, body);
}
Iterator<Version> it = wp.getVersions().iterator();
i = 0;
while(it.hasNext()){
Version ver = it.next();
assertEquals("user" + i, ver.getUser().getName());
assertEquals("body" + i, ver.getBody());
i++;
}
Lero© 2010
Independence: Mock Objects

Mock Objects are objects that simulate the behavior of
other objects in a controlled way.
Mock Objects have the same interface than the objects
they simulate.

Lero© 2010
Independence: Mock Objects
public class HBWikiPagePerfomer implements
WikiPagePerfomer{
Session session;
public Version createWikiPage(String name, String user){
…
WikiPage wp = ShywikisFactory.createWikiPage();
wp.setName(name);
session.save(wp);
…
}
Lero© 2010
Example: Mock Objects
public class SessionMock implements Session {
public void cancelQuery() throws HibernateException {
}
public Connection close() throws HibernateException {
return null;
}
….
public Serializable save(Object arg0) throws
HibernateException {
return null;
}
Lero© 2010
Example: Mock Objects
protected void setUp() throws Exception {
HBWikiPagePerfomer hbp = new HBWikiPagePerfomer();
hbp.setSession(new SessionMock());
setFixture(hbp);
}

public void testCreateWikiPage(){
HBWikiPagePerfomer hbp = getFixture();
assertNull(hbp.createWikiPage("wp1", "user1"));
}
Lero© 2010
Complex tests: Mock Objects
Financial System Client
Init

getReport(X)

Bye

Bloomberg Trade Protocol
Communication Layer (TCP/IP)
TCP/IP

How can we test this?
Lero© 2010

Bloomberg
Server
Code coverage
The degree of how much a code is exercised by a set of
automated tests is measured by its test coverage.
The test coverage measures how complete is a set of
tests in terms of how many instructions, branches, or
blocks are covered when unit tests are executed.

Lero© 2010
Code coverage

Lero© 2010
Code coverage

Lero© 2010
Integration testing
Integration test is about testing the
interacting modules in an application.
There are some frameworks for integration
testing such as dbUnit, httpUnit, etc.

Lero© 2010
Integration testing
In some cases unit test frameworks can be
used to perform integration and acceptance
tests.
Integration Testing. The unit tests instead of
using mock objects, would use testing real
objects (a testing database, for example).

Lero© 2010
Integration Test
An approach is to reuse the unit test using
different setup and teardown methods.
protected void setUp() throws Exception {
Session session = sessionFactory.openSession(“test.cfg”);
HBWikiPagePerfomer hbp = new HBWikiPagePerfomer();
hbp.setSession(session);
setFixture(hbp);
}

Lero© 2010
Automated Test Driven
Development

Start
OK
Automated
Acceptance
Test-i

Requirements
Set-i
NOK

Refactor
UnitTest-i

Lero© 2010

Design-i

Implementation-i
Acceptance test
An acceptance test is a test that proves that a
requirement does what is in its specification,
therefore, if the test is passed the customer
accepts that the requirement is fully
implemented.

Lero© 2010
Acceptance test
Each requirement has a set of specific cases or
scenarios.
Each scenario has a set of test.
A requirement is accepted if the tests of all the
scenarios are satisfied.

Lero© 2010
Acceptance Test
User interface

Input
Fit
(Simulated
User input)
Lero© 2010

Controller
Objects

Unit Test
and Integration Test

Business
Or
Model
Objects
Acceptance test
There are automated acceptance testing
frameworks such as cucumber, jbehave, fit
and fitness.

Lero© 2010
User Stories and Scenarios using BDD
ubiquitous language and plain text

Lero© 2010
Automated Acceptance Testing and Readable
Behaviour Oriented Specification Code

Lero© 2010
The adoption problem
• Developers have to learn to write effective
unit test. These tests will help to reduce bugs
and to have better software designs.
• It is better to have more testers or to allow
developers to learn TDD? Ask accountability.

Lero© 2010
The adoption problem
• Adopt it progressively. First automated unit
testing, later automatic acceptance and
integration testing.
• If the organizational structure follows the
waterfall, there will be resistance to adopt it.

Lero© 2010
Our research: Which is its effect on
quality?
Start
Acceptance
Test-i

Requirements
Set-i
NOK

Design-i
Refactor

OK
Start Next
Cycle

Lero© 2010

UnitTest-i

Implementation-i
Our research
Automated testing has a positive effect on the
quality of code in an OSS context.

Lero© 2010
Projects analysed

Lero© 2010
Approach
• Open source projects with automated tests and
with well documented bug repositories.
• Bug density. Instead of using the bugs reported,
we have used the modifications in the source
code repository that have happened after the
release date. Each file in a project has an
associated number of post release modifications.
• The projects’ tests were executed and the test
coverage calculated.
Lero© 2010
Approach
• The final step was to analyze the data to see if
there is a relationship between the test
coverage and the number of post release
modifications of the files.

Lero© 2010
Bug density
Bug or fix commit

Previous
Release date

Release date

Increment the defect count for each file
associated with entries that were determined
to be actual bug fixes.
Lero© 2010
Bug Density

Lero© 2010
Code coverage and defect density

Lero© 2010
JFreeChart

Lero© 2010
OrangeHRM

Lero© 2010
Files with prm OrangeHRM

Lero© 2010
Files with prm JFreeChart

Lero© 2010
Correlation

Lero© 2010
Result analysis
• If Spearman’s rank correlation coefficient is negative,
there is a negative correlation between test coverage
and post-release fix density; in other words, higher
coveragemay mean lower fix rates.
• The significance of this correlation is measured by
the p-value, which measures the probability that the
correlation would be observed when the Null
hypothesis is true.

Lero© 2010
Result analysis
• There is a small negative correlation for each project.
• JFreeChart, a p-value of 0.0993 means that there is
less than 10% probability that this observed negative
correlation occurred by chance.
• OrangeHRM data have a p-value of 0.887, meaning
the relationship is surely due to random chance.

Lero© 2010
Result analysis
• Defects are not distributed evenly across all
files. When the analysis is limited only to files
that experienced release fixes, the negative
correlation is larger for both projects.
• The p-values are JFreeChart p-value of 0.084.
For OrangeHRM is 0.0364.
• As such, there is reason to reject the Null
hypothesis with some caution, and conclude
that increased statement coverage might
improve post-release defect density.
Lero© 2010
Future work
• We think that we have to normalize using the
pre-release modification of each file.
• We would have to calculate the correlation
between (post-mr / pre-mr) and file coverage.

Lero© 2010
Thank you

Questions?

Lero© 2010

More Related Content

What's hot

Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentguestc8093a6
 
Automated Developer Testing: Achievements and Challenges
Automated Developer Testing: Achievements and ChallengesAutomated Developer Testing: Achievements and Challenges
Automated Developer Testing: Achievements and ChallengesTao Xie
 
Introduction to TDD (Test Driven development) - Ahmed Shreef
Introduction to TDD (Test Driven development) - Ahmed ShreefIntroduction to TDD (Test Driven development) - Ahmed Shreef
Introduction to TDD (Test Driven development) - Ahmed ShreefAhmed Shreef
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentTung Nguyen Thanh
 
Unit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and MoqUnit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and MoqXPDays
 
A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD) A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD) CodeOps Technologies LLP
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentMireia Sangalo
 
Test driven development and unit testing with examples in C++
Test driven development and unit testing with examples in C++Test driven development and unit testing with examples in C++
Test driven development and unit testing with examples in C++Hong Le Van
 
Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010guest5639fa9
 
Unit Testing Full@
Unit Testing Full@Unit Testing Full@
Unit Testing Full@Alex Borsuk
 
Software testing lab manual
Software testing lab manualSoftware testing lab manual
Software testing lab manualTanzeem Syed
 
Refactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesRefactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesSteven Smith
 
Getting started with Test Driven Development
Getting started with Test Driven DevelopmentGetting started with Test Driven Development
Getting started with Test Driven DevelopmentFerdous Mahmud Shaon
 
TDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleTDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleNoam Kfir
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionDionatan default
 
Software testing ... who’s responsible is it?
Software testing ... who’s responsible is it?Software testing ... who’s responsible is it?
Software testing ... who’s responsible is it?Manjula03809891
 

What's hot (19)

Block 1 ms-034 unit-1
Block 1 ms-034 unit-1Block 1 ms-034 unit-1
Block 1 ms-034 unit-1
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Automated Developer Testing: Achievements and Challenges
Automated Developer Testing: Achievements and ChallengesAutomated Developer Testing: Achievements and Challenges
Automated Developer Testing: Achievements and Challenges
 
Introduction to TDD (Test Driven development) - Ahmed Shreef
Introduction to TDD (Test Driven development) - Ahmed ShreefIntroduction to TDD (Test Driven development) - Ahmed Shreef
Introduction to TDD (Test Driven development) - Ahmed Shreef
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Unit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and MoqUnit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and Moq
 
A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD) A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD)
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Test driven development and unit testing with examples in C++
Test driven development and unit testing with examples in C++Test driven development and unit testing with examples in C++
Test driven development and unit testing with examples in C++
 
Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010
 
Unit Testing Full@
Unit Testing Full@Unit Testing Full@
Unit Testing Full@
 
Software testing lab manual
Software testing lab manualSoftware testing lab manual
Software testing lab manual
 
Refactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesRefactoring Applications using SOLID Principles
Refactoring Applications using SOLID Principles
 
Getting started with Test Driven Development
Getting started with Test Driven DevelopmentGetting started with Test Driven Development
Getting started with Test Driven Development
 
TDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleTDD and the Legacy Code Black Hole
TDD and the Legacy Code Black Hole
 
Test Automation and Keyword-driven testing af Brian Nielsen, CISS/AAU
Test Automation and Keyword-driven testing af Brian Nielsen, CISS/AAUTest Automation and Keyword-driven testing af Brian Nielsen, CISS/AAU
Test Automation and Keyword-driven testing af Brian Nielsen, CISS/AAU
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in Action
 
Software testing ... who’s responsible is it?
Software testing ... who’s responsible is it?Software testing ... who’s responsible is it?
Software testing ... who’s responsible is it?
 

Viewers also liked

Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)龍一 田中
 
Web技術勉強会6回目
Web技術勉強会6回目Web技術勉強会6回目
Web技術勉強会6回目龍一 田中
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回龍一 田中
 
Web技術勉強会9回目(Slideshare用)
Web技術勉強会9回目(Slideshare用)Web技術勉強会9回目(Slideshare用)
Web技術勉強会9回目(Slideshare用)龍一 田中
 
Web技術勉強会6回目
Web技術勉強会6回目Web技術勉強会6回目
Web技術勉強会6回目龍一 田中
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回龍一 田中
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回龍一 田中
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回龍一 田中
 
Web技術勉強会 第19回
Web技術勉強会 第19回Web技術勉強会 第19回
Web技術勉強会 第19回龍一 田中
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回龍一 田中
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514龍一 田中
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
Web技術勉強会12回目
Web技術勉強会12回目Web技術勉強会12回目
Web技術勉強会12回目龍一 田中
 
Web技術勉強会9回目2(Slideshare用)
Web技術勉強会9回目2(Slideshare用)Web技術勉強会9回目2(Slideshare用)
Web技術勉強会9回目2(Slideshare用)龍一 田中
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424龍一 田中
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723龍一 田中
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回龍一 田中
 
WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする龍一 田中
 

Viewers also liked (18)

Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)
 
Web技術勉強会6回目
Web技術勉強会6回目Web技術勉強会6回目
Web技術勉強会6回目
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
 
Web技術勉強会9回目(Slideshare用)
Web技術勉強会9回目(Slideshare用)Web技術勉強会9回目(Slideshare用)
Web技術勉強会9回目(Slideshare用)
 
Web技術勉強会6回目
Web技術勉強会6回目Web技術勉強会6回目
Web技術勉強会6回目
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回
 
Web技術勉強会 第19回
Web技術勉強会 第19回Web技術勉強会 第19回
Web技術勉強会 第19回
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Web技術勉強会12回目
Web技術勉強会12回目Web技術勉強会12回目
Web技術勉強会12回目
 
Web技術勉強会9回目2(Slideshare用)
Web技術勉強会9回目2(Slideshare用)Web技術勉強会9回目2(Slideshare用)
Web技術勉強会9回目2(Slideshare用)
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回
 
WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする
 

Similar to Test Driven Development and Quality Improvement

Testing SharePoint solutions overview
Testing SharePoint solutions overviewTesting SharePoint solutions overview
Testing SharePoint solutions overviewSpiffy
 
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Scott Keck-Warren
 
2016 quali continuous testing quest for quality conference
2016 quali continuous testing quest for quality conference2016 quali continuous testing quest for quality conference
2016 quali continuous testing quest for quality conferenceQualiQuali
 
Mastering Cross-Browser Test Automation With Cypress and Selenium
Mastering Cross-Browser Test Automation With Cypress and SeleniumMastering Cross-Browser Test Automation With Cypress and Selenium
Mastering Cross-Browser Test Automation With Cypress and SeleniumPerfecto by Perforce
 
Test automation lessons from WebSphere Application Server
Test automation lessons from WebSphere Application ServerTest automation lessons from WebSphere Application Server
Test automation lessons from WebSphere Application ServerRobbie Minshall
 
Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"GoIT
 
Automated Testing Tutorial
Automated Testing TutorialAutomated Testing Tutorial
Automated Testing TutorialJohn Liebenau
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choicetoddbr
 
Tools for Software Testing
Tools for Software TestingTools for Software Testing
Tools for Software TestingMohammed Moishin
 
Continuous Integration, TDD & Living Documentation - Odoo Experience 2015
Continuous Integration, TDD & Living Documentation - Odoo Experience 2015Continuous Integration, TDD & Living Documentation - Odoo Experience 2015
Continuous Integration, TDD & Living Documentation - Odoo Experience 2015Colin Wren
 
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Scott Keck-Warren
 
Appium & Selenium Alone vs Appium & Selenium with Perfecto
Appium & Selenium Alone vs Appium & Selenium with PerfectoAppium & Selenium Alone vs Appium & Selenium with Perfecto
Appium & Selenium Alone vs Appium & Selenium with PerfectoLizzy Guido (she/her)
 
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Acceptance & Functional Testing with Codeception - SunshinePHP 2016Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Acceptance & Functional Testing with Codeception - SunshinePHP 2016Joe Ferguson
 
Testing Microservices
Testing MicroservicesTesting Microservices
Testing MicroservicesNathan Jones
 
Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015 Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015 Joe Ferguson
 
Performancetestingjmeter 121109061704-phpapp02
Performancetestingjmeter 121109061704-phpapp02Performancetestingjmeter 121109061704-phpapp02
Performancetestingjmeter 121109061704-phpapp02Shivakumara .
 

Similar to Test Driven Development and Quality Improvement (20)

Testing SharePoint solutions overview
Testing SharePoint solutions overviewTesting SharePoint solutions overview
Testing SharePoint solutions overview
 
niyati_kaduskar_CV
niyati_kaduskar_CVniyati_kaduskar_CV
niyati_kaduskar_CV
 
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023
 
2016 quali continuous testing quest for quality conference
2016 quali continuous testing quest for quality conference2016 quali continuous testing quest for quality conference
2016 quali continuous testing quest for quality conference
 
Mastering Cross-Browser Test Automation With Cypress and Selenium
Mastering Cross-Browser Test Automation With Cypress and SeleniumMastering Cross-Browser Test Automation With Cypress and Selenium
Mastering Cross-Browser Test Automation With Cypress and Selenium
 
Khushboo_Resume
Khushboo_ResumeKhushboo_Resume
Khushboo_Resume
 
Test automation lessons from WebSphere Application Server
Test automation lessons from WebSphere Application ServerTest automation lessons from WebSphere Application Server
Test automation lessons from WebSphere Application Server
 
Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"
 
Automated Testing Tutorial
Automated Testing TutorialAutomated Testing Tutorial
Automated Testing Tutorial
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
 
10071756.ppt
10071756.ppt10071756.ppt
10071756.ppt
 
Tools for Software Testing
Tools for Software TestingTools for Software Testing
Tools for Software Testing
 
Continuous Integration, TDD & Living Documentation - Odoo Experience 2015
Continuous Integration, TDD & Living Documentation - Odoo Experience 2015Continuous Integration, TDD & Living Documentation - Odoo Experience 2015
Continuous Integration, TDD & Living Documentation - Odoo Experience 2015
 
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023
 
Appium & Selenium Alone vs Appium & Selenium with Perfecto
Appium & Selenium Alone vs Appium & Selenium with PerfectoAppium & Selenium Alone vs Appium & Selenium with Perfecto
Appium & Selenium Alone vs Appium & Selenium with Perfecto
 
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Acceptance & Functional Testing with Codeception - SunshinePHP 2016Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
 
Testing Microservices
Testing MicroservicesTesting Microservices
Testing Microservices
 
Why test with flex unit
Why test with flex unitWhy test with flex unit
Why test with flex unit
 
Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015 Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015
 
Performancetestingjmeter 121109061704-phpapp02
Performancetestingjmeter 121109061704-phpapp02Performancetestingjmeter 121109061704-phpapp02
Performancetestingjmeter 121109061704-phpapp02
 

More from Carlos Solís

A study of the characteristics of Behaviour Driven Development
A study of the characteristics of Behaviour Driven DevelopmentA study of the characteristics of Behaviour Driven Development
A study of the characteristics of Behaviour Driven DevelopmentCarlos Solís
 
Multilayer Superimposed Information for Collaborative Annotation in Wikis
Multilayer Superimposed Information for Collaborative Annotation in WikisMultilayer Superimposed Information for Collaborative Annotation in Wikis
Multilayer Superimposed Information for Collaborative Annotation in WikisCarlos Solís
 
ShyWiki for Knowledge Management
ShyWiki for Knowledge ManagementShyWiki for Knowledge Management
ShyWiki for Knowledge ManagementCarlos Solís
 
Comparing Architecture Description Languages
Comparing Architecture Description LanguagesComparing Architecture Description Languages
Comparing Architecture Description LanguagesCarlos Solís
 
Model Driven Hypermedia Development Method
Model Driven Hypermedia Development MethodModel Driven Hypermedia Development Method
Model Driven Hypermedia Development MethodCarlos Solís
 

More from Carlos Solís (8)

A study of the characteristics of Behaviour Driven Development
A study of the characteristics of Behaviour Driven DevelopmentA study of the characteristics of Behaviour Driven Development
A study of the characteristics of Behaviour Driven Development
 
Multilayer Superimposed Information for Collaborative Annotation in Wikis
Multilayer Superimposed Information for Collaborative Annotation in WikisMultilayer Superimposed Information for Collaborative Annotation in Wikis
Multilayer Superimposed Information for Collaborative Annotation in Wikis
 
ShyWiki for Knowledge Management
ShyWiki for Knowledge ManagementShyWiki for Knowledge Management
ShyWiki for Knowledge Management
 
Shy Wiki Tutorial3
Shy Wiki Tutorial3Shy Wiki Tutorial3
Shy Wiki Tutorial3
 
Comparing Architecture Description Languages
Comparing Architecture Description LanguagesComparing Architecture Description Languages
Comparing Architecture Description Languages
 
ShyWiki for AKM
ShyWiki for AKMShyWiki for AKM
ShyWiki for AKM
 
ShyWiki
ShyWikiShyWiki
ShyWiki
 
Model Driven Hypermedia Development Method
Model Driven Hypermedia Development MethodModel Driven Hypermedia Development Method
Model Driven Hypermedia Development Method
 

Recently uploaded

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Recently uploaded (20)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 

Test Driven Development and Quality Improvement

  • 1. Test Driven Development and Quality Improvement Carlos Solis, John Noll, and Xiaofeng Wang Carlos.Solis@lero.ie Lero© 2010
  • 2. Contents • • • • Test Driven Development Unit testing Code coverage The analysis of two open source projects Lero© 2010
  • 6. Interlinked failures •The newer code can cause a failure in the code developed in previous iterations. Lero© 2010
  • 8. Test Driven Development Test Driven Development is an evolutionary approach that relies on very short development cycles and the practices of writing automated tests before writing functional code, refactoring and continuous integration. Lero© 2010
  • 9. Agile methods • Agile methods are the most popular iterative and incremental software methods. Lero© 2010
  • 10. Testing scope by granularity • Unit test. Do functions, classes and modules work as expected? • Integration Test. Do modules interact and work with other modules as expected? • Acceptance Test. Does the system work as expected? Lero© 2010
  • 11. White box testing • In white box testing the tester has access to the code that wants to tests, and often requires to program the test. • Unit test and Integration Test are whites box tests. Input Lero© 2010 Output
  • 12. Black box testing An acceptance test is a black box test. It is a test of the functionality of a system or module without knowing its internal structure. Output Input Lero© 2010
  • 14. Unit testing • A unit test tests a small portion of code usually methods and classes, in an independent way. Lero© 2010
  • 15. Unit testing in JUnit public class WikiPageTest extends TestCase { protected WikiPage fixture = null; protected void setUp() throws Exception { setFixture(ShywikisFactory.createWikiPage()); } protected void tearDown() throws Exception { setFixture(null); } protected void setFixture(WikiPage fixture) { this.fixture = fixture; } Lero© 2010
  • 16. Unit testing in JUnit public void testAddVersion() { WikiPage wp = this.fixture; User user1 = ShywikisFactory.createUser(); user1.setName("user1"); String body = "Hi!"; Version actual = wp.getActual(); assertNull(actual); Version newVer = wp.addVersion(user1, body); actual = wp.getActual(); assertEquals(actual,newVer); assertEquals(user1,actual.getUser()); assertEquals(body,actual.getBody()); … Lero© 2010
  • 17. Unit testing in JUnit public void testVersionsOrder() { … for(i=0;i<5;i++){ body = "body" + i; wp.addVersion(user, body); } Iterator<Version> it = wp.getVersions().iterator(); i = 0; while(it.hasNext()){ Version ver = it.next(); assertEquals("user" + i, ver.getUser().getName()); assertEquals("body" + i, ver.getBody()); i++; } Lero© 2010
  • 18. Independence: Mock Objects Mock Objects are objects that simulate the behavior of other objects in a controlled way. Mock Objects have the same interface than the objects they simulate. Lero© 2010
  • 19. Independence: Mock Objects public class HBWikiPagePerfomer implements WikiPagePerfomer{ Session session; public Version createWikiPage(String name, String user){ … WikiPage wp = ShywikisFactory.createWikiPage(); wp.setName(name); session.save(wp); … } Lero© 2010
  • 20. Example: Mock Objects public class SessionMock implements Session { public void cancelQuery() throws HibernateException { } public Connection close() throws HibernateException { return null; } …. public Serializable save(Object arg0) throws HibernateException { return null; } Lero© 2010
  • 21. Example: Mock Objects protected void setUp() throws Exception { HBWikiPagePerfomer hbp = new HBWikiPagePerfomer(); hbp.setSession(new SessionMock()); setFixture(hbp); } public void testCreateWikiPage(){ HBWikiPagePerfomer hbp = getFixture(); assertNull(hbp.createWikiPage("wp1", "user1")); } Lero© 2010
  • 22. Complex tests: Mock Objects Financial System Client Init getReport(X) Bye Bloomberg Trade Protocol Communication Layer (TCP/IP) TCP/IP How can we test this? Lero© 2010 Bloomberg Server
  • 23. Code coverage The degree of how much a code is exercised by a set of automated tests is measured by its test coverage. The test coverage measures how complete is a set of tests in terms of how many instructions, branches, or blocks are covered when unit tests are executed. Lero© 2010
  • 26. Integration testing Integration test is about testing the interacting modules in an application. There are some frameworks for integration testing such as dbUnit, httpUnit, etc. Lero© 2010
  • 27. Integration testing In some cases unit test frameworks can be used to perform integration and acceptance tests. Integration Testing. The unit tests instead of using mock objects, would use testing real objects (a testing database, for example). Lero© 2010
  • 28. Integration Test An approach is to reuse the unit test using different setup and teardown methods. protected void setUp() throws Exception { Session session = sessionFactory.openSession(“test.cfg”); HBWikiPagePerfomer hbp = new HBWikiPagePerfomer(); hbp.setSession(session); setFixture(hbp); } Lero© 2010
  • 30. Acceptance test An acceptance test is a test that proves that a requirement does what is in its specification, therefore, if the test is passed the customer accepts that the requirement is fully implemented. Lero© 2010
  • 31. Acceptance test Each requirement has a set of specific cases or scenarios. Each scenario has a set of test. A requirement is accepted if the tests of all the scenarios are satisfied. Lero© 2010
  • 32. Acceptance Test User interface Input Fit (Simulated User input) Lero© 2010 Controller Objects Unit Test and Integration Test Business Or Model Objects
  • 33. Acceptance test There are automated acceptance testing frameworks such as cucumber, jbehave, fit and fitness. Lero© 2010
  • 34. User Stories and Scenarios using BDD ubiquitous language and plain text Lero© 2010
  • 35. Automated Acceptance Testing and Readable Behaviour Oriented Specification Code Lero© 2010
  • 36. The adoption problem • Developers have to learn to write effective unit test. These tests will help to reduce bugs and to have better software designs. • It is better to have more testers or to allow developers to learn TDD? Ask accountability. Lero© 2010
  • 37. The adoption problem • Adopt it progressively. First automated unit testing, later automatic acceptance and integration testing. • If the organizational structure follows the waterfall, there will be resistance to adopt it. Lero© 2010
  • 38. Our research: Which is its effect on quality? Start Acceptance Test-i Requirements Set-i NOK Design-i Refactor OK Start Next Cycle Lero© 2010 UnitTest-i Implementation-i
  • 39. Our research Automated testing has a positive effect on the quality of code in an OSS context. Lero© 2010
  • 41. Approach • Open source projects with automated tests and with well documented bug repositories. • Bug density. Instead of using the bugs reported, we have used the modifications in the source code repository that have happened after the release date. Each file in a project has an associated number of post release modifications. • The projects’ tests were executed and the test coverage calculated. Lero© 2010
  • 42. Approach • The final step was to analyze the data to see if there is a relationship between the test coverage and the number of post release modifications of the files. Lero© 2010
  • 43. Bug density Bug or fix commit Previous Release date Release date Increment the defect count for each file associated with entries that were determined to be actual bug fixes. Lero© 2010
  • 45. Code coverage and defect density Lero© 2010
  • 48. Files with prm OrangeHRM Lero© 2010
  • 49. Files with prm JFreeChart Lero© 2010
  • 51. Result analysis • If Spearman’s rank correlation coefficient is negative, there is a negative correlation between test coverage and post-release fix density; in other words, higher coveragemay mean lower fix rates. • The significance of this correlation is measured by the p-value, which measures the probability that the correlation would be observed when the Null hypothesis is true. Lero© 2010
  • 52. Result analysis • There is a small negative correlation for each project. • JFreeChart, a p-value of 0.0993 means that there is less than 10% probability that this observed negative correlation occurred by chance. • OrangeHRM data have a p-value of 0.887, meaning the relationship is surely due to random chance. Lero© 2010
  • 53. Result analysis • Defects are not distributed evenly across all files. When the analysis is limited only to files that experienced release fixes, the negative correlation is larger for both projects. • The p-values are JFreeChart p-value of 0.084. For OrangeHRM is 0.0364. • As such, there is reason to reject the Null hypothesis with some caution, and conclude that increased statement coverage might improve post-release defect density. Lero© 2010
  • 54. Future work • We think that we have to normalize using the pre-release modification of each file. • We would have to calculate the correlation between (post-mr / pre-mr) and file coverage. Lero© 2010

Editor's Notes

  1. The requirements can be prioritized according to the importance for the customer, and their difficulty to achieve. Later they can be divided in sets of requirements in order to have a work load that can be performed by the members of the development team, and their implementation possible implementation dependencies.
  2. Test case. It is an individual and particular test. Setup. The preparation of a test is its setup, and it is run is run before each test. Teardown. When a test finish a method call teardown is run in order to perform cleaning actions.
  3. An approach is to perform the unit test using different setup and teardown methods.
  4. A ubiquitous language contains the terms which will be used to define the behaviour of a system. A feature is subsequently realised by user stories. User stories provide the context of the features delivered by a system. What is the role of the user in the user story? What feature does the user want? What benefit can the user gain if the system provides the feature?
  5. BDD suggests that code should be part of the system’s documentation, which is in line with the agile values. Code should be readable, and specification should be part of the code. Testing code is specification code. In BDD all scenarios should be run automatically, which means acceptance criteria should be imported and analysed automatically. The classes implementing the scenarios will read the plain text scenario specifications and execute them.
  6. Find all commit log entries made after the target release, and before the following release. Search those entries for an instance of the string “bug” or “fix” and examine each of the resulting set of entries manually.
  7. JFreeChart p-value of 0.084 indicates there is less than 9% probability that the observed negative