2. Planning and Designing Software Solutions


Introduction

Thorough planning and design of software solutions is essential to the development of quality software products. 

Planning the solution commences by considering the complete problem. 

This general overview is then systematically broken down into smaller pieces that include increasing amounts of detail. 

The nature of the data required is determined and structures to hold this data are designed. 

Eventually a method of solving each of these component pieces of the solution is designed in the form of an algorithm

Together these data structures and algorithms combine to solve the larger problem.


Computational Thinking process...

Step 1.  Abstraction and Refinement

Abstraction: 
Taking away or separating part of the solution so it may be considered in isolation.

Software development needs to be a precise and detailed process. 

However, most problems encountered by developers are too large for the entire solution to be comprehended with sufficient precision and detail. 

To overcome this situation, we refine the problem by breaking it down into smaller, more manageable modules. 

This is the process of top-down design. 

Each of these modules can then be considered as an isolated problem.

We can largely ignore the big picture and consider the detail of the smaller piece. 

This is the process of abstraction

  • We separate part of the problem and solve it in isolation. 
  • Once all component parts have been solved they are combined to solve the larger problem.
There are many advantages of the abstraction process. 
  • It encourages developers to create reusable modules of code. 
    • For example, a module that sorts a list of data can be used in the future as part of the solution to a variety of different problems. 
  • Testing is greatly simplified
    • As each module is small and self-contained it can be thoroughly tested before being included in the total solution. 
    • As a consequence, checking the final total solution is greatly simplified. 
    • Teams of developers are able to work on individual modules in the knowledge that the work completed by others will not affect their own.




Technical Documentation compiled during SDLC