SAM PuttLab Report - Golf Academy Papendal, beter golfen ...
Beter code for better tests
-
Upload
gil-zilberfeld -
Category
Software
-
view
413 -
download
0
Transcript of Beter code for better tests
![Page 1: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/1.jpg)
@gil_zilberfeld@gil_zilberfeld
Better codefor better tests
![Page 2: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/2.jpg)
@gil_zilberfeld
Hello!
I AM GIL ZILBERFELD
www.gilzilberfeld.com
www.everydayunittesting.com
@gil_zilberfeld
![Page 3: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/3.jpg)
@gil_zilberfeld
First things first
◉ You need an IDE and a test framework
◉ You need the Gilded Rose code
◉ Make sure it compiles and you can write tests
that run
![Page 4: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/4.jpg)
@gil_zilberfeld
Agenda
◉ Testing legacy code
◉ Making legacy code testable
◉ Testable code with TDD
![Page 5: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/5.jpg)
@gil_zilberfeld@gil_zilberfeld
What makes code testable?
How would you ask a programmer to make it so?
![Page 6: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/6.jpg)
@gil_zilberfeld
Exercise: The Gilded Rose
◉ Check out the code
◉ Create a test plan just from the code
◉ Do not share with other teams
![Page 7: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/7.jpg)
@gil_zilberfeld
Exercise: Write tests
◉ According to your test plan
◉ Without changing the code
◉ What is hard?
◉ What is easy?
![Page 8: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/8.jpg)
@gil_zilberfeld
Exercise: Test plan from requirements
◉ Add test cases according to the requirements
◉ Compare to the other test plan
◉ How is it different?
◉ How much impact does having the code and
requirement have?
![Page 9: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/9.jpg)
@gil_zilberfeld@gil_zilberfeld
How does legacy code happen?
![Page 10: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/10.jpg)
@gil_zilberfeld
The origin of legacy code
◉ Decisions taken too early
◉ Architecture is hard to change
◉ Centered around frameworks (and databases)
◉ Business logic is spread around
![Page 11: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/11.jpg)
@gil_zilberfeld
Problems with legacy code
◉ Hard to find things
◉ Focus on technical aspects
◉ Not built for testing
![Page 12: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/12.jpg)
@gil_zilberfeld@gil_zilberfeld
Refactoring for testability
![Page 13: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/13.jpg)
@gil_zilberfeld
Better understanding
◉ Organize classes and files
◉ Rename classes
◉ Rename methods
◉ Rename files
![Page 14: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/14.jpg)
@gil_zilberfeld
Better accessibility
◉ Change accessibility
◉ Introduce Field
◉ Add accessors
◉ Expose interfaces
◉ Introduce interface
◉ Add overload
![Page 15: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/15.jpg)
@gil_zilberfeld
Reduce dependencies
◉ Move method
◉ Extract class
◉ Extract method
◉ Introduce Parameter
![Page 16: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/16.jpg)
@gil_zilberfeld
Shared state issues
◉ Databases
◉ Files
◉ In-memory state
◉ Setup
◉ Clean up and error handling
![Page 17: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/17.jpg)
@gil_zilberfeld
Exercise: Code modifications
◉ Small changes
◉ Make code clear and easy to test
◉ Make tests pass (obviously)
![Page 18: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/18.jpg)
@gil_zilberfeld@gil_zilberfeld
Test driven development
To boldly go where no code has been before
![Page 19: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/19.jpg)
@gil_zilberfeld
The TDD Cycle
![Page 20: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/20.jpg)
@gil_zilberfeld
The three rules of TDD
◉ You may not write production code until you have
written a failing test
◉ You may not write more than one unit test than is
sufficient to fail, and not compiling is failing
◉ You may not write more production code than is
sufficient to pass the current test
![Page 21: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/21.jpg)
@gil_zilberfeld
Let’s build a lightsaber!
![Page 22: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/22.jpg)
@gil_zilberfeld
Exercise: Lightsaber
◉ Build a test plan for a light saber
![Page 23: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/23.jpg)
@gil_zilberfeld@gil_zilberfeld
TDD Lightsaber
![Page 24: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/24.jpg)
@gil_zilberfeld
Exercise
◉ Write test-first
◉ Better in pairs
◉ What is easy
◉ What is hard
◉ How is that different than the other exercises
![Page 25: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/25.jpg)
@gil_zilberfeld
BENEFITS
Same tools
Better coverage
Less debugging
Better design
Think before your
code!
You can also split your content
ISSUES
Requires discipline
Works better for
greenfield projects
Takes time to get to great
results
The light side vs the dark side
![Page 26: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/26.jpg)
@gil_zilberfeld
Summary
◉ Code has a lot if impact on how tests look like
◉ Understand the code
◉ Demand testability
◉ Collaborate for better code and better tests
![Page 27: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/27.jpg)
@gil_zilberfeld@gil_zilberfeld
Resources
![Page 28: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/28.jpg)
@gil_zilberfeld
Resources
◉ Michael Feathers - Working effectively with legacy
code
◉ “Uncle Bob” Robert Martin - Clean code, The clean
coder
◉ Martin Fowler – Refactoring
![Page 29: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/29.jpg)
@gil_zilberfeld
Resources
◉ Josh Kerievsky – Refactoring to patterns
◉ GoF – Design patterns
◉ Kathy Sierra, Elisabeth Freeman – Head first
design patterns
◉Kent Beck - Test driven development by example,
Extreme programming explained
![Page 30: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/30.jpg)
@gil_zilberfeld
Resources
◉ Code katas– CodeKatas.Org
◉ Cyber Dojo- Cyber-Dojo.org
![Page 31: Beter code for better tests](https://reader030.fdocuments.in/reader030/viewer/2022020301/5a649ded7f8b9a76568b4d77/html5/thumbnails/31.jpg)
@gil_zilberfeld
Thanks!
ANY QUESTIONS?
You can find me at:
@gil_zilberfeld
http://www.GilZilberfeld.com
http://www.EverydayUnitTesting.com
http://www.fastee.im