Ruby on Rails on Minitest
|
|
|
- Duane Harris
- 10 years ago
- Views:
Transcription
1 Ruby on Rails on Minitest 1
2 Setting Expectations Introductory Talk. Very Little Code. Not going to teach testing or TDD. What & why, not how. 218 Slides, 5.45 SPM. 2
3 WTF is minitest? 3
4 What is Minitest? Replacement for ruby 1.8 s test/unit. Originally 90 lines of code, only test/unit basics. Available as a gem, and ships with ruby & up. Meant to be small, clean, and very fast. Now ~1600 loc, unit, spec, benchmarks, mock/stub, plugins, etc. 4
5 6 Parts of Minitest runner The heart of the machine minitest/unit TDD API minitest/spec BDD API minitest/mock Simple mocking API minitest/pride IO pipelining example minitest/bench Abstract benchmark API 5
6 2 Parts of Minitest runner The heart of the machine minitest/unit TDD API minitest/spec BDD API minitest/mock Simple mocking API minitest/pride IO pipelining example minitest/bench Abstract benchmark API 6
7 minitest/test 7
8 Test Cases are Classes 8
9 Tests are Methods 9
10 Test Example require "minitest/autorun" class TestThingy < Minitest::Test def test_do_the_thing assert_equal 42, Thingy.do_the_thing end end 10
11 Test Example require "minitest/autorun" Simple Subclass class TestThingy < Minitest::Test def test_do_the_thing assert_equal 42, Thingy.do_the_thing end end 10
12 Test Example require "minitest/autorun" Simple Subclass class TestThingy < Minitest::Test def test_do_the_thing assert_equal 42, Thingy.do_the_thing end end Simple Method 10
13 Test Example require "minitest/autorun" Simple Subclass class TestThingy < Minitest::Test def test_do_the_thing assert_equal 42, Thingy.do_the_thing end end Simple Method Magic Free! 10
14 Positive Assertions assert assert_kind_of assert_respond_to assert_empty assert_match assert_same assert_equal assert_nil assert_send* assert_in_delta assert_operator assert_silent*+ assert_in_epsilon+ assert_output*+ assert_throws* assert_includes+ assert_instance_of assert_predicate+ assert_raises* 11 +not in testunit *no negative equiv
15 Negative Assertions refute+ refute_kind_of+ refute_respond_to+ refute_empty+ refute_match refute_same refute_equal refute_nil refute_send refute_in_delta+ refute_operator+ refute_silent refute_in_epsilon+ refute_output refute_throws refute_includes+ refute_instance_of+ refute_predicate+ refute_raises 12 +not in testunit
16 Why all these extra assertions? They're more expressive! assert! obj refute obj assert collection.include? obj assert_includes obj, collection out, err = capture_io do do_something end assert_equal "output", out assert_equal "", err assert_output "output", "" do do_something end 13
17 assert_equal diffs: 1) Failure: test_failing_simple(testsimple) [example.rb:8]: Expected: 42 Actual: 24 2) Failure: test_failing_complex(testcomplex) [example.rb:23]: --- expected +++ actual -22,7 +22,7 "line 22", "line 23", "line 24", - "line 25", + "something unexpected", "line 26", "line 27", "line 28", 14
18 But... 15
19 Where is refute_raises? 16
20 Same place as refute_silent. 17
21 refute_silent This block of code must print something. What it is, I don't care. How is this assertion of value to anyone? Assert for the specific output you need. 18
22 refute_silent This block of code must print something. What it is, I don't care. How is this assertion of value to anyone? Assert for the specific output you need. 19
23 refute_raises This block of code must do something. What it is, I don't care. How is this assertion of value to anyone? Assert for the specific result you need. 20
24 It's Useful No it isn't. Implies side effects and/or return values have been checked. Or aren't important (always false otherwise, why write the code?). Falsely bumps code coverage metrics. False sense of security. 21
25 It's More Expressive No it isn't. Writing the test was the act of expression. It is an explicit contract in any test framework that unhandled exceptions are an error. The test's mere existence explicitly states: "there are no unhandled exceptions via these pathways". 22
26 I've been having this argument for years 23
27 Some people will never be convinced 24
28 Stand Back 25
29 def check_everything assert_something_output do assert_nothing_raised do assert_some_side_effect do assert_some_response do yield end end end end end 26
30 def check_everything assert_something_output do assert_nothing_raised do assert_some_side_effect do assert_some_response do yield end end end end end 2015 Ryan Davis All Rights Reserved ISO 9001 Enterprise Certified Available for $$$$ 26
31 27
32 minitest/spec 28
33 Testing DSL 29
34 Test Cases are `describe` blocks 30
35 Tests are `it` blocks 31
36 Spec Example require "minitest/autorun" describe Thingy do it "must do the thing" do _(Thingy.do_the_thing).must_equal 42 end end 32
37 But 33
38 In Reality 34
39 `describe` blocks are Classes 35
40 `it` blocks are Methods 36
41 Spec Example require "minitest/autorun" describe Thingy do it "must do the thing" do _(Thingy.do_the_thing).must_equal 42 end end 37
42 Specs Transform: require "minitest/autorun" class TestThingy < Minitest::Test def test_0001_must_do_the_thing _(Thingy.do_the_thing).must_equal 42 end end 38
43 Specs Transform: require "minitest/autorun" Simple Subclass class TestThingy < Minitest::Test def test_0001_must_do_the_thing _(Thingy.do_the_thing).must_equal 42 end end 38
44 Specs Transform: require "minitest/autorun" Simple Subclass class TestThingy < Minitest::Test def test_0001_must_do_the_thing _(Thingy.do_the_thing).must_equal 42 end end Simple Method 38
45 Specs Transform: require "minitest/autorun" Simple Subclass class TestThingy < Minitest::Test def test_0001_must_do_the_thing _(Thingy.do_the_thing).must_equal 42 end end Simple Method Magic Free! 38
46 Positive Expectations must_be must_be_close_to must_be_empty must_be_instance_of must_be_kind_of must_be_nil must_be_same_as must_be_silent* must_be_within_delta must_be_within_epsilon must_equal must_include must_match must_output* must_raise* must_respond_to must_send* must_throw* 39
47 Negative Expectations wont_be wont_be_close_to wont_be_empty wont_be_instance_of wont_be_kind_of wont_be_nil wont_be_same_as wont_be_silent wont_be_within_delta wont_be_within_epsilon wont_equal wont_include wont_match wont_output wont_raise wont_respond_to wont_send wont_throw 40
48 All for Free must_equal is assert_equal wont_equal is refute_equal etc. 41
49 Advanced Testing 42
50 Randomization Baked In 43
51 Preventing Test Order Dependencies 44
52 parallelize_me! 45
53 Use gem, not stdlib Randomize Test Order 5 4 Write custom assertions 6 7 Refactor to reusable testcases 8 Benchmark Tests Turn up the test + spec 3 9 Forced Parallelization Disallow meaningless assertions 2 Fast Test Runner ??? Require Proof of Success? test levels 46
54 Design Rationale 47
55 It's Just Ruby 48
56 Look! Ruby! require "minitest/autorun" class TestThingy < Minitest::Test def test_do_the_thing assert_equal 42, Thingy.do_the_thing end end 49
57 Less is More 50
58 assert_in_delta def assert_in_delta e, a, d = 0.001, m = nil n = (e - a).abs msg = message(m) { "... failure message..." } assert delta >= n, msg end 51
59 assert_in_delta def assert_in_delta e, a, d = 0.001, m = nil n = (e - a).abs msg = message(m) { "... failure message..." } assert delta >= n, msg end message takes a block to defer calculation until an assertion fails 51
60 assert_in_delta def assert_in_delta e, a, d = 0.001, m = nil n = (e - a).abs msg = message(m) { "... failure message..." } assert delta >= n, msg end message takes a simple assertion is all that is needed block to defer calculation until an assertion fails 51
61 assert_in_delta def assert_in_delta e, a, d = 0.001, m = nil n = (e - a).abs msg = message(m) { "... failure message..." } assert delta >= n, msg end Only 2 other methods need to be understood: assert (9) & message (6) simple assertion is all that is needed message takes a block to defer calculation until an assertion fails 51
62 Indirection is the Enemy 52
63 Just 2 Hops module Minitest::Expectation def must_equal(*args) ctx.assert_equal(*args) end end module Minitest::Assertions def assert_equal exp, act, msg = nil msg = message(msg, E) { diff exp, act } assert exp == act, msg end end 53
64 No Magic Allowed 54
65 Thriving Plugin Ecosystem minitest-chef-handler minitest-metadata minitest-reporters minitest-rails-capybara minitest-rails minitest-matchers guard-minitest capybara_minitest_spec minitest-spec-rails minitest-colorize minitest-capybara minitest-rg spork-minitest minitest-ci (& many more) 55
66 Rails & Minitest 56
67 The Official Rails Stack uses Minitest 57
68 Each Release 58
69 Peels back the testing onion 59
70 Encouraging better testing practices 60
71 Peeling onions make you cry 61
72 Right? 62
73 (Hopefully) Not Here 63
74 Rails 4.0 minitest 4.x 64
75 Impact? Zero 65
76 Rails 4.1 minitest 5.x 66
77 Impact? Zero 67
78 Rails 4.2 random order 68
79 Some Impact? 69
80 Good Thing! 70
81 Future Rails Should track minitest. 71
82 As a Rails Dev 72
83 What does all of this mean? 73
84 Hopefully... 74
85 Nothing 75
86 ActiveSupport ::TestCase 76
87 Basic Architecture Minitest::Test ActiveSupport::TestCase MyThingyTest 77
88 Per-test database transactions 78
89 Fixtures # In fixtures/categories.yml about: name: About # In fixtures/articles.yml one: title: Welcome to Rails! body: Hello world! category: about 79
90 Declarative Forms setup do end #... teardown do end #... test test name do end #... 80
91 Extra Assertions assert_difference assert_valid_keys assert_deprecated assert_nothing_raised 81
92 Wait? What?!? 82
93 Don't Worry! def assert_nothing_raised(*args) end yield 83
94 Don't Worry! def assert_nothing_raised(*args) end yield Actual Implementation 83
95 Unit Testing require 'test_helper' class ArticleTest < ActiveSupport::TestCase test "should not save article without title" do article = Article.new refute article.save end end 84
96 ActionController ::TestCase 85
97 Basic Architecture Minitest::Test ActiveSupport::TestCase ActionController::TestCase MyControllerTest 86
98 Actions get post delete etc 87
99 State request response session flash 88
100 Assertions assert_response assert_redirected_to assert_template 89
101 Functional Testing class ArticlesControllerTest < ActionController::TestCase test "should get index" do get :index assert_response :success assert_not_nil assigns(:articles) end end 90
102 ActiveDispatch ::IntegrationTest 91
103 Architecture Minitest::Test ActiveSupport::TestCase ActionDispatch::IntegrationTest MyIntegrationTest 92
104 Assertions Tons 93
105 Integration Testing class UserFlowsTest < ActionDispatch::IntegrationTest test "login and browse site" do https! get "/login" assert_response :success david = users :david post_via_redirect "/login", username: david.username, password: david.password assert_equal '/welcome', path assert_equal 'Welcome david!', flash[:notice] https! false get "/articles/all" assert_response :success assert assigns :articles end end 94
106 guides.rubyonrails.org/ testing.html 95
107 Very Simple 96
108 Very Powerful 97
109 Leverages Minitest 98
110 Test Randomization 99
111 Parallelization 100
112 Enforce Better Testing 101
113 Troubleshooting 102
114 I want to use minitest, but I prefer spec-style 103
115 Simple 104
116 minitest-rails 105
117 minitest-spec-rails 106
118 Lets you do this: describe User do let(:user) { User.create!... } it "does the thing to the stuff" do user.username.must_match(/.../) end end 107
119 I upgraded to rails 4.2 and now I have failures 108
120 AKA: you broke all my shit 109
121 Not as Simple 110
122 Test-Order Dependency Bug 111
123 ran: a, b, c = pass ran: b, a, c = fail 112
124 Easy! 113
125 But, I have hundreds of tests! 114
126 Not so Easy 115
127 minitest-bisect 116
128 Helps you isolate and debug random test failures 117
129 118
130 118
131 I'm used to RSpec + factory-girl + this + that + kitchen sink + everything 119
132 A lot of stuff Just Works 120
133 Look for plugins in readme / gems 121
134 My Suggestion? 122
135 Less Complicated Testing 123
136 Try It 124
137 You Might Like It 125
138 Change Takes Time 126
139 Why use minitest? 127
140 Why Test? aka It slows me down 128
141 Not Going to Bother 129
142 Lost Cause 130
143 I'd rather help other people 131
144 Everyone Uses RSpec 132
145 Obviously Not 133
146 The Official Rails Stack uses Minitest 134
147 DHH uses minitest 135
148 tenderlove uses minitest 136
149 Jeff Casimir & cohort teach minitest at Turing School 137
150 nokogiri, haml, god, newrelic_rpm, sqlite3 138
151 etc 139
152 Functional Differences with RSpec 140
153 Unique Features of RSpec Test metadata & metadata filtering. Implicit subject, described_class, etc. Fancier expectations, negation, etc. before(:all) & around(:each). Shared contexts & example groups. Fancier mocking. Fancier reporting. 141
154 Unique Features of RSpec Test metadata & metadata filtering. Implicit subject, described_class, etc. Fancier expectations, negation, etc. before(:all) & around(:each). Shared contexts & example groups. Fancier mocking. Fancier reporting. 141 Basically, it's Fancier
155 Unique Features of Minitest Unit & Spec Style Testing. Über-Duper fast and lightweight. Easy to understand whole library. minitest/pride. Benchmark tests. First to randomize parallelize_me! & minitest/hell Clean & easy plugin system. Smallest mock/stub framework. 142
156 Unique Features of Minitest Unit & Spec Style Testing. Über-Duper fast and lightweight. Easy to understand whole library. minitest/pride. Benchmark tests. First to randomize parallelize_me! & minitest/hell Clean & easy plugin system. Smallest mock/stub framework. Simple, Pragmatic 142
157 Unique Features of Minitest Unit & Spec Style Testing. Über-Duper fast and lightweight. Easy to understand whole library. minitest/pride. Benchmark tests. First to randomize parallelize_me! & minitest/hell Clean & easy plugin system. Smallest mock/stub framework. Simple, Pragmatic and a bit Snarky 142
158 Cognitive differences with RSpec 143
159 Myron Marston 144
160 Great Comparison 145
161 I'm one of the RSpec developers, and have never used minitest, so take my biases into account when reading this answer. By and large, RSpec's power comes from the fact that it reifies so many testing concepts into first class objects. Where Test::Unit and Minitest use simple methods for making assertions, RSpec uses first-class matcher objects that support negation, self-description and more. RSpec's examples are first-class objects that support rich metadata; minitest/spec compiles it blocks down into simple methods, which don't support the same sort of rich metadata. RSpec supports specifying shared behaviors using a first-class construct (shared example groups) that accepts arguments; w/ minitest you can use inheritance or a mixin to re-use tests, but it doesn't have the same sort of first-class support. RSpec has an explicit formatter API (and there are many third party formatters that use it); I'm not aware of minitest having the same sort of first-class formatter API. As somebody who is constantly running tests and practicing TDD all day long, I find the power RSpec gives me to be very useful. Many people find it to be overkill, though, and there is an added cognitive cost to the extra abstractions. Here are some specific features RSpec has that I believe minitest lacks: before(:all) hooks (note this is a power user feature of RSpec that should rarely be used; I've only used it on a few occasions in many years of using RSpec) around(:each) hooks Shared example groups Shared contexts Rich metadata support that can be used to control which examples get run, which example groups shared contexts get included in, which example groups modules get mixed into and more. 146 Integrated support for a wide range of mocking features w/ rspec-mocks; Minitest::Mock
162 2 Answers I'm one of the RSpec developers, and have never used minitest, so take my biases into account when reading this answer. By and large, RSpec's power comes from the fact that it reifies so many testing concepts into first class objects. Where Test::Unit and Minitest use simple methods for making assertions, RSpec uses first-class matcher objects that support negation, self-description and more. RSpec's examples are first-class objects that support rich metadata; minitest/spec compiles it blocks down into simple methods, which don't support the same sort of rich metadata. RSpec supports specifying shared behaviors using a first-class construct (shared example groups) that accepts arguments; w/ minitest you can use inheritance or a mixin to re-use tests, but it doesn't have the same sort of first-class support. RSpec has an explicit formatter API (and there are many third party formatters that use it); I'm not aware of minitest having the same sort of first-class formatter API. As somebody who is constantly running tests and practicing TDD all day long, I find the power RSpec gives me to be very useful. Many people find it to be overkill, though, and there 146
163 Ruby on Rails on Minitest Apparently, 147
164 Ruby on Rails on Minitest Apparently, 147
165 TL;DR 148
166 By and large, RSpec's power comes from the fact that it reifies so many testing concepts into first class objects. Where Test::Unit and Minitest use simple methods for making assertions, RSpec uses first-class matcher objects that support negation, self-description and more. RSpec's examples are firstclass objects that support rich metadata; minitest/spec compiles it blocks down into simple methods, which don't support the same sort of rich metadata. RSpec supports specifying shared behaviors using a first-class construct (shared example groups) that accepts arguments; w/ minitest you can use inheritance or a mixin to re-use tests, but it doesn't have the same sort of firstclass support
167 Myron thinks this is why RSpec is great 150
168 I think it is everything wrong with RSpec 151
169 We're Both Right 152
170 "Do I contradict myself? Very well, then I contradict myself, I am large, I contain multitudes." Walt Whitman 153
171 By and large, RSpec's power comes from the fact that it reifies so many testing concepts into first class objects. Where Test::Unit and Minitest use simple methods for making assertions, RSpec uses first-class matcher objects that support negation, self-description and more. RSpec's examples are firstclass objects that support rich metadata; minitest/spec compiles it blocks down into simple methods, which don't support the same sort of rich metadata. RSpec supports specifying shared behaviors using a first-class construct (shared example groups) that accepts arguments; w/ minitest you can use inheritance or a mixin to re-use tests, but it doesn't have the same sort of firstclass support
172 Minitest RSpec Example Groups Examples Reuse Expectations 155 * my interpretation, not a quote
173 Minitest RSpec Example Groups compiles describe blocks down into simple classes* reifies testing concepts into first class objects* Examples Reuse Expectations 155 * my interpretation, not a quote
174 Minitest RSpec Example Groups compiles describe blocks down into simple classes* reifies testing concepts into first class objects* Examples compiles it blocks down into simple methods examples are first-class objects Reuse Expectations 155 * my interpretation, not a quote
175 Minitest RSpec Example Groups compiles describe blocks down into simple classes* reifies testing concepts into first class objects* Examples compiles it blocks down into simple methods examples are first-class objects Reuse you can use inheritance or a mixin specifying shared behaviors using a first-class construct Expectations 155 * my interpretation, not a quote
176 Minitest RSpec Example Groups compiles describe blocks down into simple classes* reifies testing concepts into first class objects* Examples compiles it blocks down into simple methods examples are first-class objects Reuse you can use inheritance or a mixin specifying shared behaviors using a first-class construct Expectations use simple methods for making assertions uses first-class matcher objects 155 * my interpretation, not a quote
177 Minitest RSpec Example Groups compiles describe blocks down into simple methods reifies testing concepts into first class objects Examples compiles it blocks down into simple methods examples are first-class objects Reuse you can use inheritance or a mixin specifying shared behaviors using a first-class construct Expectations use simple methods for making assertions uses first-class matcher objects 156
178 Minitest RSpec compiles describe blocks Example Groups Class 1st Class Object down into simple methods reifies testing concepts into first class objects Examples compiles it blocks down into simple methods examples are first-class objects Reuse you can use inheritance or a mixin specifying shared behaviors using a first-class construct Expectations use simple methods for making assertions uses first-class matcher objects 156
179 Minitest RSpec compiles describe blocks Example Groups Class 1st Class Object down into simple methods reifies testing concepts into first class objects compiles it blocks down into Examples Method 1st Class Object simple methods examples are first-class objects Reuse you can use inheritance or a mixin specifying shared behaviors using a first-class construct Expectations use simple methods for making assertions uses first-class matcher objects 156
180 Minitest RSpec compiles describe blocks Example Groups Class 1st Class Object down into simple methods reifies testing concepts into first class objects compiles it blocks down into Examples Method 1st Class Object simple methods examples are first-class objects you can use inheritance or a Reuse Subclass or Include 1st Class Object mixin specifying shared behaviors using a first-class construct Expectations use simple methods for making assertions uses first-class matcher objects 156
181 Minitest RSpec compiles describe blocks Example Groups Class 1st Class Object down into simple methods reifies testing concepts into first class objects compiles it blocks down into Examples Method 1st Class Object simple methods examples are first-class objects you can use inheritance or a Reuse Subclass or Include 1st Class Object mixin specifying shared behaviors using a first-class construct use simple methods for Expectations Method Call 1st Class Object making assertions uses first-class matcher objects 156
182 Ruby on Rails on Minitest 1st Class You keep using that term. I do not think it means what you think it means. 157
183 A language construct is said to be a FirstClass value in that language when there are no restrictions on how it can be created and used: when the construct can be treated as a value without restrictions. FirstClass features can be stored in variables, passed as arguments to functions, created within functions and returned from functions. In dynamically typed languages, a FirstClass feature can also have its type examined at run-time
184 Minitest RSpec Example Groups Class 1st Class Object Examples Method 1st Class Object Reuse Subclass or Include 1st Class Object Expectations Method Call 1st Class Object 159
185 Minitest RSpec It's Just Ruby Example Groups Class 1st Class Object Examples Method 1st Class Object Reuse Subclass or Include 1st Class Object Expectations Method Call 1st Class Object 159
186 Minitest RSpec It's Just Ruby Reinvents the Wheel Example Groups Class 1st Class Object Examples Method 1st Class Object Reuse Subclass or Include 1st Class Object Expectations Method Call 1st Class Object 159
187 Nested Describes describe A do before { :a } it "runs :a" describe B do before { :b } it "runs :a, :b" end end 160
188 Nested Describes describe A do Inherited "methods" before { :a } it "runs :a" describe B do before { :b } it "runs :a, :b" end end 160
189 Nested Describes describe A do Inherited "methods" before { :a } it "runs :a" describe B do before { :b } it "runs :a, :b" end end NOT Inherited "methods" 160
190 Are A & B classes? Is Nesting like Subclassing? 161
191 Classes? class TestA < RSpec::Spec def before super :a end class TestB < TestA def before super :b end def test_runs_a; end undef_method :test_runs_a end end def test_runs_a_b; end 162
192 Classes? class TestA < RSpec::Spec def before super :a end class TestB < TestA def before super :b end def test_runs_a; end undef_method :test_runs_a end end def test_runs_a_b; end 162
193 Are before/after like included modules? 163
194 Modules? class TestA < RSpec::Spec module BeforeAfter def setup super if respond_to? :super :a end end class TestB < RSpec::Spec module BeforeAfter def setup super if respond_to? :super :b end end include TestA::BeforeAfter include TestA::BeforeAfter include TestB::BeforeAfter end def test_runs_a; end end def test_runs_a_b; end 164
195 This is basically Another Object Model 165
196 That's Confusing if you're just learning Ruby/OO 166
197 Encourages new users to handwave 167
198 To not know what #describe or #it actually are or do 168
199 Here's the Magic Incantation to do X 169
200 Any sufficiently advanced technology is indistinguishable from magic. A.C. Clarke 170
201 RSpec: It s actually Magic
202 Many people find it to be overkill, though, and there is an added cognitive cost to the extra abstractions. Myron Marsten, from previous post 172
203 Indeed 173
204 */lib Minitest RSpec Multiplier # Files Flog 2, , Lines of Code 1,589 15, Lines of Comment 1,063 7, Comment + Code 2,652 22, Comment/Code N/A 174
205 Flog Minitest RSpec 175
206 30,000 Lines of Code Lines of Comment 22,500 15,000 7,500 0 Minitest RSpec 176
207 177
208 TEST TEST TEST TEST 177
209 TEST TEST TEST vs TEST 177
210 TEST TEST TEST vs TEST 177
211 Many people find it to be overkill, though, and there is an added cognitive cost to the extra abstractions. Myron Marsten, from previous post 178
212 Not just cognitive! 179
213 Performance differences with RSpec 180
214 All those abstractions? 181
215 Reinventing the wheel? 182
216 Has a Real Cost 183
217 Combined RSpec Results Combined Minitest Results pos rs time 1neg rs time 50neg rs time 100neg rs time pos rs memory 1neg rs memory 50neg rs memory 100neg rs memory pos mt time 1neg mt time 50neg mt time 100neg mt time pos mt memory 1neg mt memory 50neg mt memory 100neg mt memory Time (s) Memory (MB) Time (s) Memory (MB) # tests # tests 184
218 Combined RSpec Results Combined Minitest Results pos rs time 1neg rs time 50neg rs time 100neg rs time pos rs memory 1neg rs memory 50neg rs memory 100neg rs memory pos mt time 1neg mt time 50neg mt time 100neg mt time pos mt memory 1neg mt memory 50neg mt memory 100neg mt memory Time (s) Memory (MB) Time (s) Memory (MB) # tests # tests 185
219 But Ryan
220 Who cares? 187
221 Passing rspec is fast enough 188
222 Bug? 189
223 Bug? Refactor? 189
224 Bug? Refactor? Anything else goes wrong? 189
225 You Pay 190
226 For Completeness: 191
227 Minitest vs RSpec, time & memory (assertions) 0.60 mt time rs time 0.45 Expectation Time (s) Speed test, # assertions
228 Minitest vs RSpec, time mt time rs time Method Time (s) 4.50 Execution # tests, 0 assertions Speed
229 Linear 194
230 Don't reduce examples or expectations 195
231 If you want a speed up 196
232 Switch to minitest 197
233 Or never, ever refactor. 198
234 Summary 199
235 At the end of the day 200
236 As long as you test 201
237 I don't care what you use 202
238 Use the best tool for your job 203
239 Hopefully, I've shown 204
240 The technical merits of Minitest 205
241 Choose what works for you 206
242 Not because it seems popular 207
243 Maybe there's fewer articles about MT because there's less need for them? 208
244 MT is much easier to understand. 209
245 MT users aren't missing. 210
246 They're busy Getting Stuff Done. 211
247 Choose what works for you 212
248 Who knows? 213
249 Try It 214
250 You might like it 215
251 After All 216
252 It's Just Ruby 217
253 Thank You 218
254 Thank You (hire me) 218
Part II. Managing Issues
Managing Issues Part II. Managing Issues If projects are the most important part of Redmine, then issues are the second most important. Projects are where you describe what to do, bring everyone together,
Rake Task Management Essentials
Rake Task Management Essentials Andrey Koleshko Chapter No. 8 "Testing Rake Tasks" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter NO.8 "Testing
Testing Frameworks (MiniTest)
Testing Frameworks (MiniTest) Computer Science and Engineering College of Engineering The Ohio State University Lecture 32 MiniTest and RSpec Many popular testing libraries for Ruby MiniTest (replaces
Introduction. What is RAID? The Array and RAID Controller Concept. Click here to print this article. Re-Printed From SLCentral
Click here to print this article. Re-Printed From SLCentral RAID: An In-Depth Guide To RAID Technology Author: Tom Solinap Date Posted: January 24th, 2001 URL: http://www.slcentral.com/articles/01/1/raid
Survey of Unit-Testing Frameworks. by John Szakmeister and Tim Woods
Survey of Unit-Testing Frameworks by John Szakmeister and Tim Woods Our Background Using Python for 7 years Unit-testing fanatics for 5 years Agenda Why unit test? Talk about 3 frameworks: unittest nose
Unit Testing. and. JUnit
Unit Testing and JUnit Problem area Code components must be tested! Confirms that your code works Components must be tested t in isolation A functional test can tell you that a bug exists in the implementation
Ruby on Rails. a high-productivity web application framework. blog.curthibbs.us/ http://blog. Curt Hibbs <[email protected]>
Ruby on Rails a high-productivity web application framework http://blog blog.curthibbs.us/ Curt Hibbs Agenda What is Ruby? What is Rails? Live Demonstration (sort of ) Metrics for Production
Introduction to Open Atrium s workflow
Okay welcome everybody! Thanks for attending the webinar today, my name is Mike Potter and we're going to be doing a demonstration today of some really exciting new features in open atrium 2 for handling
Ruby On Rails A Cheatsheet. Ruby On Rails Commands
Ruby On Rails A Cheatsheet blainekall.com Ruby On Rails Commands gem update rails rails application rake appdoc rake --tasks rake stats ruby script/server update rails create a new application generate
Intro to scientific programming (with Python) Pietro Berkes, Brandeis University
Intro to scientific programming (with Python) Pietro Berkes, Brandeis University Next 4 lessons: Outline Scientific programming: best practices Classical learning (Hoepfield network) Probabilistic learning
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
Testing Python. Applying Unit Testing, TDD, BDD and Acceptance Testing
Brochure More information from http://www.researchandmarkets.com/reports/2755225/ Testing Python. Applying Unit Testing, TDD, BDD and Acceptance Testing Description: Fundamental testing methodologies applied
JRuby Now and Future Charles Oliver Nutter JRuby Guy Sun Microsystems
JRuby Now and Future Charles Oliver Nutter JRuby Guy Sun Microsystems Except where otherwise noted, the content of this presentation is licensed under the Creative Commons Attribution Share Alike 3.0 United
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?.................................
Drupal + Formulize. A Step-by-Step Guide to Integrating Drupal with XOOPS/ImpressCMS, and installing and using the Formulize module
Drupal + Formulize A Step-by-Step Guide to Integrating Drupal with XOOPS/ImpressCMS, and installing and using the Formulize module May 16, 2007 Updated December 23, 2009 This document has been prepared
Power Tools for Pivotal Tracker
Power Tools for Pivotal Tracker Pivotal Labs Dezmon Fernandez Victoria Kay Eric Dattore June 16th, 2015 Power Tools for Pivotal Tracker 1 Client Description Pivotal Labs is an agile software development
Development Environment and Tools for Java. Brian Hughes IBM
Development Environment and Tools for Java Brian Hughes IBM 1 Acknowledgements and Disclaimers Availability. References in this presentation to IBM products, programs, or services do not imply that they
Java course - IAG0040. Unit testing & Agile Software Development
Java course - IAG0040 Unit testing & Agile Software Development 2011 Unit tests How to be confident that your code works? Why wait for somebody else to test your code? How to provide up-to-date examples
Digital Marketing Manager, Marketing Manager, Agency Owner. Bachelors in Marketing, Advertising, Communications, or equivalent experience
Persona name Amanda Industry, geographic or other segments B2B Roles Digital Marketing Manager, Marketing Manager, Agency Owner Reports to VP Marketing or Agency Owner Education Bachelors in Marketing,
Welcome to the Force.com Developer Day
Welcome to the Force.com Developer Day Sign up for a Developer Edition account at: http://developer.force.com/join Nicola Lalla [email protected] n_lalla nlalla26 Safe Harbor Safe harbor statement under
ESA FAQ. E-mail Self Administration Frequently Asked Questions
E-mail Self Administration Frequently Asked Questions Contents ESA FAQ...2 How do I... Log in?...2 How do I... Add a new e-mail address?...2 How do I... Add a new mailbox?...3 How do I... Add a new alias?...4
12Planet Chat end-user manual
12Planet Chat end-user manual Document version 1.0 12Planet 12Planet Page 2 / 13 Table of content 1 General... 4 1.1 How does the chat work?... 4 1.2 Browser Requirements... 4 1.3 Proxy / Firewall Info...
My Secure Backup: How to reduce your backup size
My Secure Backup: How to reduce your backup size As time passes, we find our backups getting bigger and bigger, causing increased space charges. This paper takes a few Newsletter and other articles I've
Build Automation for Mobile. or How to Deliver Quality Apps Continuously. Angelo Rüggeberg
Build Automation for Mobile or How to Deliver Quality Apps Continuously Angelo Rüggeberg Things to remember Publishing your App should not be painfull Angelo Rüggeberg Code Quality Matters Angelo Rüggeberg
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
Software Testing with Python
Software Testing with Python Magnus Lyckå Thinkware AB www.thinkware.se EuroPython Conference 2004 Chalmers, Göteborg, Sweden 2004, Magnus Lyckå In the next 30 minutes you should... Learn about different
Solution Spotlight KEY OPPORTUNITIES AND PITFALLS ON THE ROAD TO CONTINUOUS DELIVERY
Solution Spotlight KEY OPPORTUNITIES AND PITFALLS ON THE ROAD TO CONTINUOUS DELIVERY C ontinuous delivery offers a number of opportunities and for organizations. By automating the software buildtest-deployment
Google Drive: Access and organize your files
Google Drive: Access and organize your files Use Google Drive to store and access your files, folders, and Google Docs, Sheets, and Slides anywhere. Change a file on the web, your computer, tablet, or
Appendix 1: Adaptable Email Templates
Appendix 1: Adaptable Email Templates The following emails are included for the benefit of anybody running a similar project. They are provided as templates, so that you don t need to start all of your
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General
Secrets to Automation Success. A White Paper by Paul Merrill, Consultant and Trainer at Beaufort Fairmont, LLC
5 Secrets to Automation Success A White Paper by Paul Merrill, Consultant and Trainer at Beaufort Fairmont, LLC 5 Secrets to Automated Testing Success 2 Secret #1 Practice Exceptional Leadership If you
Web Applications Security: SQL Injection Attack
Web Applications Security: SQL Injection Attack S. C. Kothari CPRE 556: Lecture 8, February 2, 2006 Electrical and Computer Engineering Dept. Iowa State University SQL Injection: What is it A technique
How to Perform a Break-Even Analysis in a Retail Store A Step by Step Guide
How to Perform a Break-Even Analysis in a Retail Store A Step by Step Guide By BizMove Management Training Institute Other free books by BizMove that may interest you: Free starting a business books Free
Web development... the server side (of the force)
Web development... the server side (of the force) Fabien POULARD Document under license Creative Commons Attribution Share Alike 2.5 http://www.creativecommons.org/learnmore Web development... the server
How to Outsource Without Being a Ninnyhammer
How to Outsource Without Being a Ninnyhammer 5 mistakes people make when outsourcing for profit By Jason Fladlien 2 Introduction The way everyone does outsourcing is patently wrong, and this report is
Managing User Accounts and User Groups
Managing User Accounts and User Groups Contents Managing User Accounts and User Groups...2 About User Accounts and User Groups... 2 Managing User Groups...3 Adding User Groups... 3 Managing Group Membership...
Accelerate Your Rails Site with Automatic Generation-Based Action Caching. Rod Cope, CTO and Founder OpenLogic, Inc.
Accelerate Your Rails Site with Automatic Generation-Based Action Caching Rod Cope, CTO and Founder OpenLogic, Inc. Goal Built-in caching is hard: Learn how to automate it to make the pain go away 2 Agenda
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
Stack Allocation. Run-Time Data Structures. Static Structures
Run-Time Data Structures Stack Allocation Static Structures For static structures, a fixed address is used throughout execution. This is the oldest and simplest memory organization. In current compilers,
Transcription. Crashplan vs Backblaze. Which service should you pick the short version
Transcription Crashplan vs Backblaze Hey and welcome to cloudwards.net and another exciting video of two major unlimited online backup services namely Backblaze and CrashPlan or CrashPlan or Backblaze.
Continuous Integration and Bamboo. Ryan Cutter CSCI 5828 2012 Spring Semester
Continuous Integration and Bamboo Ryan Cutter CSCI 5828 2012 Spring Semester Agenda What is CI and how can it help me? Fundamentals of CI Fundamentals of Bamboo Configuration / Price Quick example Features
Development at the Speed and Scale of Google. Ashish Kumar Engineering Tools
Development at the Speed and Scale of Google Ashish Kumar Engineering Tools The Challenge Speed and Scale of Google More than 5000 developers in more than 40 offices More than 2000 projects under active
JUnit - A Whole Lot of Testing Going On
JUnit - A Whole Lot of Testing Going On Advanced Topics in Java Khalid Azim Mughal [email protected] http://www.ii.uib.no/~khalid Version date: 2006-09-04 ATIJ JUnit - A Whole Lot of Testing Going On 1/51
Lecture 17: Mobile Computing Platforms: Android. Mythili Vutukuru CS 653 Spring 2014 March 24, Monday
Lecture 17: Mobile Computing Platforms: Android Mythili Vutukuru CS 653 Spring 2014 March 24, Monday Mobile applications vs. traditional applications Traditional model of computing: an OS (Linux / Windows),
TU04. Best practices for implementing a BI strategy with SAS Mike Vanderlinden, COMSYS IT Partners, Portage, MI
TU04 Best practices for implementing a BI strategy with SAS Mike Vanderlinden, COMSYS IT Partners, Portage, MI ABSTRACT Implementing a Business Intelligence strategy can be a daunting and challenging task.
Software Engineering Techniques
Software Engineering Techniques Low level design issues for programming-in-the-large. Software Quality Design by contract Pre- and post conditions Class invariants Ten do Ten do nots Another type of summary
Gallio: Crafting a Toolchain. Jeff Brown [email protected]
Gallio: Crafting a Toolchain Jeff Brown [email protected] About Me Jeff Brown Lead Software Engineer at Yellowpages.com Creator of Gallio Open Source Project Lead of MbUnit Open Source Project Coding
Building Your Firewall Rulebase Lance Spitzner Last Modified: January 26, 2000
Building Your Firewall Rulebase Lance Spitzner Last Modified: January 26, 2000 Building a solid rulebase is a critical, if not the most critical, step in implementing a successful and secure firewall.
Unit Testing Strategies
Unit Testing Strategies SEATTLE PORTLAND AUSTIN BALTIMORE ORLANDO D. Keith Casey Jr Chief Stuff Breaker/Blue Parabola Overview What is Unit Testing? What's the point of Unit Testing? Our Holy Grail Useless
Upping the game. Improving your software development process
Upping the game Improving your software development process John Ferguson Smart Principle Consultant Wakaleo Consulting Email: [email protected] Web: http://www.wakaleo.com Twitter: wakaleo Presentation
System Level Integration and Test Leveraging Software Unit Testing Techniques
System Level Integration and Test Leveraging Software Unit Testing Techniques Ryan J. Melton Ball Aerospace & Technologies Corp. Boulder, CO ABSTRACT Ever try to decipher or debug a huge automated test
Computer Forensics for Business Leaders: Building Robust Policies and Processes Transcript
Computer Forensics for Business Leaders: Building Robust Policies and Processes Transcript Part 1: Why Policy Is Key Stephanie Losi: Welcome to CERT's podcast series: Security for Business Leaders. The
Jazz Source Control Best Practices
Jazz Source Control Best Practices Shashikant Padur RTC SCM Developer Jazz Source Control Mantra The fine print Fast, easy, and a few concepts to support many flexible workflows Give all users access to
CS193j, Stanford Handout #10 OOP 3
CS193j, Stanford Handout #10 Summer, 2003 Manu Kumar OOP 3 Abstract Superclass Factor Common Code Up Several related classes with overlapping code Factor common code up into a common superclass Examples
How to Get of Debt in 24 Months
www.steamenginefinancialcoaching.com How to Get of Debt in 24 Months by John Bonesio, Financial Coach How to Get Out of Debt in 24 Months There are lots of debt solutions out there. You may have heard
>> My name is Danielle Anguiano and I am a tutor of the Writing Center which is just outside these doors within the Student Learning Center.
>> My name is Danielle Anguiano and I am a tutor of the Writing Center which is just outside these doors within the Student Learning Center. Have any of you been to the Writing Center before? A couple
ISVforce Guide. Version 35.0, Winter 16. @salesforcedocs
ISVforce Guide Version 35.0, Winter 16 @salesforcedocs Last updated: vember 12, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com,
How Safe does my Code Need to be? Shawn A. Prestridge, Senior Field Applications Engineer
How Safe does my Code Need to be? Shawn A. Prestridge, Senior Field Applications Engineer Agendum What the benefits of Functional Safety are What the most popular safety certifications are Why you should
Multi-Factor Authentication: Do I Need It, and How Do I Get Started? [And If I Do Need It, Why Aren't Folks Deploying It?]
Multi-Factor Authentication: Do I Need It, and How Do I Get Started? [And If I Do Need It, Why Aren't Folks Deploying It?] Joe St Sauver, Ph.D. ([email protected]) Internet2 Global Summit, Denver Colorado
Build management & Continuous integration. with Maven & Hudson
Build management & Continuous integration with Maven & Hudson About me Tim te Beek [email protected] Computer science student Bioinformatics Research Support Overview Build automation with Maven Repository
Progressive Enhancement With GQuery and GWT. Ray Cromwell [email protected]
Progressive Enhancement With GQuery and GWT Ray Cromwell [email protected] Web Application Models Web 1.0, 1 Interaction = 1 Page Refresh Pure JS, No Navigation Away from Page Mixed Model, Page Reloads
Web Frameworks. web development done right. Course of Web Technologies A.A. 2010/2011 Valerio Maggio, PhD Student Prof.
Web Frameworks web development done right Course of Web Technologies A.A. 2010/2011 Valerio Maggio, PhD Student Prof.ssa Anna Corazza Outline 2 Web technologies evolution Web frameworks Design Principles
Java Troubleshooting and Performance
Java Troubleshooting and Performance Margus Pala Java Fundamentals 08.12.2014 Agenda Debugger Thread dumps Memory dumps Crash dumps Tools/profilers Rules of (performance) optimization 1. Don't optimize
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
Building, testing and deploying mobile apps with Jenkins & friends
Building, testing and deploying mobile apps with Jenkins & friends Christopher Orr https://chris.orr.me.uk/ This is a lightning talk which is basically described by its title, where "mobile apps" really
The programming language C. sws1 1
The programming language C sws1 1 The programming language C invented by Dennis Ritchie in early 1970s who used it to write the first Hello World program C was used to write UNIX Standardised as K&C (Kernighan
Course Goals. Solve Non-Technical Customer problem Server side: Ruby on Rails Client side: HTML, CSS, AJAX, JavaScript Deploy using cloud computing
Course Goals Learn Software Engineering Principles by understanding new challenges, opportunities, and open problems of SaaS Take a SaaS project from conception to public deployment Solve Non-Technical
Web Hosting: Pipeline Program Technical Self Study Guide
Pipeline Program Technical Self Study Guide Thank you for your interest in InMotion Hosting and our Technical Support positions. Our technical support associates operate in a call center environment, assisting
An Oracle White Paper July 2011. Oracle Primavera Contract Management, Business Intelligence Publisher Edition-Sizing Guide
Oracle Primavera Contract Management, Business Intelligence Publisher Edition-Sizing Guide An Oracle White Paper July 2011 1 Disclaimer The following is intended to outline our general product direction.
Test Driven Development
Test Driven Development Introduction Test Driven development (TDD) is a fairly recent (post 2000) design approach that originated from the Extreme Programming / Agile Methodologies design communities.
Real Time Programming: Concepts
Real Time Programming: Concepts Radek Pelánek Plan at first we will study basic concepts related to real time programming then we will have a look at specific programming languages and study how they realize
Resource Monitoring During Performance Testing. Experience Report by Johann du Plessis. Introduction. Planning for Monitoring
Resource Monitoring During Performance Testing Experience Report by Johann du Plessis Introduction During a recent review of performance testing projects I completed over the past 8 years, one of the goals
Generating Marketing Leads Via Marketing Forums
Generating Marketing Leads Via Marketing Forums Before you can begin what I call forum sniping or forum marketing, you are going to need to search out two or three forums and become a member of them. I've
How To Design Your Code In Php 5.5.2.2 (Php)
By Janne Ohtonen, August 2006 Contents PHP5 Design Patterns in a Nutshell... 1 Introduction... 3 Acknowledgments... 3 The Active Record Pattern... 4 The Adapter Pattern... 4 The Data Mapper Pattern...
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
High Level Design Distributed Network Traffic Controller
High Level Design Distributed Network Traffic Controller Revision Number: 1.0 Last date of revision: 2/2/05 22c:198 Johnson, Chadwick Hugh Change Record Revision Date Author Changes 1 Contents 1. Introduction
Achieving business benefits through automated software testing. By Dr. Mike Bartley, Founder and CEO, TVS (mike@testandverification.
Achieving business benefits through automated software testing By Dr. Mike Bartley, Founder and CEO, TVS ([email protected]) 1 Introduction During my experience of test automation I have seen
Building Applications Using Micro Focus COBOL
Building Applications Using Micro Focus COBOL Abstract If you look through the Micro Focus COBOL documentation, you will see many different executable file types referenced: int, gnt, exe, dll and others.
Using collaboration to enable the innovators in your organization. Welcome to the IBM CIO Podcast Series. I'm your host, Jeff Gluck,
IBM Global Technology Services www.ibm.com/services IBM Podcast Using collaboration to enable the innovators in your organization Welcome to the IBM CIO Podcast Series. I'm your host, Jeff Gluck, and my
Testing, Debugging, and Verification
Testing, Debugging, and Verification Testing, Part II Moa Johansson 10 November 2014 TDV: Testing /GU 141110 1 / 42 Admin Make sure you are registered for the course. Otherwise your marks cannot be recorded.
JUnit. Introduction to Unit Testing in Java
JUnit Introduction to Unit Testing in Java Testing, 1 2 3 4, Testing What Does a Unit Test Test? The term unit predates the O-O era. Unit natural abstraction unit of an O-O system: class or its instantiated
Monitoring, Tracing, Debugging (Under Construction)
Monitoring, Tracing, Debugging (Under Construction) I was already tempted to drop this topic from my lecture on operating systems when I found Stephan Siemen's article "Top Speed" in Linux World 10/2003.
Next Generation Tech-Talk. Cloud Based Business Collaboration with Cisco Spark
Next Generation Tech-Talk Cloud Based Business Collaboration with Cisco Spark 2 [music] 00:06 Phil Calzadilla: Hello, hello! Welcome. This is Phil Calzadilla founder and CEO of NextNet Partners, and I'd
Jenesis Software - Podcast Episode 2
Jenesis Software - Podcast Episode 2 All right, welcome to episode two with Chuck, Eddie, And Benny. And we're doing some technical talk today about network speed on episode two. Let's talk about, guys,
A lap around Team Foundation Server 2015 en Visual Studio 2015
A lap around Team Foundation Server 2015 en Visual Studio 2015 René van Osnabrugge ALM Consultant, Xpirit [email protected] http://roadtoalm.com @renevo About me Also Scrum Master [email protected]
Sponsored by: Speaker: Brian Madden, Independent Industry Analyst and Blogger
THIN CLIENT OPTIONS Sponsored by: Speaker: Brian Madden, Independent Industry Analyst and Blogger Brian Madden: Hello. My name is Brian Madden, and welcome to Part 2 of our threepart video series about
THE ROAD TO CODE. ANDROID DEVELOPMENT IMMERSIVE May 31. WEB DEVELOPMENT IMMERSIVE May 31 GENERAL ASSEMBLY
THE ROAD TO CODE WEB DEVELOPMENT IMMERSIVE May 31 ANDROID DEVELOPMENT IMMERSIVE May 31 GENERAL ASSEMBLY GENERAL ASSEMBLY @GA_CHICAGO WWW.FACEBOOK.COM/GENERALASSEMBLYCHI @GA_CHICAGO GENERAL ASSEMBLY GENERAL
Ruby on Rails. Object Oriented Analysis & Design CSCI-5448 University of Colorado, Boulder. -Dheeraj Potlapally
Ruby on Rails Object Oriented Analysis & Design CSCI-5448 University of Colorado, Boulder -Dheeraj Potlapally INTRODUCTION Page 1 What is Ruby on Rails Ruby on Rails is a web application framework written
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
Co-Presented by Mr. Bill Rinko-Gay and Dr. Constantin Stanca 9/28/2011
QAI /QAAM 2011 Conference Proven Practices For Managing and Testing IT Projects Co-Presented by Mr. Bill Rinko-Gay and Dr. Constantin Stanca 9/28/2011 Format This presentation is a journey When Bill and
CS 2112 Spring 2014. 0 Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions
CS 2112 Spring 2014 Assignment 3 Data Structures and Web Filtering Due: March 4, 2014 11:59 PM Implementing spam blacklists and web filters requires matching candidate domain names and URLs very rapidly
