Rod Stephens in his book Beginning Software Engineering published by Wrox (John Wiley & Sons) in 2015 divides software design into two parts: high-level and low-level design. High-level design is a task category under the topic of software engineering. What is high-level software design? It is the process of analyzing requirements and breaking them down into their parts and presenting them in an abstract way. It shows the major pieces and how they fit together (architecture) and interact with each other.
After you gather many of the requirements of the project you can begin high-level design. What does that include?
- the system at an abstract level
- outlines the major pieces of the software
- this may include a list of modules and classes
- the type and description of the database
- the environment of the application
- what data design will be used
- a list of the user internal interfaces
- a list of external interfaces (import/export, email, files for example)
- does not specify how it works, but what it does
When you are writing this design, be sure that it includes every aspect of the requirements. Go back and update the requirements if necessary.
It is important to break the project into pieces. Why? The next step is to work on low-level design and you need to focus on one piece at a time. In low-level design you also need to specify hoe the pieces work together.
Software development is a process of taking an objective or objectives and chopping them up into smaller and smaller pieces until you have enough information to actually start coding. Projects come in all sizes, so if the project is not small you will be breaking up the tasks into groups and assigning them to different people. You need enough information in your design so that when the pieces are fit together, things will work as expected.
What to Include in You High-Level Design
The stages of a software engineering project often blur together, and that’s as true for high-level design as it is for any other part of development. Here is a list of just some of the most common things you may want to specify in your high-level design. This list is from the book by Rod Stephens called Beginning Software Engineering. You’ll benefit yourself if you design with software design principles in mind.
- Security
- Hardware
- User Interface
- Internal Interfaces
- External Interfaces
- Architecture
- Reports
- Other Outputs
- Database
- Configuration Data
- Data Flows and States
- Training
- UML
- Structure Diagrams
- Behaviour Diagrams
- Activity Diagrams
- Use Case Diagrams
- State Machine Diagrams
- Interaction Diagrams (a subset of activity diagrams)
- Sequence Diagrams
- Communication Diagram
- Timing Diagram
- Interaction Overview Diagram