Software Engineering is the process of designing, developing, testing, and maintenance of software using a systematic and structured approach.
[x] Aims of SE : Builds High quality,reliable,maintainable software.
[x] Main Goals SE : Improving quality,Budget, Time efficiency.
[x] Key principle of SE : Modularity, Abstraction, Encapsulation, Reusability,Maintenance, Testing, Design pattern, Agile Methodologies , Continuous.
Software development life cycle, is a methodology that defines the entire procedure of software development step-by-step.
🔦 Planning —> define project scope —>objectives and goals —>Resource planning.
The first phase of the SDLC is the project planning stage where you are gathering business requirements from your client or stakeholders. This phase is when you evaluate the feasibility of creating the product, revenue potential, the cost of production, the needs of the end-users, etc.
Software product : 📘 A software product is a piece of software that is developed and maintained to be sold to users. Users pay for a license to use the software. Software Products are nothing but software systems delivered to the customer with the documentation that describes how to install and use the system.
Requirement Analysis : 📘 Software requirement means requirement that is needed by software to increase quality of software product. These requirements are generally a type of expectation of the user from a software product that is important and needs to be fulfilled by software. Clarifies the required features and overall vision of a new product. Clarifies stakeholder expectations for that product. Prevents conflict and communication gaps during development and testing.
[x] Steps of the requirement analysis : 🟠
Project Scope : 📘 The project scope is the total amount of work that needs to be done to complete a project. To define it, project managers must break down the project into the tasks and deliverables that’ll be executed to meet goals and stakeholder requirements and deliver the project successfully.
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.
🔦 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.
[!note] In software projects, technical requirements typically refer to how the software is built, for example: programming language,operating system (OS),standards.
🔦 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.
High Level Design : 📘 HLD is a general system design. In software development, HLD is the process of creating an abstract representation of a software system before detailing the low-level design.
Low Level Design : 📘 Low-level design is a component level design process that follows a step-by-step refinement process.It involves detailed design and logic of the modules.It’s where the actual software components are designed, and it’s closer to the actual coding.
🔦 OOP —> Process of analyzing and design —> Design pattern —> UML —> SOLID principle
🔦 Development —> Coding standard —> Scalable code —> Version control —> code review.
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.
🔦 System Testing —> Manual Testing —> automated Testing
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.
🔦 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.
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
[x] Application: 🟠
Requirements are very well documented, clear and fixed.
Product definition is stable.There are no ambiguous requirements.
The project is short.
The situation is calm.
Where the tools and technology used is consistent and is not changing.
When resources are well prepared and are available to use.
People understand technology.
There are no unclear prerequisites.
there are many resources with the necessary knowledge readily available.
[x] Advantages : 🟠
A schedule can be set with deadlines for each stage of development and a product can proceed through the development process model phases one by one.
Simple and easy to understand and use.
Easy to manage due to the rigidity of the model. Each phase has specific deliverables and a review process.
Phases are processed and completed one at a time.
Works well for smaller projects where requirements are very well understood.
Clearly defined stages.
Well understood milestones.
Easy to arrange tasks.
Process and results are well documented. The requirements are simple and explicitly declared; they remain unchanged during the entire project development.
The start and end points for each phase are fixed, which makes it easy to cover progress.
The release date for the complete product, as well as its final cost, can be determined before development.
[x] Disadvantages : 🟠
🔦 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.
[x] Main Difference with classical waterfall model : 🟠 The iterative waterfall model provides feedback paths from every phase to its preceding phases, which is the main difference from the classical waterfall model.
When errors are detected at some later phase, these feedback paths allow for correcting errors committed by programmers during some phase.
The feedback paths allow the phase to be reworked in which errors are committed and these changes are reflected in the later phases.
But, there is no feedback path to the stage – feasibility study, because once a project has been taken, one does not give up the project easily.
It is good to detect errors in the same phase in which they are committed.
It reduces the effort and time required to correct the errors.
A real-life example could be building a new website for a small busines
[x] Application of Iterative Waterfall Model : 🟠
When requirements are defined clearly and easy to understand.
When the software application is large.
When there is a requirement of changes in future.
[x] Advantages : 🟠
Some working functionality can be developed quickly and early in the life cycle.
Results are obtained early and periodically.
Parallel development can be planned.
Progress can be measured.
Less costly to change the scope/requirements.
Testing and debugging during smaller iterations is easy.
Risks are identified and resolved during iteration; and each iteration is an easily managed milestone.
Easier to manage risk - High risk part is done first.
With every increment, an operational product is delivered.
Issues, challenges and risks identified from each increment can be utilized/applied to the next increment.
Risk analysis is better.
It supports changing requirements.
Initial Operating time is less.
Better suited for large and mission-critical projects.
During the life cycle, software is produced early which facilitates customer evaluation and feedback.
[x] Disadvantages : : 🟠
More resources may be required.
Although the cost of change is lesser, it is not very suitable for changing requirements.
More management attention is required.
System architecture or design issues may arise because not all requirements are gathered in the beginning of the entire life cycle.
Defining increments may require definition of the complete system.
Not suitable for smaller projects.
Management complexity is more.
End of the project may not be known which is a risk.
Highly skilled resources are required for risk analysis.
Project progress is highly dependent upon the risk analysis phase.
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:
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:
Phases begin in the quadrant dedicated to the identification and understanding of requirements. The overall goal of the phase should be determined and all objectives should be elaborated and analyzed. It is important to also identify alternative solutions in case the attempted version fails to perform.
Next, risk analysis should be performed on all possible solutions in order to find any faults or vulnerabilities -- such as running over the budget or areas within the software that could be open to cyber attacks. Each risk should then be resolved using the most efficient strategy.
In the next quadrant, the prototype is built and tested. This step includes: architectural design, design of modules, physical product design and the final design. It takes the proposal that has been created in the first two quadrants and turns it into software that can be utilized.
Finally, in the fourth quadrant, the test results of the newest version are evaluated. This analysis allows programmers to stop and understand what worked and didn’t work before progressing with a new build. At the end of this quadrant, planning for the next phase begins and the cycle repeats. At the end of the whole spiral, the software is finally deployed in its respective market.
[x] Steps of the spiral model: 🟠
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:
The new system requirements are defined in as much detail as possible. This usually involves interviewing a number of users representing all the external or internal users and other aspects of the existing system.
A preliminary design is created for the new system.
A first prototype of the new system is constructed from the preliminary design. This is usually a scaled-down system, and represents an approximation of the characteristics of the final product.
A second prototype is evolved by a fourfold procedure:
The entire project can be aborted if the risk is deemed too great. Risk factors might involve development cost overruns, operating-cost miscalculation and other factors that could result in a less-than-satisfactory final product.
The existing prototype is evaluated in the same manner as was the previous prototype, and, if necessary, another prototype is developed from it according to the fourfold procedure outlined above.
The preceding steps are iterated until the customer is satisfied that the refined prototype represents the final product desired.
The final system is constructed, based on the refined prototype.
The final system is thoroughly evaluated and tested. Routine maintenance is carried out on a continuing basis to prevent large-scale failures and to minimize downtime.
[x] Benefits of the spiral model: 🟠
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:
[ ] Flexibility - Changes made to the requirements after development has started can be easily adopted and incorporated.
[ ] Risk handling - The spiral model involves risk analysis and handling in every phase, improving security and the chances of avoiding attacks and breakages. The iterative development process also facilitates risk management.
[ ] Customer satisfaction - The spiral model facilitates customer feedback. If the software is being designed for a customer, then the customer will be able to see and evaluate their product in every phase. This allows them to voice dissatisfactions or make changes before the product is fully built, saving the development team time and money.
[x] Limitations of the spiral model: 🟠
[ ] High cost - The spiral model is expensive and, therefore, is not suitable for small projects.
[ ] Dependence on risk analysis - Since successful completion of the project depends on effective risk handling, then it is necessary for involved personnel to have expertise in risk assessment.
[ ] Complexity - The spiral model is more complex than other SDLC options. For it to operate efficiently, protocols must be followed closely. Furthermore, there is increased documentation since the model involves intermediate phases.
[ ] Hard to manage time - Going into the project, the number of required phases is often unknown, making time management almost impossible. Therefore, there is always a risk for falling behind schedule or going over budget.
[!note] The Spiral Model is called a Meta-Model because it includes all other SDLC models and it main benefit is the risk management.
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.
[x] Life Cycle Activities: 🟠
Requirements of Software are first broken down into several modules that can be incrementally constructed and delivered.
At any time, the plan is made just for the next increment and not for any kind of long-term plan. Therefore, it is easier to modify the version as per the need of the customer.
The Development Team first undertakes to develop core features (these do not need services from other features) of the system.
Once the core features are fully developed, then these are refined to increase levels of capabilities by adding new functions in Successive versions.
Each incremental version is usually developed using an iterative waterfall model of development.
As each successive version of the software is constructed and delivered, now the feedback of the Customer is to be taken and these were then incorporated into the next version.
Each version of the software has more additional features than the previous ones.
After Requirements gathering and specification, requirements are then split into several different versions starting with version 1, in each successive increment, the next version is constructed and then deployed at the customer site.
After the last version (version n), it is now deployed at the client site.
[x] Types of Incremental Model: 🟠
[x] When to use Incremental Process Model: 🟠
[x] Characteristics of Incremental Process Model : 🟠
[x] Advantages of Incremental Process Model:
[x] Disadvantages of Incremental Process 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: 🟠
[ ] Requirements gathering: 📘 In this phase, you must define the requirements. You should explain business opportunities and plan the time and effort needed to build the project. Based on this information, you can evaluate technical and economic feasibility.
[ ] Design the requirements: 📘 When you have identified the project, work with stakeholders to define requirements. You can use the user flow diagram or the high-level UML diagram to show the work of new features and show how it will apply to your existing system.
[ ] Construction/ iteration: 📘 When the team defines the requirements, the work begins. Designers and developers start working on their project, which aims to deploy a working product. The product will undergo various stages of improvement, so it includes simple, minimal functionality.
[ ] Testing: 📘 In this phase, the Quality Assurance team examines the product's performance and looks for the bug.
[ ] Deployment: 📘 In this phase, the team issues a product for the user's work environment.
[ ] Feedback: 📘 After releasing the product, the last step is feedback. In this, the team receives feedback about the product and works through the feedback.
Kanban.
Scrum.
Crystal.
Dynamic Software Development Method(DSDM).
Feature Driven Development(FDD).
Lean Software Development.
eXtreme Programming(XP)
[x] Kanban: 📘
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: 🟠
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:
[x] Crystal: 📘
There are three concepts of this method-
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.
[x] Lean Software Development: 📘
Lean software development methodology follows the principle "just in time production." The lean method indicates the increasing speed of software development and reducing costs.
Lean development can be summarized in seven phases. 🟠
When to use the Agile Model? 📘
What is the Agile Manifesto? 📘
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.
As outlined in the Agile Manifesto, there are four main values of Agile project management:
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: 🟠
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: 🟠
Agile methods are adaptable: There's a reason why they call it the Agile methodology. One of the main benefits of using Agile processes in software development is the ability to shift strategies quickly, without disrupting the flow of a project. Because phases in the traditional waterfall method flow into one another, shifting strategies is challenging and can disrupt the rest of the project roadmap. Since software development is a much more adaptable field, project managing rapid changes in the traditional sense can be challenging. This is part of the reason why Agile project management is favored in software development.
Agile fosters collaborative teamwork: One of the Agile principles states that the most effective way to communicate with your team is face-to-face. Combine this with the principle that encourages teams to break project silos and you have a recipe for collaborative teamwork. While technology has changed since Agile’s inception and work has shifted to welcome more remote-friendly policies, the idea of working face-to-face still hasn't changed.
Agile methods focus on customer needs: One of the unique aspects of software development is that teams can focus on customer needs much more closely than other industries. With the rise of cloud-based software, teams can get feedback from their actual customers quickly. Since customer satisfaction is a key driver for software development, it’s easy to see why it was included in the Agile process. By collaborating with customers, Agile teams can prioritize features that focus on customer needs. When those needs change, teams can take an Agile approach and shift to a different project.
[x] Advantages of Agile Methodology : 🟠
In Agile methodology the delivery of software is unremitting.
The customers are satisfied because after every Sprint working feature of the software is delivered to them.
Customers can have a look of the working feature which fulfilled their expectations.
If the customers has any feedback or any change in the feature then it can be accommodated in the current release of the product.
In Agile methodology the daily interactions are required between the business people and the developers.
In this methodology attention is paid to the good design of the product.
Changes in the requirements are accepted even in the later stages of the development.
An Agile/Scrum approach can improve organizational synergy by breaking down organizational barriers and developing a spirit of trust and partnership around organizational goals.
[x] Disadvantages of the Agile Methodology : 🟠
In Agile methodology the documentation is less.
Sometimes in Agile methodology the requirement is not very clear hence it’s difficult to predict the expected result.
In few of the projects at the starting of the software development life cycle it’s difficult to estimate the actual effort required.
Because of the ever-evolving features, there is always a risk of the ever-lasting project.
For complex projects, the resource requirement and effort are difficult to estimate.
[!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.
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: 🟠
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.
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.
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: 🟠
Not ideal for smaller projects or when your technical risk is high.
System must be modular and able to be broken into components.
Requires highly skilled designers, developers, and coders.
Need buy-in and involvement from everyone on project team.
Everyone on the project—yes, everyone—must meet deadlines.
Requires technical and business expertise to help root out requirements.
Could put limits on some features’ functionality and scalability.
Increased project expense with modeling and code generation.
Multiple iterations, constant communication, and feed could be harder to track.
Minimal up-front planning doesn’t leave much to track progress against.
[x] Getting the most out of rapid application development : 🟠
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:
[!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.