Designing and Maintaining Software (DAMS) - GitHub
Recommend Documents
Habitable Software. Leaner. Less Complex. Loosely Coupled. More Cohesive. Avoids Duplication. Clearer. More Extensible ?
When we are testing the way that a unit behaves when a condition is met, use a stub to setup the condition. Solution: us
Size != Complexity. âImagine a small (50 line) program comprising. 25 consecutive "IF THEN" constructs. Such a program
Page 1. Getting Lean. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Lean software⦠Has no extra parts
Getting Cohesion. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Single Responsibility. Principle. A cla
Automatically detect similar fragments of code. class StuffedCrust def title. "Stuffed Crust " +. @toppings.title +. " P
Open-source. Influenced by Perl, Smalltalk, Eiffel, Ada and Lisp. Dynamic. Purely object-oriented. Some elements of func
ASTs are tree data structures that can be analysed for meaning (following JLJ in SYAC 2014/15) ... More Cohesive. Avoids
Ruby Testing Frameworks. 3 popular options are: RSpec, Minitest and Test::Unit. We'll use RSpec, as it has the most comp
Fixes issue #42. Users were being redirected to the home page after login, which is less useful than redirecting to the
âWe want the reading of code to be easy, even it makes the writing harder. (Of course, there's no way to write code wi
Getting loose coupling. Designing and Maintaining Software (DAMS). Louis Rose ... should not depend on low-level modules
Plug-ins. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Problem. Page 3. Current Architecture. Shareabl
Tools: Vagrant. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Bugs that appear in production and that c
Observers. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Page 3. Delivery people need to know when pizz
Reducing duplication. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Tactics. Accentuate similarities to
%w.rack tilt date INT TERM..map{|l|trap(l){$r.stop}rescue require l};. $u=Date;$z=($u.new.year + 145).abs;puts "== Almos
What is it? Several pieces of data are often used together. Why is it problematic? Behaviour that operates on the clump
R&D: sketch habitable solutions on paper, using UML. 4. Evaluate solutions and implement the best, using TDD. Probab
Why not duplicate? Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Habitable Software. Leaner. Less Compl
Clear Documentation. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Bad documentation. Misleading or con
âWe have tried to demonstrate that it is almost always incorrect to begin the decomposition of a system into modules o
Coupling Between Objects. Counts the number of other classes to which a class is coupled (other than via inheritance). C
providers are examples of issues that may need attention in online settings. .... World Congress in Computer Science, Computer Engineering, & Applied Com- ...... The work resulted among many contributions in a framework and notation for.
Designing and Maintaining Software (DAMS) - GitHub
Clear Names. Designing and Maintaining Software (DAMS). Louis Rose. Page 2. Naming is hard. âThere are only two hard t
Clear Names
Designing and Maintaining Software (DAMS) Louis Rose
Naming is hard
“There are only two hard things in Computer Science: cache invalidation and naming things.” - Phil Karlton http://martinfowler.com/bliki/TwoHardThings.html
MAX_MODULES_PER_STUDEN T exam_number exams.each { |e| … }
Pronouncable
genymdhms
generationTimestamp
Avoid encodings
name_string int_exam_number Exam implements IExam
name exam_number ExamImpl implements Exam
Tactics Use noun phrases for classes and verb phrases for methods: ExamRoom#start_timer Avoid puns: kill is clearer than whack or eat_my_shorts Use solution domain names: AccountVisitor, JobQueue Use problem domain names ExamRoom, Examiner
Ubiquitous Language “Design calls for a versatile, shared team language, and a lively experimentation with language that seldom happens on software projects.” - Eric Evans Domain Driven Design
Emergence When refactoring, extract methods with complete nonsensical names: foo, bar, baz Begin to understand what the new methods do, so rename them: calculate, process, execute Discover that the new names are not precise, so rename them: process_cheque_and_notify_receipient Discover multiple responsibilities, so separate and attach new (possibly nonsensical names) http://blog.thecodewhisperer.com/2011/06/15/a-model-for-improving-names/ http://www.jbrains.ca/permalink/the-four-elements-of-simple-design
Summary Aim for names that have integrity and utility Use names from the solution and problem domains Names and their abstractions can (should?) co-evolve during design and maintenance