FazBrowse Wikipedia Viewer | Main Page |
Search Wikipedia:
|
Viewing: https://en.wikipedia.org/wiki/Software_testing

Software testing

Contents
Economics
    Ensuring requirements are satisfied
Categories
        Black-box testing
    Installation testing
    Compatibility testing
    Acceptance testing
    Destructive testing
    Usability testing
    Accessibility testing
        Common standards for compliance
    Security testing
    Internationalization and localization
    Development testing
    Output comparison testing
    Property testing
        Agile development
        Sample process
Quality
        Traceability matrix
        Test case
        Test run
    Certifications
Further reading

Part of a series on
Software development

Economics

edit

A study conducted by NIST in 2002 reported that software bugs cost the U.S. economy $59.5 billion annually. More than a third of this cost could be avoided if better software testing was performed.– a defect in the code that causes an undesirable result. Bugs generally slow testing progress and involve programmer assistance to debug and fix.

Not all defects cause a failure. For example, a defect in dead code will not be considered a failure.

A defect that does not cause failure at one point in time may lead to failure later due to environmental changes. Examples of environment change include running on new computer hardware, changes in data, and interacting with different software.

A single defect may result in multiple failure symptoms.

Ensuring requirements are satisfied

edit

Software testing may involve a Requirements gap – can be subjective; something that constitutes sufficient value to one person may not to another.

Although testing for every possible input is not feasible, testing can use combinatorics to maximize coverage while minimizing tests.

Categories

edit

White Box Testing DiagramWhite box testing diagram

White-box testing (also known as clear box testing, glass box testing, transparent box testing, and structural testing) verifies the internal structures or workings of a program, as opposed to the functionality exposed to the end-user. In white-box testing, an internal perspective of the system (the source code), as well as programming skills are used to design test cases. The tester chooses inputs to exercise paths through the code and determines the appropriate outputs. This is analogous to testing nodes in a circuit, e.g., in-circuit testing (ICT).

While white-box testing can be applied at the unit, integration, and system levels of the software testing process, it is usually done at the unit level. It can test paths within a unit, paths between units during integration, and between subsystems during a system–level test. Though this method of test design can uncover many errors or problems, it might not detect unimplemented parts of the specification or missing requirements.

Techniques used in white-box testing include:

  • API testing – testing of the application using public and private APIs (application programming interfaces)
  • Code coverage – creating tests to satisfy some criteria of code coverage (for example, the test designer can create tests to cause all statements in the program to be executed at least once)
  • Fault injection methods – intentionally introducing faults to gauge the efficacy of testing strategies
  • Mutation testing methods
  • Static testing methods

Code coverage tools can evaluate the completeness of a test suite that was created with any method, including black-box testing. This allows the software team to examine parts of a system that are rarely tested and ensures that the most important function points have been tested. Code coverage as a software metric can be reported as a percentage for:

  • Function coverage, which reports on functions executed
  • Statement coverage, which reports on the number of lines executed to complete the test
  • Decision coverage, which reports on whether both the True and the False branch of a given test has been executed

100% statement coverage ensures that all code paths or branches (in terms of control flow) are executed at least once. This is helpful in ensuring correct functionality, but not sufficient since the same code may process different inputs correctly or incorrectly.

Black-box testing

edit

Grey-box testing (American spelling: gray-box testing) involves using knowledge of internal data structures and algorithms for purposes of designing tests while executing those tests at the user, or black-box level. The tester will often have access to both "the source code and the executable binary." Grey-box testing may also include reverse engineering (using dynamic code analysis) to determine, for instance, boundary values or error messages. Manipulating input data and formatting output do not qualify as grey-box, as the input and output are clearly outside of the "black box" that we are calling the system under test. This distinction is particularly important when conducting integration testing between two modules of code written by two different developers, where only the interfaces are exposed for the test.

By knowing the underlying concepts of how the software works, the tester makes better-informed testing choices while testing the software from outside. Typically, a grey-box tester will be permitted to set up an isolated testing environment with activities, such as seeding a database. The tester can observe the state of the product being tested after performing certain actions such as executing SQL statements against the database and then executing queries to ensure that the expected changes have been reflected. Grey-box testing implements intelligent test scenarios based on limited information. This will particularly apply to data type handling, exception handling, and so on.

With the concept of grey-box testing, this "arbitrary distinction" between black- and white-box testing has faded somewhat.

Installation testing

edit

Installation testing is a type of software testing that verifies that users can successfully install and set up software in its intended environments (e.g., operating systems, computer hardware). Most software systems have installation procedures that are needed before they can be used for their main purpose. Installation testing focuses on these procedures and whether they're sufficient for achieving an installed, usable software system. Procedures of this kind may involve full or partial upgrades, and install/uninstall processes.

  • A user must select a variety of options.
  • Dependent files and libraries must be allocated, loaded or located.
  • Valid hardware configurations must be present.
  • Software systems may need connectivity to connect to other software systems.
  • Valid, accurate, and sufficient documentation (e.g., installation guide, user manual, quick reference, README file, etc.) must be present and accessible.

Compatibility testing

edit

Regression testing focuses on finding defects after a major code change has occurred. Specifically, it seeks to uncover software regressions, as degraded or lost features, including old bugs that have come back. Such regressions occur whenever software functionality that was previously working correctly, stops working as intended. Typically, regressions occur as an unintended consequence of program changes, when the newly developed part of the software collides with the previously existing code. Regression testing is typically the largest test effort in commercial software development, due to checking numerous details in prior software features, and even new software can be developed while using some old test cases to test parts of the new design to ensure prior functionality is still supported.

Common methods of regression testing include re-running previous sets of test cases and checking whether previously fixed faults have re-emerged. The depth of testing depends on the phase in the release process and the risk of the added features. They can either be complete, for changes added late in the release or deemed to be risky, or be very shallow, consisting of positive tests on each feature, if the changes are early in the release or deemed to be of low risk.

Acceptance testing

edit

Continuous testing is the process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on the business risks associated with a software release candidate. Continuous testing includes the validation of both functional requirements and non-functional requirements; the scope of testing extends from validating bottom-up requirements or user stories to assessing the system requirements associated with overarching business goals.

Destructive testing

edit

Performance testing is generally executed to determine how a system or sub-system performs in terms of responsiveness and stability under a particular workload. It can also serve to investigate, measure, validate or verify other quality attributes of the system, such as scalability, reliability and resource usage.

Load testing is primarily concerned with testing that the system can continue to operate under a specific load, whether that be large quantities of data or a large number of users. This is generally referred to as software scalability. The related load testing activity of when performed as a non-functional activity is often referred to as endurance testing. Volume testing is a way to test software functions even when certain components (for example a file or database) increase radically in size. Stress testing is a way to test reliability under unexpected or rare workloads. Stability testing (often referred to as load or endurance testing) checks to see if the software can continuously function well in or above an acceptable period.

There is little agreement on what the specific goals of performance testing are. The terms load testing, performance testing, scalability testing, and volume testing, are often used interchangeably.

Real-time software systems have strict timing constraints. To test if timing constraints are met, real-time testing is used.

Usability testing

edit

Usability testing is to check if the user interface is easy to use and understand. It is concerned mainly with the use of the application. This is not a kind of testing that can be automated; actual human users are needed, being monitored by skilled UI designers. Usability testing can use structured models to check how well an interface works. The Stanton, Theofanos, and Joshi (2015) model looks at user experience, and the Al-Sharafat and Qadoumi (2016) model is for expert evaluation, helping to assess usability in digital applications.

Accessibility testing

edit

Accessibility testing is done to ensure that the software is accessible to persons with disabilities. Some of the common web accessibility tests are

  • Ensuring that the color contrast between the font and the background color is appropriate
  • Font Size
  • Alternate Texts for multimedia content
  • Ability to use the system using the computer keyboard in addition to the mouse.

Common standards for compliance

edit

Security testing

edit

Security testing is essential for software that processes confidential data to prevent system intrusion by hackers.

The International Organization for Standardization (ISO) defines this as a "type of testing conducted to evaluate the degree to which a test item, and associated data and information, are protected so that unauthorised persons or systems cannot use, read or modify them, and authorized persons or systems are not denied access to them."

Internationalization and localization

edit

Testing for internationalization and localization validates that the software can be used with different languages and geographic regions. The process of pseudolocalization is used to test the ability of an application to be translated to another language, and make it easier to identify when the localization process may introduce new bugs into the product.

Globalization testing verifies that the software is adapted for a new culture, such as different currencies or time zones.

Actual translation to human languages must be tested, too. Possible localization and globalization failures include:

  • Some messages may be untranslated.
  • Software is often localized by translating a list of strings out of context, and the translator may choose the incorrect translation for an ambiguous source string.
  • Technical terminology may become inconsistent, if the project is translated by several people without proper coordination or if the translator is imprudent.
  • Literal word-for-word translations may sound inappropriate, artificial or too technical in the target language.
  • Untranslated messages in the original language may be hard coded in the source code, and thus untranslatable.
  • Some messages may be created automatically at run time and the resulting string may be ungrammatical, functionally incorrect, misleading or confusing.
  • Software may use a keyboard shortcut that has no function on the source language's keyboard layout, but is used for typing characters in the layout of the target language.
  • Software may lack support for the character encoding of the target language.
  • Fonts and font sizes that are appropriate in the source language may be inappropriate in the target language; for example, CJK characters may become unreadable if the font is too small.
  • A string in the target language may be longer than the software can handle. This may make the string partly invisible to the user or cause the software to crash or malfunction.
  • Software may lack proper support for reading or writing bi-directional text.
  • Software may display images with text that was not localized.
  • Localized operating systems may have differently named system configuration files and environment variables and different formats for date and currency.

Development testing

edit

In software testing, conformance testing verifies that a product performs according to its specified standards. Compilers, for instance, are extensively tested to determine whether they meet the recognized standard for that language.

Output comparison testing

edit

Creating a display expected output, whether as data comparison of text or screenshots of the UI, is sometimes called snapshot testing or Golden Master Testing unlike many other forms of testing, this cannot detect failures automatically and instead requires that a human evaluate the output for inconsistencies.

Property testing

edit

In waterfall development, testing is generally performed after the code is completed, but before the product is shipped to the customer. This practice often results in the testing phase being used as a project buffer to compensate for project delays, thereby compromising the time devoted to testing.

Some contend that the waterfall process allows for testing to start when the development project starts and to be a continuous process until the project finishes.

Agile development

edit

Agile software development commonly involves testing while the code is being written and organizing teams with both programmers and testers and with team members performing both programming and testing.

One agile practice, test-driven software development (TDD), is a way of unit testing such that unit-level testing is performed while writing the product code. Test code is updated as new features are added and failure conditions are discovered (bugs fixed). Commonly, the unit test code is maintained with the project code, integrated in the build process, and run on each build and as part of regression testing. Goals of this continuous integration is to support development and reduce defects.

Even in organizations that separate teams by programming and testing functions, many often have the programmers perform unit testing.

Sample process

edit

The sample below is common for waterfall development. The same activities are commonly found in other development models, but might be described differently.

  • Requirements analysis: testing should begin in the requirements phase of the software development life cycle. During the design phase, testers work to determine what aspects of a design are testable and with what parameters those tests work.
  • Test planning: test strategy, test plan, testbed creation. Since many activities will be carried out during testing, a plan is needed.
  • Test development: test procedures, test scenarios, test cases, test datasets, test scripts to use in testing software.
  • Test execution: testers execute the software based on the plans and test documents then report any errors found to the development team. This part could be complex when running tests with a lack of programming knowledge.
  • Test reporting: once testing is completed, testers generate metrics and make final reports on their test effort and whether the software tested is ready for release.
  • Test result analysis: or defect analysis, is done by the development team usually along with the client, in order to decide what defects should be assigned, fixed, rejected (i.e. found software working properly) or deferred to be dealt with later.
  • Defect retesting: once a defect has been dealt with by the development team, it is retested by the testing team.
  • Regression testing: it is common to have a small test program built of a subset of tests, for each integration of new, modified, or fixed software, in order to ensure that the latest delivery has not ruined anything and that the software product as a whole is still working correctly.
  • Test closure: once the test meets the exit criteria, the activities such as capturing the key outputs, lessons learned, results, logs, documents related to the project are archived and used as a reference for future projects.

Quality

edit

A test plan is a document detailing the approach that will be taken for intended test activities. The plan may include aspects such as objectives, scope, processes and procedures, personnel requirements, and contingency plans. The test plan could come in the form of a single plan that includes all test types (like an acceptance or system test plan) and planning considerations, or it may be issued as a master test plan that provides an overview of more than one detailed test plan (a plan of a plan). A test plan can be, in some cases, part of a wide "test strategy" which documents overall testing approaches, which may itself be a master test plan or even a separate artifact.

Traceability matrix

edit

In software development, a traceability matrix (TM) is a document, usually in the form of a table, used to assist in determining the completeness of a relationship by correlating any two baselined documents using a many-to-many relationship comparison. It is often used with high-level requirements (these often consist of marketing requirements) and detailed requirements of the product to the matching parts of high-level design, detailed design, test plan, and test cases.

Test case

edit

The software, tools, samples of data input and output, and configurations are all referred to collectively as a test harness.

Test run

edit

A test run is a collection of test cases or test suites that the user is executing and comparing the expected with the actual results. Once complete, a report or all executed tests may be generated.

Certifications

edit
Kaner, Cem; Falk, Jack; Nguyen, Hung Quoc (1999). Testing Computer Software (2nd ed.). New York: John Wiley and Sons. ISBN 978-0-471-35846-6.
  • ↑ Cohn, Mike (2009). Succeeding with Agile: Software Development Using Scrum. Addison-Wesley Professional. ISBN 978-0321579362.
  • ↑ "The Economic Impacts of Inadequate Infrastructure for Software Testing" (PDF). National Institute of Standards and Technology. May 2002. Retrieved December 19, 2017.
  • ↑ IEEE Standard Glossary of Software Engineering Terminology, IEEE, 1990, doi:10.1109/IEEESTD.1990.101064, ISBN 978-1-55937-067-7
  • 1 2 Ramler, Rudolf; Kopetzky, Theodorich; Platz, Wolfgang (April 17, 2012). Combinatorial Test Design in the TOSCA Testsuite: Lessons Learned and Practical Implications. IEEE Fifth International Conference on Software Testing and Validation (ICST). Montreal, QC, Canada. doi:10.1109/ICST.2012.142.
  • ↑ O’Connor, Rory V.; Akkaya, Mariye Umay; Kemaneci, Kerem; Yilmaz, Murat; Poth, Alexander; Messnarz, Richard (October 15, 2015). Systems, Software and Services Process Improvement: 22nd European Conference, EuroSPI 2015, Ankara, Turkey, September 30 -- October 2, 2015. Proceedings. Springer. ISBN 978-3-319-24647-5.
  • ↑ Dooley, J. (2011). Software Development and Professional Practice. APress. pp. 193–4. ISBN 978-1-4302-3801-0.
  • ↑ Graham, D.; Van Veenendaal, E.; Evans, I. (2008). Foundations of Software Testing. Cengage Learning. pp. 57–58. ISBN 978-1-84480-989-9.
  • 1 2 3 4 Lee, D.; Yannakakis, M. (1996). "Principles and methods of testing finite state machines-a survey". Proceedings of the IEEE. 84 (8): 1090–1123. Bibcode:1996IEEEP..84.1090L. doi:10.1109/5.533956.
  • ↑ Limaye, M.G. (2009). Software Testing. Tata McGraw-Hill Education. pp. 108–11. ISBN 978-0-07-013990-9.
  • 1 2 3 4 Everatt, G.D.; McLeod Jr., R. (2007). "Chapter 7: Functional Testing". Software Testing: Testing Across the Entire Software Development Life Cycle. John Wiley & Sons. pp. 99–121. ISBN 978-0-470-14634-7.
  • 1 2 intf(intx){returnx*x-6*x+8;} consists of only one statement. All tests against a specification =0"}}'>f(x)>=0 will succeed, except if Laycock, Gilbert T. (1993). The Theory and Practice of Specification Based Software Testing (PDF) (dissertation thesis). Department of Computer Science, University of Sheffield. Retrieved January 2, 2018.
  • ↑ Clapp, Judith A. (1995). Software Quality Control, Error Analysis, and Testing. William Andrew. p. 313. ISBN 978-0-8155-1363-6. Retrieved January 5, 2018.
  • ↑ Chima, Raspal. "Visual testing". TEST Magazine. Archived from the original on July 24, 2012. Retrieved January 13, 2012.
  • 1 2 3 "SOA Testing Tools for Black, White and Gray Box" (white paper). Crosscheck Networks. Archived from the original on October 1, 2018. Retrieved December 10, 2012.
  • 1 2 Ammann, Paul; Offutt, Jeff (January 28, 2008). Introduction to Software Testing. Cambridge University Press. p. 215. ISBN 978-0-521-88038-1. Retrieved November 29, 2017.
  • 1 2 3 Clapp, J.A.; Stanten, S.F.; Peng, W.W.; et al. (1995). Software Quality Control, Error Analysis, and Testing. Nova Data Corporation. p. 254. ISBN 978-0-8155-1363-6.
  • 1 2 3 Woods, Anthony J. (June 5, 2015). "Operational Acceptance – an application of the ISO 29119 Software Testing standard" (Whitepaper). Capgemini Australia. Retrieved January 9, 2018.
  • ↑ Tkalich, Anastasiia; Klotins, Eriks; Sporsem, Tor; Stray, Viktoria; Moe, Nils Brede; Barbala, Astri (March 7, 2025). "User feedback in continuous software engineering: revealing the state-of-practice". Empirical Software Engineering. 30 (3): 79. doi:10.1007/s10664-024-10557-2. ISSN 1573-7616.
  • ↑ O'Reilly, Tim (September 30, 2005). "What is Web 2.0". O'Reilly Media. Section 4. End of the Software Release Cycle. Retrieved January 11, 2018.
  • ↑ Ariola, Wayne; Dunlop, Cynthia (October 2015). DevOps: Are You Pushing Bugs to Clients Faster? (PDF). Pacific Northwest Software Quality Conference. Archived from the original (PDF) on February 14, 2025. Retrieved January 16, 2018.
  • ↑ Taqi, Farwa; Batool, Syeda Hina; Arshad, Alia (May 23, 2024). "Development and Validation of Cloud Applications Usability Development Scale". International Journal of Human–Computer Interaction. 41 (7): 4376–4391. doi:10.1080/10447318.2024.2351715. ISSN 1044-7318.
  • ↑ Claessen, Koen; Hughes, John (2000). "QuickCheck". Proceedings of the fifth ACM SIGPLAN international conference on Functional programming. Icfp '00. pp. 268–279. doi:10.1145/351240.351266. ISBN 978-1-58113-202-1. S2CID 5668071.
  • ↑ Baqar, Mohammad; Khanda, Rajat (2025). Intelligent Computing. Lecture Notes in Networks and Systems. Vol. 1424. arXiv:2409.05808. doi:10.1007/978-3-031-92605-1. ISBN 978-3-031-92604-4.
  • ↑ Smith, Larry (September 2001). "Shift-Left Testing". Dr. Dobb's Journal. 26 (9): 56–ff. Retrieved June 19, 2026.
  • ↑ Gelperin, David; Hetzel, Bill (June 1, 1988). "The growth of software testing". Communications of the ACM. 31 (6): 687–695. doi:10.1145/62959.62965. S2CID 14731341.
  • ↑ Dustin, Elfriede (2002). Effective Software Testing. Addison-Wesley Professional. p. 3. ISBN 978-0-201-79429-8.
  • 1 2 Brown, Chris; Cobb, Gary; Culbertson, Robert (April 12, 2002). Introduction to Rapid Software Testing.
  • ↑ IEEE (1998). IEEE standard for software test documentation. New York: IEEE. ISBN 978-0-7381-1443-9.
  • ↑ ISBN 978-0-201-33140-0.
  • ↑ Kaner, Cem (2001). "NSF grant proposal to 'lay a foundation for significant improvements in the quality of academic and commercial courses in software testing'" (PDF). Archived from the original (PDF) on November 27, 2009. Retrieved October 13, 2006.
  • ↑ Bossavit, Laurent (November 20, 2013). "The cost of defects: an illustrated history". The Leprechauns of Software Engineering: How folklore turns into fact and what to do about it. leanpub.
  • Further reading

    edit
    Software engineering
    Fields
    Concepts
    Orientations
    Models
    Developmental
    Other
    Languages
    Related fields

    View original on Wikipedia | Back | FazBrowse Home