Port of schuchert.wikispaces.com


RpnCalculatorPrintable

RpnCalculatorPrintable

title: RPN_Calculator —

Elevator Pitch

  • For developers wishing to get practice creating systems using TDD
  • Who are interested in starting with user stories that follow the INVEST principle
  • Our RPN Calculator problem is a complete problem
  • That gives users a rich enough to practice simple TDD
  • Unlike other problems that take you through the process step by step
  • Our Product only provides the starting point from which you are expected to begin practicing

User Stories

The following list of user stories form a [[Product Backlog]]. The are additionally sectioned by Releases, each of which is given a Theme.

Release 1 - Theme: Basic Math

Release 2 - Theme: Stack Management

Release 3 - Theme: Advanced Math

Alternative Approach

As I’ve Actually Taught It

Getting Started

Here are some steps to get you started:

Project Setup

  • Create a workspace in eclipse
  • Make sure to have separate source folders, one called src, one called test
  • Add JUnit lib to your project’s classpath

TDD

  • Pick the highest listed user uncompleted user story
    • Create a test for the first uncompleted UAT
    • Get the test to compile
    • Get the test to run
    • Refactor if necessary
    • Check in your source code
  • Repeat until all UAT’s are done for the current user story
  • Repeat until all user stories for the current release are finished

RpnCalculatorCppExampleImplementation


Release 1

Addition


title: RPN_Calculator_Addition — As a user, I want to be able to add two numbers so that I don’t have to do the work manually

UAT

  • [] 8 <enter> 5 <plus> -> [13]
  • [] 8 <enter> <plus> -> [8]
  • [] 8 <plus> -> [8]
  • [] -3 <enter> 7 <plus> -> [4]
  • [4, 5, 3] <plus> -> [4, 8] -> [12] -> [12]

Subtraction


title: RPN_Calculator_Subtraction — As a user, I want to be able to subtract two numbers so that I don’t have to do the work manually

UAT

  • [] 8 <enter> 5 <minus> -> [3]
  • [] -3 <enter> -9 <minus> -> [6]
  • [] 4.2 <enter> 2.3 <minus> -> [1.9]
  • [] 3 <minus> -> [-3]
  • [] <minus> -> [0]

Multiplication


title: RPN_Calculator_Multiplication — As a user, I want to be able to multiple two numbers so that I don’t have to do the work manually

UAT

  • [] 8 <enter> 5 <times> -> [40]
  • [] 8 <enter> <times> -> [0]
  • [] -4 <enter> 2 <times> -> [-8]
  • [] .5 <enter> 10 <times> -> [5]
  • [] -7 <enter> -1 <times> -> [7]

Division


title: RPN_Calculator_Division — As a user, I want to be able to divide two numbers so that I don’t have to do the work manually

UAT

  • [] 4 <enter> 2 <divide> -> [2]
  • [] 3 <enter> 2 <divide> -> [1.5]
  • [] -4 <enter> -8 <divide> -> [.5]
  • [] 0 <enter> 5 <divide> -> [0]
  • [] 4 <enter> 0 <divide> -> division by zero error


Release 2

Review Stack


title: RPN_Calculator_Review_Stack — As a user I want to be able to review the contents of the stack so that I can confirm my numbers.

UAT

  • [] 3 <enter> 4 <enter> <display> -> [3, 4]
  • [] <display> -> []
  • [] 6 <display> [6]

Clear Stack


title: RPN_Calculator_Clear_Stack — As a user I want to be able to clear all values on the stack so that I can start from scratch whenever I want.

UAT

  • [] --> []
  • [5, 4, 3] --> []

Insert into Stack


title: RPN_Calculator_Insert_into_Stack — As a user I want to be able to insert a new number after an existing number on the stack so that I can add something in I forgot.

UAT

  • [6, 4, 19, 6, 8] 3 <enter> 311 <insert> -> [6, 4, 311, 19, 6, 8]
  • [41] 1 <enter> 19 <insert> -> [19, 41]
  • [] 4 <enter> 19 <insert> –> []/error

Replace Item on Stack


title: RPN_Calculator_Replace_Item_on_Stack — As a user I wan to be able to replace one entry on the stack with another so that I can fix a typing error.

UAT

  • [33, 2, 9] 1 <enter> 777 <replace> -> [33, 2, 777]
  • [] 2 <enter> 6 <replace> -> index error


Release 3

Square Root


title: RPN_Calculator_Square_Root — As a user I want to be able to take the square root of a number so that I don’t have to calculate it manually.

UAT

  • [4] -> [2]
  • [-4] -> error invalid number/[] (if you want to experiment with imaginary numbers, feel free to do so)

Y to X


title: RPN_Calculator_Y_to_X — As a user I want to be able to raise one number to the power of another number so that I don’t have to calculate this manually.

UAT

  • [] 6 <enter> 3 <YtoX> -> [216]
  • [] -6 <enter> 2 <YtoX> -> [36]
  • [] -6 <enter> 3 <YtoX> -> [-216]

1 over X


title: RPN_Calculator_1_over_X — As a user I want to be able to take a 1 over a number so that if I happen to divide in the wrong direction I can reverse the results to fix it rather than recalculating the division.

UAT

  • [] 10 <enter> <1overX> -> [.1]
  • [] .2 <enter> <1overX> -> [5]
  • [] -5 <enter> <1overX> -> [-.2]

Sin


title: RPN_Calculator_Sin — As a user I want to be able to calculate the sin of an angle in degrees so that I don’t have to perform the calculation manually.

UAT

  • [0] -> [0]
  • [45] -> [.7071]
  • [90] -> [1]
  • [180] -> [0]
  • [270] -> [-1]

Cos


title: RPN_Calculator_Cos — As a user I want to be able to calculate the cos of an angle in degrees so that I don’t have to perform the calculation manually.

UAT

  • [0] -> [1]
  • [45] -> [.7071]
  • [90] -> [0]
  • [180] -> [-1]
  • [270] -> [0]

Tan


title: RPN_Calculator_Tan — As a user I want to be able to calculate the tan of an angle in degrees so that I don’t have to perform the calculation manually.

UAT

  • [0] -> [0]
  • [45] -> [1]
  • [90] -> error/[]
  • [180] -> [0]
  • [270] -> error/[]

Exponentials


title: RPN_Calculator_Exponentials — As a user I can use exponential notation to enter large numbers so I do not have to enter large numbers and possibly make a mistake.

UAT

  • [] 2 <e> 3 <enter> -> [2000]
  • [] <e> 6 <enter> -> [1000000]
  • [] 1.2 <e> 4 <enter> -> [12000]
  • [] -4 <e> 5 <enter> -> [-400000]
  • [] 20 <e> -1 <enter> -> [2]

Factorials


title: RPN_Calculator_Factorials — As a user I can calculate factorials (x!) for whole numbers.

UAT

  • [] 3 <enter> <fac> -> [6]
  • [2] <fac> -> [2]
  • [8] <fac> -> [40320]


Comments

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