V-model (software development): Difference between revisions

Content deleted Content added
No edit summary
m Reverted edits by 81.77.108.90 (talk): not providing a reliable source (WP:CITE, WP:RS) (HG) (3.4.13)
 
(535 intermediate revisions by more than 100 users not shown)
Line 1:
{{Short description|Software development methodology}}
The V-model is a [[software development model]] which can be presumed to be the extension of the [[waterfall model]]. Instead of moving down in a linear way, the process steps are bent upwards after the [[source code|coding]] phase, to form the typical V shape. The V-Model demonstrates the relationships between each phase of the development life cycle and its associated phase of [[Software testing|testing]].
{{More citations needed|date=September 2018}}
ABDUL RAZZA
[[File:Systems Engineering Process II.svg|thumb|upright=2|The V-model of the Systems Engineering Process<ref name="FHWA 05">[http://www.itsdocs.fhwa.dot.gov/jpodocs/repts_te/14158.htm ''Clarus Concept of Operations.''] {{Webarchive|url=https://web.archive.org/web/20090705102900/http://www.itsdocs.fhwa.dot.gov/jpodocs/repts_te/14158.htm |date=2009-07-05 }} Publication No. FHWA-JPO-05-072, Federal Highway Administration (FHWA), 2005</ref>]]
[[Image:V-model.JPG|''V-model SDLC''|450px|right]]
{{Software development process}}
 
In [[software development]], the '''V-model'''<ref>[[Kevin Forsberg]] and [[Harold Mooz]], "The Relationship of System Engineering to the Project Cycle", in Proceedings of the First Annual Symposium of National Council on System Engineering, October 1991: 57–65.</ref> represents a [[software development process|development process]] that may be considered an extension of the [[waterfall model]] and is an example of the more [[V-model|general V-model]]. Instead of moving down linearly, the process steps are bent upwards after the [[source code|coding]] phase, to form the typical V shape. The V-Model demonstrates the relationships between each phase of the development life cycle and its associated phase of [[Software testing|testing]]. The horizontal and vertical axes represent time or project completeness (left-to-right) and level of abstraction (coarsest-grain abstraction uppermost), respectively.
== Evolution ==
 
== Project definition phases ==
The V-model can be said to have developed as a result of the evolution of software testing. Various testing techniques were defined and various kinds of testing were clearly separated from each other which led to the waterfall model evolving into the V-model. The tests in the descending (Verification) hand are derived directly from their design or requirements counterparts in the ascending (Validation) hand. The ‘V’ can also stand for the terms Verification and Validation.
 
=== VerificationRequirements Phasesanalysis ===
 
In the [[requirements analysis]] phase, the first step in the verification process, the [[requirements]] of the system are collected by analyzing the needs of the [[User (computing)|user(s)]]. This phase is concerned with establishing what the ideal system has to perform. However, it does not determine how the software will be designed or built. Usually, the users are interviewed and a document called the user requirements document is generated.
===Requirements analysis===
 
The user requirements document will typically describe the system's functional, interface, performance, data, security, etc. requirements as expected by the user. It is used by business analysts to communicate their understanding of the system to the users. The users carefully review this document as this document would serve as the guideline for the system designers in the system design phase. The user acceptance tests are designed in this phase. See also [[Functional requirements]].
''Main article [[Requirement]]''
''See also [[Functional requirements]]''
''See also [[Non-functional requirements]]''
 
There are different methods for gathering requirements of both soft and hard methodologies including; interviews, questionnaires, document analysis, observation, throw-away prototypes, [[use case]], and static and dynamic views with users.
In this phase, the requirements of the proposed system are collected by analyzing the needs of the [[User (computing)|user(s)]]. This phase is concerned about establishing what the ideal system has to perform. However, it does not determine how the software will be designed or built. Usually, the users are interviewed and a document called the user requirements document is generated.
The user requirements document will typically describe the system’s functional, physical, interface, performance, data, security requirements etc as expected by the user. It is one which the business analysts use to communicate their understanding of the system back to the users. The users carefully review this document as this document would serve as the guideline for the system designers in the system design phase. The user acceptance tests are designed in this phase.
 
=== System Designdesign ===
 
[[Systems design]] is the phase where system engineers analyze and understand the business of the proposed system by studying the user requirements document. They figure out possibilities and techniques by which the user requirements can be implemented. If any of the requirements are not feasible, the user is informed of the issue. A resolution is found and the user requirement document is edited accordingly.
''Main article [[Systems design]]''
 
The software specification document which serves as a blueprint for the development phase is generated. This document contains the general system organization, menu structures, [[data structure]]s etc. It may also hold example business scenarios, sample windows, and reports to aid understanding. Other technical documentation like entity diagrams, and data dictionaries will also be produced in this phase. The documents for system testing are prepared.
System engineers analyze and understand the business of the proposed system by studying the user requirements document. They figure out possibilities and techniques by which the user requirements can be implemented. If any of the requirements is not feasible, the user is informed of the issue. A resolution is found and the user requirement document is edited accordingly.
 
=== Architecture design ===
The software specification document which serves as a blueprint for the development phase is generated. This document contains the general system organization, menu structures, [[Data structure|data structures]] etc. It may also hold examples business scenarios, sample windows, reports for the better understanding. Other technical documentation like entity diagrams, data dictionary will also be produced in this phase. The documents for system testing is prepared in this phase.
 
The phase of the design of [[computer architecture]] and [[software architecture]] can also be referred to as high-level design. The baseline in selecting the architecture is that it should realize all which typically consists of the list of modules, brief functionality of each module, their [[Interface (computer science)|interface]] relationships, [[Coupling (computer science)|dependencies]], [[database]] [[Table (database)|tables]], architecture diagrams, technology details, etc. The integration testing design is carried out in the particular phase.<ref>
===Architecture Design===
[http://istqbexamcertification.com/what-is-v-model-advantages-disadvantages-and-when-to-use-it/ What is V model - Advantages, disadvantages and when to use it]</ref>
 
=== Module design ===
''See also [[Computer architecture]], [[Software architecture]]''
 
The [[modularity (programming)|module design]] phase can also be referred to as low-level design. The designed system is broken up into smaller units or modules and each of them is explained so that the programmer can start coding directly.
This phase can also be called as high-level design. The baseline in selecting the architecture is that it should realize all the requirements within the given time, cost and resources. Software architecture is commonly represented as two-tier, three-tier or multi-tier models which typically consist of the database layer, user-interface layer and the application layer. The modules and components representing each layer, their inter-relationships, subsystems, operating environment and interfaces are laid out in detail.
The low-level design document or program specifications will contain a detailed functional logic of the [[Modular programming|module]], in [[pseudocode]]:
 
* database tables, with all elements, including their type and size
The output of this phase is the high-level design document which typically consists of the list of modules, brief functionality of each module, their [[Interface (computer science)|interface]] relationships, [[Coupling (computer science)|dependencies]], [[database]] [[Table (database)|tables]], architecture diagrams, technology details etc. The integration testing design is carried out in this phase.
* all interface details with complete [[API]] references
* all dependency issues
* [[error message]] listings
* complete input and outputs for a module.
 
The unit test design is developed in this stage.
===Module Design===
 
== Validation phases ==
''See also [[Modularity (programming)]]''
 
In the V-model, each stage of the design phase has a corresponding stage in the validation phase.<ref>{{cite web |url=http://www.pharmpro.com/Articles/2008/03/GAMP-Standards-For-Validation-Of-Automated-Systems/ |title=GAMP Standards For Validation of Automated Systems |author1=DeSpautz, Joseph |author2=Kenneth S. Kovacs |author3=Gerhard Werling |publisher=Pharmaceutical Processing |date=11 March 2008 |access-date=28 February 2012 |archive-url=https://web.archive.org/web/20120508022817/http://www.pharmpro.com/Articles/2008/03/GAMP-Standards-For-Validation-Of-Automated-Systems/ |archive-date=8 May 2012 |url-status=dead |df=dmy-all }}</ref> The following are the typical phases of validation in the V-Model, though they may be known by other names.
This phase can also be called as low-level design. The designed system is broken up in to smaller units or modules and each of them is explained so that the programmer can start coding directly.
The low level design document or program specifications will contain a detailed functional logic of the [[Module|module]], in [[Pseudocode|pseudocode]] - database tables, with all elements, including their type and size - all interface details with complete [[API]] references- all dependency issues- [[Error message|error message]] listings- complete input and outputs for a module. The unit test design is developed in this stage.
 
=== Unit testing ===
==Coding==
 
In the V-Model, Unit Test Plans (UTPs) are developed during the module design phase. These UTPs are executed to eliminate bugs at the code level or unit level. A unit is the smallest entity that can independently exist, e.g. a program module. Unit testing verifies that the smallest entity can function correctly when isolated from the rest of the codes/units.
''Refer [[software programming]]''
 
=== ValidationIntegration Phasestesting ===
 
Integration Test Plans are developed during the Architectural Design Phase. These tests verify that units created and tested independently can coexist and communicate among themselves. Test results are shared with the customer's team.
===Unit Testing===
 
=== System testing ===
''Main article [[Unit Testing]]''
 
System Tests Plans are developed during the System Design Phase. Unlike Unit and Integration Test Plans, System Test Plans are composed by the client's business team. System Test ensures that expectations from the application developed are met. The whole application is tested for its functionality, interdependency, and communication. System Testing verifies that functional and non-functional requirements have been met. Load and performance testing, stress testing, [[regression testing]], etc., are subsets of system testing.
In the V-model of software development, unit testing implies the first stage of [[dynamic testing]] process. According to software development expert [[Barry Boehm]], a fault discovered and corrected in the unit testing phase is more than a hundred times cheaper than if it is done after delivery to the customer.
 
=== User acceptance testing ===
It involves analysis of the written code with the intention of eliminating errors. It also verifies that the codes are efficient and adheres to the adopted [[Programming style|coding standards]]. Testing is usually [[White box testing|white box]]. It is done using the Unit test design prepared during the module design phase. This may be carried out by software testers, software developers or both.
 
User Acceptance Test (UAT) Plans are developed during the Requirements Analysis phase. Test Plans are composed by business users. UAT is performed in a user environment that resembles the production environment, using realistic data. UAT verifies that the delivered system meets the user's requirement and the system is ready for use in real-time.
===Integration Testing===
 
== Criticism ==
''Main article [[Integration testing]]''
 
The V-Model has been criticized by [[Agile software development|Agile]] advocates and others as an inadequate model of software development for numerous reasons.<ref>[https://www.bdtask.com/blog/v-model-in-software-development "V Model In Software Development"], accessed October 14, 2024 (updated)</ref><ref>[https://web.archive.org/web/20190915230955/http://www.clarotesting.com/page11.htm "The Dangerous & Seductive V Model"], archived version from September 15, 2019</ref><ref>[http://www.exampler.com/testing-com/writings/new-models.pdf "New Models for Test Development"], accessed January 6, 2013</ref> Criticisms include:
In integration testing the separate modules will be tested together to expose faults in the [[Interface (computer science)|interfaces]] and in the interaction between integrated components. Testing is usually [[Black box testing| black box]] as the code is not directly checked for errors. It is done using the integration test design prepared during the architecture design phase. Integration testing is generally conducted by software testers.
 
# It is too simple to accurately reflect the software development process, and can lead managers into a false sense of security. The V-Model reflects a project management view of software development and fits the needs of project managers, accountants and lawyers rather than software developers or users.
===System Testing===
# Although it is easily understood by novices, that early understanding is useful only if the novice goes on to acquire a deeper understanding of the development process and how the V-Model must be adapted and extended in practice. If practitioners persist with their naive view of the V-Model they will have great difficulty applying it successfully.
# It is inflexible and encourages a rigid and linear view of software development and has no inherent ability to respond to change.
# It provides only a slight variant on the [[waterfall model]] and is therefore subject to the same criticisms as that model. It provides greater emphasis on testing, and particularly the importance of early test planning. However, a common practical criticism of the V-Model is that it leads to testing being squeezed into tight windows at the end of development when earlier stages have overrun but the implementation date remains fixed.
# It is consistent with, and therefore implicitly encourages, inefficient and ineffective approaches to testing. It implicitly promotes writing test scripts in advance rather than exploratory testing; it encourages testers to look for what they expect to find, rather than discover what is truly there. It also encourages a rigid link between the equivalent levels of either leg (e.g. user acceptance test plans being derived from user requirements documents), rather than encouraging testers to select the most effective and efficient way to plan and execute testing.
# It lacks coherence and precision. There is widespread confusion about what exactly the V-Model is. If one boils it down to those elements that most people would agree upon it becomes a trite and unhelpful representation of software development. Disagreement about the merits of the V-Model often reflects a lack of shared understanding of its definition.
 
== Current state ==
''Main article [[System testing]]''
 
Supporters of the V-Model argue that it has evolved and supports flexibility and agility throughout the development process.<ref>[https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.640.3024&rep=rep1&type=pdf "Toward Agile Systems Engineering Processes"], accessed August 9, 2022</ref> They argue that in addition to being a highly disciplined approach, it promotes meticulous design, development, and documentation necessary to build stable software products. Lately, it is being adopted by the medical device industry.<ref>{{cite book | chapter-url=https://link.springer.com/chapter/10.1007%2F978-3-642-30439-2_13?LI=true | doi=10.1007/978-3-642-30439-2_13 | chapter=Barriers to Adopting Agile Practices when Developing Medical Device Software | title=Software Process Improvement and Capability Determination | series=Communications in Computer and Information Science | date=2012 | last1=McHugh | first1=Martin | last2=McCaffery | first2=Fergal | last3=Casey | first3=Valentine | volume=290 | pages=141–147 | isbn=978-3-642-30438-5 }}</ref><ref>[http://eprints.dkit.ie/144/ "A Software Process Development, Assessment and Improvement Framework, for the Medical Device Industry "]</ref>
System testing will compare the system specifications against the actual system. The system test design is derived from the system design documents and is used in this phase. Sometimes system testing is [[Test automation|automated]] using testing tools.
Once all the modules are integrated several errors may arise. Testing done at this stage is called system testing.
 
===User AcceptanceSee also Testing===
 
* [[Product lifecycle management]]
''Main article [[Acceptance testing]]''
* [[Systems development life cycle]]
 
== References ==
Acceptance Testing checks the system against the requirements of the user. It uses [[Black box testing|black box testing]] using real data, real people and real documents to ensure ease of use and functionality of systems. Users who understand the business functions run the tests as given in the acceptance [[Test plan|test plans]], including [[Installation (computer programs)|installation]] and [[Online help]]. Hard copies of user documentation are also being reviewed for usability and accuracy. The testers formally document the results of each test, and provide error reports, correction requests to the developers.
{{Reflist}}
 
== Further reading ==
==Benefits==
 
* Roger S. Pressman:''Software Engineering: A Practitioner's Approach'', The McGraw-Hill Companies, {{ISBN|0-07-301933-X}}
The V-model deploys a well-structured method in which each phase can be implemented by the detailed documentation of the previous phase. Testing activities like test designing start at the beginning of the project well before coding and therefore saves a huge amount of the project time.
* Mark Hoffman & Ted Beaumont: ''Application Development: Managing the Project Life Cycle'', Mc Press, {{ISBN|1-883884-45-4}}
* Boris Beizer: ''Software Testing Techniques.'' Second Edition, International Thomson Computer Press, 1990, {{ISBN|1-85032-880-3}}
 
==References==
 
{{Commons category|V-models}}
* Roger S. Pressman:''Software Engineering: A Practitioner's Approach'', The McGraw-Hill Companies, ISBN: 007301933X
* Mark Hoffman & Ted Beaumont: ''Application Development: Managing the Project Life Cycle'', Mc Press, ISBN-10: 1883884454
* Boris Beizer: ''Software Testing Techniques.'' Second Edition, International Thomson Computer Press, 1990, ISBN 1-85032-880-3
 
==External Links==
 
{{Software engineering}}
*[http://www.bucanac.com/documents/The_V-Model.pdf A paper by Christian Bucanac]
*[http://www.iacis.org/iis/2004_iis/PDFfiles/Boggs.pdf The SDLC and SixSigma]
*[http://www.elucidata.com/refs/sdlc.pdf SDLC for small and medium DB applications]
 
{{Interwiki extra|qid=Q1142155}}
==See also==
 
*[[Systems Development Life Cycle]]
{{DEFAULTSORT:V-Model (Software Development)}}
*[[Product lifecycle management]]
[[Category:Software development process]]
{{Uncategorized|date=October 2007}}