Software Process.docx
Document Details

Uploaded by SimplifiedLaplace
Full Transcript
Software Processes A software process is a structured set of activities required to develop a software system. There are many different software processes, but all involve specification, design and implementation, validation, and evolution. A software process model is an abstract representation of a...
Software Processes A software process is a structured set of activities required to develop a software system. There are many different software processes, but all involve specification, design and implementation, validation, and evolution. A software process model is an abstract representation of a process, presenting a description of a process from a particular perspective. When describing and discussing processes, activities, ordering, products, roles, and pre- and post-conditions may be included. Plan-driven processes have all process activities planned in advance, while agile processes have incremental planning and are easier to change to reflect changing customer requirements. Most practical processes include elements of both plan-driven and agile approaches. There are no right or wrong software processes. There are different software process models, including the waterfall model, incremental development, and integration and configuration. Most large systems are developed using a process that incorporates elements from all of these models. The waterfall model consists of separate identified phases such as requirements analysis, system and software design, implementation and unit testing, integration and system testing, and operation and maintenance. The main drawback of the waterfall model is the difficulty of accommodating change after the process is underway due to the inflexible partitioning of the project into distinct stages. Software Development Process The waterfall model is used for large systems engineering projects developed at several sites. Plan-driven nature of the waterfall model helps coordinate work in those circumstances. Incremental development reduces the cost of accommodating changing customer requirements. It is easier to get customer feedback on the development work done. More rapid delivery and deployment of useful software to the customer is possible through incremental development. Incremental development problems include lack of visibility and system structure degradation. Integration and configuration in software development involves software reuse and adapting reused elements to user requirements. Reuse is now the standard approach for building many types of business systems. Advantages of reuse include reduced costs and risks, faster delivery and deployment, but compromises on requirements are inevitable. Loss of control over the evolution of reused system elements is a disadvantage of software reuse. Real software processes involve technical, collaborative, and managerial activities with the overall goal of specifying, designing, implementing, and testing a software system. Process activities like specification, development, validation, and evolution are organized differently in different development processes. Requirements engineering process involves establishing required services and constraints on the system's operation and development. Requirements elicitation and analysis are part of the requirements engineering process. Software Processes Requirements specification is the process of defining the requirements in detail. Requirements validation involves checking the validity of the requirements. Software design is the process of converting the system specification into an executable system. Software implementation can be done through developing a program or configuring an application system. Software validation, including verification and validation (V & V), is intended to show that a system conforms to its specification and meets the requirements of the system customer. Stages of testing include component testing, system testing, and customer testing. Software evolution is the process of adapting and changing software as business circumstances and requirements change. Coping with change is necessary in all large software projects, as business changes and new technologies can lead to new and changed system requirements. Software Development Processes Changing platforms require application changes Change leads to rework which includes re-analysing requirements and implementing new functionality Reducing the costs of rework can be achieved through change anticipation and change tolerance Change anticipation involves activities that can anticipate possible changes before significant rework is required, such as developing a prototype system Change tolerance involves designing the process so that changes can be accommodated at relatively low cost, often through incremental development Coping with changing requirements can be addressed through system prototyping and incremental delivery System prototyping involves developing a version of the system quickly to check customer’s requirements and the feasibility of design decisions Incremental delivery breaks down development and delivery into increments with each delivering part of the required functionality Software prototyping is an initial version of a system used to demonstrate concepts and try out design options, benefiting system usability, user needs, design quality, maintainability, and reduced development effort Prototype development may involve rapid prototyping languages or tools and leaving out functionality to focus on areas of the product not well-understood, with a primary focus on functional requirements Throw-away prototypes should be discarded after development as they are not a good basis for a production system due to tuning challenges, lack of documentation, degraded structure, and failure to meet organizational quality standards. Incremental Development and Delivery in Software Processes Incremental development involves developing the system in increments and evaluating each increment before proceeding to the development of the next increment. This approach is commonly used in agile methods, with evaluation done by user/customer proxy. Incremental delivery entails deploying an increment for use by end-users, providing a more realistic evaluation about practical use of the software. Incremental delivery advantages include delivering customer value with each increment, acting as a prototype to elicit requirements for later increments, lower risk of overall project failure, and giving higher priority system services the most testing. Incremental delivery problems can arise when a system requires a set of basic facilities that are used by different parts of the system. As requirements are not defined in detail until an increment is to be implemented, it can be hard to identify common facilities that are needed by all increments. The conflict between iterative processes and the procurement model of many organizations, where the complete system specification is part of the system development contract, presents a challenge in incremental delivery.