Final Prep Flashcards
(96 cards)
When did Agile really start taking off
about 13 years ago (2005)
before, we used waterfall
Uncle Bob Video:
smaller iterations and constant feedback (like a RD in writing)
don’t let yourself get blocked by anything
delay decisions with good architecture. make business rules early and defer everything else
no grand redesigns. just clean up a little each time
say no to things. choose good code over meeting deadlines
When did Test-Driven Development (TDD) really start taking off?
8 years ago
you don’t want to be good at debugging
tests bring enthusiasm and sense of accomplishment
continuous stream of quality documentation
cost and risk of making changes goes way down. code is sensitive on the one-bit level. other things in life aren’t like this
– TDD is like double-entry bookkeeping in accountancy
tests must be automated
“decoupled code”
testable code
INVEST - [ I ]
User Stories.
Independent
not always possible but good thing to seek
INVEST - [ N ]
User Stories.
Negotiable
conversation to be had
INVEST - [ V ]
User Stories.
Valuable
to the user
INVEST - [ E ]
User Stories.
Estimable
should be small/discrete enough that a decent timeframe can be given
INVEST - [ S ]
User Stories.
Small
big = not estimable
INVEST - [ T ]
User Stories.
Testable
able to create definition of done
acceptance criteria established
Three components of a user story
CARDS (physical medium)
CONVERSATION (discussion surrounding)
CONFIRMATION (tests to verify)
SMART - [ S ]
Tasks.
Specific
Everyone knows what’s involved. Tasks don’t overlap. Can determine whether it fits within the bigger plan.
SMART - [ M ]
Tasks.
Measurable
Do you know when it’s done
SMART - [ A ]
Tasks.
Achievable
No person should have a task too difficult for them to complete. And everyone should be able to ask for help if it’s not doable.
SMART - [ R ]
Tasks.
Relevant
Fits into the bigger story. Stories are broken up for the sake of developers. Should be able to explain to a customer why a task is relevant though.
SMART - [ T ]
Tasks.
Time-Boxed
doesn’t have to be a formal, strict estimate, but there should be expectations so that people know when they need to seek help/split up a task
Core Design Principles of Java
platform independent
- JVM is an abstraction and programs do not access the OS directly
- high portability
object-oriented
- except primitive data types, all elements are objects
strongly-typed
- variables are pre-defined and conversion is relatively strict
interpreted and compiled
- source code is transferred into bytecode format
- these instructions are interpreted by the JVM
A Few More Basics of Java
- syntax heavily influenced by C++
- statically typed
- imperative language
- criticized for being verbose
- most-used language according to GitHub
- owned by Oracle
- visibility (scope) is the same as in C++
A few predefined classes in Java
String, Vector, Stack, Hashtable, and many others
A Stack is a subclass of Vector which is a subclass of Object. All classes in Java are subclasses of the class Object.
Java “field”
= variable
Java “method”
= function
methods can be overloaded with one name referring to multiple methods (params/return val/etc different)
abstract methods (from polymorphic abstract object) have to be overwritten/cannot have an implementation public interface Driveable { }
Git
Distributed version control system
“upstream” is your teams repository after forking
rebase = alternative to git merge master (produces cleaner history)
TDDs’ three rules
Write a failing test before writing any production code
don’t write more of a test than is sufficient to fail/fail to compile
don’t write more production code than is sufficient to make the currently failing test pass
The TDD cycle
RED (fail test)
GREEN (production code)
REFACTOR