Software Engineering Dr. Sachin Kumar Yadav What is software? • Computer programs and associated documentation What is software? Documentation consists of different types of manuals are Formal Specification Analysis /Specification ContextDiagram Data Flow Diagrams Design Flow Charts Entity-Relationship Diagram Documentation Manuals Source Code Listings Implementation Testing List of documentation manuals Cross-Reference Listing Test Data Test Results Operating Procedures consists of different types of manuals are System Overview User Manuals Beginner’s Guide Tutorial Reference Guide Operating Procedures Installation Guide Operational Manuals System Administration Guide List of operating procedure manuals. Software Product • Software products may be developed for a particular customer or may be developed for a general market What is software engineering? Software engineering is an engineering discipline which is concerned with all aspects of software production Software engineers should – adopt a systematic and organised approach to their work – use appropriate tools and techniques depending on • the problem to be solved, • the development constraints and – use the resources available What is software engineering? At the first conference on software engineering in 1968, Fritz Bauer defined software engineering as “The establishment and use of sound engineering principles in order to obtain economically developed software that is reliable and works efficiently on real machines”. Stephen Schach defined the same as “A discipline whose aim is the production of quality software, software that is delivered on time, within budget, and that satisfies its requirements”. Both the definitions are popular and acceptable to majority. However, due to increase in cost of maintaining software, objective is now shifting to produce quality software that is maintainable, delivered on time, within budget, and also satisfies its requirements. Introduction to Software Engineering CONT… • Software engineering is the branch of computer science that deals with the design, development, testing, and maintenance of software applications. • Software Engineering is an engineering branch related to the evolution of software product using well-defined scientific principles, techniques, and procedures. • Software Engineering is the process of designing, developing, testing, and maintaining software. It is a systematic and disciplined approach to software development that aims to create high-quality, reliable, and maintainable software. Software Characteristics: Comparison of constructing a bridge and writing a program. Sr. No Constructing a bridge 1. The problem is well understood 2. There are many existing bridges 3. The requirement for a bridge typically do not change much during construction 4. The strength and stability of a bridge can be calculated with reasonable precision When a bridge collapses, there is a detailed investigation and report 5. 6. 7. Engineers have been constructing bridges for thousands of years Materials (wood, stone,iron, steel) and techniques (making joints in wood, carving stone, casting iron) change slowly. Writing a program Only some parts of the problem are understood, others are not Every program is different and designed for special applications. Requirements typically change during all phases of development. Not possible to calculate correctness of a program with existing methods. When a program fails, the reasons are often unavailable or even deliberately concealed. Developers have been writing programs for 50 years or so. Hardware and software changes rapidly. Software Characteristics: Software does not wear out. Failure Intensity Burn-in phase Wear out phase Useful life phase Time Characteristics (Component of S/W characteristics) of software engineering Functionality Functionality refers to the set of features and capabilities that a software program or system provides to its users. It is one of the most important characteristics of software, as it determines the usefulness of the software for the intended purpose. Data storage and retrieval Data processing and manipulation User interface and navigation Communication and networking Security and access control Reporting and visualization Automation and scripting Reliability Reliability is a characteristic of software that refers to its ability to perform its intended functions correctly and consistently over time. Reliability is an important aspect of software quality, as it helps ensure that the software will work correctly and not fail unexpectedly. Examples of factors that can affect the reliability of software include: 1.Bugs and errors in the code 2.Lack of testing and validation 3.Poorly designed algorithms and data structures 4.Inadequate error handling and recovery 5.Incompatibilities with other software or hardware Efficiency Efficiency is a characteristic of software that refers to its ability to use resources such as memory, processing power, and network bandwidth in an optimal way. Examples of factors that can affect the efficiency of the software include: 1.Poorly designed algorithms and data structures 2.Inefficient use of memory and processing power 3.High network latency or bandwidth usage 4.Unnecessary processing or computation 5.Unoptimized code Usability It refers to the extent to which the software can be used with ease. the amount of effort or time required to learn how to use the software. Required functions are: Maintainability It refers to the ease with which modifications can be made in a software system to extend its functionality, improve its performance, or correct errors. Required functions are: Portability A set of attributes that bears on the ability of software to be transferred from one environment to another, without minimum changes. • Required functions are: Importance of software engineering software applications Role of Management in Software Development Factors People Project Product Process Role of Management in Software Development 1) People The management has to deal with people in every stage of the software developing process. From the ideation phase to the final deployment phase, including the development and testing phases in between, there are people involved in everything, whether they be the customers or the developers, the designers or the salesmen. Hence, how they contact and communicate with each other must be managed so that all the required information is successfully delivered to the relevant person and hence there is no communication gap between the customers and the service providers. 2) Project From the ideation phase to the deployment phase, we term the process as a project. Many people work together on a project to build a final product that can be delivered to the customer as per their needs or demands. So, the entire process that goes on while working on the project must be managed properly so that we can get a worthy result after completing the project and also so that the project can be completed on time without any delay. 3) Process Every process that takes place while developing the software, or we can say while working on the project must be managed properly and separately. For example, there are various phases in a software development process and every phase has its process like the designing process is different from the coding process, and similarly, the coding process is different from the testing. Hence, each process is managed according to its needs and each needs to be taken special care of. 4) Product Even after the development process is completed and we reach our final product, still, it needs to be delivered to its customers. Hence the entire process needs a separate management team like the sales department. Software Process The software process is the way in which we produce software. Why is it difficult to improve software process ? Or software process improvement fails. • Not enough time • Lack of knowledge • Wrong motivations • Insufficient commitment or Due to lack of true commitment Process improvement learning curve There are four basic key process activities: 1.Software Specifications – In this process, detailed description of a software system to be developed with its functional and non-functional requirements. 2.Software Development – In this process, designing, programming, documenting, testing, and bug fixing is done. 3.Software Validation – In this process, evaluation software product is done to ensure that the software meets the business requirements as well as the end users needs. 4.Software Evolution – It is a process of developing software initially, then timely updating it for various reasons. Software Crisis Software crisis is a term used in the early days of computing science for the difficulty of writing useful and efficient computer programs in the required time. The software crisis was due to the rapid increases in computer power and the complexity of the problems that could not be tackled. a time of great danger or difficulty; the moment when things change and either improve or get worse CONT… Factors Contributing to Software Crisis • Poor project management. • Lack of adequate training in software engineering. • Less skilled project members. • Low productivity improvements. Solution of Software Crisis There is no single solution to the crisis. One possible solution to a software crisis is software engineering, because software engineering is a systematic, disciplined, and quantifiable approach. For preventing software crises, there are some guidelines: • Reduction in software over budget. • The quality of the software must be high. • Less time is needed for a software project. • Experienced and skilled people working on the software project. • Software must be delivered. • Software must meet user requirements. Some Software failures Ariane 5 It took the European Space Agency 10 years and $7 billion to produce Ariane 5, a giant rocket capable of hurling a pair of three-ton satellites into orbit with each launch and intended to give Europe overwhelming supremacy in the commercial space business. The rocket was destroyed after 39 seconds of its launch, at an altitude of two and a half miles along with its payload of four expensive and uninsured scientific satellites. Some Software failures When the guidance system’s own computer tried to convert one piece of data the sideways velocity of the rocket from a 64 bit format to a 16 bit format; the number was too big, and an overflow error resulted after 36.7 seconds. When the guidance system shutdown, it passed control to an identical, redundant unit, which was there to provide backup in case of just such a failure. Unfortunately, the second unit, which had failed in the few identical manner a milliseconds before. Some Software failures Y2K problem: It was simply the ignorance about the adequacy or otherwise of using only last two digits of the year. The 4-digit date format, like 1964, was shortened to 2-digit format, like 64. Some Software failures The Patriot Missile o First time used in Gulf war o Used as a defense from Iraqi Scud missiles o Failed several times including one that killed 28 US soldiers in Dhahran, Saudi Arabia Reasons: A small timing error in the system’s clock accumulated to the point that after 14 hours, the tracking system was no longer accurate. In the Dhahran attack, the system had been operating for more than 100 hours. Some Software failures The Space Shuttle Part of an abort scenario for the Shuttle requires fuel dumps to lighten the spacecraft. It was during the second of these dumps that a (software) crash occurred. ...the fuel management module, which had performed one dump and successfully exited, restarted when recalled for the second fuel dump... SOFTWARE METRICS A metric is a quantitative measure of the degree to which a system, component or process possesses a given attribute. A software metric is a measure of software characteristics which are measurable or countable. Software metrics are valuable for many reasons, including measuring software performance, planning work items, measuring productivity , and many other uses. Software Process and Product Metrics Process metrics quantify the attributesof softwaredevelopment whereas product metrics are measures for the software product. • Examples •Process metrics: Productivity, Quality, Efficiency etc. • Product metrics: Size, Reliability, Complexity etc. Software measurement A measure provides a quantitative indication of the extent, dimension, size, capacity, efficiency, productivity or reliability of some attributes of a product or process. Measurement is the act of evaluating a measure. Software Measurement A measurement is a manifestation of the size, quantity, amount, or dimension of a particular attribute of a product or process. Software Measurement Principles: The software measurement process can be characterized by five activities1.Formulation: The derivation of software measures and metrics appropriate for the representation of the software that is being considered. 2.Collection: The mechanism used to accumulate data required to derive the formulated metrics. 3.Analysis: The computation of metrics and the application of mathematical tools. 4.Interpretation: The evaluation of metrics results in insight into the quality of the representation. 5.Feedback: Recommendation derived from the interpretation of product metrics transmitted to the software team. Need for Software Measurement • Create the quality of the current product or process. • Anticipate future qualities of the product or process. • Enhance the quality of a product or process. • Regulate the state of the project concerning budget and schedule. • Enable data-driven decision-making in project planning and control. • Ensure that industry standards and regulations are followed. • Give software products and processes a quantitative basis for evaluation. • Enable the ongoing improvement of software development practices. Classification of Software Measurement • Direct Measurement: In direct measurement, the product, process, or thing is measured directly using a standard scale. • Indirect Measurement: In indirect measurement, the quantity or quality to be measured is measured using related parameters i.e. by use of reference. Software Metrics A metric is a measurement of the level at which any attribute belongs to a system product or process. Software metrics is a quantifiable or countable assessment of the attributes of a software product. There are 4 functions related to software metrics: • Planning • Organizing • Controlling • Improving Characteristics of software Metrics: • Quantitative: Metrics must possess quantitative nature. It means metrics can be expressed in numerical values. • Understandable: Metric computation should be easily understood, and the method of computing metrics should be clearly defined. • Applicability: Metrics should be applicable in the initial phases of the development of the software. • Repeatable: When measured repeatedly, the metric values should be the same and consistent in nature. • Economical: The computation of metrics should be economical. • Language Independent: Metrics should not depend on any programming language. Classification of Software Metrics • Product Metrics: Product metrics are used to evaluate the state of the product, tracing risks and undercover prospective problem areas. The ability of the team to control quality is evaluated. Examples include lines of code, cyclomatic complexity, code coverage, defect density, and code maintainability index. • Process Metrics: Process metrics pay particular attention to enhancing the longterm process of the team or organization. These metrics are used to optimize the development process and maintenance activities of software. Examples include effort variance, schedule variance, defect injection rate, and lead time. • Project Metrics: The project metrics describes the characteristic and execution of a project. Examples include effort estimation accuracy, schedule deviation, cost variance, and productivity.Usually measures• • • • Number of software developer Staffing patterns over the life cycle of software Cost and schedule Productivity Types of Metrics • Internal metrics: Internal metrics are the metrics used for measuring properties that are viewed to be of greater importance to a software developer. For example, Lines of Code (LOC) measure. • External metrics: External metrics are the metrics used for measuring properties that are viewed to be of greater importance to the user, e.g., portability, reliability, functionality, usability, etc. • Hybrid metrics: Hybrid metrics are the metrics that combine product, process, and resource metrics. For example, cost per FP where FP stands for Function Point Metric. • Project metrics: Project metrics are the metrics used by the project manager to check the project's progress. Data from the past projects are used to collect various metrics, like time and cost; these estimates are used as a base of new software. Note that as the project proceeds, the project manager will check its progress from time-to-time and will compare the effort, cost, and time with the original effort, cost and time. Advantages of Software Metrics : 1.Reduction in cost or budget. 2.It helps to identify the particular area for improvising. 3.It helps to increase the product quality. 4.Managing the workloads and teams. 5.Reduction in overall time to produce the product,. 6.It helps to determine the complexity of the code and to test the code with resources. 7.It helps in providing effective planning, controlling and managing of the entire product. Disadvantages of Software Metrics : 1.It is expensive and difficult to implement the metrics in some cases. 2.Performance of the entire team or an individual from the team can’t be determined. Only the performance of the product is determined. 3.Sometimes the quality of the product is not met with the expectation. 4.It leads to measure the unwanted data which is wastage of time. 5.Measuring the incorrect data leads to make wrong decision making. Project Monitoring and Control • Monitoring and Controlling are processes needed to track, review, and regulate the progress and performance of the project. It also identifies any areas where changes to the project management method are required and initiates the required changes. CONT… • Monitor and control project work: The generic step under which all other monitoring and controlling activities fall under. • Perform integrated change control: The functions involved in making changes to the project plan. When changes to the schedule, cost, or any other area of the project management plan are necessary, the program is changed and re-approved by the project sponsor. • Validate scope: The activities involved with gaining approval of the project's deliverables. • Control scope: Ensuring that the scope of the project does not change and that unauthorized activities are not performed as part of the plan. • Control schedule: The functions involved with ensuring the project work is performed according to the schedule, and that project deadlines are met. CONT… • Control costs: The tasks involved with ensuring the project costs stay within the approved budget. • Control quality: Ensuring that the quality of the projects deliverables is to the standard defined in the project management plan. • Control communications: Providing for the communication needs of each project stakeholder. • Control Risks: Safeguarding the project from unexpected events that negatively impact the project's budget, schedule, stakeholder needs, or any other project success criteria. • Control procurements: Ensuring the project's subcontractors and vendors meet the project goals. • Control stakeholder engagement: The tasks involved with ensuring that all of the project's stakeholders are left satisfied with the project work. Software Life Cycle Models The goal of Software Engineering is to provide models and processes that lead to the production of well-documented maintainable software in a manner that is predictable. Software development life cycle (SDLC) is a structured process that is used to design, develop, and test good-quality software. SDLC, or software development life cycle, is a methodology that defines the entire procedure of software development step-by-step. Stages of the Software Development Life Cycle Model What are the main phases of SDLC? • The main phases of SDLC include Requirements, Design, Implementation (Coding), Testing, Deployment and Maintenance. These phases represent the stages a software project goes through from initiation to completion. Chief Technology Officer Stage 1: Planning and Requirement Analysis • Requirement analysis is the most important and fundamental stage in SDLC. It is performed by the senior members of the team with inputs from the customer, the sales department, market surveys and domain experts in the industry. This information is then used to plan the basic project approach and to conduct product feasibility study in the economical, operational and technical areas. • Planning for the quality assurance requirements and identification of the risks associated with the project is also done in the planning stage. The outcome of the technical feasibility study is to define the various technical approaches that can be followed to implement the project successfully with minimum risks. Functional Requirements Non Functional Requirements A functional requirement defines a system or its component. A non-functional requirement defines the quality attribute of a software system. It specifies “What should the software system do?” It places constraints on “How should the software system fulfill the functional requirements?” Functional requirement is specified by User. Non-functional requirement is specified by technical peoples e.g. Architect, Technical leaders and software developers. It is captured in use case. It is captured as a quality attribute. Defined at a component level. Applied to a system as a whole. Helps you verify the functionality of the software. Helps you to verify the performance of the software. Functional Testing like System, Integration, End to End, Non-Functional Testing like Performance, Stress, API (application programming interface) testing, Usability, Security testing, etc are done. etc are done. Example 1) Authentication of user whenever he/she logs into the system. 2) System shutdown in case of a cyber attack. 3) A Verification email is sent to user whenever he/she registers for the first time on some software system. Example 1) Emails should be sent with a latency of no greater than 12 hours from such an activity. 2) The processing of each request should be done within 10 seconds 3) The site should load in 3 seconds when the number of simultaneous users are > 10000 SRS • A software requirements specification (SRS) is a detailed description of a software system to be developed with its functional and nonfunctional requirements. The SRS is developed based the agreement between customer and contractors. It may include the use cases of how user is going to interact with software system. • 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. 1. Introduction 1.1 Purpose 1.2 Intended Audience 1.3 Intended Use 1.4 Product Scope 1.5 Definitions and Acronyms 2. Overall Description 2.1 User Needs 2.2 Assumptions and Dependencies 3. System Features and Requirements 3.1 Functional Requirements 3.2 External Interface Requirements 3.3 System Features 3.4 Nonfunctional Requirements Quality Characteristics of a good SRS • Complete: The SRS should include all the requirements for the software system, including both functional and non-functional requirements. • Consistent: The SRS should be consistent in its use of terminology and formatting, and should be free of contradictions. • Unambiguous: The SRS should be clear and specific, and should avoid using imprecise language. • Verifiable: The SRS should be verifiable, which means that the requirements can be tested and validated to ensure that they are being met. • Modifiable: The SRS should be modifiable, so that it can be updated and changed as the software development process progresses. CONT… • Testable: The SRS should be written in a way that allows the requirements to be tested and validated. • Relevant: The SRS should be relevant to the software system that is being developed, and should not include unnecessary or irrelevant information. • Human-readable: The SRS should be written in a way that is easy for non-technical stakeholders to understand and review. • Aligned with business goals: The SRS should be aligned with the overall business goals and objectives of the organization, so that the software system meets the needs of the business. Stage 3: Designing the Product Architecture • SRS is the reference for product architects to come out with the best architecture for the product to be developed. Based on the requirements specified in SRS, usually more than one design approach for the product architecture is proposed and documented in a DDS - Design Document Specification. • This DDS is reviewed by all the important stakeholders and based on various parameters as risk assessment, product robustness, design modularity, budget and time constraints, the best design approach is selected for the product. • A design approach clearly defines all the architectural modules of the product along with its communication and data flow representation with the external and third party modules. The internal design of all the modules of the proposed architecture should be clearly defined with the minutest of the details in DDS. Stage 4: Building or Developing the Product • In this stage of SDLC the actual development starts and the product is built. The programming code is generated as per DDS during this stage. If the design is performed in a detailed and organized manner, code generation can be accomplished without much hassle. • Developers must follow the coding guidelines defined by their organization and programming tools like compilers, interpreters, debuggers, etc. are used to generate the code. Different high level programming languages such as C, C++, Pascal, Java and PHP are used for coding. The programming language is chosen with respect to the type of software being developed. Stage 5: Testing the Product • This stage is usually a subset of all the stages as in the modern SDLC models, the testing activities are mostly involved in all the stages of SDLC. However, this stage refers to the testing only stage of the product where product defects are reported, tracked, fixed and retested, until the product reaches the quality standards defined in the SRS. Stage 6: Deployment in the Market and Maintenance • Once the product is tested and ready to be deployed it is released formally in the appropriate market. Sometimes product deployment happens in stages as per the business strategy of that organization. The product may first be released in a limited segment and tested in the real business environment (UAT- User acceptance testing). • Then based on the feedback, the product may be released as it is or with suggested enhancements in the targeting market segment. After the product is released in the market, its maintenance is done for the existing customer base. Software Development Life Cycle Models SDLC-Waterfall Model • The Waterfall Model was the first Process Model to be introduced. It is also referred to as a linear-sequential life cycle model. It is very simple to understand and use. In a waterfall model, each phase must be completed before the next phase can begin and there is no overlapping in the phases. • This model is easy to understand and reinforces the notion of “define before design” and “design before code”. Waterfall Model Requirement Analysis & Specification Design This model is named “waterfall model” because its diagrammatic representation resembles a cascade of waterfalls. Implementation and unit testing Integration and system testing Operationand maintenance •Requirement Gathering and analysis − All possible requirements of the system to be developed are captured in this phase and documented in a requirement specification document. •System Design − The requirement specifications from first phase are studied in this phase and the system design is prepared. This system design helps in specifying hardware and system requirements and helps in defining the overall system architecture. •Implementation − With inputs from the system design, the system is first developed in small programs called units, which are integrated in the next phase. Each unit is developed and tested for its functionality, which is referred to as Unit Testing. •Integration and Testing − All the units developed in the implementation phase are integrated into a system after testing of each unit. Post integration the entire system is tested for any faults and failures. •Deployment of system − Once the functional and nonfunctional testing is done; the product is deployed in the customer environment or released into the market. •Maintenance − There are some issues which come up in the client environment. To fix those issues, patches are released. Also to enhance the product some better versions are released. Maintenance is done to deliver these changes in the customer environment. When to use SDLC Waterfall Model? • When the requirements are constant and not changed regularly. • A 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. Waterfall Model - Advantages • 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. Waterfall Model - Disadvantages •High amounts of risk and uncertainty. •Not a good model for complex and object-oriented projects. •Poor model for long and ongoing projects. •Not suitable for the projects where requirements are at a moderate to high risk of changing. So, risk and uncertainty is high with this process model. •It is difficult to measure progress within stages. •Cannot accommodate changing requirements. •Adjusting scope during the life cycle can end a project. Prototype Model The prototyping model is a systems development method in which a prototype is built, tested and then reworked as necessary until an acceptable outcome is achieved from which the complete system or product can be developed. Steps of Prototype Model 1.Requirement Gathering and Analyst 2.Quick Decision 3.Build a Prototype 4.Assessment or User Evaluation 5.Prototype Refinement 6.Engineer Product Step 1: Requirement Gathering and Analysis: This is the initial step in designing a prototype model. In this phase, users are asked about what they expect or what they want from the system. Step 2: Quick Design: This is the second step in Prototyping Model. This model covers the basic design of the requirement through which a quick overview can be easily described. Step 3: Build a Prototype: This step helps in building an actual prototype from the knowledge gained from prototype design. Step 4: Initial User Evaluation: This step describes the preliminary testing where the investigation of the performance model occurs, as the customer will tell the strength and weaknesses of the design, which was sent to the developer. Step 5: Refining Prototype: If any feedback is given by the user, then improving the client’s response to feedback and suggestions, the final system is approved. Step 6: Implement Product and Maintain: This is the final step in the phase of the Prototyping Model where the final system is tested and distributed to production, here the program is run regularly to prevent failures. Advantages of the prototyping model Using a prototype model can bring multiple advantages, including the following: •Customers get a say in the product early on, increasing customer satisfaction. •Missing functionality and errors are detected easily. •Prototypes can be reused in the future, for more complicated projects. •It emphasizes team communication and flexible design practices. •Users have a better understanding of how the product works. •Quicker customer feedback provides a better idea of customer needs. Disadvantages of the prototyping model The main disadvantage of this methodology is that it is more costly in terms of time and money when compared to alternative development methods, such as the spiral or Waterfall model. Since in most cases the prototype is discarded, some companies may not see the value in taking this approach. Incremental Process Models They are effective in the situations where requirements are defined precisely and there is no confusion about the functionality of the final product. After every cycle a useable product is given to the customer. Popular particularly when we have to quickly deliver a limited functionality system. Incremental: An incremental approach breaks the software development process down into small, manageable portions known as increments. Each increment builds on the previous version so that improvements are made step by step. A, B, and C are modules of Software Products that are incrementally developed and delivered. • Incremental Model is a process of software development where requirements 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 achieved. Incremental Model: •Early Delivery: Incremental development allows for the early delivery of functional parts of the system, providing tangible benefits to clients sooner in the project timeline. •Partial Functionality: Clients can start using and benefiting from partial functionality earlier, which can be crucial in projects where rapid deployment of certain features is essential. •Easier Management: Each increment can be managed as a standalone project, simplifying control and monitoring of progress. Types of Incremental Model 1. Staged Delivery Model 2. Parallel Development Model When we use the Incremental Model? • When the requirements are superior. • A project has a lengthy development schedule. • When Software team are not very well skilled or trained. • When the customer demands a quick release of the product. • You can develop prioritized requirements first. Advantages of Incremental Process Model 1.Prepares the software fast. 2.Clients have a clear idea of the project. 3.Changes are easy to implement. 4.Provides risk handling support, because of its iterations. 5.Adjusting the criteria and scope is flexible and less costly. 6.Comparing this model to others, it is less expensive. 7.The identification of errors is simple. Disadvantages of Incremental Process Model 1.A good team and proper planned execution are required. 2.Because of its continuous iterations the cost increases. 3.Issues may arise from the system design if all needs are not gathered upfront throughout the duration of the program lifecycle. 4.Every iteration step is distinct and does not flow into the next. 5.It takes a lot of time and effort to fix an issue in one unit if it needs to be corrected in all the units. Iterative Enhancement Model This model has the same phases as the waterfall model, but with fewer restrictions. Generally the phases occur in the same order as in the waterfall model, but they may be conducted in several cycles. Useable product is released at the end of the each cycle, with each release providing additional functionality. ✓ Customers and developers specify as many requirements as possible and prepare a SRS document. ✓ Developers and customers then prioritize these requirements ✓ Developers implement the specified requirements in one or more cycles of design, implementation and test based on the defined priorities. Iterative Enhancement Model •Iterative: An iterative model means software development activities are systematically repeated in cycles known as iterations. • A new version of the software is produced after each iteration until the optimal product is achieved. Iterative Model: •Flexibility: Iterative development is highly flexible and adaptive to changes in requirements, making it suitable for projects with evolving or uncertain needs. •Continuous Improvement: The iterative approach allows for continuous refinement of the software through successive cycles, resulting in a potentially more polished end product. •Client Involvement: Regular feedback cycles involve clients throughout the development process, ensuring that the product aligns closely with their expectations. Advantages of Iterative Enhancement Model •Adaptation to changing requirements is made possible by its flexibility in accomodating modifications and improvement during each iteration. •Early software iterations provide clients with functional portions of the product, facilitating prompt feedback and validation. •Problems and risks can be identified and addressed early in the developement process, reduces chances of issue for future stages. •Feedback and constant client involvement are encouraged to make sure the finished product lives up to user expectations. •Every iteration is put through testing and improvement, leading to higher quality product. Disadvantages of Iterative Enhancement Model •Especially in larger projects, managing several iterations at once can add complexity. •Higher cost •Due to constant changes, there may be delays in documentation, making it more difficult to maintain comprehensive documentation. •Continuous customer engagement may not be possible in all scenarios, which impacts the effectiveness of the model. Aspect Development Approach Iterative Model Incremental Model (Iterative Enhanced Model) Repetitive cycles with continuous refinement Delivering the software in functional parts Highly flexible and adaptive to changes Offers flexibility but less than iterative Testing is integrated throughout the cycle Testing is done for each increment Complete features are developed in each iteration Features are delivered incrementally Risk Management Risks are identified and addressed in each cycle Risks are managed as increments are delivered Client Feedback Feedback is collected and incorporated regularly Feedback is obtained after each increment Project Visibility Provides a clearer view of the project’s progress Offers visible progress with each delivered increment Dependencies can be identified and resolved in each iteration Dependencies between increments need careful management Completion Time May take longer to deliver the complete product Allows for partial delivery in shorter timeframes Example Analogy Writing a draft and refining it multiple times Building a house floor by floor Flexibility Testing Delivery of Features Dependency Management Spiral Model Important software projects have failed because project risks were neglected & nobody was prepared when something unforeseen happened. Barry Boehm recognized this and tired to incorporate the “project risk” factor into a life cycle model. The result is the spiral model, which was presented in 1986. Spiral Model Spiral Model The radial dimension of the model represents the cumulative costs. Each path around the spiral is indicative of increased costs. The angular dimension represents the progress made in completing each cycle. Each loop of the spiral from X-axis clockwise through 360o represents one phase. One phase is split roughly into four sectors of major activities. ▪ Planning: Determination of objectives, alternatives & constraints. ▪ Risk Analysis: Analyze alternatives and attempts to identify and resolve the risks involved. ▪ Development: Product development and testing product. ▪ Assessment: Customer evaluation Spiral Model ▪ An important feature of the spiral model is that each phase is completed with a review by the people concerned with the project (designers and programmers) ▪ The advantage of this model is the wide range of options to accommodate the good features of other life cycle models. The spiral model has some difficulties that need to be resolved before it can be a universally applied life cycle model. These difficulties include lack of explicit process guidance in determining, objectives, constraints, alternatives; relying on risk assessment expertise; and provides more flexibility than required for many applications. When to use Spiral Model? •When deliverance is required to be frequent. •When the project is large •When requirements are unclear and complex •When changes may require at any time •Large and high budget projects Advantages •High amount of risk analysis •Useful for large and mission-critical projects. Disadvantages •Can be a costly model to use. •Risk analysis needed highly particular expertise •Doesn't work well for smaller projects. Agile Model The agile model was mainly designed to adapt to changing requests quickly. The main goal of the Agile model is to facilitate quick project completion. The agile model refers to a group of development processes. These processes have some similar characteristics but also possess certain subtle differences among themselves. The Agile Model is an incremental and iterative process of software development. It defines each iteration’s number, duration, and scope in advance. Phases of Agile Model: Following are the phases in the Agile model are as follows: 1.Requirements gathering 2.Design the requirements 3.Construction/ iteration 4.Testing/ Quality assurance 5.Deployment 6.Feedback Agile Modeling (AM) is a collection of values, principles, and practices for modeling software that can be applied on a software development project in an effective and lightweight manner. A Graphical illustration of the Agile Model Agile Manifesto principles • Individuals and interactions − In Agile development, self-organization and motivation are important, as are interactions like co-location and pair programming. • Working software − Demo working software is considered the best means of communication with the customers to understand their requirements, instead of just depending on documentation. • Customer collaboration − As the requirements cannot be gathered completely in the beginning of the project due to various factors, continuous customer interaction is very important to get proper product requirements. • Responding to change − Agile Development is focused on quick responses to change and continuous development. When to use the Agile Model? •When frequent changes are required. •When a highly qualified and experienced team is available. •When a customer is ready to have a meeting with a software team all the time. •When project size is small. Advantage(Pros) of Agile Method: 1.Frequent Delivery 2.Face-to-Face Communication with clients. 3.Efficient design and fulfils the business requirement. 4.Anytime changes are acceptable. 5.It reduces total development time. Disadvantages(Cons) of Agile Model: 1.Due to the shortage of formal documents, it creates confusion and crucial decisions taken throughout various phases can be misinterpreted at any time by different team members. 2.Due to the lack of proper documentation, once the project completes and the developers allotted to another project, maintenance of the finished project can become a difficulty.