Software Engineering Tutorial

Introduction SDLC Objectives of Software Design Conceptual and Technical Design in Software Engineering Coupling in Software Engineering Information System for Strategic Advantage Advantages and Disadvantages of V-Model Documentation Guidelines in Software Engineering Application Software

SDLC Models

Agile Model Big-bang Model Incremental Model Iterative Model Prototype Model RAD Model Spiral Model V-Model Waterfall 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 Difference between V-Model and Waterfall Model Timeboxing Model in Software Engineering Flowcharts and their Uses Overview of Fish SDLC Model Characteristics of Testable Software Component Design in Software Engineering Project Planning in Software Engineering Software Process Characteristics Types of Systems in Software Engineering Advantages and Disadvantages of using ERP systems Architectural Design Elements in Software Engineering Debugging Strategies in Software Engineering Design Techniques in Software Engineering Software Design Strategies Characteristics of SRS in Software Engineering Coding Conventions in Software Engineering Components of Software in Software Engineering Domain Requirements in Software Engineering Feasibility Study in Software Engineering Metrics of Source Code Role of System Analyst in Software Engineering SQA Plan in Software Engineering

Objectives of Software Design

What is Software Design ?

Software design is a technique for transforming user requirements into a suitable form that will assist the developer in software development and execution. It deals with transforming the client's requirements, as defined in the SRS (Software Requirement Specification) paperwork, into a form that may be simply implemented using a programming language.

The software design phase is the initial phase in the SDLC (Software Design Life Cycle), and it shifts the focus from the issue domain to the solution domain. In software design, we describe the system as a collection of parts or modules having well-defined behaviour and bounds.

Objectives of Software Design

Objectives of System Design

The goal of system design consists of devise a strategy for an electronic or software system that fits the objectives and needs of a customer or user. This plan often contains precise system requirements, such as architecture, components, and connections.

System design is a critical phase in the creation of any system since it serves as the basis for the system's implementation and deployment. The design of a system can assist to assure its dependability, efficiency, and usability.

Maintainability

Software isn't a static entity. In the modern marketplace, if you create a useful product that works perfectly but is impossible to change and adjust to new demands, it will fail. Maintenance is a long-term aspect of software that determines how quickly it can adapt and change, which is critical in today's agile software development culture.

Maintainability refers to how easily software code can be repaired, improved, and understood. Software upkeep is a phase of the life cycle of software development that occurs after the final product has been sent to the client. Engineers provide maintainability by regularly updating software to meet new client demands and dealing with consumer concerns. This involves fixing bugs, improving current functionality, and altering code to avoid future issues.

There are various reasons for maintaining software once it has been delivered to the customer:

  • Bug fixing comprises searching for and addressing errors so that the program can function properly.
  • Enhancement entails improving the application to include additional functions requested by clients.
  • Replacement: The elimination of undesired features in order to improve flexibility and efficiency.
  • Security concerns: Resolving security weaknesses detected in your proprietary or third-party software, particularly open-source components.

Efficiency

In overall, efficiency can be defined as a proportion of energy spent to work done to manufacture a product. However, in the context of the creation of software, "efficiency" can be defined as the quantity of software generated or user requirements met divided with the amount of resources utilized, including time and effort. In a nutshell, being efficient typically means avoiding waste. Waste in software development may take many forms, including defects, wait times, overproduction, innovation, and unnecessary revisions. As a consequence, efficiency in developing software results in a shorter lifespan of the product, quicker arrival at market, and eventually, a better end product.

Correctness

In the field of software engineering, correctness occurs when a program or system performs exactly as intended for all of its use cases. Before designing software, engineers compile a list of specifications that the system must adhere to in order to function properly. A system will be ready to be utilized if it is accurate, else it might be dangerous or incomplete.

To facilitate the process of determining accuracy, the guidelines that follow should be followed:

  • Regardless of how difficult the problem and application is, it must be communicated explicitly and thoroughly.
  • Before you begin coding, dry run and test your algorithm's logic on paper.
  • Right away as a component's creation is complete, strive to incorporate testing.
  • Re-use already tested code and components.

Reusability

Software reusability was a quality that describes a software component's expected reuse potential. Software reuse merely increases productivity, but it also improves software quality and maintenance. In computer science along with software engineering, reusability is defined as the implementation of existing resources within the process of developing software products. These assets involve code, components for software, test suites, creates, and documentation.

Testability

Testability in software relates to the degree to that a module, needed, subsystem, or other architectural component may be certified as satisfactory or not. High testability indicates that faults are easy to find and isolate as part of the team's standard testing method.

A testable design should explicitly define connecting points between swappable, discrete components. It should also have a scriptable test framework that enables developers and testers to recreate actual production situations. This will allow them to reproduce failures, isolate them in their final days and find a suitable remedy.

Reliability

Software reliability is characterized as the system's or component's capability to fulfil needed functions in static conditions for a certain period of time. It is the probability that a computer program will finish its assigned job in a particular environment for a predetermined number of user input cases, assuming that its components and input were error-free. Software quality includes performance, usability, performance, functionality, capability, installation, maintainability, and documentation.

Portability

program portability is the ability to utilize the same program in many environments. It means software that is compatible with more than one platform or may be reassembled for them. Application, software code, as well as information portability are some of the most common types.

Portability is identical with reliability in Dev-ops. You aren't interested in different behaviour across platforms, as well as don't desire to spend energy dealing with environment-specific parameters. Consider tweaking your surroundings at each step; no dev-ops team likes to deal with extra work just because their code is not adaptive.

Portable software may be readily transferred to various systems by development teams. So, if the development group moves to a different location, you don't want to lose time and resources redeveloping. They also want to circumvent contractual obligations (for certain libraries and dependencies).

The primary goal of porting for salespeople is to reach a wider audience. There are several hardware and software systems available. More users equal greater profit.

Adaptability

Software system adaptation is almost an unavoidable process owing to changes in client needs, the need for speedier creation of new software systems, or maintenance of current software systems, among other factors. There are several approaches for dealing with software system adaptation.

Interoperability

The ability of various solutions to openly and readily interact with one another is known as software interoperability. Interoperable systems exchange data in real time without the requirement for professional IT support or back-end coding.

Understandability

A design that is effective should be simple to understand, hence it should be flexible, with all pieces grouped in layers.

Completeness

The design must incorporate every aspect, such as information structures, components, and external interactions, among others.

Practicality

We require a system that targets the group of audiences (users) for which they are designed.

Accuracy

The aforementioned design should be created in such a way that it meets virtually all of the needs for which it was designed, whether functional or non-functional.

Optimization

Space and time are most likely what we accomplish for code chunks that allow specific components to function in a system.

Flexibility

The system architecture should be adjustable over time to meet the changing user demands of consumers. The finest illustration here is the well-known company, Nokia. It is the most crucial part of system design and is the reason why one out of every 100 businesses succeeds in the long term.

There are various important goals of system design, such as:

  • Identifying the user's or customer's wants and requirements is the first stage in the system's design process. This includes obtaining information on the user's objectives, wants, and desires for the system as a whole, as well as any limits or limitations that must be considered.
  • Create a plan to implement the system: After determining the user's wants and requirements, the following stage is to create a system strategy. This plan should include information on the system's architecture, components, and interfaces, as well as any data structures, algorithms, or other components that will be implemented.
  • Ensure the system is dependable and efficient: Among the primary goals of the design of the system is to guarantee that it is both dependable and efficient. This entails building the infrastructure in a way which minimizes downtime and faults while maximizing performance and speed.
  • Another essential goal of the design process is to make it user-friendly. This entails building a system that is easy to operate with a clear and uncomplicated user interface.
  • Consider any limits or limitations: In spite of addressing the user's wants and requirements, the system's design must account for any obstacles or limitations. For example, a device may need to be developed to function on specified software or hardware platforms, as well as to meet certain standards or requirements.

Conclusion

The objective of system design is to produce a plan of a system that fits the objectives and needs of the client or consumer while also assuring reliability, efficiency, and user-friendliness. Using a systematic or comprehensive design approach, developers may construct systems which are appropriate for the intended purpose and consumers.