if a function takes a boolean as parameter and does different things based on that maybe it should be two functions!
same set of arguments for a lot of methods? wrap them in a class!
reek in rails identifies some smelly pieces of code
BDD: validation vs verification
requirements written as short user stories
- lightweight description of how app used.
BDD concentrates on behavior of apps rather than implementation of app
1-3 sentences, in everyday language
written by/with customer
suggested format: 3x5 cards —> customer feels more intimate
feature name (e.g. add a movie)
as a (stake holder)
so that ( I can achieve some goal)
I want to do some task
easy to reassrage prioritize
keep points per hardness of tasks (1-8)
keep track of speed of how long it would take based on past history. backlog, icebox (cold cases). product owner decides if it is done.
type of tasks
-features of direct value to customer
- chores: User Stories that are necessary, but provide no direct, obvious value to customer "
• “Find out why test suite is so slow”" – No points"
• Specific "
(ideally, implement in 1 iteration)"
(“the 5 why’s”)"
(know when to give up)"
lo-fi UI: basic pen/paper schetxhes. to avoid what i said but not what i want. – Avoid WISBNWIW* UI?" * What-I-Said-But-Not-What-I-Want
use perk chart to parallelize tasks
costumers confuse digital mockups with completed features
stick to pen/paper not photoshop something
story boards/sketches reduces confusion
don't write code befor emaking sure you need it. (validation)
delivering a story as done, when you have only done the "happy" path!!
User story: refers to single feature
• Feature: ≥1 scenarios that show different ways a feature is used
– Keywords Feature and Scenario identify respective components• Scenario: 3 - 8 steps that describe scenario
– Kept in .feature files
• Step definitions: Ruby code to test steps
– Kept in X_controller.rb files
1. Given steps represent state of world before event: preconditions
2. When steps represent event– e.g., simulate user pushing a button
3. Then steps represent expected post conditions; check if true
4. / 5. And & But extend previous step
Need a test database to run app • Then edit .features file to add features
Fake User to try Scenarios?
Tool that pretends to be user to follow scenarios of user story
• Capybara simulates browser
– Can interact with app to receive pages
– Parse the HTML
– Submit forms as a user would
$ vim feature/AddMovie.feature
Then I should be on the Create New Movie page # features/step_definitions/web_steps.rb:230
Can't find mapping from "the Create New Movie page" to a path.
Now, go and add a mapping in /home/ubuntu/cs169/1x/rottenpotatoes_hw3/features/support/paths.rb (RuntimeError)
./features/support/paths.rb:31:in `rescue in path_to'
./features/support/paths.rb:26:in `/^(?:|I )should be on (.+)$/'
features/AddMovie.feature:6:in `Then I should be on the Create New Movie page'
$ vim features/support/paths.rb add: