SlideShare a Scribd company logo
Getting Existing Code Under Tests 
@LlewellynFalco 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
90% Coverage 
in 1 Hour
1. Lock simple code 
2. Lock complex code 
3. Lock system configuration
POP QUIZ 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
QUESTION 1 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
public void closeConnection() 
{ 
var con = getConnectionForThread(); 
if (con == null) 
{ 
try 
{ 
con.close(); 
} 
catch 
{ 
//ignore 
} 
} 
} 
What’s Wrong With this code? 
Close 
Connection 
doesn’t
POSSIBLE FIXES: 
1) CHANGE CODE 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
POSSIBLE FIXES: 
1) CHANGE CODE 
2) CHANGE NAME 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
OnlyPretendToCloseConnection()
2 WRONGS != RIGHT 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
But 3 Lefts 
Do!
QUESTION 2 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
public double calculate(double amount) 
{ 
int step1 = (int) (amount * 2); 
double step2 = step1 * 1.5; 
return step2; 
} 
Original Code
public double calculate(double 
amount) 
{ 
int step1 = (int) (amount * 2); 
double step2 = step1 * 1.5; 
return step2; 
} 
public double calculate(double 
amount) 
{ 
return amount * 3; 
} 
Is this ok?
REFACTORED ORIGINAL 
1 => 3 
1 => 3 
-1 => -3 
4 => 12 
3.2 => 9.6 
-1 => -3 
4 => 12 
3.2 => 9
WHY? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
public double calculate(double amount) 
{ 
int step1 = (int) (amount * 2); 
double step2 = step1 * 1.5; 
return step2; 
} 
Original Code 
Rounds 
Down
HOW 
IMPORTANT IS 
0.6? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
FONT SIZE? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
BANKING? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
MEDICATION? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
QUESTION 3 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
THESE 415 LINES HAVE BEEN 
REFACTORED TO THESE 213 LINES. 
IS THERE A BUG? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
REFACTORED 
ORIGINAL 
ANSWER: 
ARE THE 
TESTS STILL 
PASSING? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
HOW? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Benefits of Unit Tests 
1) Specification 
2) Feedback 
3) Regression 
4) Granularity 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Benefits of Unit Tests 
1) Specification 
2) Feedback 
3) Regression 
4) Granularity 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Regression 
If I used to get : 
Then I still get : 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
LOCKING 
TEST 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
FUNCTIONAL 
IS EASY 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
WHAT DOES 
THAT MEAN? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Functional 
(referential transparency) 
Deterministic 
All inputs in 
All results out
All inputs in 
public double calculate(double amount) 
{ 
int step1 = (int) (amount * 2); 
double step2 = step1 * 1.5; 
return step2; 
} 
All results out 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
Deterministic
CAN I RUN THE CODE? 
DOES IT ALWAYS PRODUCE 
THE SAME THING? 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
public int Advance() 
{ 
return steps++; 
} 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
All inputs in?
public int age(DateTime birthDate) 
{ 
var timeSpan = DateTime.Now - 
birthDate; 
var age = DateTime.MinValue + 
timeSpan; 
return age.Year-1; 
} 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
All inputs in? 
Deterministic?
All results out? 
public void saveFile(Person info, string fileName) 
{ 
File.WriteAllText(fileName, info.ToString()); 
} 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
DEMO: 
LOCKING 
FUNCTIONAL
POKE 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
LOCKING 
NON-FUNCTIONAL 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
NON-FUNCTIONAL 
IS HARD 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Functional 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
Reduce To 
Functional 
Easy 
Hard 
Yes 
No 
? 
Reduce to 
Functional
Log 
Logging Easy 
Capture of 
behavior 
Hard 
public Logs LegacyCode(Inputs[] i) 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
Files 
(name & size is usually enough) 
FileA 34,368 
FileB 15,632 
FileC 28,453 
public FileListing LegacyCode(Inputs[] i)
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
Databases 
✔ 
public SqlStatements LegacyCode(Inputs[] i)
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
System 
& Runtime 
Configuration 
Start 
Log 
Easy Capture 
of 
Configuration 
public RuntimeConfig LegacyCode(Inputs[] i)
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
www.ApprovalTests.com 
21 episode YouTube series
pluralsight.com/kids 
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or 
redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. 
Contact Information 
@LlewellynFalco 
http://LlewellynFalco.Blogspot.com 
http://www.approvaltests.com 
http://lfal.co/ExtraResources

More Related Content

Viewers also liked

Thread base theory test
Thread base theory testThread base theory test
Thread base theory test
Llewellyn Falco
 
Approval testing from basic to advanced
Approval testing   from basic to advancedApproval testing   from basic to advanced
Approval testing from basic to advanced
Llewellyn Falco
 
The curse of knowledge
The curse of knowledgeThe curse of knowledge
The curse of knowledge
Llewellyn Falco
 
Strategy agile games 2015
Strategy   agile games 2015Strategy   agile games 2015
Strategy agile games 2015
Llewellyn Falco
 
Exploratory and Unit Testing
Exploratory and Unit TestingExploratory and Unit Testing
Exploratory and Unit Testing
Llewellyn Falco
 
Increase testability with code seams
Increase testability with code seamsIncrease testability with code seams
Increase testability with code seams
Llewellyn Falco
 
Advanced unit testing
Advanced unit testingAdvanced unit testing
Advanced unit testing
Llewellyn Falco
 
Mob Testing
Mob TestingMob Testing
Mob Testing
Maaret Pyhäjärvi
 
The curse of knowledge
The curse of knowledgeThe curse of knowledge
The curse of knowledge
Llewellyn Falco
 
TestWorksConf: Exploratory Testing an API in Mob
TestWorksConf: Exploratory Testing an API in Mob TestWorksConf: Exploratory Testing an API in Mob
TestWorksConf: Exploratory Testing an API in Mob
Maaret Pyhäjärvi
 
Mob testing
Mob testingMob testing
Mob testing
Llewellyn Falco
 
Testbash Philly: A Mob Testing Experience
Testbash Philly: A Mob Testing ExperienceTestbash Philly: A Mob Testing Experience
Testbash Philly: A Mob Testing Experience
Maaret Pyhäjärvi
 

Viewers also liked (13)

Thread base theory test
Thread base theory testThread base theory test
Thread base theory test
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
 
Approval testing from basic to advanced
Approval testing   from basic to advancedApproval testing   from basic to advanced
Approval testing from basic to advanced
 
The curse of knowledge
The curse of knowledgeThe curse of knowledge
The curse of knowledge
 
Strategy agile games 2015
Strategy   agile games 2015Strategy   agile games 2015
Strategy agile games 2015
 
Exploratory and Unit Testing
Exploratory and Unit TestingExploratory and Unit Testing
Exploratory and Unit Testing
 
Increase testability with code seams
Increase testability with code seamsIncrease testability with code seams
Increase testability with code seams
 
Advanced unit testing
Advanced unit testingAdvanced unit testing
Advanced unit testing
 
Mob Testing
Mob TestingMob Testing
Mob Testing
 
The curse of knowledge
The curse of knowledgeThe curse of knowledge
The curse of knowledge
 
TestWorksConf: Exploratory Testing an API in Mob
TestWorksConf: Exploratory Testing an API in Mob TestWorksConf: Exploratory Testing an API in Mob
TestWorksConf: Exploratory Testing an API in Mob
 
Mob testing
Mob testingMob testing
Mob testing
 
Testbash Philly: A Mob Testing Experience
Testbash Philly: A Mob Testing ExperienceTestbash Philly: A Mob Testing Experience
Testbash Philly: A Mob Testing Experience
 

Similar to Getting existing code under tests

Consumer Marketing and Collision Repar Shops - Mitchell Presentation
Consumer Marketing and Collision Repar Shops - Mitchell Presentation Consumer Marketing and Collision Repar Shops - Mitchell Presentation
Consumer Marketing and Collision Repar Shops - Mitchell Presentation
asTech
 
How to Grow Your Auto Body and Repair Business in a Consolidating Market Place
How to Grow Your Auto Body and Repair Business in a Consolidating Market PlaceHow to Grow Your Auto Body and Repair Business in a Consolidating Market Place
How to Grow Your Auto Body and Repair Business in a Consolidating Market Place
asTech
 
Technology & Ideas
Technology & IdeasTechnology & Ideas
Technology & Ideas
Andrew Spooner
 
3 ways to turbo charge your learning content strategy
3 ways to turbo charge your learning content strategy3 ways to turbo charge your learning content strategy
3 ways to turbo charge your learning content strategy
Infor HCM
 
Making the space between people and devices disappear
Making the space between people and devices disappearMaking the space between people and devices disappear
Making the space between people and devices disappear
Cong Wei
 
Customer Engagement in 2015 - NACE
Customer Engagement in 2015 - NACECustomer Engagement in 2015 - NACE
Customer Engagement in 2015 - NACE
Anlin Sethi
 
COVID-19: Strategies to Stay Secure and Ensure Business Continuity
COVID-19: Strategies to Stay Secure and Ensure Business ContinuityCOVID-19: Strategies to Stay Secure and Ensure Business Continuity
COVID-19: Strategies to Stay Secure and Ensure Business Continuity
Optiv Security
 
Joseph Bradley, IoE in action, Cisco Live
Joseph Bradley, IoE in action, Cisco LiveJoseph Bradley, IoE in action, Cisco Live
Joseph Bradley, IoE in action, Cisco Live
Felipe Lamus
 
Webinar: CYREN WebSecurity for Healthcare
Webinar: CYREN WebSecurity for HealthcareWebinar: CYREN WebSecurity for Healthcare
Webinar: CYREN WebSecurity for Healthcare
Cyren, Inc
 
Protiviti Australia Webinar IT Priorities Survey 2015
Protiviti Australia Webinar IT Priorities Survey 2015Protiviti Australia Webinar IT Priorities Survey 2015
Protiviti Australia Webinar IT Priorities Survey 2015
Grant Barker
 
Greg Corpier Telecare Global Digital Health Innovation Forum 3
Greg Corpier Telecare Global Digital Health Innovation Forum 3Greg Corpier Telecare Global Digital Health Innovation Forum 3
Greg Corpier Telecare Global Digital Health Innovation Forum 3
KC Digital Drive
 
Power Canada's Innovation Engine
Power Canada's Innovation EnginePower Canada's Innovation Engine
Power Canada's Innovation Engine
Cisco Canada
 
Thingscon Amsterdam 2015 - IoT Design Manifesto workshop
Thingscon Amsterdam 2015 - IoT Design Manifesto workshop Thingscon Amsterdam 2015 - IoT Design Manifesto workshop
Thingscon Amsterdam 2015 - IoT Design Manifesto workshop
ThingsConAMS
 
Implementing Responsible Design in a Connnected World
Implementing Responsible Design in a Connnected WorldImplementing Responsible Design in a Connnected World
Implementing Responsible Design in a Connnected World
ThingsConAMS
 
Lugano UXCONF 2011
Lugano UXCONF 2011Lugano UXCONF 2011
Lugano UXCONF 2011
Leandro Agro'
 
6 things COVID-19 has taught us
6 things COVID-19 has taught us6 things COVID-19 has taught us
6 things COVID-19 has taught us
MaggiePrinceLubawy
 
Transforming users into customers by Blake Armstrong
Transforming users into customers by Blake ArmstrongTransforming users into customers by Blake Armstrong
Transforming users into customers by Blake Armstrong
TheFamily
 
Knowledge Management & Virtual Agents
Knowledge  Management & Virtual AgentsKnowledge  Management & Virtual Agents
Knowledge Management & Virtual Agents
Earley Information Science
 
Mobile Device Tracking Seminar
Mobile Device Tracking SeminarMobile Device Tracking Seminar
Mobile Device Tracking Seminar
Brian Ahier
 
Expand Your Communication Skills within Microsoft Project 2013
Expand Your Communication Skills within Microsoft Project 2013Expand Your Communication Skills within Microsoft Project 2013
Expand Your Communication Skills within Microsoft Project 2013
International Institute for Learning
 

Similar to Getting existing code under tests (20)

Consumer Marketing and Collision Repar Shops - Mitchell Presentation
Consumer Marketing and Collision Repar Shops - Mitchell Presentation Consumer Marketing and Collision Repar Shops - Mitchell Presentation
Consumer Marketing and Collision Repar Shops - Mitchell Presentation
 
How to Grow Your Auto Body and Repair Business in a Consolidating Market Place
How to Grow Your Auto Body and Repair Business in a Consolidating Market PlaceHow to Grow Your Auto Body and Repair Business in a Consolidating Market Place
How to Grow Your Auto Body and Repair Business in a Consolidating Market Place
 
Technology & Ideas
Technology & IdeasTechnology & Ideas
Technology & Ideas
 
3 ways to turbo charge your learning content strategy
3 ways to turbo charge your learning content strategy3 ways to turbo charge your learning content strategy
3 ways to turbo charge your learning content strategy
 
Making the space between people and devices disappear
Making the space between people and devices disappearMaking the space between people and devices disappear
Making the space between people and devices disappear
 
Customer Engagement in 2015 - NACE
Customer Engagement in 2015 - NACECustomer Engagement in 2015 - NACE
Customer Engagement in 2015 - NACE
 
COVID-19: Strategies to Stay Secure and Ensure Business Continuity
COVID-19: Strategies to Stay Secure and Ensure Business ContinuityCOVID-19: Strategies to Stay Secure and Ensure Business Continuity
COVID-19: Strategies to Stay Secure and Ensure Business Continuity
 
Joseph Bradley, IoE in action, Cisco Live
Joseph Bradley, IoE in action, Cisco LiveJoseph Bradley, IoE in action, Cisco Live
Joseph Bradley, IoE in action, Cisco Live
 
Webinar: CYREN WebSecurity for Healthcare
Webinar: CYREN WebSecurity for HealthcareWebinar: CYREN WebSecurity for Healthcare
Webinar: CYREN WebSecurity for Healthcare
 
Protiviti Australia Webinar IT Priorities Survey 2015
Protiviti Australia Webinar IT Priorities Survey 2015Protiviti Australia Webinar IT Priorities Survey 2015
Protiviti Australia Webinar IT Priorities Survey 2015
 
Greg Corpier Telecare Global Digital Health Innovation Forum 3
Greg Corpier Telecare Global Digital Health Innovation Forum 3Greg Corpier Telecare Global Digital Health Innovation Forum 3
Greg Corpier Telecare Global Digital Health Innovation Forum 3
 
Power Canada's Innovation Engine
Power Canada's Innovation EnginePower Canada's Innovation Engine
Power Canada's Innovation Engine
 
Thingscon Amsterdam 2015 - IoT Design Manifesto workshop
Thingscon Amsterdam 2015 - IoT Design Manifesto workshop Thingscon Amsterdam 2015 - IoT Design Manifesto workshop
Thingscon Amsterdam 2015 - IoT Design Manifesto workshop
 
Implementing Responsible Design in a Connnected World
Implementing Responsible Design in a Connnected WorldImplementing Responsible Design in a Connnected World
Implementing Responsible Design in a Connnected World
 
Lugano UXCONF 2011
Lugano UXCONF 2011Lugano UXCONF 2011
Lugano UXCONF 2011
 
6 things COVID-19 has taught us
6 things COVID-19 has taught us6 things COVID-19 has taught us
6 things COVID-19 has taught us
 
Transforming users into customers by Blake Armstrong
Transforming users into customers by Blake ArmstrongTransforming users into customers by Blake Armstrong
Transforming users into customers by Blake Armstrong
 
Knowledge Management & Virtual Agents
Knowledge  Management & Virtual AgentsKnowledge  Management & Virtual Agents
Knowledge Management & Virtual Agents
 
Mobile Device Tracking Seminar
Mobile Device Tracking SeminarMobile Device Tracking Seminar
Mobile Device Tracking Seminar
 
Expand Your Communication Skills within Microsoft Project 2013
Expand Your Communication Skills within Microsoft Project 2013Expand Your Communication Skills within Microsoft Project 2013
Expand Your Communication Skills within Microsoft Project 2013
 

More from Llewellyn Falco

Lets connect linked_in
Lets connect linked_inLets connect linked_in
Lets connect linked_in
Llewellyn Falco
 
Test driven development done well
Test driven development done wellTest driven development done well
Test driven development done well
Llewellyn Falco
 
Do not use the greater than sign in programming
Do not use the greater than sign in programmingDo not use the greater than sign in programming
Do not use the greater than sign in programming
Llewellyn Falco
 
Cutting code quickly
Cutting code quicklyCutting code quickly
Cutting code quickly
Llewellyn Falco
 
The falco technical coaching framework
The falco technical coaching frameworkThe falco technical coaching framework
The falco technical coaching framework
Llewellyn Falco
 
Expressive objects
Expressive objectsExpressive objects
Expressive objects
Llewellyn Falco
 
Roi on learning hour
Roi on learning hourRoi on learning hour
Roi on learning hour
Llewellyn Falco
 
Mob programming
Mob programmingMob programming
Mob programming
Llewellyn Falco
 
Developing design sense of code smells
Developing design sense of code smellsDeveloping design sense of code smells
Developing design sense of code smells
Llewellyn Falco
 
Exceptional exceptions
Exceptional exceptionsExceptional exceptions
Exceptional exceptions
Llewellyn Falco
 
Koans randori role cards
Koans randori role cardsKoans randori role cards
Koans randori role cardsLlewellyn Falco
 
Teaching kids programming with the Intentional Method
Teaching kids programming with the Intentional MethodTeaching kids programming with the Intentional Method
Teaching kids programming with the Intentional MethodLlewellyn Falco
 
Some Helpful Observations for successful Mob Programming
Some Helpful Observations for successful Mob ProgrammingSome Helpful Observations for successful Mob Programming
Some Helpful Observations for successful Mob Programming
Llewellyn Falco
 
State of teaching in video games
State of teaching in video gamesState of teaching in video games
State of teaching in video games
Llewellyn Falco
 
Do it yourself Code Report (blank)
Do it yourself Code Report (blank) Do it yourself Code Report (blank)
Do it yourself Code Report (blank)
Llewellyn Falco
 
The code report (v1)
The code report (v1)The code report (v1)
The code report (v1)
Llewellyn Falco
 

More from Llewellyn Falco (17)

Lets connect linked_in
Lets connect linked_inLets connect linked_in
Lets connect linked_in
 
Test driven development done well
Test driven development done wellTest driven development done well
Test driven development done well
 
Do not use the greater than sign in programming
Do not use the greater than sign in programmingDo not use the greater than sign in programming
Do not use the greater than sign in programming
 
Cutting code quickly
Cutting code quicklyCutting code quickly
Cutting code quickly
 
The falco technical coaching framework
The falco technical coaching frameworkThe falco technical coaching framework
The falco technical coaching framework
 
Expressive objects
Expressive objectsExpressive objects
Expressive objects
 
Roi on learning hour
Roi on learning hourRoi on learning hour
Roi on learning hour
 
Mob programming
Mob programmingMob programming
Mob programming
 
Developing design sense of code smells
Developing design sense of code smellsDeveloping design sense of code smells
Developing design sense of code smells
 
Exceptional exceptions
Exceptional exceptionsExceptional exceptions
Exceptional exceptions
 
Koans randori role cards
Koans randori role cardsKoans randori role cards
Koans randori role cards
 
Teaching kids programming with the Intentional Method
Teaching kids programming with the Intentional MethodTeaching kids programming with the Intentional Method
Teaching kids programming with the Intentional Method
 
How Games Teach
How Games TeachHow Games Teach
How Games Teach
 
Some Helpful Observations for successful Mob Programming
Some Helpful Observations for successful Mob ProgrammingSome Helpful Observations for successful Mob Programming
Some Helpful Observations for successful Mob Programming
 
State of teaching in video games
State of teaching in video gamesState of teaching in video games
State of teaching in video games
 
Do it yourself Code Report (blank)
Do it yourself Code Report (blank) Do it yourself Code Report (blank)
Do it yourself Code Report (blank)
 
The code report (v1)
The code report (v1)The code report (v1)
The code report (v1)
 

Recently uploaded

Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 

Recently uploaded (20)

Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 

Getting existing code under tests

  • 1.
  • 2. Getting Existing Code Under Tests @LlewellynFalco Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 4. 1. Lock simple code 2. Lock complex code 3. Lock system configuration
  • 5. POP QUIZ Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 6. QUESTION 1 Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 7. public void closeConnection() { var con = getConnectionForThread(); if (con == null) { try { con.close(); } catch { //ignore } } } What’s Wrong With this code? Close Connection doesn’t
  • 8. POSSIBLE FIXES: 1) CHANGE CODE Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 9. POSSIBLE FIXES: 1) CHANGE CODE 2) CHANGE NAME Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 11. 2 WRONGS != RIGHT Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 12. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. But 3 Lefts Do!
  • 13. QUESTION 2 Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 14. public double calculate(double amount) { int step1 = (int) (amount * 2); double step2 = step1 * 1.5; return step2; } Original Code
  • 15. public double calculate(double amount) { int step1 = (int) (amount * 2); double step2 = step1 * 1.5; return step2; } public double calculate(double amount) { return amount * 3; } Is this ok?
  • 16. REFACTORED ORIGINAL 1 => 3 1 => 3 -1 => -3 4 => 12 3.2 => 9.6 -1 => -3 4 => 12 3.2 => 9
  • 17. WHY? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 18. public double calculate(double amount) { int step1 = (int) (amount * 2); double step2 = step1 * 1.5; return step2; } Original Code Rounds Down
  • 19. HOW IMPORTANT IS 0.6? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 20. FONT SIZE? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 21. BANKING? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 22. MEDICATION? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 23. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 24. QUESTION 3 Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 25. THESE 415 LINES HAVE BEEN REFACTORED TO THESE 213 LINES. IS THERE A BUG? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 27. ANSWER: ARE THE TESTS STILL PASSING? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 28. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 29. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 30. HOW? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 31. Benefits of Unit Tests 1) Specification 2) Feedback 3) Regression 4) Granularity Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 32. Benefits of Unit Tests 1) Specification 2) Feedback 3) Regression 4) Granularity Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 33. Regression If I used to get : Then I still get : Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 34. LOCKING TEST Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 35. FUNCTIONAL IS EASY Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 36. WHAT DOES THAT MEAN? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 37. Functional (referential transparency) Deterministic All inputs in All results out
  • 38. All inputs in public double calculate(double amount) { int step1 = (int) (amount * 2); double step2 = step1 * 1.5; return step2; } All results out Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. Deterministic
  • 39. CAN I RUN THE CODE? DOES IT ALWAYS PRODUCE THE SAME THING? Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 40. public int Advance() { return steps++; } Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. All inputs in?
  • 41. public int age(DateTime birthDate) { var timeSpan = DateTime.Now - birthDate; var age = DateTime.MinValue + timeSpan; return age.Year-1; } Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. All inputs in? Deterministic?
  • 42. All results out? public void saveFile(Person info, string fileName) { File.WriteAllText(fileName, info.ToString()); } Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 43. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. DEMO: LOCKING FUNCTIONAL
  • 44. POKE Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 45. LOCKING NON-FUNCTIONAL Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 46. NON-FUNCTIONAL IS HARD Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 47. Functional Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. Reduce To Functional Easy Hard Yes No ? Reduce to Functional
  • 48. Log Logging Easy Capture of behavior Hard public Logs LegacyCode(Inputs[] i) Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 49. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. Files (name & size is usually enough) FileA 34,368 FileB 15,632 FileC 28,453 public FileListing LegacyCode(Inputs[] i)
  • 50. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. Databases ✔ public SqlStatements LegacyCode(Inputs[] i)
  • 51. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. System & Runtime Configuration Start Log Easy Capture of Configuration public RuntimeConfig LegacyCode(Inputs[] i)
  • 52. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. www.ApprovalTests.com 21 episode YouTube series
  • 53. pluralsight.com/kids Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc.
  • 54. Confidential and Proprietary and belongs to Mitchell. This document, or its contents, is NOT to be shared or redistributed without the express consent of Mitchell International. ©2014 Mitchell International, Inc. Contact Information @LlewellynFalco http://LlewellynFalco.Blogspot.com http://www.approvaltests.com http://lfal.co/ExtraResources

Editor's Notes

  1. Both
  2. Both
  3. Both
  4. Both
  5. Both