Writing Software not code With. Ben Mabey
|
|
|
- Claude Shaw
- 10 years ago
- Views:
Transcription
1 Writing Software not code With Ben Mabey
2 Writing Software not code With Ben Mabey
3 Writing Software not code With Behaviour Driven Development Ben Mabey
4 ?
5
6 Tweet in the blanks... "most software projects are like " #rubyhoedown #cucumber
7 "most software projects are like " #rubyhoedown #cucumber
8
9
10 So... why are software projects like The Homer?
11
12
13
14 Feature Devotion Placing Text emphasis on features instead of overall outcome
15
16 Shingeo Shingo of Toyota says...
17 "Inspection to find defects is waste."
18 "Inspection to find defects is waste." "Inspection to prevent defects is essential."
19 56% of all bugs are introduced in requirements. (CHAOS Report)
20 Root Cause Analysis
21 Popping the Why Stack...
22
23 Protect Revenue Increase Revenue Manage Cost
24
25 Feature: title * not executed * documentation value * variant of contextra * business value up front In order to [Business Value] As a [Role] I want to [Some Action] (feature)
26 There is no template. What is important to have in narrative: * business value * stakeholder role * user role * action to be taken by user
27 <rant>
28 Writing Software not code With Behaviour Driven Development Ben Mabey
29 != BDD
30 != BDD
31 RSpec!= BDD
32 RSpec!= BDD
33 All of these tools are great... but, in the, tools are tools. While RSpec and Cucumber are optimized for BDD, using them doesn t automatically mean you re doing BDD" The RSpec Book
34 BDD is a mindset not a tool set
35 </rant>
36 Feature: title * not executed * documentation value * variant of contextra * business value up front In order to [Business Value] As a [Role] I want to [Some Action] (feature)
37 Scenario: title Given [Context] When I do [Action] Then I should see [Outcome]
38 Scenario: title Given [Context] And [More Context] When I do [Action] And [Other Action] Then I should see [Outcome] But I should not see [Outcome]
39 project_root/ `-- features
40 project_root/ `-- features -- awesomeness.feature -- greatest_ever.feature
41 project_root/ `-- features -- awesomeness.feature -- greatest_ever.feature `-- support -- env.rb `-- other_helpers.rb
42 project_root/ `-- features -- awesomeness.feature -- greatest_ever.feature `-- support -- env.rb `-- other_helpers.rb -- step_definitions -- domain_concept_a.rb `-- domain_concept_b.rb
43 Step Given a widget
44 Step Definition Given a widget Given /^a widget$/ do #codes go here
45 Step Definition Step Mother Given a widget Given /^a widget$/ do #codes go here
46 Step Definition Step Mother Given a widget Given /^a widget$/ do #codes go here
47
48
49
50 28+ Languages
51 28+ Languages
52 28+ Languages RSpec, Test::Unit, etc
53 28+ Languages Your Code RSpec, Test::Unit, etc
54 Not Just for Rails
55 Outside-In
56
57
58 Write Scenarios
59 Steps are ping
60 Write Step Definition
61 Go Down A Gear
62 RSpec, TestUnit, etc
63 Write Code Example (Unit Test)
64 Make Example Pass
65 REFACTOR!!
66 Where Are we?
67 Continue until...
68 REFACTOR and REPEAT
69 features/manage_my_wishes.feature Feature: manage my wishes In order to get more stuff As a greedy person I want to manage my wish list for my family members to Scenario: add Scenario: remove Scenario: tweet wish
70 features/manage_my_wishes.feature Feature: manage my wishes In order to get more stuff Work In Progress As a greedy person I want to manage my wish list for my family members to Scenario: add wish Given I am logged in When I make a "New car" wish Then "New car" should appear on my wish Scenario: remove Scenario: tweet wish
71 Workflow
72 Workflow git branch -b add_wish_tracker#
73 Workflow git branch -b add_wish_tracker# Tag Scenario or Feature
74 Workflow git branch -b add_wish_tracker# Tag Scenario or Feature cucumber --wip
75 Workflow git branch -b add_wish_tracker# Tag Scenario or Feature cucumber --wip Develop it Outside-In
76 Workflow git branch -b add_wish_tracker# Tag Scenario or Feature cucumber --wip Develop it Outside-In git rebase ---interactive; git merge
77 Workflow git branch -b add_wish_tracker# Tag Scenario or Feature cucumber --wip Develop it Outside-In git rebase ---interactive; git merge Repeat!
78 @wip on master?
79 @wip on master? $ rake -T cucumber
80 @wip on master? $ rake -T cucumber rake cucumber:ok OR rake cucumber
81 @wip on master? $ rake -T cucumber rake cucumber:ok OR rake cucumber cucumber --tags ~@wip --strict
82 @wip on master? $ rake -T cucumber Tag Exclusion rake cucumber:ok OR rake cucumber cucumber --tags ~@wip --strict
83 @wip on master? $ rake -T cucumber
84 @wip on master? $ rake -T cucumber rake cucumber:wip
85 @wip on master? $ rake -T cucumber rake cucumber:wip cucumber --wip
86 @wip on master? $ rake -T cucumber rake cucumber:wip Limit tags in flow cucumber --wip
87 @wip on master? $ rake -T cucumber rake cucumber:wip Limit tags in flow cucumber --wip Expect failure - Success == Failure
88 @wip on master? $ rake -T cucumber rake cucumber:all Runs both ok and wip -- great for CI
89 features/manage_my_wishes.feature Feature: manage my wishes In order to get more stuff As a greedy person I want to manage my wish list for my family members to Scenario: add wish Given I am logged in When I make a "New car" wish Then "New car" should appear on my wish Scenario: remove Scenario: tweet wish
90
91 Line # of scenario
92
93 Look Ma! backtraces! Given I am logged in #features/manage_my_wishes.feature:8
94
95
96 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true)
97 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) Test Data Builder / Object Mother
98 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) Fixture Replacement, Fixjour, Factory Girl, etc spec/fixjour_builders.rb Fixjour do define_builder(user) do klass, overrides klass.new( : => "user#{counter(:user)}@ .com", :password => 'password', :password_confirmation => 'password' )
99 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true)
100 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button
101 features/step_definitions/user_steps.rb Webrat / Awesomeness Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button
102 features/step_definitions/user_steps.rb Webrat / Awesomeness Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button
103 features/step_definitions/user_steps.rb Webrat / Awesomeness Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button features/support/env.rb require 'webrat' Webrat.configure do config config.mode = :rails
104 features/step_definitions/user_steps.rb Webrat / Awesomeness Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button features/support/env.rb require 'webrat' Webrat.configure do config config.mode = :rails Adapter
105 features/step_definitions/user_steps.rb Webrat / Awesomeness Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button features/step_definitions/webrat_steps.rb When /^I press "(.*)"$/ do button click_button(button) When /^I follow "(.*)"$/ do link click_link(link) 20+ Steps Out-of-box When /^I fill in "(.*)" with "(.*)"$/ do field, value fill_in(field, :with => value)
106 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button
107 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button # make sure we have actually logged in- so we fail fast if not session[:user_id].should
108 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button # make sure we have actually logged in- so we fail fast if not session[:user_id].should controller.current_user.should
109 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path Specify fill_in " ", outcome, :with not implementation. fill_in "Password", :with => valid_user_attributes["password"] click_button # make sure we have actually logged in- so we fail fast if not session[:user_id].should controller.current_user.should response.should contain("signed in successfully")
110 features/step_definitions/user_steps.rb Given /^I am logged in$/ = create_user(: _confirmed => true) visit new_session_path fill_in " ", :with fill_in "Password", :with => valid_user_attributes["password"] click_button # make sure we have actually logged in- so we fail fast if not response.should contain("signed in successfully")
111
112 No route matches /sessions/create with {:method=>:post} (ActionController::RoutingError)
113 I m going to cheat...
114 I m going to cheat... $ gem install thoughtbot-clearance $./script generate clearance $./script generate clearance_features
115 Authlogic?
116
117 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish Then /^(.+) should appear on my wish list$/ do wish
118 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish Then /^(.+) should appear on my wish list$/ do wish Regexp Capture -> Yielded Variable
119 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish visit "/wishes" click_link "Make a wish" fill_in "Wish", :with => wish click_button Then /^(.+) should appear on my wish list$/ do wish
120 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish visit "/wishes" click_link "Make a wish" fill_in "Wish", :with => wish click_button Then /^(.+) should appear on my wish list$/ do wish response.should contain("your wish has been added!") response.should contain(wish)
121 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish visit "/wishes" click_link "Make a wish" fill_in "Wish", :with => wish click_button No route matches /wishes with {:method=>:get} (ActionController::RoutingError) Then /^(.+) should appear on my wish list$/ do wish response.should contain("your wish has been added!") response.should contain(wish)
122 config/routes.rb ActionController::Routing::Routes.draw do map map.resources :wishes
123 config/routes.rb ActionController::Routing::Routes.draw do map map.resources :wishes When I make a New car wish uninitialized constant WishesController (NameError)
124 config/routes.rb ActionController::Routing::Routes.draw do map map.resources :wishes $./script generate rspec_controller new create
125 config/routes.rb ActionController::Routing::Routes.draw do map map.resources :wishes When I make a New car wish Could not find link with text or title or id Make a wish (Webrat::NotFoundError)
126 app/views/wishes/index.html.erb <%= link_to "Make a wish", new_wish_path %>
127 app/views/wishes/index.html.erb <%= link_to "Make a wish", new_wish_path %> When I make a New car wish Could not find field: Wish (Webrat::NotFoundError)
128 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish visit "/wishes" click_link "Make a wish" fill_in "Wish", :with => wish click_button
129 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish visit "/wishes" click_link "Make a wish" fill_in "Wish", :with => wish click_button app/views/wishes/new.html.erb <% form_for :wish do f %> <%= f.label :name, "Wish" %> <%= f.text_field :name %> <%= submit_tag "Make the wish!" %> <% %>
130 features/step_definitions/wish_steps.rb When /^I make a "(.+)" wish$/ do wish visit "/wishes" click_link "Make a wish" fill_in "Wish", :with => wish click_button app/views/wishes/new.html.erb <% form_for :wish do f %> <%= f.label :name, "Wish" %> <%= f.text_field :name %> <%= submit_tag "Make the wish!" %> <% %> Location Strategy FTW!
131 View Controller
132 spec/controllers/wishes_controller_spec.rb describe WishesController do describe "POST / (#create)" do
133 spec/controllers/wishes_controller_spec.rb describe WishesController do describe "POST / (#create)" do it "creates a new wish for the user with the params" do user = mock_model(user, :wishes => mock("wishes association")) controller.stub!(:current_user).and_return(user) user.wishes.should_receive(:create).with(wish_params) post :create, 'wish' => {'name' => 'Dog'}
134 app/controllers/wishes_controller.rb class WishesController < ApplicationController def create current_user.wishes.create(params['wish'])
135 spec/controllers/wishes_controller_spec.rb describe WishesController do describe "POST / (#create)" do before(:each) do... it "redirects the user to their wish list" do do_post response.should redirect_to(wishes_path)
136 app/controllers/wishes_controller.rb def create current_user.wishes.create(params['wish']) redirect_to :action => :index
137 View Controller Model
138 app/controllers/wishes_controller.rb def create current_user.wishes.create(params['wish']) redirect_to :action => :index When I make a New car wish undefined method `wishes` for #<User:0x268e898> (NoMethodError)
139 app/controllers/wishes_controller.rb def create current_user.wishes.create(params['wish']) redirect_to :action => :index $./script generate rspec_model wish name:string user_id:integer
140 app/models/wish.rb class Wish < ActiveRecord::Base belongs_to :user app/models/user.rb class User < ActiveRecord::Base include Clearance::App::Models::User has_many :wishes
141 app/models/wish.rb class Wish < ActiveRecord::Base belongs_to :user app/models/user.rb When I make a New car wish Then New car should appear on my wish expected the following element s content to include Your wish has been added! class User < ActiveRecord::Base include Clearance::App::Models::User has_many :wishes
142 spec/controllers/wishes_controller_spec.rb it "notifies the user of creation via the flash" do do_post flash[:success].should == "Your wish has been added!"
143 spec/controllers/wishes_controller_spec.rb it "notifies the user of creation via the flash" do do_post flash[:success].should == "Your wish has been added!" app/controllers/wishes_controller.rb def create current_user.wishes.create(params['wish']) flash[:success] = "Your wish has been added!" redirect_to :action => :index
144 spec/controllers/wishes_controller_spec.rb it "should notifies the user of creation via the flash" do do_post flash[:success].should == "Your wish has been added!" app/controllers/wishes_controller.rb Then New car should appear on my wish expected the following element s content to include New car def create current_user.wishes.create(params['wish']) flash[:success] = "Your wish has been added!" redirect_to :action => :index
145 app/views/wishes/index.html.erb <ul> do wish %> <li><%= wish.name %></li> <% %> </ul>
146 spec/controllers/wishes_controller_spec.rb describe "GET / (#index)" do def do_get get :index it "assigns the user's wishes to the view" do do_get assigns[:wishes].should
147 app/controllers/wishes_controller.rb def = current_user.wishes
148
149 How do I test JS and AJAX? FAQ
150
151 Slow Fast
152 Slow Integrated Fast Isolated
153 Slow Integrated Fast Isolated
154 Slow Integrated Fast Isolated
155 Slow Integrated Fast Isolated
156 Slow Integrated Fast Isolated
157 Slow Fast
158 Slow Fast Joyful
159 Slow Painful Fast Joyful
160 Slow Painful Celerity Fast Joyful
161 Celerity
162 Celerity HtmlUnit
163 Celerity HtmlUnit
164 Celerity HtmlUnit
165 Celerity HtmlUnit
166 require "rubygems" require "celerity" browser = Celerity::Browser.new browser.goto(' browser.text_field(:name, 'q').value = 'Celerity' browser.button(:name, 'btng').click puts "yay" if browser.text.include? 'celerity.rubyforge.org'
167 What if I use MRI?
168 Culerity
169 require "rubygems" require "culerity" culerity_server = Culerity::run_server browser = Culerity::RemoteBrowserProxy.new(culerity_server) browser.goto(' browser.text_field(:name, 'q').value = 'Celerity' browser.button(:name, 'btng').click puts "yay" if browser.text.include? 'celerity.rubyforge.org'
170 Celerity +
171 HtmlUnit +
172 CodeNote
173 Feature: CLI Server In order to save me time and headaches As a presenter of code I create a presentation in plaintext a'la Slidedown (from Pat Nakajima) and have CodeNote serve it up for me For example of how to test CLI tools take a look at CodeNote on github. RSpec and Cucumber also have good examples of how to do this. Scenario: basic presentation loading and viewing Given that the codenote server is not running And a file named "presentation.md" with: """!TITLE My Presentation!PRESENTER Ben Mabey # This is the title slide!slide # This is second slide... """ When I run "codenote_load presentation.md" And I run "codenote" And I visit the servers address
174 Feature: Twitter Quiz In order to encourage audience participation where 90% of the audience is hacking on laptops As a presenter I want audience members To answer certain questions via twitter
175 Feature: Twitter Quiz In order to encourage audience participation where 90% of the audience is hacking on laptops As a presenter I want audience members To answer certain questions via Scenario: waiting for an Scenario: winner is Scenario: fail Scenario: network timeout
176 Feature: Twitter Quiz In order to encourage audience participation where 90% of the audience is hacking on laptops As a presenter I want audience members To answer certain questions via Scenario: waiting for an answer
177 @wip Scenario: waiting for an answer Given the following presentation """!TITLE American History!PRESENTER David McCullough # Wanna win a prize? ### You'll have to answer a question... ### in a tweet! First correct tweet wins!!slide # Who shot Alexander Hamilton? ## You must use #free_stuff in your tweet.!dynamic-slide TwitterQuiz '#free_stuff "aaron burr"'!slide Okay, that was fun. Lets actually start now. """
178 @wip Scenario: waiting for an answer Given the following presentation """!TITLE American History!PRESENTER David McCullough # Wanna win a prize? ### You'll have to answer a question... ### in a tweet! First correct tweet wins!!slide # Who shot Alexander Hamilton? ## You must use #free_stuff in your tweet.!dynamic-slide TwitterQuiz '#free_stuff "aaron burr"'!slide Okay, that was fun. Lets actually start now. """
179 @wip Scenario: waiting for an answer Given the following presentation... And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search When the presenter goes to the 3rd slide And I go to the 3rd slide Then I should see "And the winner is..." And I should see an ajax spinner
180 Given the following presentation """ blah, blah """ Given /the following presentation$/ do presentation
181 Given the following presentation """ blah, blah """ Given /the following presentation$/ do presentation Yields the multi-line string
182 Given the following presentation """ blah, blah """ Given /the following presentation$/ do presentation CodeNote::PresentationLoader.setup(presentation)
183 RSpec Cycle
184 And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search
185 How do I test web services? FAQ
186
187 page = `curl -is FakeWeb.register_uri(:get, " :response => page) Net::HTTP.get(URI.parse(" # => Full response, including headers
188 And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search Given %r{no tweets have been tweeted that match the '([']*)' search$} do query
189 And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query))
190 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query))
191 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) Helpers
192 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) Helpers def search_url_for(query) " def canned_response_for(query)... return file_path
193 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) def search_url_for(query) " def canned_response_for(query)... return file_path
194 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) def search_url_for(query) " def canned_response_for(query)... return file_path
195 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) Every time you monkeypatch def search_url_for(query) Object, a kitten dies. " def canned_response_for(query)... return file_path
196 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) module TwitterHelpers def search_url_for(query) " def canned_response_for(query)... return file_path
197 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) module TwitterHelpers def search_url_for(query) " def canned_response_for(query)... return file_path World(TwitterHelpers)
198 Given %r{no tweets have been tweeted that match the '([']*)' search$} do query FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) module TwitterHelpers def search_url_for(query) " def canned_response_for(query)... return file_path World(TwitterHelpers)
199 When the presenter goes to the 3rd slide
200 When the presenter goes to the 3rd slide When /the presenter goes to the (\d+)(?:st nd rd th) slide$/ do slide_number presenter_browser.goto path('/') (slide_number.to_i - 1).times do presenter_browser.link(:text, "Next").click
201 When the presenter goes to the 3rd slide When /the presenter goes to the (\d+)(?:st nd rd th) slide$/ do slide_number presenter_browser.goto path('/') (slide_number.to_i - 1).times do presenter_browser.link(:text, "Next").click Presenter has own browser, multiple sessions!
202 And I go to the 3rd slide Then I should see "And the winner is..."
203 And I go to the 3rd slide Then I should see "And the winner is..." When /I go to the (\d+)(?:st nd rd th) slide$/ do slide_number browser.goto path("/slides/#{slide_number}")
204 And I go to the 3rd slide Then I should see "And the winner is..." When /I go to the (\d+)(?:st nd rd th) slide$/ do slide_number browser.goto path("/slides/#{slide_number}") Then /I should see "(["]*)"$/ do text browser.should contain(text)
205 And I should see an ajax spinner
206 And I should see an ajax spinner Then /I should see an ajax spinner$/ do browser.image(:id, 'spinner').exists?.should be_true
207 Brief RSpec cycle?
208 Scenario: waiting for an answer Given the following presentation... And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search When the presenter goes to the 3rd slide And I go to the 3rd slide Then I should see "And the winner is..." And I should see an ajax spinner
209 Feature: Twitter Quiz In order to encourage audience participation where 90% of the audience is hacking on laptops As a presenter I want audience members To answer certain questions via twitter Scenario: waiting for an Scenario: winner is displayed
210 @wip Scenario: winner is displayed Given the following presentation... And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search
211 @wip Scenario: winner is displayed Given the following presentation... And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search Duplication of context!
212 Feature: Twitter Quiz... Background: A presentation with a Twitter Quiz Given the following presentation """ blah, blah """ And no tweets have been tweeted that match the '#free_stuff "aaron burr"' search Scenario: waiting for an answer When the presenter goes to the 3rd slide And I go to the 3rd slide Then I should see "And the winner is..." And I should see an ajax Scenario: winner is displayed Extract to Background
213 @wip Scenario: winner is displayed When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago And the presenter goes to the 3rd slide And I go to the 3rd slide Then I should tweet along with his avatar
214 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago
215 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table
216 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table Cucumber::AST::Table
217 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query))
218 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) Umm... that won t work.
219 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table FakeWeb.register_uri(:get, search_url_for(query), :body => canned_response_for(query)) What I would really like is a test data builder/factory for twitter searches...
220 require 'faketwitter' FakeTwitter.register_search("#cheese", {:results => [{:text => "#cheese is good"}]}) require 'twitter_search' TwitterSearch::Client.new('').query('#cheese') is 21 Aug @profile_image_url=" s3.amazonaws.com/twitter_production/profile_images/1/ photo.jpg">]
221 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table FakeTwitter.register_search(query, { :results => tweet_table.hashes})
222 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table FakeTwitter.register_search(query, { :results => tweet_table.hashes}) Our headers and columns aren t compatible with API.
223 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table tweet_table.map_headers! do header header.downcase.gsub(' ','_') FakeTwitter.register_search(query, { :results => tweet_table.hashes})
224 When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago When %r{the following tweets are tweeted that match the '([']*)' search$} do query, tweet_table tweet_table.map_headers! do header header.downcase.gsub(' ','_') tweet_table.map_column!('created_at') do relative_time interpret_time(relative_time) FakeTwitter.register_search(query, { :results => tweet_table.hashes})
225 @wip Scenario: winner is displayed When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago And the presenter goes to the 3rd slide And I go to the 3rd slide Then I should tweet along with his avatar
226 Then %r{i should tweet along with (?:his her) avatar$} do user tweet = FakeTwitter.tweets_from(user).first browser.should contain(tweet['text'], :wait => 10) browser.should have_image(:src, tweet['profile_image_url']) Timeout
227 Then %r{i should tweet along with (?:his her) avatar$} do user tweet = FakeTwitter.tweets_from(user).first browser.should contain(tweet['text'], :wait => 10) browser.should have_image(:src, tweet['profile_image_url']) Spec::Matchers.define :contain do text, options match do browser options[:wait] = 0 browser.wait_until(options[:wait]) do browser.text.include?(text)
228 Then %r{i should tweet along with (?:his her) avatar$} do user tweet = FakeTwitter.tweets_from(user).first browser.should contain(tweet['text'], :wait => 10) browser.should have_image(:src, tweet['profile_image_url']) Spec::Matchers.define :contain do text, options match do browser options[:wait] = 0 browser.wait_until(options[:wait]) do browser.text.include?(text) Keep trying after sleeping until it times out
229 RSpec Cycle
230 Scenario: winner is displayed When the following tweets are tweeted that match the '#free_stuff "aaron burr"' search From User Text Created Aaron Burr shot Alexander Hamilton #free_stuff 1 minute Aaron Burr shot Alexander Hamilton #free_stuff 2 minutes ago And the presenter goes to the 3rd slide And I go to the 3rd slide Then I should tweet along with his avatar
231 Demo!
232 More tricks...
233
234 Scenario: view members list Given the following wishes exist Wish Family Member Laptop Thomas Ninto Wii Candace CHEEZBURGER FuzzBuzz When I view the wish list for "Candace" Then I should see the following wishes Wish Ninto Wii
235 Given the following wishes exist Wish Family Member Laptop Thomas Ninto Wii Candace CHEEZBURGER FuzzBuzz features/step_definitions/wish_steps.rb Given /^the following wishes exist$/ do table
236 Given the following wishes exist Wish Family Member Laptop Thomas Ninto Wii Candace CHEEZBURGER FuzzBuzz features/step_definitions/wish_steps.rb Given /^the following wishes exist$/ do table table.hashes.each do row member = User.find_by_name(row["Family Member"]) create_user(:name => row["family Member"]) member.wishes.create!(:name => row["wish"])
237 Table Diffing
238 Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Scenarios: input_1 input_2 button output add add add 40
239 Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Scenarios: addition input_1 input_2 button output add add 7 Scenarios: subtraction 0 40 minus -40
240 Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Scenarios: input_1 input_2 button output add add add 40
241 Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Scenarios: input_1 input_2 button output add add add 40
242 Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Scenarios: input_1 input_2 button output add add add 40
243 Steps Within Steps When /^I view the wish list for "(.+)"$/ do user_name Given "I am logged in" visit "/wishes/#{user_name}"
244 Steps Within Steps When /^I view the wish list for "(.+)"$/ do user_name Given "I am logged in" visit "/wishes/#{user_name}"
245 Hooks Before do After do scenario World do World(MyModule) World(HerModule)
246 Tagged Hooks = Feature: Lorem Scenario: Ipsum Scenario: Dolor Feature: Scenario: Amet Scenario: Consec
247 Spork Sick of slow loading times? Spork will load your main environment once. It then runs a DRB server so cucumber (or RSpec) can run against it with the --drb flag. For each test run Spork forks a child process to run them in a clean memory state. So.. it is a DRb server that forks.. hence Spork. :)
248 Drinking the Cucumber Kool-Aid?
249 Integration tests are a scam J. B. Rainsberger Obviously, I don t agree with this 100%. But he has some valid points. Integrations tests are not a replacement for good unit tests. Use cucumber for happy paths. Use lower level tests for design and to isolate object behavior.
250 Cucumber is a good hammer
251 Cucumber is a good hammer Not everything is a nail
252 I can skp teh unit testz?
253 Acceptance Tests Application Level For Customers Slow Good confidence Prevent against regression Unit Tests Object Level- Isolated! For developers FAST! (should be at least) - Tighter Feedback Loop More about design!!!!!!!!!!!! Will need both gears! Some things are easier to test at the application level and vice-versa.
254 SRSLY? Model specs, Controller Specs, and view specs!?
255
256
257
258 W
259 M
260 More tests == More Maintenance
261 Test Value = Design + Documentation + Defence (regression)
262 if test.value > test.cost Suite.add(test)
263 KTHXBYE! BenMabey.com github.com/bmabey Twitter: bmabey IRC: mabes
Most of the security testers I know do not have
Most of the security testers I know do not have a strong background in software development. Yes, they maybe know how to hack java, reverse-engineer binaries and bypass protection. These skills are often
Cucumber and Capybara
Cucumber and Capybara A commons case study old vs new old new testingframework test-unit v1 cucumber browser-driver pure selenium v1 capybara vs Plain text scenarios with features Step definitions shamelessly
Installing Ruby on Windows XP
Table of Contents 1 Installation...2 1.1 Installing Ruby... 2 1.1.1 Downloading...2 1.1.2 Installing Ruby...2 1.1.3 Testing Ruby Installation...6 1.2 Installing Ruby DevKit... 7 1.3 Installing Ruby Gems...
Testing Rails. by Josh Steiner. thoughtbot
Testing Rails by Josh Steiner thoughtbot Testing Rails Josh Steiner April 10, 2015 Contents thoughtbot Books iii Contact us................................ iii Introduction 1 Why test?.................................
Deep in the CRUD LEVEL 1
Deep in the CRUD LEVEL 1 Prerequisites: TryRuby.org TwitteR for ZOMBIES {tweets Columns (we have 3) DB TABLE Rows { (we have 4) id status zombie Zombie Challenge #1 Retrieve the Tweet object with id =
Rails 4 Quickly. Bala Paranj. www.rubyplus.com
Rails 4 Quickly Bala Paranj 1 About the Author Bala Paranj has a Master s degree in Electrical Engineering from The Wichita State University. He has over 15 years of experience in the software industry.
RESTful Rails Development. translated by Florian Görsdorf and Ed Ruder
RESTful Rails Development Ralf Wirdemann [email protected] Thomas Baustert [email protected] translated by Florian Görsdorf and Ed Ruder March 26, 2007 Acknowledgments Many thanks go
The Cucumber Book. Extracted from: Behaviour-Driven Development for Testers and Developers. The Pragmatic Bookshelf
Extracted from: The Cucumber Book Behaviour-Driven Development for Testers and Developers This PDF file contains pages extracted from The Cucumber Book, published by the Pragmatic Bookshelf. For more information
Hudson Continous Integration Server. Stefan Saasen, [email protected]
Hudson Continous Integration Server Stefan Saasen, [email protected] Continous Integration Software development practice Members of a team integrate their work frequently Each integration is verified by
SAHARA FASHION15 RESPONSIVE MAGENTO THEME
SAHARA FASHION15 RESPONSIVE MAGENTO THEME This document is organized as follows: Chater I. Install ma_sahara_fashion15 template Chapter II. Features and elements of the template Chapter III. List of extensions
Cucumber: Finishing the Example. CSCI 5828: Foundations of Software Engineering Lecture 23 04/09/2012
Cucumber: Finishing the Example CSCI 5828: Foundations of Software Engineering Lecture 23 04/09/2012 1 Goals Review the contents of Chapters 9 and 10 of the Cucumber textbook Testing Asynchronous Systems
TESTING FRAMEWORKS. Gayatri Ghanakota
TESTING FRAMEWORKS Gayatri Ghanakota OUTLINE Introduction to Software Test Automation. What is Test Automation. Where does Test Automation fit in the software life cycle. Why do we need test automation.
Comparing Dynamic and Static Language Approaches to Web Frameworks
Comparing Dynamic and Static Language Approaches to Web Frameworks Neil Brown School of Computing University of Kent UK 30 April 2012 2012-05-01 Comparing Dynamic and Static Language Approaches to Web
Version Control! Scenarios, Working with Git!
Version Control! Scenarios, Working with Git!! Scenario 1! You finished the assignment at home! VC 2 Scenario 1b! You finished the assignment at home! You get to York to submit and realize you did not
Fermilab Service Desk
Fermilab Service Desk Incident Management Recording new Incident work instructions Software tools: Remedy 7.1x OVERVIEW Incident recording: As the starting point for the Incident Management process; accurately
QUICK START GUIDE. Cloud based Web Load, Stress and Functional Testing
QUICK START GUIDE Cloud based Web Load, Stress and Functional Testing Performance testing for the Web is vital for ensuring commercial success. JAR:Load is a Web Load Testing Solution delivered from the
Improving your Drupal Development workflow with Continuous Integration
Improving your Drupal Development workflow with Continuous Integration Peter Drake Sahana Murthy DREAM IT. DRUPAL IT. 1 Meet Us!!!! Peter Drake Cloud Software Engineer @Acquia Drupal Developer & sometimes
Cloudwords Drupal Module. Quick Start Guide
Cloudwords Drupal Module Quick Start Guide 1 Contents INTRO... 3 HOW IT WORKS... 3 BEFORE YOU INSTALL... 4 In Cloudwords... 4 In Drupal... 4 INSTALLING THE CLOUDWORDS DRUPAL MODULE... 5 OPTION ONE: Install
Achieving Continuous Integration with Drupal
23 Au gu Achieving Continuous Integration with Drupal st 20 12 Achieving Continuous Integration with Drupal Drupalcon Munich 2012 Barry Jaspan [email protected] The Evolution of a Drupal Developer
How to Make a Working Contact Form for your Website in Dreamweaver CS3
How to Make a Working Contact Form for your Website in Dreamweaver CS3 Killer Contact Forms Dreamweaver Spot With this E-Book you will be armed with everything you need to get a Contact Form up and running
5 Mistakes to Avoid on Your Drupal Website
5 Mistakes to Avoid on Your Drupal Website Table of Contents Introduction.... 3 Architecture: Content.... 4 Architecture: Display... 5 Architecture: Site or Functionality.... 6 Security.... 8 Performance...
Note: With v3.2, the DocuSign Fetch application was renamed DocuSign Retrieve.
Quick Start Guide DocuSign Retrieve 3.2.2 Published April 2015 Overview DocuSign Retrieve is a windows-based tool that "retrieves" envelopes, documents, and data from DocuSign for use in external systems.
EPiServer Operator's Guide
EPiServer Operator's Guide Abstract This document is mainly intended for administrators and developers that operate EPiServer or want to learn more about EPiServer's operating environment. The document
Guide to Automating Workflows Quickly and Easily
Guide to Automating Workflows Quickly and Easily Part 3 Back to Contents 1 2012 Nintex USA LLC, All rights reserved. Errors and omissions excepted. Table of Contents Introduction... 3 Handling the Full
Brakeman and Jenkins: The Duo Detects Defects in Ruby on Rails Code
Brakeman and Jenkins: The Duo Detects Defects in Ruby on Rails Code Justin Collins Tin Zaw AppSec USA September 23, 2011 About Us Justin Collins - @presidentbeef Tin Zaw - @tzaw Our Philosophy: Light Touch
Ruby On Rails. CSCI 5449 Submitted by: Bhaskar Vaish
Ruby On Rails CSCI 5449 Submitted by: Bhaskar Vaish What is Ruby on Rails? Ruby on Rails is a web application framework written in Ruby, a dynamic programming language. Ruby on Rails uses the Model-View-Controller
Intellect Platform - The Workflow Engine Basic HelpDesk Troubleticket System - A102
Intellect Platform - The Workflow Engine Basic HelpDesk Troubleticket System - A102 Interneer, Inc. Updated on 2/22/2012 Created by Erika Keresztyen Fahey 2 Workflow - A102 - Basic HelpDesk Ticketing System
Ruby on Rails is a web application framework written in Ruby, a dynamically typed programming language The amazing productivity claims of Rails is
Chris Panayiotou Ruby on Rails is a web application framework written in Ruby, a dynamically typed programming language The amazing productivity claims of Rails is the current buzz in the web development
SAHARA DIGITAL8 RESPONSIVE MAGENTO THEME
SAHARA DIGITAL8 RESPONSIVE MAGENTO THEME This document is organized as follows: Chater I. Install ma_sahara_digital8 template Chapter II. Features and elements of the template Chapter III. List of extensions
Translation Proxy A New Option for Managing Multilingual Websites
A New Option for Managing Multilingual Websites Introduction 3 Why Multilingual Site Management is So Painful 4 : A New Option 8 : How it Works 9 Proxy in Action Summary FAQ 10 13 14 Who is Lionbridge
email-lead Grabber Business 2010 User Guide
email-lead Grabber Business 2010 User Guide Copyright and Trademark Information in this documentation is subject to change without notice. The software described in this manual is furnished under a license
Missouri Department of Health and Senior Services Bureau of Immunization Assessment and Assurance February 2013
1 SMV Help Desk: 877.813.0933 / [email protected] Missouri Department of Health and Senior Services Bureau of Immunization Assessment and Assurance February 2013 Accessing ShowMeVax website
Marketo Integration Setup Guide
Page 1 of 30 Table of Contents About the RingLead Integration with Marketo Create the Marketo Webhook - Response Mapping - Configure Webhook Response Mapping Create the Marketo Program and Campaign - Create
PHP on IBM i: What s New with Zend Server 5 for IBM i
PHP on IBM i: What s New with Zend Server 5 for IBM i Mike Pavlak Solutions Consultant [email protected] (815) 722 3454 Function Junction Audience Used PHP in Zend Core/Platform New to Zend PHP Looking to
Web Framework Performance Examples from Django and Rails
Web Framework Performance Examples from Django and Rails QConSF 9th November 2012 www.flickr.com/photos/mugley/5013931959/ Me Gareth Rushgrove Curate devopsweekly.com Blog at morethanseven.net Text Work
Digitally Sign an InfoPath form and Submit using Email
Digitally Sign an InfoPath form and Submit using Email In this video, I am going to show how you can take a Form such as the Form that I am looking at right now, the Resource Provisioning Form, Turn on
School account creation guide
School account creation guide Contents Your welcome email Page 2 The CSV file Page 3 Uploading the CSV and creating the accounts Page 5 Retrieving staff usernames and passwords Page 8 Retrieving student
CS169.1x Lecture 5: SaaS Architecture and Introduction to Rails " Fall 2012"
CS169.1x Lecture 5: SaaS Architecture and Introduction to Rails " Fall 2012" 1" Web at 100,000 feet" The web is a client/server architecture" It is fundamentally request/reply oriented" Web browser Internet
Git Branching for Continuous Delivery
Git Branching for Continuous Delivery Sarah Goff-Dupont Automation Enthusiast Hello everyone I ll be talking about how teams at Atlassian use Git branches for continuous delivery. My name is Sarah, and
Adobe Summit 2015 Lab 718: Managing Mobile Apps: A PhoneGap Enterprise Introduction for Marketers
Adobe Summit 2015 Lab 718: Managing Mobile Apps: A PhoneGap Enterprise Introduction for Marketers 1 INTRODUCTION GOAL OBJECTIVES MODULE 1 AEM & PHONEGAP ENTERPRISE INTRODUCTION LESSON 1- AEM BASICS OVERVIEW
Continuous Delivery on AWS. Version 1.0 DO NOT DISTRIBUTE
Continuous Version 1.0 Copyright 2013, 2014 Amazon Web Services, Inc. and its affiliates. All rights reserved. This work may not be reproduced or redistributed, in whole or in part, without prior written
Kentico CMS 7.0 Intranet Administrator's Guide
Kentico CMS 7.0 Intranet Administrator's Guide 2 Kentico CMS 7.0 Intranet Administrator's Guide Table of Contents Introduction 5... 5 About this guide Getting started 7... 7 Installation... 11 Accessing
Kentico Content Management System (CMS) Managing Events and News Content
Kentico Content Management System (CMS) Managing Events and News Content I. Introduction The Kentico CMS uses a new process to enter news and events, which will allow visitors to the Website to easily
MAS 90 MAS 200 Tips, Tricks and Frequently Asked Questions (FAQ s) Prepared by: The Fitzgerald Group August 11, 2004
MAS 90 MAS 200 Tips, Tricks and Frequently Asked Questions (FAQ s) Prepared by: The Fitzgerald Group August 11, 2004 This is a compilation of ideas from The Fitzgerald Group staff, from clients and from
Set internet safety parental controls with Windows
How to Microsoft lets parents set up internet safety settings on a Windows computer for their kids, using Family Safety. Family Safety provides a website and a free program that you install on the computers
How To Write A Book Purchase On An Ipad With A Bookshop On A Pcode On A Linux 2.5.2 (Windows) On A Macbook 2.2.2 On A Microsoft Powerbook 2 (Windows 2.
4. Getting started with Cucumber Our first Cucumber project We are finally ready to add Cucumber to our testing toolbox. The downloaded source has a project we will start with. The project is in the learn_cucumber
Eliminate Workflow Friction with Git
Eliminate Workflow Friction with Git Joel Clermont @jclermont I come from the distant land of Milwaukee. Organizer of Milwaukee PHP and Milwaukee FP. Feel free to reach out to me on Twitter. World s problems
Prestashop Ship2MyId Module. Configuration Process
Prestashop Ship2MyId Module Configuration Process Ship2MyID Module Version : v1.0.2 Compatibility : PrestaShop v1.5.5.0 - v1.6.0.14 1 P a g e Table of Contents 1. Module Download & Setup on Store... 4
Developer Workshop 2015. Marc Dumontier McMaster/OSCAR-EMR
Developer Workshop 2015 Marc Dumontier McMaster/OSCAR-EMR Agenda Code Submission 101 Infrastructure Tools Developing OSCAR Code Submission: Process OSCAR EMR Sourceforge http://www.sourceforge.net/projects/oscarmcmaster
Evaluation. Chapter 1: An Overview Of Ruby Rails. Copy. 6) Static Pages Within a Rails Application... 1-10
Chapter 1: An Overview Of Ruby Rails 1) What is Ruby on Rails?... 1-2 2) Overview of Rails Components... 1-3 3) Installing Rails... 1-5 4) A Simple Rails Application... 1-6 5) Starting the Rails Server...
Advanced Tornado TWENTYONE. 21.1 Advanced Tornado. 21.2 Accessing MySQL from Python LAB
21.1 Advanced Tornado Advanced Tornado One of the main reasons we might want to use a web framework like Tornado is that they hide a lot of the boilerplate stuff that we don t really care about, like escaping
Continuous Integration
CODING & DEVELOPMENT BORIS GORDON FEBRUARY 7 2013 Continuous Integration Introduction About me boztek on d.o. (http://drupal.org/user/134410) @boztek [email protected] 2 Introduction About you
Building Dynamic Web 2.0 Websites with Ruby on Rails
Building Dynamic Web 2.0 Websites with Ruby on Rails Create database-driven dynamic websites with this open-source web application framework A.P. Rajshekhar Chapter 5 "Gathering User Comments" In this
Magic SDE Self-Service
Magic SDE Self-Service Agency Security Administrators (ASA) Workflow Administrators (WFA) Employee Data Administrators (EDA) Credit Card Administrators (CCA) User Support Liaisons (USL) at Type A Agencies
ManageMyHealth SMS Text Message Service User Guide. Medtech32. Version 20.0 (March 2012)
ManageMyHealth SMS Text Message Service User Guide Medtech32 Version 20.0 (March 2012) IMPORTANT NOTE Medtech recommends that all Medtech upgrades and database back-up and restore processes are performed
by Jonathan Kohl and Paul Rogers 40 BETTER SOFTWARE APRIL 2005 www.stickyminds.com
Test automation of Web applications can be done more effectively by accessing the plumbing within the user interface. Here is a detailed walk-through of Watir, a tool many are using to check the pipes.
Software Development Tools
Software Development Tools COMP220/COMP285 Sebastian Coope More on Automated Testing and Continuous Integration These slides are mainly based on Java Tools for Extreme Programming R.Hightower & N.Lesiecki.
PHP Authentication Schemes
7 PHP Authentication Schemes IN THIS CHAPTER Overview Generating Passwords Authenticating User Against Text Files Authenticating Users by IP Address Authenticating Users Using HTTP Authentication Authenticating
In depth study - Dev teams tooling
In depth study - Dev teams tooling Max Åberg mat09mab@ Jacob Burenstam Linder ada09jbu@ Desired feedback Structure of paper Problem description Inconsistencies git story explanation 1 Introduction Hypotheses
GETTING STARTED WITH CONTINUOUS DELIVERY. Lana Kalashnyk @lana_vk wcgp.co
GETTING STARTED WITH CONTINUOUS DELIVERY Lana Kalashnyk @lana_vk wcgp.co ABOUT ME Lana Kalashnyk BAAS Computer Science minor Business Administration AS in Computer Science emphasis on Networking Cisco
Drupal CMS for marketing sites
Drupal CMS for marketing sites Intro Sample sites: End to End flow Folder Structure Project setup Content Folder Data Store (Drupal CMS) Importing/Exporting Content Database Migrations Backend Config Unit
HELP DESK MANUAL INSTALLATION GUIDE
Help Desk 6.5 Manual Installation Guide HELP DESK MANUAL INSTALLATION GUIDE Version 6.5 MS SQL (SQL Server), My SQL, and MS Access Help Desk 6.5 Page 1 Valid as of: 1/15/2008 Help Desk 6.5 Manual Installation
Continuous Integration
Continuous Integration WITH FITNESSE AND SELENIUM By Brian Kitchener [email protected] Intro Who am I? Overview Continuous Integration The Tools Selenium Overview Fitnesse Overview Data Dependence My
TestTrack Test Case Management Quick Start Guide
TestTrack Test Case Management Quick Start Guide This guide is provided to help you get started with TestTrack test case management and answer common questions about working with test cases and test runs.
TweetAttacks Pro. User Manual
TweetAttacks Pro User Manual The ultimate twitter auto follower, auto unfollower, tweet scraper, reply generator, auto retweeter, tweet spinner, mass retweeter and tweet scheduler with socialoomph integration.
Continuous Performance Testing
Continuous Performance Testing Confoo.ca Kore Nordmann (@koredn) 27. Feb 2013 Continuous Performance Testing 1 / 30 About me Degree in computer sience Professional PHP since 2000 Open source enthusiast
Would You Like To Earn $1000 s With The Click Of A Button?
Would You Like To Earn $1000 s With The Click Of A Button? (Follow these easy step by step instructions and you will) This Version of the ebook is for all countries other than the USA. If you need the
10 kanban boards and their context
10 kanban boards and their context Hi! I ve visualized a set of kanban boards from operations, development and sales to trigger ideas. But don t forget, a kanban board is a tool to help you think for yourself,
CommonSpot Content Server Version 6.2 Release Notes
CommonSpot Content Server Version 6.2 Release Notes Copyright 1998-2011 PaperThin, Inc. All rights reserved. About this Document CommonSpot version 6.2 updates the recent 6.1 release with: Enhancements
Part I. OpenCIT Server
OpenCIT Manual 12 Table of Contents I. OpenCIT Server... 1 1. How to read the Manual... 2 2. What is the Open Continuous Integration And Test Server... 3 II. Using the OpenCIT Server... 4 3. Quickstart...
Magento Theme EM0006 for Computer store
Magento Theme EM0006 for Computer store Table of contends Table of contends Introduction Features General Features Flexible layouts Main Menu Standard Blocks Category Menu and Category Layered Menu. HTML
Managing User Accounts
Managing User Accounts This chapter includes the following sections: Configuring Local Users, page 1 Active Directory, page 2 Viewing User Sessions, page 6 Configuring Local Users Before You Begin You
Migration Manager v6. User Guide. Version 1.0.5.0
Migration Manager v6 User Guide Version 1.0.5.0 Revision 1. February 2013 Content Introduction... 3 Requirements... 3 Installation and license... 4 Basic Imports... 4 Workspace... 4 1. Menu... 4 2. Explorer...
Agile Web Application Testing
Agile Web Application Testing Technologies and Solutions V. Narayan Raman Tyto Software Goals Rapid feedback on the quality of software Problem in Web App Testing Many Browsers Many Operating Systems Browsers
Apollo ACC PCI Registry Export Basics
Training Apollo ACC PCI Registry Export Basics Barbara O Brien Product Education Trainer Registry Export Assistance Clinical Content Contact the Registry Software Questions LUMEDX Support 1.800.966.0669
Cloud Elements! Marketing Hub Provisioning and Usage Guide!
Cloud Elements Marketing Hub Provisioning and Usage Guide API Version 2.0 Page 1 Introduction The Cloud Elements Marketing Hub is the first API that unifies marketing automation across the industry s leading
Testing Best Practices
ALMComplete, QAComplete, DevComplete This document is used as a guide to improving your testing and quality assurance processes. 1 Test Case Creation Once requirements have been created and approved, while
Installing and Sending with DocuSign for NetSuite v2.2
DocuSign Quick Start Guide Installing and Sending with DocuSign for NetSuite v2.2 This guide provides information on installing and sending documents for signature with DocuSign for NetSuite. It also includes
Building and Deploying Web Scale Social Networking Applications Using Ruby on Rails and Oracle. Kuassi Mensah Group Product Manager
Building and Deploying Web Scale Social Networking Applications Using Ruby on Rails and Oracle Kuassi Mensah Group Product Manager The following is intended to outline our general product direction. It
Legacy Automated Testing Bridge QAComplete ALMComplete HP Quick Test Pro v. 10-11
User s Guide Legacy QAComplete ALMComplete HP Quick Test Pro v. 10-11 This document explains how to use the Legacy Automation Bridge for HP Quick Test Professional versions 10-11 Please note: this feature
DreamFactory & Modus Create Case Study
DreamFactory & Modus Create Case Study By Michael Schwartz Modus Create April 1, 2013 Introduction DreamFactory partnered with Modus Create to port and enhance an existing address book application created
Build it with Drupal 8
Build it with Drupal 8 Comprehensive guide for building common websites in Drupal 8. No programming knowledge required! Antonio Torres This book is for sale at http://leanpub.com/drupal-8-book This version
Primavera Unifier v9.14 / 2014 EPPM Day Hands On Session Exercise Document
Primavera Unifier v9.14 / 2014 EPPM Day Hands On Session Exercise Document This exercise document is a basic Unifier intro. document, for those people, who would like to gain the first impression around
Modern CI/CD and Asset Serving
Modern CI/CD and Asset Serving Mike North 10/20/2015 About.me Job.new = CTO Job.old = UI Architect for Yahoo Ads & Data Organizer, Modern Web UI Ember.js, Ember-cli, Ember-data contributor OSS Enthusiast
Everyday Lessons from Rakudo Architecture. Jonathan Worthington
Everyday Lessons from Rakudo Architecture Jonathan Worthington What do I do? I teach our advanced C#, Git and software architecture courses Sometimes a mentor at various companies in Sweden Core developer
Installation & User Guide
SharePoint List Filter Plus Web Part Installation & User Guide Copyright 2005-2009 KWizCom Corporation. All rights reserved. Company Headquarters P.O. Box #38514 North York, Ontario M2K 2Y5 Canada E-mail:
BDD FOR AUTOMATING WEB APPLICATION TESTING. Stephen de Vries
BDD FOR AUTOMATING WEB APPLICATION TESTING Stephen de Vries www.continuumsecurity.net INTRODUCTION Security Testing of web applications, both in the form of automated scanning and manual security assessment
ThirtySix Software WRITE ONCE. APPROVE ONCE. USE EVERYWHERE. www.thirtysix.net SMARTDOCS 2014.1 SHAREPOINT CONFIGURATION GUIDE THIRTYSIX SOFTWARE
ThirtySix Software WRITE ONCE. APPROVE ONCE. USE EVERYWHERE. www.thirtysix.net SMARTDOCS 2014.1 SHAREPOINT CONFIGURATION GUIDE THIRTYSIX SOFTWARE UPDATED MAY 2014 Table of Contents Table of Contents...
Qlik REST Connector Installation and User Guide
Qlik REST Connector Installation and User Guide Qlik REST Connector Version 1.0 Newton, Massachusetts, November 2015 Authored by QlikTech International AB Copyright QlikTech International AB 2015, All
Managing User Accounts
Managing User Accounts This chapter includes the following sections: Active Directory, page 1 Configuring Local Users, page 3 Viewing User Sessions, page 5 Active Directory Active Directory is a technology
Title Page. Informed Filler. User s Manual. Shana Corporation 9744-45 Avenue Edmonton, Alberta, Canada T6E 5C5
Title Page Informed Filler User s Manual Shana Corporation 9744-45 Avenue Edmonton, Alberta, Canada T6E 5C5 Telephone: (780) 433-3690 Order Desk: (800) 386-7244 Fax: (780) 437-4381 E-mail: [email protected]
