12 hours to rate a rails application
-
Upload
ehuard -
Category
Technology
-
view
2.369 -
download
0
description
Transcript of 12 hours to rate a rails application
![Page 1: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/1.jpg)
hours to rate a Rails application
Elise Huard @elise_huardhttp://jabberwocky.eu
Tuesday 8 June 2010
![Page 2: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/2.jpg)
Acquisition
Tuesday 8 June 2010
![Page 3: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/3.jpg)
Maintenance
Tuesday 8 June 2010
![Page 4: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/4.jpg)
12 hours To Rate a Rails Application
12:00
Tuesday 8 June 2010
![Page 5: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/5.jpg)
Team
Tuesday 8 June 2010
![Page 6: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/6.jpg)
One man’s application
Tuesday 8 June 2010
![Page 7: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/7.jpg)
Maintenance
Maintenance
Innovator
Automator
Control freak
Tuesday 8 June 2010
![Page 8: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/8.jpg)
...
Tuesday 8 June 2010
![Page 9: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/9.jpg)
Vision
photo by OneEighteen
vision
Tuesday 8 June 2010
![Page 10: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/10.jpg)
Methodology
Tuesday 8 June 2010
![Page 11: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/11.jpg)
docman on flickr
issue TrackerVersion control
Tuesday 8 June 2010
![Page 12: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/12.jpg)
Back seat driver
Tuesday 8 June 2010
![Page 13: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/13.jpg)
10:00
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 14: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/14.jpg)
Try the app
Björn Söderqvist on Flickr
Tuesday 8 June 2010
![Page 15: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/15.jpg)
does it work ?
Tuesday 8 June 2010
![Page 16: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/16.jpg)
09:45
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 17: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/17.jpg)
Rails version
Tuesday 8 June 2010
![Page 18: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/18.jpg)
plugins and gems
Photo Lex on Flickr
Tuesday 8 June 2010
![Page 19: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/19.jpg)
Tuesday 8 June 2010
![Page 20: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/20.jpg)
managing updatesBundlerpiston
git submodules(svn externals)
Tuesday 8 June 2010
![Page 21: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/21.jpg)
LicensesBSD, MIT, Apache ...
Tuesday 8 June 2010
![Page 22: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/22.jpg)
NIH syndrom
Tuesday 8 June 2010
![Page 23: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/23.jpg)
Run Tests
Tuesday 8 June 2010
![Page 24: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/24.jpg)
09:00
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 25: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/25.jpg)
Lots of code
Tuesday 8 June 2010
![Page 26: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/26.jpg)
config/routes.rb
match ‘/’, :to => ‘root#index’ match ‘root’, :to => ‘root#index’
namespace :admin do resources :grids do resources :nodes resources :edges do collection do post :all post :update_all end end resources :walkers endend resources :nodes, :only => [:show,:new,:create,:destroy] do put :directions, :on => :collectionend
resources :walkers, :only => [:show,:new,:create,:destroy] do get :select, :on => :collectionendresources :itineraries, :only => [:show]
map.four_oh_four '*path' , :controller => 'four_oh_fours'Tuesday 8 June 2010
![Page 27: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/27.jpg)
modelsrailroad -M | dot Tpng > models.png
rubymine ctrl-alt-D
Tuesday 8 June 2010
![Page 28: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/28.jpg)
names
“There are only two hard things in Computer Science: cache invalidation and naming things”
Phil Karlton
Tuesday 8 June 2010
![Page 29: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/29.jpg)
08:30
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 30: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/30.jpg)
Metricsknow thine tools
docman on flickr
Tuesday 8 June 2010
![Page 31: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/31.jpg)
LOC
rake stats+----------------------+-------+-------+---------+---------+-----+-------+| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |+----------------------+-------+-------+---------+---------+-----+-------+| Controllers | 2702 | 2150 | 36 | 158 | 4 | 11 || Helpers | 358 | 303 | 0 | 22 | 0 | 11 || Models | 1358 | 1104 | 30 | 117 | 3 | 7 || Libraries | 2286 | 1655 | 38 | 152 | 4 | 8 || Integration tests | 0 | 0 | 0 | 0 | 0 | 0 || Functional tests | 1687 | 1322 | 31 | 195 | 6 | 4 || Unit tests | 1356 | 1079 | 27 | 158 | 5 | 4 |+----------------------+-------+-------+---------+---------+-----+-------+| Total | 9747 | 7613 | 162 | 802 | 4 | 7 |+----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 5212 Test LOC: 2401 Code to Test Ratio: 1:0.5
Tuesday 8 June 2010
![Page 32: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/32.jpg)
RubyParser and Parsetree
Ryan Davis and Eric Hodel(‘Ruby Sadists’)
Tuesday 8 June 2010
![Page 33: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/33.jpg)
RubyParser and Parsetree
Abstract syntax treeRubyParser.new.parse(File.read(‘metrics.rb’),‘metric.rb’)
class Metrics def probe puts "good" end end
s(:class,:Metrics, nil, s(:scope, s(:defn,:probe, s(:args), s(:scope, s(:block, s(:call, nil, :puts, s(:arglist, s(:str, "good"))))))))
Symbolic Expression (Sexp)
Tuesday 8 June 2010
![Page 34: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/34.jpg)
RubyParser and Parsetree
Abstract syntax treeRubyParser.new.parse(File.read(‘metrics.rb’),‘metric.rb’)
class Metrics def probe puts "good" end end
s(:class,:Metrics, nil, s(:scope, s(:defn,:probe, s(:args), s(:scope, s(:block, s(:call, nil, :puts, s(:arglist, s(:str, "good"))))))))
Symbolic Expression (Sexp)
Ruby2Ruby
Tuesday 8 June 2010
![Page 35: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/35.jpg)
RubyParser
Parsetree
pure ruby
ruby and inline c< 1.9
swap out with Ripper ?
Tuesday 8 June 2010
![Page 36: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/36.jpg)
cyclomatic complexity
size
code complexity code similarities
test coverage
antipatterns
rake stats
Flay
ReekRoodi
Flog
Saikuro
Heckle Rcov
Rails
R_B_P
Tuesday 8 June 2010
![Page 37: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/37.jpg)
flog‘the pain your code
is in’
Tuesday 8 June 2010
![Page 38: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/38.jpg)
FLOG
flog lib/flog.rb 647.8: flog total 13.8: flog/method average
87.5: Flog#output_details 58.8: Flog#process_iter 54.2: Flog#flog 48.8: Flog#parse_options 34.1: Flog#none 23.2: Flog#output_method_details 22.1: Flog#score_method 16.0: Flog#process_block_pass 15.6: Flog#report 15.2: Flog#expand_dirs_to_files 15.0: Flog#klass_name
Tuesday 8 June 2010
![Page 39: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/39.jpg)
FLOG
Assignment Branch Condition (ABC) def score_method(tally) a, b, c = 0, 0, 0 tally.each do |cat, score| case cat when :assignment then a += score when :branch then b += score else c += score end end Math.sqrt(a*a + b*b + c*c) end
Tuesday 8 June 2010
![Page 40: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/40.jpg)
FLOG
Weighing the AST with factors def process_if(exp) add_to_score :branch process exp.shift # cond penalize_by 0.1 do process exp.shift # true process exp.shift # false end s() end
Tuesday 8 June 2010
![Page 41: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/41.jpg)
FLOG
Very good: < 20All Right: < 50
Tuesday 8 June 2010
![Page 42: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/42.jpg)
FLAYcode similarities
Tuesday 8 June 2010
![Page 43: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/43.jpg)
flay *.rb Total score (lower is better) = 621
1) IDENTICAL code found in :defn (mass*2 = 188) channel.rb:48 clip.rb:80
2) Similar code found in :defn (mass = 93) channel.rb:150 clip.rb:110 clip.rb:116
3) Similar code found in :defs (mass = 58) contact.rb:32 contact.rb:37
FLAY
Tuesday 8 June 2010
![Page 44: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/44.jpg)
RubyParser def mass @mass ||= self.structure.flatten.size end
Hash of structure of nodes with mass > threshold self.hashes[node.structural_hash] << node
analyze: if same hash = similarif same node = identical
FLAY
Tuesday 8 June 2010
![Page 45: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/45.jpg)
Saikuroサイクロ
cyclomatic complexity
Tuesday 8 June 2010
![Page 46: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/46.jpg)
Saikuro
Tuesday 8 June 2010
![Page 47: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/47.jpg)
Saikuro
ruby-lex
every keyword is interpreted into ‘state’
state used to calculateif, unless, while, until, for, elsif, when, rescue
(blocks)Recursively
Tuesday 8 June 2010
![Page 48: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/48.jpg)
Saikuro
Good:methods < 5
Tuesday 8 June 2010
![Page 49: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/49.jpg)
Roodi‘Ruby Object Oriented Design Inferometer’
nutmeg66 on flickr
Tuesday 8 June 2010
![Page 50: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/50.jpg)
Roodi
app/controllers/itineraries_controller.rb:4 - Method name "show" cyclomatic complexity is 14. It should be 8 or less.app/models/itinerary.rb:41 - Block cyclomatic complexity is 6. It should be 4 or less.app/controllers/itineraries_controller.rb:4 - Method "show" has 30 lines. It should have 20 or less.app/helpers/application_helper.rb:27 - Method "clippy" has 26 lines. It should have 20 or less.
Tuesday 8 June 2010
![Page 51: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/51.jpg)
Roodi
RubyParservisitor pattern visitor: checker (Configurable) visitable: parsed nodes= extensible
Tuesday 8 June 2010
![Page 52: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/52.jpg)
Reek
Tuesday 8 June 2010
![Page 53: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/53.jpg)
Reek
UserSessionsController has no descriptive comment (Irresponsible Module) UserSessionsController#destroy calls current_user_session twice (Duplication)app/controllers/users_controller.rb -- 5 warnings: UsersController has no descriptive comment (Irresponsible Module) UsersController tests @aid_app at least 4 times (Simulated Polymorphism) UsersController#create calls params 3 times (Duplication) UsersController#create calls params[:user] 3 times (Duplication)...
Tuesday 8 June 2010
![Page 54: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/54.jpg)
Reek
OO Code smellsControl CoupleData ClumpFeature EnvyLarge ClassLong MethodLong Parameter ListSimulated PolymorphismUncommunicative Name
Tuesday 8 June 2010
![Page 55: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/55.jpg)
Reek
RubyParserextends parsed nodes
traverses nodesreturns code after Ruby2Ruby
Tuesday 8 June 2010
![Page 56: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/56.jpg)
rails_best_practices
kamoda on Flickr
Tuesday 8 June 2010
![Page 57: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/57.jpg)
./app/controllers/ws/vmg/aid_user_accounts_controller.rb:160 - move model logic into model (@aid_user_account called_count > 4)./app/controllers/ws/vmg/ipt_controller.rb:102 - move model logic into model (xml called_count > 4)./app/controllers/ws/vmg/ipt_controller.rb:102 - move model logic into model (pf called_count > 4)./config/routes.rb:3 - overuse route customizations (customize_count > 3)./config/routes.rb:35 - overuse route customizations (customize_count > 3)./app/models/vmg/scenario.rb:41 - keep finders on their own model
rails_best_practices
Tuesday 8 June 2010
![Page 58: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/58.jpg)
rails_best_practices
Visitor patternvisitor : checking_visitorvisitable: visitable sexp
Tuesday 8 June 2010
![Page 59: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/59.jpg)
Churn
Tuesday 8 June 2010
![Page 60: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/60.jpg)
Churn
Not only classes but also methods(RubyParser)
Version control: git, Hg, svnLocates changes in source using logs
(as in git log)
Tuesday 8 June 2010
![Page 61: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/61.jpg)
Churn
+-------------------------------------------------+---------------+| file_path | times_changed |+-------------------------------------------------+---------------+| db/schema.rb | 26 || config/routes.rb | 24 || app/controllers/application_controller.rb | 22 || app/controllers/add_apps_controller.rb | 22 || config/environment.rb | 20 || app/views/layouts/application.html.erb | 20 || app/models/ability.rb | 18 |...
Tuesday 8 June 2010
![Page 62: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/62.jpg)
Churn
common sense ... mostly useful in maintenance phase
Tuesday 8 June 2010
![Page 63: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/63.jpg)
Rcov
Tuesday 8 June 2010
![Page 64: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/64.jpg)
Rcov
Total coverage: comments included
Tuesday 8 June 2010
![Page 65: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/65.jpg)
Rcov
Executes testkeeps track of the executed linesUsing C extension when possible
to hook into MRI
(experimental for 1.9)
Tuesday 8 June 2010
![Page 66: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/66.jpg)
Rcov
good: 100% coverage
Tuesday 8 June 2010
![Page 67: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/67.jpg)
Heckle
Tuesday 8 June 2010
![Page 68: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/68.jpg)
Heckle
ParseTree + Ruby2Rubymutate
Tuesday 8 June 2010
![Page 69: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/69.jpg)
Heckle
Initial tests pass. Let's rumble.
************************************************************************* AidApp#property_names loaded with 4 possible mutations**********************************************************************
4 mutations remaining...Replacing AidApp#property_names with:
--- original+++ mutation def property_names- (meta_policy and meta_policy.property_names_for(:aid_app))+ (nil and meta_policy.property_names_for(:aid_app)) end
Tuesday 8 June 2010
![Page 70: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/70.jpg)
time-consuming: combinatorialsmore for small programs (gems, scripts)
doesn’t work for ruby 1.9 (ParseTree)
Heckle
Tuesday 8 June 2010
![Page 71: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/71.jpg)
cyclomatic complexity
size
code complexity code similarities
test coverage
antipatterns
rake stats
Flay
ReekRoodi
Flog
Saikuro
Heckle Rcov
Rails
R_B_P
Tuesday 8 June 2010
![Page 72: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/72.jpg)
metric_fu
Tuesday 8 June 2010
![Page 73: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/73.jpg)
what these metrics don’t tell you
Bugs
Tuesday 8 June 2010
![Page 74: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/74.jpg)
what these metrics don’t tell you
code performanceRuby Profiling
Tuesday 8 June 2010
![Page 75: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/75.jpg)
Reads like a book
Tuesday 8 June 2010
![Page 76: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/76.jpg)
06:30
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 77: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/77.jpg)
OrbitalJoe on flickr
check out the good stuff
Tuesday 8 June 2010
![Page 78: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/78.jpg)
Database
db/schema.rbseed data
everything in migrations ?
Tuesday 8 June 2010
![Page 79: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/79.jpg)
views
Bad:unindenteddivitis(too much) javascript in bodytoo much logic in viewiew
Tuesday 8 June 2010
![Page 80: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/80.jpg)
04:30
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 81: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/81.jpg)
Tests
Tuesday 8 June 2010
![Page 82: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/82.jpg)
maintainable test suite
tests = software
changes in implementationchanges in requirements
Tuesday 8 June 2010
![Page 83: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/83.jpg)
maintainable test suite
express code responsibilityhide implementation detail
Tuesday 8 June 2010
![Page 84: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/84.jpg)
maintainable test suite
-> expressive code
(DRY not mandatory)
Tuesday 8 June 2010
![Page 85: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/85.jpg)
02:30
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 86: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/86.jpg)
Deployment
photo by devilarts on flickrTuesday 8 June 2010
![Page 87: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/87.jpg)
Deployment
Tuesday 8 June 2010
![Page 88: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/88.jpg)
Deployment
Automation, automation, automation
Tuesday 8 June 2010
![Page 89: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/89.jpg)
Deployment
deployment = softwaresame rules apply
Tuesday 8 June 2010
![Page 90: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/90.jpg)
Deployment
TrafficPerformance tests
Bottlenecks
Tuesday 8 June 2010
![Page 91: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/91.jpg)
01:00
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 92: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/92.jpg)
Brownie Points
Tuesday 8 June 2010
![Page 93: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/93.jpg)
Continuous integration
... and they’re using it
Tuesday 8 June 2010
![Page 94: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/94.jpg)
Documentation of any kind
... and it’s up to date
Tuesday 8 June 2010
![Page 95: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/95.jpg)
monitoringexception notification
Log analyzers
Tuesday 8 June 2010
![Page 96: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/96.jpg)
testing javascript
Continuous performance testing
Tuesday 8 June 2010
![Page 97: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/97.jpg)
00:00
12 hours To Rate a Rails Application
Tuesday 8 June 2010
![Page 98: 12 hours to rate a rails application](https://reader033.fdocuments.in/reader033/viewer/2022052823/5557ac51d8b42a696c8b4a99/html5/thumbnails/98.jpg)
http://railroad.rubyforge.org/http://www.igvita.com/2008/12/11/ruby-ast-for-fun-and-profit/http://ruby.sadi.st/Ruby_Sadist.htmlhttp://goruco2008.confreaks.com/04_davis.htmlhttp://cwd.dhemery.com/2009/11/wmaat/http://c2.com/cgi/wiki?AbcMetrichttp://hissa.nist.gov/HHRFdata/Artifacts/ITLdoc/235/title.htmhttp://blog.rubybestpractices.com/posts/judofyr/sexp-for-rubyists.html
Elise Huard @[email protected]://jabberwocky.eu
Tuesday 8 June 2010