Introduction to Test Driven Development

(Difference between revisions)
Jump to: navigation, search
m (Additional Information:)
m (added knowledge unit)
Line 53: Line 53:
 
|-  
 
|-  
 
|'''Knowledge Area/Knowledge Unit''' ||   
 
|'''Knowledge Area/Knowledge Unit''' ||   
Software Engineering
+
Software Engineering / SE Software Verification Validation
 
|-
 
|-
 
|'''Topic''' ||   
 
|'''Topic''' ||   

Revision as of 04:57, 16 October 2016

Title

Introduction to Test-Driven Development (TDD)

Overview

Participants write a unit test (in GoogleTest) and corresponding C++ code to pass the test to verify the test passes

Prerequisite Knowledge

GoogleTest needed to have been installed (as instructed in Unit Test With GoogleTest Activity) and intermediate C++ expertise.

Learning Objectives

Participant should be able to learn how to follow "Red light, green light" Test-Driven Development process and reflect over the approach.

Directions:

Students:

  • This exercise continues from Unit Test With GoogleTest Activity
  • Open the local directory where you cloned cpp-gtest.
  • Edit RandoTest.cpp and review the syntax of the tests we used for the shouldWorry function, which should look like:

TEST(/*ClassName*/, /*DescriptiveNameOfTest*/)
{
 /**
  * Declare an object of the class' type
  * then call the function and assert your expected outcome
 **/
}

  • Write one (and only one) test for the function isDivisibleBy:

 /**
  * Determines if first or second are evenly divisible by the other.
 **/

  • Next, make the project. After it builds, run ./RandoTest. Your test should fail (and highlight in red).
  • Since you now have a failing test, you should write code specifically to resolve that failed test. Edit rando.cpp to update the solution. When you think you have resolved the failed test, repeat building the project and running the tests. If your test still fails, return and continue to fix the function until it passes.
  • Once your first test passes, then you can repeat this process: write a test, run the test (with failure), write the solution, run the test (until passing).
  • Repeat this process until you have decided that your tests would fail any wrong implementation and would pass any right implementation. Then, read over your implemented code and refactor it to make sure it uses good style, is consistent with its documentation, and fits within its class.
  • This method is specifically called "Red Light, Green Light" Test-Driven Development, where the green light represents a passing test that indicates you can go on to the next test-develop cycle. Test-Driven Development was popularized as a part of eXtreme Programming by Kent Beck who summarized it as "Test-a-little, Code-a-little."
  • Now that you have practiced Test-Driven Development (TDD), write one paragraph to summarize your thoughts. How did testing first impact how you thought about the problem? What do you think is the biggest benefit of TDD? What do you find most challenging? Submit your paragraph for this assignment.

Deliverables:

A paragraph reflecting on first experiences with Test-Driven Development

Assessment:

Students should demonstrate meta-cognition of reflecting over their first experience with Test-Driven Development and how it impacted their approach to programming

Comments:

Additional Information:

Knowledge Area/Knowledge Unit

Software Engineering / SE Software Verification Validation

Topic

Test-Driven Development

Level of Difficulty

Programming a new unit test takes intermediate expertise of C++ and imperative programming

Estimated Time to Completion

Writing a new unit test and its corresponding solution should take between 20-40 minutes. Writing a reflection on the process should take an additional 10 minutes for a total of up to 50 minutes.

Materials/Environment

Need to have completed [Unit Test With GoogleTest Activity] installation process

Author

Kevin Buffardi

Source

Kevin Buffardi

License

Licensed CC BY-SA 4.0



This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License

CC license.png

Personal tools
Namespaces
Variants
Actions
Events
Learning Resources
HFOSS Projects
Evaluation
Navigation
Toolbox