Acronyms
Below is a set of acronyms that define characteristics that various aspects of software and the software development process should exhibit. These are things that all developers should keep in mind when creating software.
GRASP Patterns
These are a set of patterns that Craig Larman has in his book, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (1st Edition):
- Low Coupling
- High Cohesion
- Creator
- Controller
- Protected Variations
- Polymorphism
- Indirection
- Pure Fabrication
- Expert
SOLID
Characteristics that your software, classes, objects, and methods should exhibit:
- Single Responsibility
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation
- Dependency Inversion Principle (not to be confused with Dependency Inversion)
INVEST
User Stories should have the following characteristics:
- Independent
- Negotiable
- Valuable
- Estimable
- Small
- Testable
SMART
This defines what tasks should be:
- Specific
- Measurable
- Achievable
- Relevant
- Time-boxed
FIRST
FIRST is a quick way of remembering what characteristics tests in Test-Driven Development should have.
- Fast – running tests should be fast and painless so they can be run all the time, over and over again throughout the entire development process.
- Isolated – a test should be isolated from outside dependencies such as database connections or the results of other tests. Ideally, the should also be isolated from code dependencies as well using stubs or mocks.
- Repeatable – a test should fail because the code is broken and not because of some other reason. The test should also fail regardless of the platform that it is being run on.
- Self-Validating – a test should tell you whether it passed or failed and that is all. Having to manually interpret tests results doesn’t work.
- Timely – tests should be written in conjunction with the code that they are suppose to be testing.
I have been taught or read all of the patterns listed above, but for this post, they were borrowed from a post on the Object Mentor website.