DEV Community

Cover image for Understanding Software Engineering
Ankush Singh Gandhi
Ankush Singh Gandhi

Posted on • Updated on

Understanding Software Engineering

READ COMPLETE BLOG ON ankushgandhi.com.


Software Engineering🔽

  • It is a systematic, disciplined, cost-effective technique for software development.
  • It is an Engineering approach to develop software.

🟢Software Engineering Process

1) Software Development Lifecycle
2) Requirements & Specification (SRS)
3) Architecture
4) Software Design Process
5) Implementation
6) Development
7) Testing


⭐⭐Support me here so that i can provide more usefull content⭐⭐
And visit ankushgandhi.com for more usefull content

Buy Me A Coffee


Software Development Lifecycle🔽

It is a process used by the software engineering industry to design develop and test high-quality software SDLC tends to produce high-quality software that meets customer expectations.

🟢SDLC Models

There are processes, methodologies and frameworks range from specific prescriptive steps that can be used by the organization there are many SDLC models that have been developed to achieve the different required objective the model specifies various stages of the process and the order in which they are carried out.

  • Waterfall Model
  • V Model
  • Incremental Model
  • Iterative Model
  • Spiral Model
  • RAD Model
  • Prototype Model
  • Agile Model

🟢Waterfall Model

It is a breakdown of project activities into linear sequential phases where each face depends on the deliverables of the previous one.

Software Engineering

🟢Incremental Model

The incremental build model is a method of software development where the model is designed, implemented, and tested incrementally (a little more is added each time) until the product is finished the product defined finished when it satisfies all requirements

Each iteration passes through the requirement, design, coding, and testing phase and each subsequent release of the system adds function to the previous release until all designed functionality has been implemented.

Software Engineering

🟢Iterative Model

The iterative model is a particular implementation of a software development life cycle (SDLC) that focuses on an initial, simplified implementation, which then progressively gains more complexity and a broader feature set until the final system is complete. When discussing the iterative method, the concept of incremental development will also often be used liberally and interchangeably, which describes the incremental alterations made during the design and implementation of each new iteration.

Unlike the more traditional waterfall model, which focuses on a stringent step-by-step process of development stages, the iterative model is best thought of as a cyclical process. After an initial planning phase, a small handful of stages are repeated over and over, with each completion of the cycle incrementally improving and iterating on the software. Enhancements can quickly be recognized and implemented throughout each iteration, allowing the next iteration to be at least marginally better than the last.

Software Engineering

🟢Spiral Model

The spiral model combines the idea of iterative development with the systematic, controlled aspects of the waterfall model. This Spiral model is a combination of the iterative development process model and sequential linear development model i.e. the waterfall model with a very high emphasis on risk analysis. It allows incremental releases of the product or incremental refinement through each iteration around the spiral.

Software Engineering

🟢Agile Model


READ COMPLETE BLOG ON ankushgandhi.com.


The meaning of Agile is swift or versatile." Agile process model" refers to a software development approach based on iterative development. Agile methods break tasks into smaller iterations or parts that do not directly involve long-term planning. The project scope and requirements are laid down at the beginning of the development process. Plans regarding the number of iterations, the duration, and the scope of each iteration are clearly defined in advance.

Each iteration is considered as a short time "frame" in the Agile process model, which typically lasts from one to four weeks. The division of the entire project into smaller parts helps to minimize the project risk and to reduce the overall project delivery time requirements. Each iteration involves a team working through a full software development life cycle including planning, requirements analysis, design, coding, and testing before a working product is demonstrated to the client.

Software Engineering

Agile is a methodology. It's a way of thinking. It is NOT a model in and of itself.

Agile was invented because the scope of software development was changing. Waterfall methods aren't bad, they're just slow, and not built for a lot of modern problems.

This is largely due to the complexity of modern systems which make them hard to plan 100%. This means at some point, a change will be required, and production will stop until all the documents are updated.

With agile however, we can move a little bit quicker. We are constantly looking for and adjusting to change.

📌Agile Manifesto

The agile manifesto is a set of guiding principles for agile development. They are:

🔺Individuals and interactions over process and tools.

🔺Working software over comprehensive documentation.

🔺Customer collaboration over contract negotiation.

🔺Responding to change over following a plan.

With this set of rules, all agile models are created. Note, in here we aren't throwing out processes and tools, and we aren't going without a plan. We are simply just creating priorities within the development process. We want to make the piece of software that is needed. To do this, we need to keep communication channels open and collaborate with all involved.

Through this manifesto, models were created that fit these rules.

📌Agile Models

🔺Scrum - Scrum is focused on sprints. Sprints are these 1-4 week production cycles. We take the software, come up with a goal of where we want it to be, and then build it to there.

Once we finish a sprint, we then go back to the stakeholders, show them the software, take suggestions, and move on to the next sprint.

All of this allows us to stay flexible. We are communicating with the stakeholders almost every 2 weeks with this model. This means we are constantly able to take those suggestions and change the direction of development.

For more deeper understanding

🔺Kanban - The kanban system is one of optimization. With kanban, we are trying to analyze the flow of production and figure out the slowdowns.

To do this, we usually use some sort of visual flowchart. We break the project up into tasks and fill up the chart. We are then able to see if any part of production has a slowdown. Maybe for example, our review process is slowing us down, or maybe it's planning.

With kanban, we are trying to make small adjustments into the right direction. We want to work with the existing process, not replace it.

🔺Lean Startup - Lean startup is a way of testing out the market before spending on development. Here we create a MVP (Minimum Viable Product) to see if there is interest in the product we are developing.

Production costs a lot of money. It would be really bad if we spent $500,000 on a project, just to figure out that nobody is actually interested in that product.

An example of this would be to build a website that sells a certain product. Get it working to the point where people can place that item into a cart. Then when they go to purchase, have it give them a friendly message stating that this feature will be coming soon. We then track how many people are actually interested in buying products off our website.

If we have a lot of interest, then we are good to go ahead with production. If we don't have as much interest, then maybe we need to rethink our design.

🟢Waterfall Model Example

1) Requirements

  • collecting email & message
  • store in db
  • prevent bad input

2) Design

  • using HTML & CSS for building
  • JS for input verification
  • MySQL for backend

3)Development

  • actual coding
  • documenting

4) Testing

  • does form collect input
  • does it send info. to db
  • does it prevent bad input

5) Deployment

  • deploying on AWS

6) Maintainence

  • fixing bugs
  • adding features

Requirements & Specification🔽

🟢Requirements

A way of figuring out the exact specification of what the software should do all things that define the goal of the system.

  • A non-tech definition of something the user requires from the system.

  • Anyone can understand.

  • ex - ability to submit a request for medical treatment form.

🟢Specification

A more technical way of figuring out exactly what the software should do we can say it is the technical aspect of requirements.

  • A technical definition of what users require from the system.

  • Keep it simple we are not trying to design.

  • ex - send AES 256 form data from the frontend to the server.

🟢Example

Requirement

  • The tire must work on SUV automobiles.

Specification

  • Must support 75,00lbs pressure.
  • Tire must fill US DOT standards.
  • T or greater speed quality.

🟢Types of Requirements

On the basis of functionality there are two types of requirements

1.Functional

  • What are the functions of the program

  • what should the system do

2.Non-Functional

  • what goals should be met

  • How should the system work

Other than these two there are three more types of requirements

1.Product

  • must have of the product itself

  • ex - the app must be coded in kotlin

2.Organizational

  • company policies, standards, style, etc

  • ex - data should be encrypted by AES 256

  • ex - project should be developed by SCRUM

3.External

  • external law, regulations, trends, etc

  • ex - it must use SSL due to law Xyz in the US


⭐⭐Support me here so that i can provide more usefull content⭐⭐
And visit ankushgandhi.com for more usefull content

Buy Me A Coffee


Design: Architecture🔽

🟢Architecture Introduction

Architecture is the highest level of design within a system. It is the link between idea and reality. It takes our idea for the system, and creates a plan for it. We focus on only the largest areas of the system here. We want to break it down from idea, into concrete areas to build.

In software, bad architecture is something that CAN'T be fixed with good programming. It is a critical step within the development process. Once we decide on an architecture, we have to understand that it can't be changed.

🟢Architecture Overview

📌Bad Architecture

Software Engineering

📌Good Architecture

Software Engineering

Software architecture is all about breaking up larger systems and ideas, into smaller focused systems. Our first step is to take the requirements, and build an initial architecture. We take this broad set of ideas and guidelines, and have to organize it into functioning areas.

Each of these areas are then put through the same process to break them up into smaller and smaller pieces. Eventually we will have a blueprint for the entire system designed.

Good architecture is hard. It takes a lot of resources to develop correctly. However, this upfront cost is almost always recovered from how maintainable the software is. This will reduce the amount of bugs, and the time to fix those bugs.

Good architecture also helps for faster development and better resource utilization. If we break up the project into small pieces, we will understand how to have multiple developers work at the same time on it.

🟢Software Architecture example

1.We are going to design an architecture of a game.

Software Engineering

2.now we should divide these layers based on functionality.

Software Engineering

3.now we will add another layer that controls the interaction between frontend and game logic.

Software Engineering

🟢Architecture Patterns

📌Pipe-and-Filter

The pipe and filter pattern is a good pattern to use to process data through multiple different layers. The key to this pattern is the ability of each step to input, and output the same type of data. So if you send a set of numbers in one side, you will get a set of numbers out the other side.

Software Engineering

READ COMPLETE BLOG ON ankushgandhi.com.


⭐⭐Support me here so that i can provide more usefull content⭐⭐
And visit ankushgandhi.com for more usefull content

Buy Me A Coffee


My Other Blogs



Top comments (0)