Unit 1-Software Engineering PDF
Document Details
Uploaded by Deleted User
Tags
Summary
This document provides an introduction to software engineering, covering its definitions, characteristics, and various types, such as system software, networking software, and business software. It also discusses the evolving role of software and different aspects of software engineering.
Full Transcript
## Unit 1-Software Engineering ### Introduction to Software Engineering Software is - instructions (computer programs) that when executed provide desired function and performance, - data structures that enable the programs to adequately manipulate information, and - documents that describe the ope...
## Unit 1-Software Engineering ### Introduction to Software Engineering Software is - instructions (computer programs) that when executed provide desired function and performance, - data structures that enable the programs to adequately manipulate information, and - documents that describe the operation and use of the programs. Software is a program or set of programs containing instructions that provide desired functionality. And Engineering is the process of designing and building something that serves a particular purpose and finds a cost-effective solution to problems. Computer software is the product that software engineers design and build. Engineering is the application of scientific and practical knowledge to invent, design, build, maintain, and improve frameworks, processes, etc. **s/w=program+ documentation + operating procedure** Operating procedure consists of instruction to setup and use of s/w system and instruction on how to react to system failure. Operating procedure consists of: - user manual - operational manual Documentation manual consists of: - analysis/ specification - specification, context diagram, DFD - Design - flow chart, ER Diagram - Implementation - source code listing, cross ref. listing - Testing - test data, test result A Discipline whose aim is the production of quality software, s/w that is delivered on time, within budget and that satisfies its requirements. Software Engineering is a systematic, disciplined, quantifiable study and approach to the design, development, operation, and maintenance of a software system. ### The Evolving Role of Software #### Dual Role of Software: 1. **As a product** - - It delivers the computing potential across networks of Hardware. - It enables the Hardware to deliver the expected functionality. - It acts as an information transformer because it produces, manages, acquires, modifies, displays, or transmits information. 2. **As a vehicle for delivering a product** - - It provides system functionality (e.g., payroll system) - It controls other software (e.g., an operating system) - It helps build other software (e.g., software tools) ### Software Characteristics:- Software is a logical rather than a physical system element. Therefore, software has characteristics that are considerably different than those of hardware: 1. Software is developed or engineered; it is not manufactured in a classical paradigm. 2. Time and effort for software development are hard to estimate. 3. Software does not wear out. 4. Software construction is human intensive. 5. It has discontinuous operational nature. 6. Software components should be manufactured in such a way that is can be reused for various application. ### Classification of Software The software is used extensively in several domains including hospitals, banks, schools, defense, finance, stock markets, and so on. It can be categorized into different types: #### On the basis of application: 1. **System Software** - System Software is necessary to manage the computer resources and support the execution of application programs. Software like operating systems, compilers, editors and drivers, etc., come under this category. A computer cannot function without the presence of these. Operating systems are needed to link the machine-dependent needs of a program with the capabilities of the machine on which it runs. Compilers translate programs from high-level language to machine language. 2. **Networking and Web Applications Software** - Networking Software provides the required support necessary for computers to interact with each other and with data storage facilities. The networking software is also used when software is running on a network of computers (such as the World Wide Web). It includes all network management software, server software, security and encryption software, and software to develop web-based applications like HTML, PHP, XML, etc. 3. **Embedded Software** - This type of software is embedded into the hardware normally in the Read-Only Memory (ROM) as a part of a large system and is used to support certain functionality under the control conditions. Examples are software used in instrumentation and control applications like washing machines, satellites, microwaves, etc. 4. **Reservation Software** - A Reservation system is primarily is used to store and retrieve information and perform transactions related to air travel, car rental, hotels, or other activities. They also provide access to bus and railway reservations, although these are not always integrated with the main system. These are also used to relay computerized information for users in the hotel industry, making a reservation and ensuring that the hotel is not overbooked. 5. **Business Software** - This category of software is used to support business applications and is the most widely used category of software. Examples are software for inventory management, accounts, banking,. hospitals, schools, stock markets, etc. 6. **Entertainment Software** - Education and entertainment software provides a powerful tool for educational agencies, especially those that deal with educating young children. There is a wide range of entertainment software such as computer games, educational games, translation software, mapping software, etc. 7. **Artificial Intelligence Software** - Software like expert systems, decision support systems, pattern recognition software, artificial neural networks, etc. come under this category. They involve complex problems which are not affected by complex computations using non-numerical algorithms. 8. **Scientific Software** - Scientific and engineering software satisfies the needs of a scientific or engineering user to perform enterprise-specific tasks. Such software is written for specific applications using principles, techniques, and formulae specific to that field. Examples are software like MATLAB, AUTOCAD, PSPICE, ORCAD, etc. 9. **Utilities Software** - The programs coming under this category perform specific tasks and are different from other software in terms of size, cost, and complexity. Examples are anti-virus software, voice recognition software, compression programs, etc. 10. **Document Management Software** - Document Management Software is used to track, manage and store documents in order to reduce the paperwork. Such systems are capable of keeping a record of the various versions created and modified by different users (history tracking). They commonly provide storage, versioning, metadata, security, as well as indexing and retrieval capabilities. ### Software Myths: Most experienced experts have seen myths or superstitions (false beliefs or interpretations) misleading attitudes (naked users) which creates major problems for management and technical people. The opposite types of software-related myths are listed below. #### Types of Myths: - **Management Myths** - **Customer Myths** - **Practitioner's Myths** #### 1. Management Myths: Managers with software responsibility are often under pressure to maintain budgets, keep schedules from slipping, and improve quality. Following are the management myths: - **Myth:** We already have a book that's full of standards and procedures for building software, won't that provide my people with everything they need to know? - **Reality:** The book of standards may very well exist, but isn't used. Most software practitioners aren't aware of its existence. Also, it doesn't reflect modern software engineering practices and is also complete. - **Myth:** My people have state-of-the-art software development tools, after all, we buy them the newest computers. - **Reality:** It takes much more than the latest model mainframe, workstation, or PC to do high-quality software development. Computer-aided software engineering (CASE) tools are more important than hardware for achieving good quality and productivity, yet the majority of software developers still do not use them effectively. - **Myth:** If we get behind schedule, we can add more programmers and catch up (sometimes called the Mongolian horde concept). - **Reality:** Software development is not a mechanistic process like manufacturing. As new people are added, people who were working must spend time educating the newcomers, thereby reducing the amount of time spent on productive development effort. People can be added but only in a planned and well-coordinated manner. - **Myth:** If I decide to outsource the software project to a third party, I can just relax and let that firm build it. - **Reality:** If an organization does not understand how to manage and control software projects internally, it will invariably struggle when it outsources software projects. #### 2. Customer myths: Customer myths lead to false expectations (by the customer) and ultimately, dissatisfaction with the developer. Following are the customer myths: - **Myth:** A general statement of objectives is sufficient to begin writing programs-we can fill in the details later. - **Reality:** A poor up-front definition is the major cause of failed software efforts. A formal and detailed description of the functions, behavior, performance, interfaces, design constraints, and validation criteria is essential. - **Myth:** Project requirements continually change, but change can be easily accommodated because software is flexible. - **Reality:** It is true that software requirements change, but the impact of change varies with the time at which it is introduced. When changes are requested during software design, the cost impact grows rapidly. Resources have been committed and a design framework has been established. Change can cause heavy additional costs. Change, when requested after software is in production, can be much more expensive than the same change requested earlier. #### 3. Practitioner's myths: Practitioners have following myths: - **Myth:** Once we write the program and get it to work, our job is done. - **Reality:** Industry data indicate that between 60 and 80 percent of all effort expended on software will be expended after it is delivered to the customer for the first time. - **Myth:** Until I get the program "running" I have no way of assessing its quality. - **Reality:** One of the most effective software quality assurance mechanisms can be applied from the inception of a project - the formal technical review. - **Myth:** An operating system is the only product that can be successfully exported project. - **Reality:** A working system is not enough, it is just the right document brochures and booklets are also reqd. To provide for guidance & software support. - **Myth:** Software engineering will make us create voluminous and unnecessary documentation and will invariably slow us down. - **Reality:** Software engineering is not about creating documents. It is about creating quality. Better quality leads to reduced rework. And reduced rework results in faster delivery times ### S/w Engineering Definition: **Software engineering**, a definition proposed by Fritz Bauer [*Software engineering is] the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines*] The IEEE [IEE93] has developed a more comprehensive definition when it states: **Software Engineering:** (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1). ### Software engineering is a layered technology: Software engineering_is fully a layered technology, to develop software we need to go from one layer to another. All the layers are connected and each layer demands the fulfillment of the previous layer. - **Tools** - **Method** - **Process** - **A quality focus** ### Layered technology is divided into four parts: 1. **A quality focus:** It defines the continuous process improvement principles of software. It provides integrity that means providing security to the software so that data can be accessed by only an authorized person, no outsider can access the data. It also focuses on maintainability and usability. 2. **Process:** It is the foundation or base layer of software engineering. It is key that binds all the layers together which enables the development of software before the deadline or on time. Process defines a framework that must be established for the effective delivery of software engineering technology. The software process covers all the activities, actions, and tasks required to be carried out for software development. - **communication** - **planning** - **Modelling** - **Construction** - **Deployment** #### **Process activities are listed below:** - **Communication:** It is the first and foremost thing for the development of software. Communication is necessary to know the actual demand of the client. - **Planning:** It basically means drawing a map for reduced the complication of development. - **Modeling:** In this process, a model is created according to the client for better understanding. - **Construction:** It includes the coding and testing of the problem. - **Deployment:** It includes the delivery of software to the client for evaluation and feedback. 3. **Method:** During the process of software development the answers to all "how-to-do" questions are given by method. It has the information of all the tasks which includes communication, requirement analysis, design modeling, program construction, testing, and support. 4. **Tools:** Software engineering tools provide a self-operating system for processes and methods. Tools are integrated which means information created by one tool can be used by another. Software Processes is a coherent set of activities for specifying, designing, implementing and testing software systems. A software process model is an abstract representation of a process that presents a description of a process from some particular perspective. There are many different software processes but all involve: - Specification – defining what the system should do; - Design and implementation – defining the organization of the system and implementing the system; - Validation - checking that it does what the customer wants; - Evolution – changing the system in response to changing customer needs ### What is SDLC? SDLC is a systematic process for building software that ensures the quality and correctness of the software built. SDLC process aims to produce high-quality software that meets customer expectations. The system development should be complete in the pre-defined time frame and cost. SDLC consists of a detailed plan which explains how to plan, build, and maintain specific software. Every phase of the SDLC life Cycle has its own process and deliverables that feed into the next phase. SDLC stands for Software Development Life Cycle and is also referred to as the Application Development life-cycle. Here, are prime reasons why SDLC is important for developing a software system. - It offers a basis for project planning, scheduling, and estimating - Provides a framework for a standard set of activities and deliverables - It is a mechanism for project tracking and control - Increases visibility of project planning to all involved stakeholders of the development process - Increased and enhance development speed - Improved client relations - Helps you to decrease project risk and project management plan overhead ### SDLC Phases The entire SDLC process divided into the following SDLC steps: #### SDLC Phases - Phase 1: Requirement collection and analysis - Phase 2: Feasibility study - Phase 3: Design - Phase 4: Coding - Phase 5: Testing - Phase 6: Installation/Deployment - Phase 7: Maintenance #### Phase 1: Requirement collection and analysis The requirement is the first stage in the SDLC process. It is conducted by the senior team members with inputs from all the stakeholders and domain experts in the industry. Planning for the quality assurance requirements and recognization of the risks involved is also done at this stage. This stage gives a clearer picture of the scope of the entire project and the anticipated issues, opportunities, and directives which triggered the project. Requirements Gathering stage need teams to get detailed and precise requirements. This helps companies to finalize the necessary timeline to finish the work of that system. #### Phase 2: Feasibility study Once the requirement analysis phase is completed the next sdlc step is to define and document software needs. This process conducted with the help of ‘Software Requirement Specification’ document also known as ‘SRS’ document. It includes everything which should be designed and developed during the project life cycle. There are mainly five types of feasibilities checks: - Economic: Can we complete the project within the budget or not? - Legal: Can we handle this project as per cyber law and other regulatory framework/compliances. - Operation feasibility: Can we create operations which is expected by the client? - Technical: Need to check whether the current computer system can support the software - Schedule: Decide that the project can be completed within the given schedule or not. #### Phase 3: Design In this third phase, the system and software design documents are prepared as per the requirement specification document. This helps define overall system architecture. This design phase serves as input for the next phase of the model.There are two kinds of design documents developed in this phase: - **High-Level Design (HLD)** - Brief description and name of each module - An outline about the functionality of every module - Interface relationship and dependencies between modules - Database tables identified along with their key elements - Complete architecture diagrams along with technology details - **Low-Level Design (LLD)** - Functional logic of the modules - Complete detail of the interface - Database tables, which include type and size - Addresses all types of dependency issues - Listing of error messages - Complete input and outputs for every module #### Phase 4: Coding Once the system design phase is over, the next phase is coding. In this phase, developers start build the entire system by writing code using the chosen programming language. In the coding phase, tasks are divided into units or modules and assigned to the various developers. It is the longest phase of the Software Development Life Cycle process. In this phase, Developer needs to follow certain predefined coding guidelines. #### Phase 5: Testing Once the software is complete, and it is deployed in the testing environment. The testing team starts testing the functionality of the entire system. This is done to verify that the entire application works according to the customer requirement. During this phase, QA and testing team may find some bugs/defects which they communicate to developers. The development team fixes the bug and send back to QA for a re-test. This process continues until the software is bug-free, stable, and working according to the business needs of that system. #### Phase 6: Installation/Deployment Once the software testing phase is over and no bugs or errors left in the system then the final deployment process starts. Based on the feedback given by the project manager, the final software is released and checked for deployment issues if any. #### Phase 7: Maintenance Once the system is deployed, and customers start using the developed system, following 3 activities occur - Bug fixing - bugs are reported because of some scenarios which are not tested at all - Upgrade - Upgrading the application to the newer versions of the Software - Enhancement – Adding some new features into the existing software The main focus of this SDLC phase is to ensure that needs continue to be met and that the system continues to perform as per the specification mentioned in the first phase. ### Prescriptive process model The following framework activities are carried out irrespective of the process model chosen by the organization. 1. Communication 2. Planning 3. Modeling 4. Construction 5. Deployment The name 'prescriptive' is given because the model prescribes a set of activities, actions, tasks, quality assurance and change the mechanism for every project. There are three types of prescriptive process models. They are: 1. **The Waterfall Model** 2. **Incremental Process model** 3. **RAD model** #### 1. The 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. #### Waterfall Model - SDLC Waterfall approach was first SDLC Model to be used widely in Software Engineering to ensure success of the project. In "The Waterfall" approach, the whole process of software development is divided into separate phases. In this Waterfall model, typically, the outcome of one phase acts as the input for the next phase sequentially. The following illustration is a representation of the different phases of the Waterfall Model. - **Requirement Analysis** - **System Design** - **Implementation** - **Testing** - **Deployment** - **Maintenance** The sequential phases in Waterfall model are - **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 non-functional 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. All these phases are cascaded to each other in which progress is seen as flowing steadily downwards (like a waterfall) through the phases. The next phase is started only after the defined set of goals are achieved for previous phase and it is signed off, so the name "Waterfall Model". In this model, phases do not overlap. #### Waterfall Model - Application Every software developed is different and requires a suitable SDLC approach to be followed based on the internal and external factors. Some situations where the use of Waterfall model is most appropriate are - Requirements are very well documented, clear and fixed. - Product definition is stable. - Technology is understood and is not dynamic. - Ample resources with required expertise are available to support the product. - There are no ambiguous requirements. - The project is short. #### Waterfall Model - Advantages The advantages of waterfall development are that it allows for departmentalization and control. 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. Development moves from concept, through design, implementation, testing, installation, troubleshooting, and ends up at operation and maintenance. Each phase of development proceeds in strict order. Some of the major advantages of the Waterfall Model are as follows - 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 The disadvantage of waterfall development is that it does not allow much reflection or revision. Once an application is in the testing stage, it is very difficult to go back and change something that was not well-documented or thought upon in the concept stage. The major disadvantages of the Waterfall Model are as follows - No working software is produced until late during the life cycle. - 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. - Integration is done as a "big-bang. at the very end, which doesn't allow identifying any technological or business bottleneck or challenges early. ### RAD (Rapid Application Development) Model RAD is a linear sequential software development process model that emphasizes a concise development cycle using an element based construction approach. If the requirements are well understood and fully functional system within a concise time period. **RAD (Rapid Application Development)** is a concept that products can be developed faster and of higher quality through: - Gathering requirements using workshops or focus groups - Prototyping and early, reiterative user testing of designs - The re-use of software components - A rigidly paced schedule that refers design improvements to the next product version - Less formality in reviews and other team communication #### The various phases of RAD are as follows: 1. **Business Modelling:** The information flow among business functions is defined by answering questions like what data drives the business process, what data is generated, who generates it, where does the information go, who process it and so on. 2. **Data Modelling:** The data collected from business modeling is refined into a set of data objects (entities) that are needed to support the business. The attributes (character of each entity) are identified, and the relation between these data objects (entities) is defined. 3. **Process Modelling:** The information object defined in the data modeling phase are transformed to achieve the data flow necessary to implement a business function. Processing descriptions are created for adding, modifying, deleting, or retrieving a data object. 4. **Application Generation:** Automated tools are used to facilitate construction of the software; even they use the 4th GL techniques. 5. **Testing & Turnover:** Many of the programming components have already been tested since RAD emphasis reuse. This reduces the overall testing time. But the new part must be tested, and all interfaces must be fully exercised. #### When to use RAD Model? - When the system should need to create the project that modularizes in a short span time (2-3 months). - When the requirements are well-known. - When the technical risk is limited. - When there's a necessity to make a system, which modularized in 2-3 months of period. - It should be used only if the budget allows the use of automatic code generating tools. #### Advantage of RAD Model - This model is flexible for change. - In this model, changes are adoptable. - Each phase in RAD brings highest priority functionality to the customer. - It reduced development time. - It increases the reusability of features. #### Disadvantage of RAD Model - It required highly skilled designers. - All application is not compatible with RAD. - For smaller projects, we cannot use the RAD model. - On the high technical risk, it's not suitable. - Required user involvement. ### Following are the evolutionary process models. 1. **The prototyping model** 2. **The spiral model** 3. **Concurrent development model** #### Prototype Model The prototype model requires that before carrying out the development of actual software, a working prototype of the system should be built. A prototype is a toy implementation of the system. A prototype usually turns out to be a very crude version of the actual system, possible exhibiting limited functional capabilities, low reliability, and inefficient performance as compared to actual software. In many instances, the client only has a general view of what is expected from the software product. In such a scenario where there is an absence of detailed information regarding the input to the system, the processing needs, and the output requirement, the prototyping model may be employed. #### Advantage of Prototype Model 1. Reduce the risk of incorrect user requirement 2. Good where requirement are changing/uncommitted 3. Regular visible process aids management 4. Support early product marketing 5. Reduce Maintenance cost. 6. Errors can be detected much earlier as the system is made side by side. #### Disadvantage of Prototype Model 1. An unstable/badly implemented prototype often becomes the final product. 2. Require extensive customer collaboration - Costs customer money - Needs committed customer - Difficult to finish if customer withdraw - May be too customer specific, no broad market 3. Difficult to know how long the project will last. 4. Easy to fall back into the code and fix without proper requirement analysis, design, customer evaluation, and feedback. 5. Prototyping tools are expensive. 6. Special tools & techniques are required to build a prototype. 7. It is a time-consuming process. ### Spiral model: The spiral model, originally proposed by Boehm [BOE88], is an evolutionary software process model that couples the iterative nature of prototyping with the controlled and systematic aspects of the linear sequential model. It provides the potential for rapid development of incremental versions of the software. Using the spiral model, software is developed in a series of incremental releases. It is one of the most important Software Development Life Cycle models, which provides support for Risk Handling. In its diagrammatic representation, it looks like a spiral with many loops. The exact number of loops of the spiral is unknown and can vary from project to project. Each loop of the spiral is called a Phase of the software development process. The exact number of phases needed to develop the product can be varied by the project manager depending upon the project risks. As the project manager dynamically determines the number of phases, so the project manager has an important role to develop a product using the spiral model. The Radius of the spiral at any point represents the expenses(cost) of the project so far, and the angular dimension represents the progress made so far in the current phase. **The below diagram shows the different phases of the Spiral Model:** - 1. Objectives determination and identify alternative solutions - 2. Identify and resolve Risks - 3. Develop next version of the Product - 4. Review and plan for the next Phase Each phase of the Spiral Model is divided into four quadrants as shown in the above figure. The functions of these four quadrants are discussed below- 1. **Objectives determination and identify alternative solutions:** Requirements are gathered from the customers and the objectives are identified, elaborated, and analyzed at the start of every phase. Then alternative solutions possible for the phase are proposed in this quadrant. 2. **Identify and resolve Risks:** During the second quadrant, all the possible solutions are evaluated to select the best possible solution. Then the risks associated with that solution are identified and the risks are resolved using the best possible strategy. At the end of this quadrant, the Prototype is built for the best possible solution. 3. **Develop next version of the Product:** During the third quadrant, the identified features are developed and verified through testing. At the end of the third quadrant, the next version of the software is available. 4. **Review and plan for the next Phase:** In the fourth quadrant, the Customers evaluate the so far developed version of the software. In the end, planning for the next phase is started. #### Risk Handling in Spiral Model A risk is any adverse situation that might affect the successful completion of a software project. The most important feature of the spiral model is handling these unknown risks after the project has started. Such risk resolutions are easier done by developing a prototype. The spiral model supports coping up with risks by providing the scope to build a prototype at every phase of the software development. The Prototyping Model also supports risk handling, but the risks must be identified completely before the start of the development work of the project. But in real life project risk may occur after the development work starts, in that case, we cannot use the Prototyping Model. In each phase of the Spiral Model, the features of the product dated and analyzed, and the risks at that point in time are identified and are resolved through prototyping. Thus, this model is much more flexible compared to other SDLC models. #### Advantages of Spiral Model: Below are some advantages of the Spiral Model. 1. **Risk Handling:** The projects with many unknown risks that occur as the development proceeds, in that case, Spiral Model is the best development model to follow due to the risk analysis and risk handling at every phase. 2. **Good for large projects:** It is recommended to use the Spiral Model in large and complex projects. 3. **Flexibility in Requirements:** Change requests in the Requirements at later phase can be incorporated accurately by using this model. 4. **Customer Satisfaction:** Customer can see the development of the product at the early phase of the software development and thus, they habituated with the system by using it before completion of the total product. #### Disadvantages of Spiral Model: Below are some main disadvantages of the spiral model. 1. **Complex:** The Spiral Model is much more complex than other SDLC models. 2. **Expensive:** Spiral Model is not suitable for small projects as it is expensive. 3. **Too much dependability on Risk Analysis:** The successful completion of the project is very much dependent on Risk Analysis. Without very highly experienced experts, it is going to be a failure to develop a project using this model. 4. **Difficulty in time management:** As the number of phases is unknown at the start of the project, so time estimation is very difficult. #### When to use Spiral Model? - When deliverance is required to be frequent. - When requirements are unclear and complex - When the project is large - When changes may require at any time - Large and high budget projects ### 3. The concurrent development model - The concurrent development model is called as concurrent model. - The communication activity has completed in the first iteration and exits in the awaiting changes state. - The modeling activity completed its initial communication and then go to the underdevelopment state. - If the customer specifies the change in the requirement, then the modeling activity moves from the under development state into the awaiting change state. - The concurrent process model activities moving from one state to another state. #### Advantages of the concurrent development model - This model is applicable to all types of software development processes. - It is easy for understanding and use. - It gives immediate feedback from testing. - It provides an accurate picture of the current state of a project. #### Disadvantages of the concurrent development model - It needs better communication between the team members. This may not be achieved all the time. - It requires to remember the status of the different activities. ### Incremental Model 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. #### The various phases of incremental model are as follows: 1. **Requirement analysis:** In the first phase of the incremental model, the product analysis expertise identifies the requirements. And the system functional requirements are understood by the requirement analysis team. To develop the software under the incremental model, this phase performs a crucial role. 2. **Design & Development:** In this phase of the Incremental model of SDLC, the design of the system functionality and the development method are finished with success. When software develops new practicality, the incremental model uses style and development phase. 3. **Testing:** In the incremental model, the testing phase checks the performance of each existing function as well as additional functionality. In the testing phase, the various methods are used to test the behavior of each task. 4. **Implementation:** Implementation phase enables the coding phase of the development system. It involves the final coding that design in the designing and development phase and tests the functionality in the testing phase. After completion of this phase, the number of the product working is enhanced and upgraded up to the final system product #### 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. #### Advantage of Incremental Model - Errors are easy to be recognized. - Easier to test and debug - More flexible. - Simple to manage risk because it handled during its iteration. - The Client gets important functionality early. #### Disadvantage of Incremental Model - Need for good planning - Total Cost is high. - Well defined module interfaces are needed. #### What are the differences between the Incremental and Evolutionary Software Development Process? In an incremental model, all the requirements are gathered before starting the incremental development process. In the Software Requirement Specification (SRS) document, the scope is defined and fixed based on the requirements. The entire development contract will be defined. However, the minor deviation is possible in the scope but not entirely. In the evolutionary model, it is not the case. After an overall understanding of the system, the development team does not really capture all the requirements but starts with some core or riskier modules. Here the prescribed scope is not defined. Sometimes, the project never converges as the project manager does not know how much time and effort are required if the company signs this project or project contract for the first time. #### Incremental Model 1. The requirements are clear to the development team. 2. The requirements are split into slices, and one by one, slices are picked based on selection criteria. 3. The development of each slice goes into multiple iterations for the refinement of functionality, and in the end, a deliverable product is released. 4. It is called an increment, and in each increment, a deliverable product is given to the user. 5. In this model, requirements do change. But to a certain extend, like the addition and removal of certain functionalities. 6. The development team knows how much has been completed and how much needs to be complete soon. 7. Picking criteria for the incremental model: when the requirements are more or less fixed and clearer to the customer. However, to mitigate risk, the development team involves the customer for feedback, and after each increment, the product is given to the customer for feedback. And feedback is incorporated in the subsequent increments to achieve the final product which satisfies the customer's requirements. #### Evolutionary Model 1. The requirements are not clear, and it evolves during the development cycle. 2. At the initial stage, based on their understanding of the customer's requirements, they developed the core modules and functionalities and delivered them to the customer for feedback. 3. This is called an iteration. In each iteration, they release a working software after performing integration and level of testings. 4. The development team does not know how much has been completed and how much