Software Development Lifecycle Learning Outcomes ✔ LO1 Describe different software development lifecycles. ✔ LO2 Explain the importance of a feasibility study. ✔ LO3 Undertake a software development lifecycle. ✔ LO4 Discuss the suitability of software behavioral design techniques Software Development Lifecycles consist of following activities. ⮚ Planning: “What do we want?” In this stage of SDLC, the team defines the requirements of the new software and determines the cost and resources required. It also details the risks involved and provides sub-plans for softening those risks. In this stage, a Software Requirement Specification document is created. ⮚ Analysis: Requirements Analysis is the process of defining the expectations of the users for an application that is to be built or modified. Requirements analysis involves all the tasks that are conducted to identify the needs of different stakeholders. Therefore requirements analysis means to analyze, document, validate and manage software or system requirements. Highquality requirements are documented, actionable, measurable, testable, traceable, helps to identify business opportunities, and are defined to a facilitate system design. ⮚ Design: Once the analysis is complete, the step of designing takes over, which is basically building the architecture of the project. This step helps remove possible flaws by setting a standard and attempting to stick to it. ⮚ Development & Implementation: The actual task of developing the software starts here with data recording going on in the background. Once the software is developed, the stage of implementation comes in where the product goes through a pilot study to see if it’s functioning properly. ⮚ Testing: The testing stage assesses the software for errors and documents bugs if there are any.(STLC starts here) ⮚ Maintenance: Once the software passes through all the stages without any issues, it is to undergo a maintenance process wherein it will be maintained and upgraded from time to time to adapt to changes. Almost every software development Indian company follows all the six steps, leading to the reputation that the country enjoys in the software market today. Lifecycles Development Models Predictive Models Adaptive Model Waterfall, Prototyping and RAD Spiral, Agile and DSDM 1. Predictive Model ► This approach is generally referred to as the ‘Traditional Model’ since it has been in practice for quite some time now. In the field of Information Technology it is generally referred to as the (Waterfall, Prototyping, RAD). ► It would be ideal to choose the Predictive Model of Software Development when we exactly know what we are building. When there is no ambiguity(doubt, uncertainty) in requirement Waterfall Model would be the most ideal method for Software Development because of the considerable amount of control it gives one the cost and time of the project. ► In a Predictive Model, the exact number of resources required to build the project, the amount of time they will have to work to complete the project and the exact amount of cost that would be required to take the project live to production can be calculated even before the start of the project. ► This greatly helps in planning the finances and resource allocation of the project. This also helps the stakeholders be on top of the expected time of completion of the project. ► Let’s assume that a large corporation is trying to clean its employee portal. The ideal development model for this would be the Predictive Model (Water-Fall Model) because the requirements are already known and could be frozen. i. Waterfall Model The Waterfall Model was first Process Model to be introduced. 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 is the earliest SDLC approach that was used for software development. In “The Waterfall” approach, the whole process of software development is divided into separate phases. The outcome of one phase acts as the input for the next phase sequentially. This means that any phase in the development process begins only if the previous phase is complete. The waterfall model is a sequential design process in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation and Maintenance. As the Waterfall Model illustrates the software development process in a linear sequential flow; hence it is also referred to as a Linear-Sequential Life Cycle Model. ii. Prototyping Model A prototype is an early sample, model, or release of a product built to test a concept or process or to act as a thing to be replicated or learned from. It is a term used in a variety of contexts, including semantics, design, electronics, and software programming. A prototype is generally used to evaluate a new design to enhance precision by system analysts and users. Prototyping serves to provide specifications for a real, working system rather than a theoretical one. In some design workflow models, creating a prototype (a process sometimes called materialization) is the step between the formalization and the evaluation of an idea. For example Marvelapp, Pencil, In vision etc. Prototype for Mobile Assignment 1 Please make a prototype for a website? 1. Sign Up Page 2. Login Page 3. Picture Upload 4. Employee List 5. Employee Search Option iii. RAD (Rapid Application Development) The RAD (Rapid Application Development) model is based on prototyping and iterative development with no specific planning involved. The process of writing the software itself involves the planning required for developing the product. Rapid Application Development focuses on gathering customer requirements through workshops or focus groups, early testing of the prototypes by the customer using iterative concept, reuse of the existing prototypes (components), continuous integration and rapid delivery. Fig: RAD Description 2. Adaptive Model ► When we are developing a new Software Product which is first of its kind, it is impossible to freeze on the requirements and hence choosing a Predictive Development Model would not be a great idea. ► This is where the ‘Adaptive Development Model’ comes into play. Adaptive Model is also referred to as ‘Agile Method’ or ‘Iterative Method’ e.g. ( Spiral, Agile, DSDM). ► The Adaptive Model allows the liberty of not having the freeze on the complete set of requirements before the start of the project. Usually agile / iterative models have a certain resource pool allocated to the project and they work on software development following the iterative approach. ► In the Agile / Iterative approach, the project is divided into smaller units called as user stories which are independent of one another. These User stories are added to a Product Backlog and the development team works on each of the User stories based on priorities. ► This Agile approach allows the Stakeholders to add the User stories for the first one or two sprints and kick-start the project. As the project proceeds the stake-holders can add the User Stories necessary for the further sprints. This would allow them to account for any iterative changes or any new / change requirements that might come up during the process. ► Consider the example of Uber or Airbnb, these companies were the first to come up with a product / service in their corresponding industries. It would be completely impossible for them to extrapolate and determine how their product would look like once the development is complete. ► This is because they might have to account for a lot of customer feedback and demographic customizations as they expand across territories. For such projects going with an Adaptive Development Approach would be more successful. i . Spiral Model The development team in Spiral-SDLC model starts with a small set of requirement and goes through each development phase for those set of requirements. The software engineering team adds functionality for the additional requirement in every-increasing spirals until the application is ready for the production phase. ► Each phase of Spiral Model is divided into four quadrants as shown in the above figure. The functions of these four quadrants are discussed below- ► 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. ► 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 is identified and the risks are resolved using the best possible strategy. At the end of this quadrant, Prototype is built for the best possible solution. ► 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. ► 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. ii. DSDM (Dynamic System Development Method) ► DSDM is an agile software development methodology. It is an iterative, incremental approach that is largely based on the Rapid Application Development (RAD ) methodology. The method provides a four-phase framework consisting of: Feasibility and business study. Functional model / prototype iteration. ► Dynamic Systems Development Method (DSDM) is a framework based originally around Rapid Application Development (RAD), supported by its continuous user involvement in an iterative development and incremental approach which is responsive to changing requirements, in order to develop a system that meets the business needs on time and on budget. It is one of a number of Agile methods for developing software and forms part of the Agile Alliance. Principles of DSDM ► There are 9 underlying principles of DSDM consisting of four foundations and five startingpoints for the structure of the method. These principles form the cornerstones of development using DSDM. ► User involvement is the main key in running an efficient and effective project, where both users and developers share a workplace, so that the decisions can be made accurately. ► The project team must be empowered to make decisions that are important to the progress of the project, without waiting for higher-level approval. ► DSDM focuses on frequent delivery of products, with assumption that to deliver something "good enough" earlier is always better than to deliver everything "perfectly" in the end. By delivering product frequently from an early stage of the project, the product can be tested and reviewed where the test record and review document can be taken into account at the next iteration or phase. ► The main criteria for acceptance of deliverable in DSDM is on delivering a system that addresses the current business needs. It is not so much directed at delivering a perfect system addressing all possible business needs, but focuses its efforts on critical functionality. ► Development is iterative and incremental, driven by users’ feedback to converge on an effective business solution. ► All changes during the development are reversible. ► The high level scope and requirements should be base-lined before the project starts. ► Testing is carried out throughout the project life-cycle. ► Communication and cooperation among all project stakeholders is required to be efficient and effective. The Phases of DSDM The DSDM framework consists of three sequential phases, namely the preproject, project life-cycle and post-project phases. The project phase of DSDM is the most elaborate of the three phases. The project life-cycle phase consists of 5 stages that form an iterative step-by-step approach in developing an IS. The three phases and corresponding stages are explained extensively in the subsequent sections. For each stage/phase, the most important activities are addressed and the deliverables are mentioned. Phase 1:In the pre-project phase candidate projects are identified, project funding is realized and project commitment is ensured. Handling these issues at an early stage avoids problems at later stages of the project. Phase 2: The Project life-cycle The process overview in the figure above shows the project life-cycle of this phase of DSDM. It depicts the 5 stages a project will have to go through to create an IS. The first two stages, the Feasibility Study and Business Study are sequential phases that complement to each other. After these phases have been concluded, the system is developed iteratively and incrementally in the Functional Model Iteration, Design & Build Iteration and Implementation stages. The iterative and incremental nature of DSDM will be addressed further in a later section. ► Feasibility Study ► Business Study ► Functional Model Iteration ► Design and Build Iteration ► Implementation Phase 3: Post-project The post-project phase ensures the system operating effectively and efficiently. This is realized by maintenance, enhancements and fixes according to DSDM principles. The maintenance can be viewed as continuing development based on the iterative and incremental nature of DSDM. Instead of finishing the project in one cycle usually the project can return to the previous phases or stages so that the previous step and the deliverable products can be refined. iii. Agile What is Agile? ► Agile is the ability to create and respond to change. It is a way of dealing with, and ultimately succeeding in, an uncertain and turbulent environment. ► The authors of the Agile Manifesto chose “Agile” as the label for this whole idea because that word represented the adaptiveness and response to change which was so important to their approach. ► It's really about thinking through how you can understand what's going on in the environment that you're in today, identify what uncertainty you're facing, and figure out how you can adapt to that as you go along. ► What is Agile Software Development? ► Agile software development is more than frameworks such as Scrum, Extreme Programming or Feature-Driven Development (FDD). ► Agile software development is more than practices such as pair programming, test-driven development, stand-ups, planning sessions and sprints. Agile Manifesto ✔ Individuals and interactions over processes and tools. ✔ Working software over comprehensive documentation. ✔ Customer collaboration over contract negotiation. ✔ Responding to change over following a plan. Assignment 2 Write 5 stories/requirements for a product you want to develop? Login: 3.Lifecycle stage and connectivity: Feasibility study, analysis, design, implementation, testing, review or analysis, design, implementation, maintenance, planning; requirements traceability. 4. Test and integration: ✔ Building test environments; ✔ Developing test harnesses; ✔ Black box/white box testing; ✔ Incremental testing; acceptance test and integration approaches; changeover strategies, ✔ Trials and Go-Live prerequisites Types of Environment Develop Environment: A development environment is a collection of procedures and tools for developing, testing and debugging an application or program. The development environment normally has three server tiers, called development, staging and production. All three tiers together are usually referred to as the DSP. Development Server: Here is where the developer tests code and checks whether the application runs successfully with that code. Once the application has been tested and the developer feels that the code is working fine, the application then moves to the staging server. Staging Server: This environment is made to look exactly like the production severer environment. The application is tested on the staging server to check for reliability and to make sure it does not fail on the actual production server. This type of testing on the staging server is the final step before the application could be deployed on a production server. The application needs to be approved in order to deploy it on the production server. For example staging.abc.com QA Server: QA server is where you test your upgrade procedure against data, hardware, and software that closely simulate the Production environment and where you allow intended users to test the resulting Wave set application. For example: https://qa.abc.com Production Server: Once the approval is done, the application then becomes a part of this server. For example www.abc.com Test harness ► In software development, a test harness is a collection of software and test data used by developers to unit test software models during development. A test harness will specifically refer to test drivers and stubs, which are programs that interact with the software being tested. Once a test harness is used to execute a test, they can also utilize a test library to generate reports. ► Test harnesses are made up of test execution engines and test script repositories. A test execution engine is the software used to perform the test, not the software being tested. The test script repository is the location where test scripts and cases are stored. Black box and White box testing Incremental Testing ► In this testing, we test each module individually in unit testing phase, and then modules are integrated incrementally and tested to ensure smooth interface and interaction between modules. ► In this approach, every module is combined incrementally, i.e., one by one till all modules or components are added logically to make the required application, instead of integrating the whole system at once and then performing testing on the end product. Integrated modules are tested as a group to ensure successful integration and data flow between modules. ► As in integration testing, the primary focus of doing this testing is to check interface, integrated links, and flow of information between modules. This process is repeated till the modules are combined and tested successfully. Objective of Incremental Test ► To ensure that different modules work together successfully after integration. ► Identify the defects earlier and in each phase. This gives developers an edge to identify where the problem is. Like if testing after M1 and M2 are integrated is successful but when M3 is added, the test fails; this will help the developer in segregating the issue. ► Issues can be fixed in early phase without much rework and in less cost. Acceptance Testing ► ACCEPTANCE TESTING is a level of software testing where a system is tested for acceptability. The purpose of this test is to evaluate the system’s compliance with the business requirements and assess whether it is acceptable for delivery. ► Formal testing with respect to user needs, requirements, and business processes conducted to determine whether or not a system satisfies the acceptance criteria and to enable the user, customers or other authorized entity to determine whether or not to accept the system. Tasks ► ► ► Acceptance Test Plan ✔ Prepare ✔ Review ✔ Rework ✔ Baseline Acceptance Test Cases/Checklist ✔ Prepare ✔ Review ✔ Rework ✔ Baseline Acceptance Test ✔ Perform Who performs it? ► Internal Acceptance Testing (Also known as Alpha Testing) is performed by members of the organization that developed the software but who are not directly involved in the project (Development or Testing). Usually, it is the members of Product Management, Sales and/or Customer Support. ► External Acceptance Testing is performed by people who are not employees of the organization that developed the software. ✔ Customer Acceptance Testing is performed by the customers of the organization that developed the software. They are the ones who asked the organization to develop the software. [This is in the case of the software not being owned by the organization that developed it.] ✔ User Acceptance Testing (Also known as Beta Testing) is performed by the end users of the software. They can be the customers themselves or the customers’ customers. Integration testing ► Integration Testing is defined as a type of testing where software modules are integrated logically and tested as a group. ► A typical software project consists of multiple software modules, coded by different programmers. Integration Testing focuses on checking data communication amongst these modules.