Fun Fact: Software Design

What is Software Design?

What is software design? Before we explore on what it is as a whole, let us first break down the words that were used to create the word namely, software and design.

Software is essentially a set of instructions that can be understood by computer systems. It tells the computer what it would do, how it will process certain data into information, where will it store the information and other more. These are essentially the brains of the computer.

Design usually means creating a representation of something that will be built. It is usually created from the requirements of the client and from the guidelines and principles used when creating a well thought out design. Design also means that the designers would create the initial architecture, components and other characteristics of the product to be built. For example, an architect usually plans out how the building would look like (architecture) and what are the dimensions and the engineer gives what will be the materials (components) and the dimensions of the said materials.

Software designing is essentially an activity where software requirements are analyzed. Using the analysis gained, it would be used as a basis in the construction of the system that the client would want.

It is also the process of transforming the requirements of the clients into something that programmers can use as a basis to code the system.

Software designing is an iterative process. It involves step-by-step procedures to create an iteration that would be repeated up until the product would be finished. There are two parts in these series of activities namely, the Preliminary (high-level) design and the detailed design. They have different scopes and methodologies.

Preliminary or High-level Design

This design identifies the different modules involved in the project. It also identifies the control relationships among them. This design also defines the interfaces associated with the different modules of the project itself. Program structure or software architecture is what is called of the output for a high-level design. Using tree-like structure diagrams like a structure chart, to present the hierarchical structure of a high-level design, is the most popular way of representing the control hierarchy of the high-level design.

Detailed Design

Detailed design is essentially the part where the algorithms and data structure for each model are designed. To put it into much simpler terms, this is where the “programming” takes place. Do not take the term literally. It is like programming but in a sense that the designer would only write what the program will do and how the program will go about the problem. Coding is not involved in the process.

The Design and Analysis Model

The analysis model is a form of representing the data gathered from data gathering (e.g. interview, documentation/ documents, observation). It mainly comprises of the data dictionary, state-transition diagram, data flow diagram, entity-relationship diagram, data object description, process specification and control specification. This model basically comprises of the basic components of the backend of a system (e.g. database).

The design model is a formalized and refined version of the analysis model. This is where the actual implementation environment of the project takes place. This model mainly consists of component-level design, interface design, architectural design and data design. It is modeled in a pyramid form to show which component supports the other. For example, component-level design does not support any of the components that is why it is on the top, and for the data design, it is quite the opposite. The whole model is solely based on the correctness of the data design, if it fails, the model fails. The data design comes from the data dictionary and the entity-relationship diagram from the analysis model. The architectural design comes from the data flow diagram of the analysis model. That is also the case with the interface design, with some parts of the state-transition diagram. For the component-level design, it comes from the state-transition diagram, control specification, and process specification of the analysis model. These are the components that make up each level of the model.

Design Guidelines

  • Components should exhibit independent functional characteristics.
  • Interfaces should have simplified connections between each module and the external environment.
  • It should be derived from a repeatable method and from the information acquired during the requirement analysis of the project / product.
  • It should not suffer from “tunnel vision”
  • It should be traceable to the analysis model.
  • Minimize the intellectual distance between the software and the problem.
  • There should be the presence of uniformity and integration.
  • It should be able to accept any changes in the future.
  • It should have a long life time as software.
  • Coding should not be involved.
  • It should produce quality outputs.
  • It should have minimal errors.

What is “Tunnel Vision”?

Tunnel vision is used as a criteria or a guideline in the designing of software.

Tunnel vision, in medical terms, is the loss of the peripheral view of the eye. The person could only see the center of the field of view of the eye unlike normal eyes where you could see to a certain degree. The field of view is greatly diminished. It is limited the center.

Taking that into consideration, what is “tunnel vision” in terms of software design, or software engineering? There are so many definitions about this; however all of it has the same idea. Alternative routes/approaches should be considered by the designer. If the designer does not take this into consideration, the designer may lack the flexibility needed just in case a problem occurs. A design process that suffers from “tunnel vision” usually means that it is following only one path or approach in finishing the software. In some cases, the design would be finished without any problems, but for the most part, this approach would fail. People can never tell what the future would hold. That is why it is a good practice to approach the problem in different ways, and when the situation arises, it would be easier to approach the problem at hand.

Share this:

Leave a Reply