How to work well in teams
Software Engineering at Google
Chapter 1. Object-Oriented Design
Concepts
Object-Oriented Analysis ⇒ Investigation of the problem and requirements, rather than a solution.
Requirements Analysis: find and describe the objects or concepts in the problem domain
Object-Oriented Design ⇒ a conceptual solution (in software and hardware) that fulfills the requirements, rather than its implementation: a description of software objects. Define software objects and describe how they fulfill the requirements.
Step-by-Step
- Analysis
- Define Use Cases: stories or scenarios of how people use the application
- Define Domain Model: the model illustrates noteworthy concepts and objects, a diagram with their associations and attributes. It is a visualization of the concepts or mental models of a real-world domain.
- Design
- Define Interaction Diagrams: A common notation to illustrate the collaborations and responsibilities of objects is the sequence diagram (a kind of UML interaction diagram). It shows the flow of messages between software objects, and thus the invocation of methods.
- Define Design Class Diagrams: In addition to a dynamic view of collaborating objects shown in interaction diagrams, a static view of the class definitions is usefully shown with a design class diagram. This illustrates the attributes and methods of the classes. In contrast to the domain model showing real-world classes, this diagram shows software classes.
UML: Unified Modeling Language
Visual language for specifying, constructing and documenting the artifacts of systems.
- UML as Sketch: Informal and incomplete diagrams
- UML as Blueprint: Relatively detailed design diagrams used either for
- reverse engineering: to visualize and better understanding existing code in UML diagrams
- forward engineering: code generation
- UML as Programming Language: Complete executable specification of a software system in UML. Executable code will be automatically generated, but is not normally seen or modified by developers; one works only in the UML "programming language”.
Silver Bullet Thinking
It's a fundamental mistake to believe there is some special tool or technique in software that will make a dramatic order-of-magnitude
difference in productivity, defect reduction, reliability, or simplicity.
And tools don't compensate for design ignorance. A person not having good OO design and programming skills who draws UML is just drawing bad designs.
Chapter 2. Iterative Software Development Process
A software development process describes an approach to building, deploying, and possibly maintaining software.
- Development is organized into a series of short, fixed-length (for example, three-week) mini-projects called iterations