Sha256: 152a7457d1964fc0e011567ad5cdc87cb417ca10e2339a51541a7c82aa533287
Contents?: true
Size: 1.95 KB
Versions: 3
Compression:
Stored size: 1.95 KB
Contents
# frozen_string_literal: true module Pain class Model MAX = { bug_type: 7, likelihood: 5, impact: 5 }.freeze INPUT_MESSAGE = { bug_type: 'What kind of bug is this?', likelihood: 'How likely is this bug to occur?', impact: 'How much impact will this bug have?' }.freeze OPTIONS = { bug_type: { 1 => 'Documentation: a documentation issue', 2 => 'Localization: missing translations', 3 => 'Visual Polish: Aesthetic issues', 4 => 'Balancing: allows poor usage strategy', 5 => 'Minor UX: Impairs UX in secondary scenarios', 6 => 'Major UX: Impairs UX in key scenarios', 7 => 'Crash: Causes crash or data loss' }, likelihood: { 1 => 'Will affect almost no one', 2 => 'Will only affect a few users', 3 => 'Will affect average number of users', 4 => 'Will affect most users', 5 => 'Will affect all users' }, impact: { 1 => 'Nuisance: not a big deal but noticeable.', 2 => 'A Pain: Users won\'t like this once they notice it.', 3 => 'Affects Buy-in. Will show up in review. Clearly noticeable.', 4 => 'A user would return the product. Should not deploy until fixed', 5 => 'Affects system build' } }.freeze def choices_for(category) OPTIONS[category] end def level_string(category, score) OPTIONS.dig(category, score) end def max_for(category) MAX[category] end def input_message(category) INPUT_MESSAGE[category] end def max_pain MAX.values.reduce(&:*) end def user_pain(type, likelihood, impact) 100 * (type * likelihood * impact) / max_pain end def normalize(value, variable) value = value.to_i max = MAX[variable] return nil if max.nil? || value.nil? return nil if value < 1 return max if value > max value end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
pain-0.2.0 | lib/pain/model.rb |
pain-0.1.2 | lib/pain/model.rb |
pain-0.1.1 | lib/pain/model.rb |