Software Engineering Tutorial

Introduction SDLC

SDLC Models

Agile Model Big-bang Model Incremental Model Iterative Model Prototype Model RAD Model Spiral Model V-Model Waterfall Model Open Source Development Model

Software Management

Project Management Project Management Activities Project Management Tools

Software Metrics

Software Quality Metrics Halstead's Software Metrics Object Oriented Metrices Data Structure Metrics Overall Equipment Effectiveness Some Important Quality Metrics

Project Planning

Software project planning Cost Estimation Model

Software Configuration

Software Configuration Management Project Monitoring and Control

System Design

Strategies for System Design Caching in System Design Load Balancer – System Design Dropbox - System Design Netflix - System Design Twitter - System Design

Misc

Routing Requests through Load Balancers Object Oriented Analysis and Design in Software Engineering Online Library Management System ER Diagram in Software Engineering Umbrella Activities in Software Engineering Jelianska Moranda Software Relability Model RAD Model vs SDLC Model Software Myths in Software Engineering What is Capability Maturity Model Characteristics of Software Engineering Characteristics of Good Design in Software Engineering Program Analysis Tools in Software Engineering Reactive and Proactive Software Risk Management in Software Engineering Size-Oriented Metrics in Software Engineering Software Requirements and their Types in Software Engineering Structured Programming in Software Engineering System Development Life Cycle in MIS Difference between V Model and Waterfall Model Overview of Fish SDLC Model

Characteristics of Good Design in Software Engineering

The Software Development Life Cycle, also referred to as SDLC, is an approach used by software engineers to prepare, construct, test, deploy, and manage software products. The SDLC is broken down into several stages, each with a distinct list of responsibilities, outcomes, and objectives.

Following is the list of key steps of the SDLC:

  1. Requirement gathering & Analysis
  2. Design
  3. Developing
  4. Testing
  5. Deployment
  6. Maintenance

Each of the phases performs as follows:

  1. Requirement Gathering & Analysis: The customer gives the developer the required fundamental components at this phase. They give the developers a document that has a detailed description of the particular requirements. The developer then thoroughly examines the document and combines all of the fundamental requirements needed to create the program/application.
  2. Design: In this phase the developer actually starts working on the given application. The developer starts designing the product as per the requirements given by the client, this is the most important phase in the life cycle because every step here must be taken a lot of care and then to be proceeded to the next step. The most important factor which makes the product presentable is the design of that product.
  3. Developing: After finalising a proper design, the development phase starts in the life cycle, where coding and methods are implemented into the software application. The development of the software product is done according to the design specifications received from the client.
  4. Testing: In this phase, the developed product is sent to the testing process, where the developed code is tested for errors, if any, and debugged. This is one of the important phases because this takes care of the software product which is being developed, the main aim in developing the product is to make it user- friendly and error resistant, and free. In this various testing methods like Whitebox, Blackbox, Unit testing, Integration testing, and many others are used to find and rectify the errors.
  5. Deployment: This phase comes after the testing and correction of errors, here the product is deployed into the production area. Where the software minor changes such as reconducting the tests, installation, and changing the software are done.
  6. Maintenance: This is the final stage in the Software Development Life Cycle, where the deployed final product is then maintained so that any future errors and faults can be monitored. Fixing bugs, new and improved software updates, and fixing the patches in the previous version are done.
Characteristics of Good Design in Software Engineering

To better understand the procedure for creating software, the Software Development Life Cycle (SDLC) is described. Only when all the steps listed above have been successfully carried out and finished then the final product be officially launched onto the market. When it comes to a product, the design process should be taken into account as the primary factor. The design is the main factor which attracts the user and makes a good remark for them, this process must be taken care of veryprofoundly so that the work is reflected properly and the work gets enough appreciation.

Some of the key factors which are implemented in this phase are:

When the developer or designer receives the client's requirements, they must determine whether they have adequate resources to finish the procedure. After understanding the needs of the product, there are certain aspects to which the designer needs to give attention. Proper planning and use of the resources also play a crucial part.

  1. Layout design: Determining the basic structure of the application and designing the architecture for the application is the first thing to be designed. The functioning of the application, the use of algorithms, and other programming strategies are done in this.
  2. Database design: It is important that the product must be connected to a database for better working and data flow through it, it is easy to manage and observe the traffic in the application. Proper models and datasets must be used while designing the database for the application. It makes the developer help understand the process of data flow better, it will be a quick and easy process to obtain the results if the database is designed correctly without any errors.
  3. Interface design: A product must be unique and appealing to the user it must be appealing, proper use of interactions for given inputs and returning appropriate output is very important. Indications of buttons, and labels must be precise and understandable by the user. The interface should never be complicated it must be simple and effective. The functionalities must be understandable by the users easily so that they can navigate through the product easily without any problems.

Interface design also includes User Interface, where the interface must be simple and good looking; it should be easily controllable and interactive.

  • Designing Security: It is important for a software product to be secure and reliable; there must not be any vulnerability to the data of the user. Data must be protected, utilisation of authentication, and authorization is important, addition of these features include more security to the product.

To produce a well-performing software product, many design principles must be taken into account and must be implemented as per the requirements, more usage of the design principles makes the product safer and more standard.

Some of the key design principles are:

  • When the developer is given with the requirements of the product to be developed, the developer must divide the product’s development into smaller parts and work on them effectively. Breaking down the phases makes them to understand it better and to know how to implement the ideas on the product.
  • The details of the product must be kept secret, and must not be spread to other sources. The design must be unique from others it’s the designer’s duty to make the design more acceptable and they can make their own choices in the design implementation.
  • Following pre-defined rules and methodologies might help them understand the trends in the market. Comprehension of these rules will help them to gain more knowledge and helps them in designing the software more effectively.
  • Breaking-down into smaller modules will help them to spend quality time on the designing the application with more features. It will be easy for the designers to apply different styles.
  • Dividing the applications into modules comes with a benefit of independency, where a change in one module will no affect the other modules, this is more time-efficient and best-suited way in designing a software.

In the SDLC the next phase starts only when the previous phase is finished completely. This makes the product to be developed completely without stepping back into the previous stage for further changes. It is to be noted that the design must be original and innovative, it should reflect the designer’s/developer’s preference in making the product and must showcase their originality also meeting the client’s requirements and expectations.

It is also important that the design process must follow the principles and the rules that are stated above. The developer must be precautious for the whole design process.

According to the project, this may additionally contribute to the specifications, which could include interface designs, sketches, explanations of the system interactions, and prototyping used to establish how the database tables are supposed to look and what data they're required to comprise. The design that the software engineer develops and then presents to the client is their responsibility. The overall look of the product should no matter what costs satisfy the customer's demands.

Since the client's input provides us with the information they want to be included in the service, the finished item must be detailed to the specifications and include more characteristics. The designer must take special care to offer extra support for the finished product by providing a simple and understandable user interface with strengthened performance, and the primary objective is that it should offer protection to the product.

Delivering security is critical for efficiently detecting weaknesses and hazards during the software lifecycle's design, development, and operation phases. While this may appear to be a simple task, it's definitely not true.

There are some important characteristics which should be followed to deliver a good software design:

  1. Modularity
  2. Maintainability
  3. Scalability
  4. Robustness
  5. Testability
  6. Performance
  7. Usability
  8. Security
  9. Portability
  10. Accessibility

All these characteristics are important for designing a software, integration of all these characteristics into the designing the software product. These factors make the product more organised and systematic in performance.

  1. Modularity: An effective software product must incorporate the proper structure and design which plays a vital role in making the product more accessible and usable by the users. Multiple modules provide more scope in changing the features individually.
  2. Maintainability: The software product must be simple and the design must be easy to maintain, which means the code must be simple to edit, update, and debug as needed.
  3. Scalability: A software architecture should be scalable to handle an extensive number of customers or requests without losing speed. The design must be able to withstand the extent of the inputs given and produce the output properly.
  4. Robustness: A durable software design is one that is capable of handling faults, errors, and unforeseen circumstances without crashing or producing inaccurate outcomes.
  5. Testability: A good software design should be testable, which implies that it should be easy to perform tests in order to ensure that it meets the requirements and specifications given by the client.
  6. Performance: The performance must not be affected at any cost, which might result in the implications in the product. An effective software design should consider performance-optimized, meaning that it should run quickly and efficiently.
  7. Usability: The design must be user friendly and it should be easy to use by the new users also.The design of software needs to be simple to use, which means that it needs to be simple to understand, grasp, and utilise.
  8. Security: Security is very important while designing the software, the product must be secure and provide the assurance that the data will be secure and protected.An effective software structure should be reliable, which implies that it is meant to protect sensitive information and prevent unauthorised access.
  9. Portability: An effective software must be designed in such a way that the application can run in any Operating system without any errors and with the same performance. This shows the effectiveness of the software product which is developed and indicates the overall design quality.
  10. Accessibility: To guarantee every person can utilise the program, it should be made accessible to individuals who have limitations. It must be transparent and understandable to non-technical users of this sort of program who lack prior technical understanding. The product's usage instructions must be properly described so that customers comprehend the app's purposes and intent.

The above mentioned are the very important feature that must be taken care of while developing or designing the software in the first place. These helps providing the satisfaction to the client including their requirements and specifications, as well as following all the principles for delivering the full-fledged software application.

Good design in software engineering is about creating a system that is easy to understand, modify, efficient, secure, user-friendly, and scalable.