SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Development principles in
test automation!
David Baak
david.baak@polteq.com
2© 2016
TEST AUTOMATION
==
SOFTWARE DEVELOPMENT
3© 2016
Test
Abstraction
System
Under
Test
Test(s)
4© 2016
What is clean code?
• Readable and maintainable
– Straightforward
– Clear intent
– Logical abstractions
– No surprises
– Relevant in context
• Minimal
– Does one thing
– Is easily extensible
5© 2016
How does clean code aid test automation?
Smelly code
private String szName;
public void setValueBetweenOneAndThree(int
u32Value) {
if(!(u32Value >= 1 && u32Value <= 3)) return;
HashMap<Integer, String> kv = new
HashMap<Integer, String>();
kv.put(0, “RED”);
kv.put(1, “GREEN”);
kv.put(2, “BLUE”);
szName = kv.get(u32Value - 1);
}
Clean code
private Color color;
public enum Color {RED,GREEN,BLUE};
public void setColor(Color color) {
this.color = color;
}
Clear intent
Extensible
Single responsibility
6© 2016
Clean code - Naming
• Names should be self-explanatory
• Names should not carry redundant information or
expose excessive implementation
• Names should be pronounceable
• Naming should be relevant to the problem domain
There are only two hard things in Computer Science: cache
invalidation and naming things. – Phil Karlton
7© 2015
Clean code – Naming examples
 waitForIt()
 findCustomerOrThrowExceptionIfNotFound(String s)
 int qty_pass_s
 Seller
waitForAlert()
int passedScenarios
findCustomer(String customerName)
Publisher
Reseller
8© 2016
Clean code - SOLID
Single responsibility
Every module or class should have responsibility over a single part
of the functionality provided by the software, and that responsibility
should be entirely encapsulated by the class.
9© 2016
Clean code - SOLID
Single responsibility
An artifact should only have one reason to change
Two reasons
to change
10© 2016
Clean code - SOLID
Open closed
Use inheritance of abstract base classes or composition to reference
other classes. Interface is then closed to modification, but the
implementation can differ.
11© 2016
Clean code - SOLID
• Single responsibility
• Open-closed
Code should be open to extension, but closed to modification
Modification if we
introduce Square
12© 2016
Clean code - SOLID
Liskov substitution
Functions that use pointers or references to base classes must be
able to use objects of derived classes without knowing it.
13© 2016
Clean code - SOLID
• Single responsibility
• Open-closed
• Liskov substitution
All the subtypes of a base type must be able to replace this
base type
Rectangle r = new Square();
r.setHeight(5);
r.setWidth(10);
Invalid area!
14© 2016
Clean code - SOLID
Interface segration
Split interfaces which are very large into smaller and more specific
ones, so that clients will only have to know about the methods that
are of interest to them.
15© 2016
Clean code - SOLID
• Single responsibility
• Open-closed
• Liskov substitution
• Interface segregation
No client should be forced to depend on methods it does not
use
Not every
printer can email
or scan
16© 2016
Clean code - SOLID
Dependency inversion
A specific form of decoupling where conventional dependency
relationships established from high-level, policy-setting modules to
low-level, dependency modules are inverted (i.e. reversed) for the
purpose of rendering high-level modules independent of the low-
level module implementation details.
17© 2016
Clean code - SOLID
• Single responsibility
• Open-closed
• Liskov substitution
• Interface segregation
• Dependency inversion
High-level modules should not depend on low-level modules.
Abstractions should not depend upon details.
Should not depend
on concrete class
18© 2016
Refactoring
“Code refactoring is the process of restructuring existing
computer code – changing the factoring – without changing its
external behavior. Refactoring improves nonfunctional
attributes of the software. Advantages include improved code
readability and reduced complexity; these can improve
source code maintainability and create a more expressive
internal architecture or object model to improve extensibility.”
(source: https://en.wikipedia.org/wiki/Code_refactoring)
19© 2016
Refactoring - Automation code example
Original
String bookName = "The Hobbit";
WebElement bookTableRow = driver.findElement
(By.xpath("//tbody[@class='grid']/tr/td/div[
contains(text(), '"+bookName +"')]"))
.findElement(By.xpath("../.."));
bookTableRow.findElement(By.xpath("td[contai
ns(@class,'btn')]/div/button[text()=
'Details']")).click();
Refactored
String bookName = "The Hobbit";
openBookDetails(bookName);
void openBookDetails(String bookName) {
…
}
Extract method
20© 2016
Refactoring in TDD cycle
21© 2016
Test
Abstraction
Test
Double(s)
Unit
Test(s)
Dummy Fake
Stub Spy
Mock
22© 2016
Dummy
Customer
Product
Invoice
irrelevant
objects
product name
client number
product number
getLineItems()
23© 2016
Stub
WeatherService
WeatherForecast response
(source: http://xunitpatterns.com/Test%20Double%20Patterns.html
getHumidity()
24© 2016
Spy
WeatherService
WeatherForecast response
times called
(source: http://xunitpatterns.com/Test%20Double%20Patterns.html
getHumidity()
25© 2016
Mock
WareHouse
Behaviour verification
(source: http://xunitpatterns.com/Test%20Double%20Patterns.html
Order
Order(prodName, amount)
remove(prodName, amount)
hasInventory(prodName, amount)
fill(wareHouse)
26© 2016
Fake
InMemoryDataBase
dataset/source
(source: http://xunitpatterns.com/Test%20Double%20Patterns.html
HSQLDB
SQLite
27© 2016
Conclusion
• Treat test automation as software development by
applying proper naming, SOLID principles and
refactoring. This results in:
– Increased readability
– Reduced complexity
– Increased Maintainability
– Increased Extensibility
• Proper refactoring requires unit testing

Contenu connexe

Similaire à Development principles aid test automation

Object Oriented Concepts and Principles
Object Oriented Concepts and PrinciplesObject Oriented Concepts and Principles
Object Oriented Concepts and Principlesdeonpmeyer
 
bGenius kennissessie_20120510
bGenius kennissessie_20120510bGenius kennissessie_20120510
bGenius kennissessie_20120510bgenius
 
SOLID principles-Present
SOLID principles-PresentSOLID principles-Present
SOLID principles-PresentQuang Nguyen
 
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAkka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAlexandre Brandão Lustosa
 
Best practice for magento programming by shankar konar
Best practice for magento programming by shankar konarBest practice for magento programming by shankar konar
Best practice for magento programming by shankar konarvijaygolani
 
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...Antonio de la Torre Fernández
 
Tutorial Workgroup - Model versioning and collaboration
Tutorial Workgroup - Model versioning and collaborationTutorial Workgroup - Model versioning and collaboration
Tutorial Workgroup - Model versioning and collaborationPascalDesmarets1
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionKnoldus Inc.
 
XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...
XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...
XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...Alessandro Confetti
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in JavaIonut Bilica
 
Introduction to Object oriented Design
Introduction to Object oriented DesignIntroduction to Object oriented Design
Introduction to Object oriented DesignAmin Shahnazari
 
What is the best approach to tdd
What is the best approach to tddWhat is the best approach to tdd
What is the best approach to tddLuca Mattia Ferrari
 
Improving Code Quality Through Effective Review Process
Improving Code Quality Through Effective  Review ProcessImproving Code Quality Through Effective  Review Process
Improving Code Quality Through Effective Review ProcessDr. Syed Hassan Amin
 
Design Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID codeDesign Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID codePaulo Gandra de Sousa
 
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsHow to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsSufyaan Kazi
 
FRONTEND BOOTCAMP Session 2.pptx
FRONTEND BOOTCAMP Session 2.pptxFRONTEND BOOTCAMP Session 2.pptx
FRONTEND BOOTCAMP Session 2.pptxEhtesham46
 

Similaire à Development principles aid test automation (20)

Object Oriented Concepts and Principles
Object Oriented Concepts and PrinciplesObject Oriented Concepts and Principles
Object Oriented Concepts and Principles
 
bGenius kennissessie_20120510
bGenius kennissessie_20120510bGenius kennissessie_20120510
bGenius kennissessie_20120510
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
SOLID principles-Present
SOLID principles-PresentSOLID principles-Present
SOLID principles-Present
 
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAkka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
 
Best practice for magento programming by shankar konar
Best practice for magento programming by shankar konarBest practice for magento programming by shankar konar
Best practice for magento programming by shankar konar
 
Android architecture
Android architectureAndroid architecture
Android architecture
 
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
 
Tutorial Workgroup - Model versioning and collaboration
Tutorial Workgroup - Model versioning and collaborationTutorial Workgroup - Model versioning and collaboration
Tutorial Workgroup - Model versioning and collaboration
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test Automaion
 
XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...
XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...
XConf 2022 - Code As Data: How data insights on legacy codebases can fill the...
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in Java
 
Introduction to Object oriented Design
Introduction to Object oriented DesignIntroduction to Object oriented Design
Introduction to Object oriented Design
 
What is the best approach to tdd
What is the best approach to tddWhat is the best approach to tdd
What is the best approach to tdd
 
Improving Code Quality Through Effective Review Process
Improving Code Quality Through Effective  Review ProcessImproving Code Quality Through Effective  Review Process
Improving Code Quality Through Effective Review Process
 
SOLID design principles applied in Java
SOLID design principles applied in JavaSOLID design principles applied in Java
SOLID design principles applied in Java
 
Design Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID codeDesign Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID code
 
SOLID Design principles
SOLID Design principlesSOLID Design principles
SOLID Design principles
 
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsHow to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native Applications
 
FRONTEND BOOTCAMP Session 2.pptx
FRONTEND BOOTCAMP Session 2.pptxFRONTEND BOOTCAMP Session 2.pptx
FRONTEND BOOTCAMP Session 2.pptx
 

Dernier

Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 

Dernier (20)

Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 

Development principles aid test automation

  • 1. Development principles in test automation! David Baak david.baak@polteq.com
  • 4. 4© 2016 What is clean code? • Readable and maintainable – Straightforward – Clear intent – Logical abstractions – No surprises – Relevant in context • Minimal – Does one thing – Is easily extensible
  • 5. 5© 2016 How does clean code aid test automation? Smelly code private String szName; public void setValueBetweenOneAndThree(int u32Value) { if(!(u32Value >= 1 && u32Value <= 3)) return; HashMap<Integer, String> kv = new HashMap<Integer, String>(); kv.put(0, “RED”); kv.put(1, “GREEN”); kv.put(2, “BLUE”); szName = kv.get(u32Value - 1); } Clean code private Color color; public enum Color {RED,GREEN,BLUE}; public void setColor(Color color) { this.color = color; } Clear intent Extensible Single responsibility
  • 6. 6© 2016 Clean code - Naming • Names should be self-explanatory • Names should not carry redundant information or expose excessive implementation • Names should be pronounceable • Naming should be relevant to the problem domain There are only two hard things in Computer Science: cache invalidation and naming things. – Phil Karlton
  • 7. 7© 2015 Clean code – Naming examples  waitForIt()  findCustomerOrThrowExceptionIfNotFound(String s)  int qty_pass_s  Seller waitForAlert() int passedScenarios findCustomer(String customerName) Publisher Reseller
  • 8. 8© 2016 Clean code - SOLID Single responsibility Every module or class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class.
  • 9. 9© 2016 Clean code - SOLID Single responsibility An artifact should only have one reason to change Two reasons to change
  • 10. 10© 2016 Clean code - SOLID Open closed Use inheritance of abstract base classes or composition to reference other classes. Interface is then closed to modification, but the implementation can differ.
  • 11. 11© 2016 Clean code - SOLID • Single responsibility • Open-closed Code should be open to extension, but closed to modification Modification if we introduce Square
  • 12. 12© 2016 Clean code - SOLID Liskov substitution Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
  • 13. 13© 2016 Clean code - SOLID • Single responsibility • Open-closed • Liskov substitution All the subtypes of a base type must be able to replace this base type Rectangle r = new Square(); r.setHeight(5); r.setWidth(10); Invalid area!
  • 14. 14© 2016 Clean code - SOLID Interface segration Split interfaces which are very large into smaller and more specific ones, so that clients will only have to know about the methods that are of interest to them.
  • 15. 15© 2016 Clean code - SOLID • Single responsibility • Open-closed • Liskov substitution • Interface segregation No client should be forced to depend on methods it does not use Not every printer can email or scan
  • 16. 16© 2016 Clean code - SOLID Dependency inversion A specific form of decoupling where conventional dependency relationships established from high-level, policy-setting modules to low-level, dependency modules are inverted (i.e. reversed) for the purpose of rendering high-level modules independent of the low- level module implementation details.
  • 17. 17© 2016 Clean code - SOLID • Single responsibility • Open-closed • Liskov substitution • Interface segregation • Dependency inversion High-level modules should not depend on low-level modules. Abstractions should not depend upon details. Should not depend on concrete class
  • 18. 18© 2016 Refactoring “Code refactoring is the process of restructuring existing computer code – changing the factoring – without changing its external behavior. Refactoring improves nonfunctional attributes of the software. Advantages include improved code readability and reduced complexity; these can improve source code maintainability and create a more expressive internal architecture or object model to improve extensibility.” (source: https://en.wikipedia.org/wiki/Code_refactoring)
  • 19. 19© 2016 Refactoring - Automation code example Original String bookName = "The Hobbit"; WebElement bookTableRow = driver.findElement (By.xpath("//tbody[@class='grid']/tr/td/div[ contains(text(), '"+bookName +"')]")) .findElement(By.xpath("../..")); bookTableRow.findElement(By.xpath("td[contai ns(@class,'btn')]/div/button[text()= 'Details']")).click(); Refactored String bookName = "The Hobbit"; openBookDetails(bookName); void openBookDetails(String bookName) { … } Extract method
  • 23. 23© 2016 Stub WeatherService WeatherForecast response (source: http://xunitpatterns.com/Test%20Double%20Patterns.html getHumidity()
  • 24. 24© 2016 Spy WeatherService WeatherForecast response times called (source: http://xunitpatterns.com/Test%20Double%20Patterns.html getHumidity()
  • 25. 25© 2016 Mock WareHouse Behaviour verification (source: http://xunitpatterns.com/Test%20Double%20Patterns.html Order Order(prodName, amount) remove(prodName, amount) hasInventory(prodName, amount) fill(wareHouse)
  • 27. 27© 2016 Conclusion • Treat test automation as software development by applying proper naming, SOLID principles and refactoring. This results in: – Increased readability – Reduced complexity – Increased Maintainability – Increased Extensibility • Proper refactoring requires unit testing

Notes de l'éditeur

  1. Clarify what I mean with test abstraction and that we strive towards clean code in the test abstraction layer
  2. What is your first impression? Naming? Clarity? Clean code example does the same thing as the smelly code!
  3. Explain God classes, bloaters (methods) as signs of violating SRP. Single responsibility states that every class should only have one reason to change.
  4. Explain God classes, bloaters (methods) as signs of violating SRP. Single responsibility states that every class should only have one reason to change.
  5. Explain God classes, bloaters (methods) as signs of violating SRP. Single responsibility states that every class should only have one reason to change.
  6. 11
  7. Explain God classes, bloaters (methods) as signs of violating SRP. Single responsibility states that every class should only have one reason to change.
  8. Make sure your inheritance is justified. Remove inheritance. Make an abstract class Shape with abstract method getArea(); Implement it in both.
  9. Explain God classes, bloaters (methods) as signs of violating SRP. Single responsibility states that every class should only have one reason to change.
  10. Explain God classes, bloaters (methods) as signs of violating SRP. Single responsibility states that every class should only have one reason to change.
  11. Make an interface LoanValidator
  12. 20
  13. Dummy objects are passed around, never used. Used to fill parameter lists. Fake objects have working implementations, take shortcut e.g InMemoryTestDatabase Stubs provide canned answers to calls made during the test Spies are stubs that also record some information based e.g an email service that records how many messages it has sent. Mocks are pre-programmed with expectations which form a specification of the calls they are expected to receive. They can throw an exception if they receive a call they don't expect and are checked during verification to ensure they got all the calls they were expecting.
  14. 22
  15. 23
  16. 24
  17. 25
  18. 26