sample use cases templateexample software testing plan templateProject plan template
ICS 125: Design Concerns & Approaches
- Synthesis and Analysis
- Design in the overall process
- Design qualities
- Types of design
- Software architecture
- Object-oriented design
- User interface design
- Database design
Synthesis and Analysis
- Synthesis: the combination of things to build a larger whole
- Analysis: the examination of things to understand their important aspects
- Usually people think of design as just synthesis. Some would
even say that design is a creative process that is hampered by
critical analysis too early.
- As an engineering activity, software design must be
goal-oriented and measured against those goals at every step.
- Common types of synthesis in design:
- Selection of elements from a library to add to your system
- Invention of new elements
- Composition of elements in your system
- Choice of parameters of elements
- Common types of analysis in design:
- Heuristic review by experts
- Comparison to past experience
- Design checklists
- Formal theoretical review
- Empirical analysis (actual measurements)
The role of design in the overall process
- V-shaped waterfall
- Design bridges requirements and implementation:
- Reacts to requirements, satisfies each of them
- Guides implementation
- Guides integration testing
- Understanding the design is key to team participation
- The design is an overview of the implementation
- The design highlights difficult or unexpected aspects
- The design indicates supported methods of extension/evolution
Some Product Qualities that are Largely Determined in Design
- Feasibility: could it be built? would it work?
- Correctness: does it actually produce the right results?
- Understandability: can the development team understand it?
- Testability: can it easily be tested with the tools you have?
- Scalability: could it handle enough users/data?
- Performance: would it work fast enough?
- Safety/Security: are safeguards in place?
- Extensibility: could we add more functionality later?
- Flexibility/Maintainability: could we change the implementation easily?
- Usability: can people easily learn and use it?
- In short, every product quality depends on design
- What are the major components of the system?
- Where/how are those components deployed?
- How will those components communicate?
- Is the design scalable?
- Is the design extensible? Easily?
- Homomorphic design: basically start with a domain model, then
make implementation objects match to domain object
- Define objects, attributes, relationships, inheritance,
- Design patterns: learn and use common patterns of design to
solve recurring problems.
- Is the design understandable?
- Is the design extensible? Easily?
- Is complexity managed?
User interface design
- The best advice for non-expert UI designers is to mimic other successful UIs.
- Start with a deep understanding of users' tasks. Then build
the UI to support those tasks, in priority order.
- Try to avoid inventing new metaphors, widgets, or interaction
techniques. Use existing widgets in accordance with standard guidelines.
- Check for conformance to guidelines.
- Cognitive walk-throughs
- Use mockups to test use cases and prompt feedback
- Consider feedback from users very seriously, but do not
attempt an empirical user study unless you know how to do it.
- Identify objects and attributes as is done in OO design
- Identify/define primary keys and foreign keys
- Address data redundancy and update issue via normalization
- Specify validity constraints in the schema when they _always_ hold
- Check against requirements, push every boundary case
- Check normalization rules, goal is usually 3rd normal form
- Test with actual data