idlegossip / Software-Engineering

0 stars 0 forks source link

Software-Engineering 💻

Software engineering picture

Software Engineering is the process of designing, developing, testing, and maintenance of software using a systematic and structured approach.

Software Requirements Specification(SRS): 📙

The production of the requirements stage of the software development process is SRS(also called a requirements document). This report lays a foundation for software engineering activities and is constructed when entire requirements are elicited and analyzed. SRS is a formal report, which acts as a representation of software that enables the customers to review whether it (SRS) is according to their requirements.

2. Defining Requirements : 🟥

🔦 Defining —> Functional requirement—>Technical requirement —>Requirements reviewed and approved. In this stage, all the requirements for the target software are specified. These requirements get approval from customers, market analysts, and stakeholders. This is fulfilled by utilizing SRS (Software Requirement Specification). This is a sort of document that specifies all those things that need to be defined and created during the entire project cycle.

3. Designing Architecture : 🟥

🔦 Design —> HLD —> LLD

SRS is a reference for software designers to come up with the best architecture for the software. Hence, with the requirements defined in SRS, multiple designs for the product architecture are present in the Design Document Specification (DDS). This DDS is assessed by market analysts and stakeholders. After evaluating all the possible factors, the most practical and logical design is chosen for development.

At this stage, the fundamental development of the product starts. For this, developers use a specific programming code as per the design in the DDS.

After the development of the product, testing of the software is necessary to ensure its smooth execution. Although, minimal testing is conducted at every stage of SDLC. Therefore, at this stage, all the probable flaws are tracked, fixed, and retested. This ensures that the product confronts the quality requirements of SRS.

6. Deployment and Maintenance: 🟥

🔦 Deployment and maintenance —> Release Planning —> Deployment automation —> Maintenance —> Feedback.

After detailed testing, the conclusive product is released in phases as per the organization’s strategy. Then it is tested in a real industrial environment. It is important to ensure its smooth performance. If it performs well, the organization sends out the product as a whole. After retrieving beneficial feedback, the company releases it as it is or with auxiliary improvements to make it further helpful for the customers. However, this alone is not enough.

SDLC MODEL : 💻

1. WaterFall Model : 🟥

It is also referred to as a linear-sequential life cycle model.In a waterfall model, each phase must be completed before the next phase can begin and there is no overlapping in the phases.
🔦 Requirement analysis ---> System Design ---> Implementation ---> Testing ---> Deployment ---> Maintenance

2. Iterative Waterfall Model: 🟥


🔦 Requirement---> Analysis --->Design ---> Testing ---> Implementation ---> Review --->
Design ---> Implementation ---> Review --->
Design ---> Testing ---> Implementation ---> Review ---> Deployment ---> Maintenance.

The Iterative Waterfall Model is a software development approach that combines the sequential steps of the traditional Waterfall Model with the flexibility of iterative design. It allows for improvements and changes to be made at each stage of the development process, instead of waiting until the end of the project.

3. Spiral Model: 🟥


The spiral model is a systems development lifecycle (SDLC) method used for risk management that combines the iterative development process model with elements of the Waterfall model. The spiral model is used by software engineers and is favored for large, expensive and complicated projects.When viewed as a diagram, the spiral model looks like a coil with many loops. The number of loops varies based on each project and is often designated by the project manager. Each loop of the spiral is a phase in the software development process. The spiral model enables gradual releases and refinement of a product through each phase of the spiral as well as the ability to build prototypes at each phase. The most important feature of the model is its ability to manage unknown risks after the project has commenced; creating a prototype makes this feasible.

As mentioned before, the spiral model is best used in large, expensive and complicated projects. Other uses include:

Spiral model phases: 🟠

When looking at a diagram of a spiral model, the radius of the spiral represents the cost of the project and the angular degree represents the progress made in the current phase. Each phase begins with a goal for the design and ends when the developer or client reviews the progress. Every phase can be broken into four quadrants:

  1. identifying and understanding requirements.
  2. performing risk analysis.
  3. building the prototype and
  4. evaluation of the software's performance.

While the phases are broken down into quadrants, each quadrant can be further broken down into the steps that occur within each one. The steps in the spiral model can be generalized as follows:

As mentioned before, the spiral model is a great option for large, complex projects. The progressive nature of the model allows developers to break a big project into smaller pieces and tackle one feature at a time, ensuring nothing is missed. Furthermore, since the prototype building is done progressively, the cost estimation of the whole project can sometimes be easier.
Other benefits of the spiral model include:

[!note] The Spiral Model is called a Meta-Model because it includes all other SDLC models and it main benefit is the risk management.

4. Incremental Model : 🟥

very good resources


Incremental Model is a process of software development where requirements are divided into multiple standalone modules of the software development cycle. In this model, each module goes through the requirements, design, implementation and testing phases. Every subsequent release of the module adds function to the previous release. The process continues until the complete system is achieved.

5. Agile Model : 🟥

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 do not directly involve long term planning. The project scope and requirements are laid down at the beginning of the development process. 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.

Phases of Agile Model: 🟠

  1. Requirements gathering.
  2. Design the requirements.
  3. Construction/ iteration.
  4. Testing/ Quality assurance.
  5. Deployment.
  6. Feedback

Agile Testing Methods: 🟠

Kanban is a visual approach to Agile. Teams use online Kanban board tools to represent where certain tasks are in the development process. Tasks are represented by cards on a board, and stages are represented in columns. As team members work on tasks, they move cards from the backlog column to the column that represents the stage the task is in. This method is a good way for teams to identify roadblocks and to visualize the amount of work that’s getting done.

SCRUM is an agile development process focused primarily on ways to manage tasks in team-based development conditions.Scrum is a common Agile methodology for small teams and also involves sprints.

There are three roles in it, and their responsibilities are: 🟠

  1. Scrum Master: The scrum can set up the master team, arrange the meeting and remove obstacles for the process.
  2. Product owner: The product owner makes the product backlog, prioritizes the delay and is responsible for the distribution of functionality on each repetition.
  3. Scrum Team: The team manages its work and organizes the work to complete the sprint or cycle.
  4. print planning: This event kicks off the sprint. Sprint planning outlines what can be delivered in a sprint (and how).
  5. Sprint retrospective: This recurring meeting acts as a sprint review—to iterate on learnings from a previous sprint that will improve and streamline the next one.

This type of methodology is used when customers are constantly changing demands or requirements, or when they are not sure about the system's performance. The five values of XP include:

  1. Communication.
  2. Simplicity.
  3. Feedback.
  4. Courage.
  5. Respect
    Similar to daily Scrum standups, there are regular releases and iterations, yet XP is much more technical in its approach. If your dev team needs to quickly release and respond to customer requests, XP focuses on the “how” it will get done.

DSDM is a rapid application development strategy for software development and gives an agile project distribution structure. The essential features of DSDM are that users must be actively connected, and teams have been given the right to make decisions.

The techniques used in DSDM are: 🟠

The DSDM project contains seven stages: 🟠

This method focuses on "Designing and Building" features. In contrast to other smart methods, FDD describes the small steps of the work that should be obtained separately per function.

The Agile Manifesto is a document that focuses on four values and 12 principles for Agile software development. It was published in February 2001 by 17 software developers who needed an alternative to the more linear product development process.

What are the 4 pillars of Agile❓

As outlined in the Agile Manifesto, there are four main values of Agile project management:

  1. Individuals over processes and tools: Agile teams value team collaboration and teamwork over working independently and doing things "by the book.”
  2. Working software over comprehensive documentation: The software that Agile teams develop should work. Additional work, like documentation, is not as important as developing good software.
  3. Customer collaboration over contract negotiation: Customers are extremely important within the Agile methodology. Agile teams allow customers to guide where the software should go. Therefore, customer collaboration is more important than the finer details of contract negotiation.
  4. Responding to change over following a plan: One of the major benefits of Agile project management is that it allows teams to be flexible. This framework allows for teams to quickly shift strategies and workflows without derailing an entire project.
What are the 12 Agile principles❓

The four values of Agile are the pillars of Agile methodology. From those values, the team developed 12 principles. If the four values of Agile are the weight-bearing pillars of a house, then these 12 principles are the rooms you can build within that house. These principles can be easily adapted to fit the needs of your team.

The 12 principles used in Agile methodology are: 🟠

  1. Satisfy customers through early, continuous improvement and delivery.When customers receive new updates regularly, they're more likely to see the changes they want within the product. This leads to happier, more satisfied customers—and more recurring revenue.
  2. Welcome changing requirements, even late in the project. The Agile framework is all about adaptability. In iterative processes like Agile, being inflexible causes more harm than good.
  3. Deliver value frequently. Similar to principle #1, delivering value to your customers or stakeholders frequently makes it less likely for them to churn.
  4. Break the silos of your projects. Collaboration is key in the Agile framework. The goal is for people to break out of their own individual projects and collaborate together more frequently.
  5. Build projects around motivated individuals. Agile works best when teams are committed and actively working to achieve a goal.
  6. The most effective way to communicate is face-to-face. If you’re working on a distributed team, spend time communicating in ways that involve face-to-face communication like Zoom calls.
  7. Working software is the primary measure of progress. The most important thing that teams should strive for with the Agile framework is the product. The goal here is to prioritize functional software over everything else.
  8. Maintain a sustainable working pace. Some aspects of Agile can be fast-paced, but it shouldn't be so fast that team members burn out. The goal is to maintain sustainability throughout the project.
  9. Continuous excellence enhances agility. If the team develops excellent code in one sprint, they can continue to build off of it the next. Continually creating great work allows teams to move faster in the future.
  10. Simplicity is essential. Sometimes the simplest solution is the best solution. Agile aims to not overcomplicate things and find simple answers to complex problems.
  11. Self-organizing teams generate the most value. Similar to principle #5, proactive teams become valuable assets to the company as they strive to deliver value.
  12. Regularly reflect and adjust your way of work to boost effectiveness. Retrospective meetings are a common Agile practice. It's a dedicated time for teams to look back and reflect on their performance and adapt their behaviors for the future.
What are the benefits of the Agile development methodology ❓

You commonly find Agile project management used in application development or other types of software development. This is because software is constantly changing, and the needs of the product have to change with it. Because of this, linear project management methods like the waterfall model are less effective.

Here are a few other reasons why teams use Agile: 🟠

[!note] Agile methodology is a project management framework that breaks projects down into several dynamic phases, commonly known as sprints.The Agile Model is a software development process that involves iterative development. It's a type of incremental model that involves developing software in rapid cycles. The Agile Model focuses on working software, rather than comprehensive documentation.

6. RAD Model: 🟥

The RAD model is a form of agile methodology that focuses on constant iterations and prototypes based on user feedback. It allows you to incorporate updates based on usage rather than a rigid development plan.

Using this development life cycle, developers can: 🟠

  1. Make changes to the design.
  2. Remove or add features.
  3. Edit interfaces. They can do all these without affecting the whole process while also dealing with changing requirements, as they happen, based on client/user feedback. This translates into rapid prototypes for testing and additional improvements.
Why use the RAD model❓

Software development requires a lot of knowledge—about how your business works, what your customers want, and how it all comes together. The RAD model is no exception. But rather than relying on your internal team’s ability to capture all that knowledge first and plan around it, rapid application development counts on the knowledge your team will gain during the project—information that will improve or adapt the solution to requirements you might not have thought of otherwise. The clearer your requirements are, the stronger your prototypes (and final product) will be, so consider focus groups and workshops to establish your requirements and early testing to refine them. An experienced team of developers can take those requirements and create a working prototype for your users to vet and help improve with every version. With thoughtful feedback and continuous collaboration, the knowledge you learn during the process builds back on itself to help you construct a viable product shaped by customer needs.

The RAD model in 5 phases 🟠

If you’d rather focus your limited time on building instead of planning, rapid app development may be a good fit. Traditional methods for developing software rely on rigid requirements and precise specs to be decided up front—spending valuable time locking in as many details as possible first. The downside? You may be forced to start from scratch every time a client wants to make a change. The rapid application development process is different. Instead of lots of detailed planning, you break the project into five phases: business modeling, data modeling, process modeling, application generation, and testing and turnover. When you’re pressed for time or it’d be better to get a version of your solution in front of a customer as quickly as possible, RAD helps deliver apps for them to see, react to, and help you improve in real time.

First, you need to find out how information flows across your business. This starts with a broad analysis of your business by your internal team to uncover how vital information and data is obtained, how it’s processed, where it’s distributed, when all that happens, and what can slow it down. The more your team can understand what kind of information is driving your processes, how it’s generated, who touches it, and why—the better your analysis in the next phase will turn out.

Now that you’ve pulled your information together, it’s time for your team to start analyzing it. To do that, you’ll need to identify and refine key data sets across your business, define them clearly, then group them in ways that might be useful to you later. It’s important for your team to look things over closely and accurately describe each group’s attributes—this will help you more easily sort out relationships between them, the effects of those relationships, and how they might be relevant to your business going forward.

Time to take what you’ve learned and see where it all fits. That means beginning to understand the flow of information around key objectives and how that data supports specific business functions. It’s not too late for the team to further tighten data sets here—so feel free to make required changes and adjust if needed. You’ll also outline your processes to change, add, delete, or retrieve a data object.

This is when your concept starts to become a reality and your developer team begins to actually construct your software. With process and data models in hand, they’ll begin creating components and full prototypes to be tested in the next phase. To get there, developers will build out your system and code automation tools to transform your process models into actual, working code.

Now it’s time to see what your users and clients think. Here, prototypes are tested separately, so clients and users can scrutinize each new component and examine carefully to identify issues. It’s key to thoroughly test the data flow and interfaces between all your components, so you can identify what’s effective and root out any major issues early. You’ll also be able to save some time as you further iterate, since many of the programming components you’re using will have been tested previously.

Pros and cons of the RAD process 🟠

Rapid application development is a nimble way to build apps, but it’s not a one-size-fits-all solution. Before you start Phase 1 of the RAD process, it’s important to know not only the benefits of RAD, but also potential drawbacks or pitfalls you might encounter along the way.

Here are some upsides to following the rapid application development model:

Here are some potential downsides to deploying the rapid application development model: 🟠

Like most other successful models, knowing the phases is just the start: The right team, tools, and insights make a big difference along the way. To ensure you’re maximizing your people, technology, and knowledge during each phase of the rapid application development process, follow these best four best practices:

  1. Stack your team with developers, domain experts, customer representatives, and IT pros with a knack for meeting deadlines—while there’s not much planning up front, the rapid application development model thrives when schedule is prioritized.
  2. Make sure your stakeholders aren’t just knowledgeable about your business—they’re also willing to share that knowledge, early and often, with candid feedback.
  3. Secure enough budget for an experienced developer team that’s comfortable with receiving feedback from multiple sources and quickly turning around changes throughout the process.
  4. Match your developer team’s skillset with the right rapid application development tools, including automated code generators that construct software and convert your models into workable prototypes.

[!note] With a relatively small team closely collaborating, your business can build apps in just two or three months using the rapid application development (RAD) model.That’s because the rapid application development model prioritizes fast prototyping over up-front planning—to help you jump right in and create agile apps through continuous iteration and quick feedback. As technology evolves, business objectives change, and organizational goals shift, the RAD model helps teams quickly create powerful solutions that are low code, cost-efficient, and nimble.The RAD process starts with aligning your stakeholders, developers, and users around key requirements for the project—timeline, business outcomes, user expectations, and budget—before quickly building out prototypes to get a working version in front of stakeholders for feedback. With your prototypes in hand, you’ll then build a working model of your solution for users to react to, before integrating their feedback into the final, optimized version of your app.