Recent Articles

Manual Testing Interview Questions-1 »

What makes a good test engineer?

A good test engineer has a ‘test to break’ attitude, an ability to take the point of view of the customer, a strong desire for quality, and an attention to detail. Tact and diplomacy are useful in maintaining a cooperative relationship with developers, and an ability to communicate with both technical (developers) and non-technical (customers, management) people is useful. Previous software development experience can be helpful as it provides a deeper understanding of the software development process, gives the tester an appreciation for the developers’ point of view, and reduce the learning curve in automated test tool programming. Judgement skills are needed to assess high-risk areas of an application on which to focus testing efforts when time is limited.

What makes a good Software QA engineer?

The same qualities a good tester has are useful for a QA engineer. Additionally, they must be able to understand the entire software development process and how it can fit into the business approach and goals of the organization. Communication skills and the ability to understand various sides of issues are important. In organizations in the early stages of implementing QA processes, patience and diplomacy are especially needed. An ability to find problems as well as to see ‘what’s missing’ is important for inspections and reviews.

What makes a good QA or Test manager?

A good QA, test, or QA/Test(combined) manager should:
• be familiar with the software development process
• be able to maintain enthusiasm of their team and promote a positive atmosphere, despite
• what is a somewhat ‘negative’ process (e.g., looking for or preventing problems)
• be able to promote teamwork to increase productivity
• be able to promote cooperation between software, test, and QA engineers
• have the diplomatic skills needed to promote improvements in QA processes
• have the ability to withstand pressures and say ‘no’ to other managers when quality is insufficient or QA processes are not being adhered to
• have people judgement skills for hiring and keeping skilled personnel
• be able to communicate with technical and non-technical people, engineers, managers, and customers.
• be able to run meetings and keep them focused

What’s the role of documentation in QA?

Critical. (Note that documentation can be electronic, not necessarily paper.) QA practices should be documented such that they are repeatable. Specifications, designs, business rules, inspection reports, configurations, code changes, test plans, test cases, bug reports, user manuals, etc. should all be documented. There should ideally be a system for easily finding and obtaining documents and determining what documentation will have a particular piece of information. Change management for documentation should be used if possible.

What’s the big deal about ‘requirements’?

One of the most reliable methods of insuring problems, or failure, in a complex software project is to have poorly documented requirements specifications. Requirements are the details describing an application’s externally-perceived functionality and properties. Requirements should be clear, complete, reasonably detailed, cohesive, attainable, and testable. A non-testable requirement would be, for example, ‘user-friendly’ (too subjective). A testable requirement would be something like ‘the user must enter their previously-assigned password to access the application’. Determining and organizing requirements details in a useful and efficient way can be a difficult effort; different methods are available depending on the particular project. Many books are available that describe various approaches to this task. (See the Bookstore section’s ‘Software Requirements Engineering’ category for books on Software Requirements.)

Care should be taken to involve ALL of a project’s significant ‘customers’ in the requirements process. ‘Customers’ could be in-house personnel or out, and could include end-users, customer acceptance testers, customer contract officers, customer management, future software maintenance engineers, salespeople, etc. Anyone who could later derail the project if their expectations aren’t met should be included if possible.

Organizations vary considerably in their handling of requirements specifications. Ideally, the requirements are spelled out in a document with statements such as ‘The product shall…..’. ‘Design’ specifications should not be confused with ‘requirements’; design specifications should be traceable back to the requirements.

In some organizations requirements may end up in high level project plans, functional specification documents, in design documents, or in other documents at various levels of detail. No matter what they are called, some type of documentation with detailed requirements will be needed by testers in order to properly plan and execute tests. Without such documentation, there will be no clear-cut way to determine if a software application is performing correctly.
‘Agile’ methods such as XP use methods requiring close interaction and cooperation between programmers and customers/end-users to iteratively develop requirements. The programmer uses ‘Test first’ development to first create automated unit testing code, which essentially embodies the requirements.

What steps are needed to develop and run software tests?

The following are some of the steps to consider:

• Obtain requirements, functional design, and internal design specifications and other necessary documents
• Obtain budget and schedule requirements
• Determine project-related personnel and their responsibilities, reporting requirements, required standards and processes (such as release processes, change processes, etc.)
• Identify application’s higher-risk aspects, set priorities, and determine scope and limitations of tests
• Determine test approaches and methods - unit, integration, functional, system, load, usability tests, etc.
• Determine test environment requirements (hardware, software, communications, etc.)
• Determine testware requirements (record/playback tools, coverage analyzers, test tracking, problem/bug tracking, etc.)
• Determine test input data requirements
• Identify tasks, those responsible for tasks, and labor requirements
• Set schedule estimates, timelines, milestones
• Determine input equivalence classes, boundary value analyses, error classes
• Prepare test plan document and have needed reviews/approvals
• Write test cases
• Have needed reviews/inspections/approvals of test cases
• Prepare test environment and testware, obtain needed user manuals/reference documents/configuration guides/installation guides, set up test tracking processes, set up logging and archiving processes, set up or obtain test input data
• Obtain and install software releases
• Perform tests
• Evaluate and report results
• Track problems/bugs and fixes
• Retest as needed
• Maintain and update test plans, test cases, test environment, and testware through life cycle

What’s a ‘test plan’?

A software project test plan is a document that describes the objectives, scope, approach, and focus of a software testing effort. The process of preparing a test plan is a useful way to think through the efforts needed to validate the acceptability of a software product. The completed document will help people outside the test group understand the ‘why’ and ‘how’ of product validation. It should be thorough enough to be useful but not so thorough that no one outside the test group will read it. The following are some of the items that might be included in a test plan, depending on the particular project:

• Title
• Identification of software including version/release numbers
• Revision history of document including authors, dates, approvals
• Table of Contents
• Purpose of document, intended audience
• Objective of testing effort
• Software product overview
• Relevant related document list, such as requirements, design documents, other test plans, etc.
• Relevant standards or legal requirements
• Traceability requirements
• Relevant naming conventions and identifier conventions
• Overall software project organization and personnel/contact-info/responsibilties
• Test organization and personnel/contact-info/responsibilities
• Assumptions and dependencies
• Project risk analysis
• Testing priorities and focus
• Scope and limitations of testing
• Test outline - a decomposition of the test approach by test type, feature, functionality, process, system, module, etc. as applicable
• Outline of data input equivalence classes, boundary value analysis, error classes
• Test environment - hardware, operating systems, other required software, data configurations, interfaces to other systems
• Test environment validity analysis - differences between the test and production systems and their impact on test validity.
• Test environment setup and configuration issues
• Software migration processes
• Software CM processes
• Test data setup requirements
• Database setup requirements
• Outline of system-logging/error-logging/other capabilities, and tools such as screen capture software, that will be used to help describe and report bugs
• Discussion of any specialized software or hardware tools that will be used by testers to help track the cause or source of bugs
• Test automation - justification and overview
• Test tools to be used, including versions, patches, etc.
• Test script/test code maintenance processes and version control
• Problem tracking and resolution - tools and processes
• Project test metrics to be used
• Reporting requirements and testing deliverables
• Software entrance and exit criteria
• Initial sanity testing period and criteria
• Test suspension and restart criteria
• Personnel allocation
• Personnel pre-training needs
• Test site/location
• Outside test organizations to be utilized and their purpose, responsibilties, deliverables, contact persons, and coordination issues
• Relevant proprietary, classified, security, and licensing issues.
• Open issues
• Appendix - glossary, acronyms, etc.
(See the Bookstore section’s ‘Software Testing’ and ‘Software QA’ categories for useful books with more information.)

What’s a ‘test case’?

• A test case is a document that describes an input, action, or event and an expected response, to determine if a feature of an application is working correctly. A test case should contain particulars such as test case identifier, test case name, objective, test conditions/setup, input data requirements, steps, and expected results.
• Note that the process of developing test cases can help find problems in the requirements or design of an application, since it requires completely thinking through the operation of the application. For this reason, it’s useful to prepare test cases early in the development cycle if possible.

What should be done after a bug is found?

The bug needs to be communicated and assigned to developers that can fix it. After the problem is resolved, fixes should be re-tested, and determinations made regarding requirements for regression testing to check that fixes didn’t create problems elsewhere. If a problem-tracking system is in place, it should encapsulate these processes. A variety of commercial problem-tracking/management software tools are available (see the ‘Tools’ section for web resources with listings of such tools). The following are items to consider in the tracking process:

• Complete information such that developers can understand the bug, get an idea of it’s severity, and reproduce it if necessary.
• Bug identifier (number, ID, etc.)
• Current bug status (e.g., ‘Released for Retest’, ‘New’, etc.)
• The application name or identifier and version
• The function, module, feature, object, screen, etc. where the bug occurred
• Environment specifics, system, platform, relevant hardware specifics
• Test case name/number/identifier
• One-line bug description
• Full bug description
• Description of steps needed to reproduce the bug if not covered by a test case or if the developer doesn’t have easy access to the test case/test script/test tool
• Names and/or descriptions of file/data/messages/etc. used in test
• File excerpts/error messages/log file excerpts/screen shots/test tool logs that would be helpful in finding the cause of the problem
• Severity estimate (a 5-level range such as 1-5 or ‘critical’-to-’low’ is common)
• Was the bug reproducible?
• Tester name
• Test date
• Bug reporting date
• Name of developer/group/organization the problem is assigned to
• Description of problem cause
• Description of fix
• Code section/file/module/class/method that was fixed
• Date of fix
• Application version that contains the fix
• Tester responsible for retest
• Retest date
• Retest results
• Regression testing requirements
• Tester responsible for regression tests
• Regression testing results
A reporting or tracking process should enable notification of appropriate personnel at various stages. For instance, testers need to know when retesting is needed, developers need to know when bugs are found and how to get the needed information, and reporting/summary capabilities are needed for managers.

What is ‘configuration management’?

Configuration management covers the processes used to control, coordinate, and track: code, requirements, documentation, problems, change requests, designs, tools/compilers/libraries/patches, changes made to them, and who makes the changes. (See the ‘Tools’ section for web resources with listings of configuration management tools. Also see the Bookstore section’s ‘Configuration Management’ category for useful books with more information.)

What if the software is so buggy it can’t really be tested at all?

The best bet in this situation is for the testers to go through the process of reporting whatever bugs or blocking-type problems initially show up, with the focus being on critical bugs. Since this type of problem can severely affect schedules, and indicates deeper problems in the software development process (such as insufficient unit testing or insufficient integration testing, poor design, improper build or release procedures, etc.) managers should be notified, and provided with some documentation as evidence of the problem.

How can it be known when to stop testing?

This can be difficult to determine. Many modern software applications are so complex, and run in such an interdependent environment, that complete testing can never be done. Common factors in deciding when to stop are:
• Deadlines (release deadlines, testing deadlines, etc.)
• Test cases completed with certain percentage passed
• Test budget depleted
• Coverage of code/functionality/requirements reaches a specified point
• Bug rate falls below a certain level
• Beta or alpha testing period ends

What if there isn’t enough time for thorough testing?

Use risk analysis to determine where testing should be focused.
Since it’s rarely possible to test every possible aspect of an application, every possible combination of events, every dependency, or everything that could go wrong, risk analysis is appropriate to most software development projects. This requires judgement skills, common sense, and experience. (If warranted, formal methods are also available.)

Considerations can include:

• Which functionality is most important to the project’s intended purpose?
• Which functionality is most visible to the user?
• Which functionality has the largest safety impact?
• Which functionality has the largest financial impact on users?
• Which aspects of the application are most important to the customer?
• Which aspects of the application can be tested early in the development cycle?
• Which parts of the code are most complex, and thus most subject to errors?
• Which parts of the application were developed in rush or panic mode?
• Which aspects of similar/related previous projects caused problems?
• Which aspects of similar/related previous projects had large maintenance expenses?
• Which parts of the requirements and design are unclear or poorly thought out?
• What do the developers think are the highest-risk aspects of the application?
• What kinds of problems would cause the worst publicity?
• What kinds of problems would cause the most customer service complaints?
• What kinds of tests could easily cover multiple functionalities?
• Which tests will have the best high-risk-coverage to time-required ratio?

What if the project isn’t big enough to justify extensive testing?

Consider the impact of project errors, not the size of the project. However, if extensive testing is still not justified, risk analysis is again needed and the same considerations as described previously in ‘What if there isn’t enough time for thorough testing?’ apply. The tester might then do ad hoc testing, or write up a limited test plan based on the risk analysis.

What can be done if requirements are changing continuously?

A common problem and a major headache.
• Work with the project’s stakeholders early on to understand how requirements might change so that alternate test plans and strategies can be worked out in advance, if possible.
• It’s helpful if the application’s initial design allows for some adaptability so that later changes do not require redoing the application from scratch.
• If the code is well-commented and well-documented this makes changes easier for the developers.
• Use rapid prototyping whenever possible to help customers feel sure of their requirements and minimize changes.
• The project’s initial schedule should allow for some extra time commensurate with the possibility of changes.
• Try to move new requirements to a ‘Phase 2′ version of an application, while using the original requirements for the ‘Phase 1′ version.
• Negotiate to allow only easily-implemented new requirements into the project, while moving more difficult new requirements into future versions of the application.
• Be sure that customers and management understand the scheduling impacts, inherent risks, and costs of significant requirements changes. Then let management or the customers (not the developers or testers) decide if the changes are warranted - after all, that’s their job.
• Balance the effort put into setting up automated testing with the expected effort required to re-do them to deal with changes.
• Try to design some flexibility into automated test scripts.
• Focus initial automated testing on application aspects that are most likely to remain unchanged.
• Devote appropriate effort to risk analysis of changes to minimize regression testing needs.
• Design some flexibility into test cases (this is not easily done; the best bet might be to minimize the detail in the test cases, or set up only higher-level generic-type test plans)
• Focus less on detailed test plans and test cases and more on ad hoc testing (with an understanding of the added risk that this entails).

What if the application has functionality that wasn’t in the requirements?

It may take serious effort to determine if an application has significant unexpected or hidden functionality, and it would indicate deeper problems in the software development process. If the functionality isn’t necessary to the purpose of the application, it should be removed, as it may have unknown impacts or dependencies that were not taken into account by the designer or the customer. If not removed, design information will be needed to determine added testing needs or regression testing needs. Management should be made aware of any significant added risks as a result of the unexpected functionality. If the functionality only effects areas such as minor improvements in the user interface, for example, it may not be a significant risk.

How can Software QA processes be implemented without stifling productivity?

By implementing QA processes slowly over time, using consensus to reach agreement on processes, and adjusting and experimenting as an organization grows and matures, productivity will be improved instead of stifled. Problem prevention will lessen the need for problem detection, panics and burn-out will decrease, and there will be improved focus and less wasted effort. At the same time, attempts should be made to keep processes simple and efficient, minimize paperwork, promote computer-based processes and automated tracking and reporting, minimize time required in meetings, and promote training as part of the QA process. However, no one - especially talented technical types - likes rules or bureacracy, and in the short run things may slow down a bit. A typical scenario would be that more days of planning and development will be needed, but less time will be required for late-night bug-fixing and calming of irate customers.

What if an organization is growing so fast that fixed QA processes are impossible?

This is a common problem in the software industry, especially in new technology areas. There is no easy solution in this situation, other than:
• Hire good people
• Management should ‘ruthlessly prioritize’ quality issues and maintain focus on the customer
• Everyone in the organization should be clear on what ‘quality’ means to the customer

How does a client/server environment affect testing?

Client/server applications can be quite complex due to the multiple dependencies among clients, data communications, hardware, and servers. Thus testing requirements can be extensive. When time is limited (as it usually is) the focus should be on integration and system testing. Additionally, load/stress/performance testing may be useful in determining client/server application limitations and capabilities. There are commercial tools to assist with such testing. (See the ‘Tools’ section for web resources with listings that include these kinds of test tools.)

How can World Wide Web sites be tested?

Web sites are essentially client/server applications - with web servers and ‘browser’ clients. Consideration should be given to the interactions between html pages, TCP/IP communications, Internet connections, firewalls, applications that run in web pages (such as applets, javascript, plug-in applications), and applications that run on the server side (such as cgi scripts, database interfaces, logging applications, dynamic page generators, asp, etc.). Additionally, there are a wide variety of servers and browsers, various versions of each, small but sometimes significant differences between them, variations in connection speeds, rapidly changing technologies, and multiple standards and protocols. The end result is that testing for web sites can become a major ongoing effort. Other considerations might include:

• What are the expected loads on the server (e.g., number of hits per unit time?), and what kind of performance is required under such loads (such as web server response time, database query response times). What kinds of tools will be needed for performance testing (such as web load testing tools, other tools already in house that can be adapted, web robot downloading tools, etc.)?
• Who is the target audience? What kind of browsers will they be using? What kind of connection speeds will they by using? Are they intra- organization (thus with likely high connection speeds and similar browsers) or Internet-wide (thus with a wide variety of connection speeds and browser types)?
• What kind of performance is expected on the client side (e.g., how fast should pages appear, how fast should animations, applets, etc. load and run)?
• Will down time for server and content maintenance/upgrades be allowed? how much?
• What kinds of security (firewalls, encryptions, passwords, etc.) will be required and what is it expected to do? How can it be tested?
• How reliable are the site’s Internet connections required to be? And how does that affect backup system or redundant connection requirements and testing?
• What processes will be required to manage updates to the web site’s content, and what are the requirements for maintaining, tracking, and controlling page content, graphics, links, etc.?
• Which HTML specification will be adhered to? How strictly? What variations will be allowed for targeted browsers?
• Will there be any standards or requirements for page appearance and/or graphics throughout a site or parts of a site??
• How will internal and external links be validated and updated? how often?
• Can testing be done on the production system, or will a separate test system be required? How are browser caching, variations in browser option settings, dial-up connection variabilities, and real-world internet ‘traffic congestion’ problems to be accounted for in testing?
• How extensive or customized are the server logging and reporting requirements; are they considered an integral part of the system and do they require testing?
• How are cgi programs, applets, javascripts, ActiveX components, etc. to be maintained, tracked, controlled, and tested?
Some sources of site security information include the Usenet newsgroup ‘comp.security.announce’ and links concerning web site security in the ‘Other Resources’ section.
Some usability guidelines to consider - these are subjective and may or may not apply to a given situation (Note: more information on usability testing issues can be found in articles about web site usability in the ‘Other Resources’ section):
• Pages should be 3-5 screens max unless content is tightly focused on a single topic. If larger, provide internal links within the page.
• The page layouts and design elements should be consistent throughout a site, so that it’s clear to the user that they’re still within a site.
• Pages should be as browser-independent as possible, or pages should be provided or generated based on the browser-type.
• All pages should have links external to the page; there should be no dead-end pages.
• The page owner, revision date, and a link to a contact person or organization should be included on each page.
Many new web site test tools have appeared in the recent years and more than 280 of them are listed in the ‘Web Test Tools’ section.

Test Plan Frequently Asked Questions »

1. Why you cannot download a Word version of this test plan.

I have received numerous requests for an MS Word version of the test plan.
However, although the web pages were created directly from an word document, I no longer have a copy of that original word document.
Also, having prepared numerous test plans, I know that the content is more important than the format. See the next point for more info on the content of a test plan.

2. What a test plan should contain

A software project test plan is a document that describes the objectives, scope, approach, and focus of a software testing effort. The process of preparing a test plan is a useful way to think through the efforts needed to validate the acceptability of a software product. The completed document will help people outside the test group understand the ‘why’ and ‘how’ of product validation. It should be thorough enough to be useful but not so thorough that no one outside the test group will read it.

A test plan states what the items to be tested are, at what level they will be tested, what sequence they are to be tested in, how the test strategy will be applied to the testing of each item, and describes the test environment.

A test plan should ideally be organisation wide, being applicable to all of organisations software developments.

The objective of each test plan is to provide a plan for verification, by testing the software, the software produced fulfils the functional or design statements of the appropriate software specification. In the case of acceptance testing and system testing, this generally means the Functional Specification.

The first consideration when preparing the Test Plan is who the intended audience is – i.e. the audience for a Unit Test Plan would be different, and thus the content would have to be adjusted accordingly.

You should begin the test plan as soon as possible. Generally it is desirable to begin the master test plan as the same time the Requirements documents and the Project Plan are being developed. Test planning can (and should) have an impact on the Project Plan. Even though plans that are written early will have to be changed during the course of the development and testing, but that is important, because it records the progress of the testing and helps planners become more proficient.

What to consider for the Test Plan:

1. Test Plan Identifier
2. References
3. Introduction
4. Test Items
5. Software Risk Issues
6. Features to be Tested
7. Features not to be Tested
8. Approach
9. Item Pass/Fail Criteria
10. Suspension Criteria and Resumption Requirements
11. Test Deliverables
12. Remaining Test Tasks
13. Environmental Needs
14. Staffing and Training Needs
15. Responsibilities
16. Schedule
17. Planning Risks and Contingencies
18. Approvals
19. Glossary

3. Standards for Software Test Plans

Several standards suggest what a test plan should contain, including the IEEE.
The standards are:

IEEE standards:
829-1983 IEEE Standard for Software Test Documentation
1008-1987 IEEE Standard for Software Unit Testing
1012-1986 IEEE Standard for Software Verification & Validation Plans
1059-1993 IEEE Guide for Software Verification & Validation Plans

The IEEE website is here:http://www.ieee.org

4. Why I published the test plan

Well, when I first went looking for sample test plans, I could not find anything useful. Eventually I found several sites, which I included on my links page. However, I was not satisfied with many of the plans that I found, so I posted it on my website. And, I have to say that I have been astounded by the level of interest shown, and amazed at the number of emails I have received about it.

6. Copyright, Ownership & what you can do with the plan

Well, I published with the aim that it be used, so if you are going to use it to create a test plan for internal use, please feel free to copy from it.
However, if the test plan is to be published externally in any way [web, magazine, training material etc.], then you must include a reference to me, Bazman, and a link to my website.

Software Testing Related Questions and Answers »

1. What makes a good test engineer?

• A good test engineer has a ‘test to break’ attitude, an ability to take the point of view of the customer, a strong desire for quality, and an attention to detail.
• Tact and diplomacy are useful in maintaining a cooperative relationship with developers, and an ability to communicate with both technical (developers) and non-technical (customers, management) people is useful.
• Previous software development experience can be helpful as it provides a deeper understanding of the software development process, gives the tester an appreciation for the developers’ point of view, and reduce the learning curve in automated test tool programming.
• Judgement skills are needed to assess high-risk areas of an application on which to focus testing efforts when time is limited.

2. What makes a good software QA engineer?

• The same qualities a good tester has are useful for a QA engineer.
• Additionally, they must be able to understand the entire software development process and how it can fit into the business approach and goals of the organization.
• Communication skills and the ability to understand various sides of issues are important.
• In organizations in the early stages of implementing QA processes, patience and diplomacy are especially needed.
• An ability to find problems as well as to see ‘what’s missing’ is important for inspections and reviews.

3. What makes a good QA or Test manager?

• A good QA, test, or QA/Test (combined) manager should:
• be familiar with the software development process
• be able to maintain enthusiasm of their team and promote a positive atmosphere, despite

what is a somewhat ‘negative’ process (e.g., looking for or preventing problems)

• be able to promote teamwork to increase productivity
• be able to promote cooperation between software, test, and QA engineers
• have the diplomatic skills needed to promote improvements in QA processes
• have the ability to withstand pressures and say ‘no’ to other managers when quality is insufficient or QA processes are not being adhered to
• have people judgement skills for hiring and keeping skilled personnel
• be able to communicate with technical and non-technical people, engineers, managers, and customers.
• be able to run meetings and keep them focused

4. What’s the role of documentation in QA?

• Critical. (Note that documentation can be electronic, not necessarily paper.)
• QA practices should be documented such that they are repeatable.
• Specifications, designs, business rules, inspection reports, configurations, code changes, test plans, test cases, bug reports, user manuals, etc. should all be documented.
• There should ideally be a system for easily finding and obtaining documents and determining what documentation will have a particular piece of information.
• Change management for documentation should be used if possible.

5. What’s the big deal about ‘requirements’?

• One of the most reliable methods of insuring problems, or failure, in a complex software project is to have poorly documented requirements specifications.
• Requirements are the details describing an application’s externally-perceived functionality and properties.
• Requirements should be clear, complete, reasonably detailed, cohesive, attainable, and testable. A non-testable requirement would be, for example, ‘user-friendly’ (too subjective).
• A testable requirement would be something like ‘the user must enter their previously-assigned password to access the application’.
• Determining and organizing requirements details in a useful and efficient way can be a difficult effort; different methods are available depending on the particular project.
• Many books are available that describe various approaches to this task.
• Care should be taken to involve ALL of a project’s significant ‘customers’ in the requirements process.
• ‘Customers’ could be in-house personnel or out, and could include end-users, customer acceptance testers, customer contract officers, customer management, future software maintenance engineers, salespeople, etc.
• Anyone who could later derail the project if their expectations aren’t met should be included if possible.
• Organizations vary considerably in their handling of requirements specifications.
• Ideally, the requirements are spelled out in a document with statements such as ‘The product shall.’.
• ‘Design’ specifications should not be confused with ‘requirements’; design specifications should be traceable back to the requirements.
• In some organizations requirements may end up in high level project plans, functional specification documents, in design documents, or in other documents at various levels of detail.
• No matter what they are called, some type of documentation with detailed requirements will be needed by testers in order to properly plan and execute tests.
• Without such documentation, there will be no clear-cut way to determine if a software application is performing correctly.

6. What steps are needed to develop and run software tests?

The following are some of the steps to consider:
• Obtain requirements, functional design, and internal design specifications and other necessary documents
• Obtain budget and schedule requirements
• Determine project-related personnel and their responsibilities, reporting requirements, required standards and processes (such as release processes, change processes, etc.)
• Identify application’s higher-risk aspects, set priorities, and determine scope and limitations of tests
• Determine test approaches and methods - unit, integration, functional, system, load, usability tests, etc.
• Determine test environment requirements (hardware, software, communications, etc.)
• Determine testware requirements (record/playback tools, coverage analyzers, test tracking, problem/bug tracking, etc.)
• Determine test input data requirements
• Identify tasks, those responsible for tasks, and labor requirements
• Set schedule estimates, timelines, milestones
• Determine input equivalence classes, boundary value analyses, error classes
• Prepare test plan document and have needed reviews/approvals
• Write test cases
• Have needed reviews/inspections/approvals of test cases
• Prepare test environment and testware, obtain needed user manuals/reference documents/configuration guides/installation guides, set up test tracking processes, set up logging and archiving processes, set up or obtain test input data
• Obtain and install software releases
• Perform tests
• Evaluate and report results
• Track problems/bugs and fixes
• Retest as needed
• Maintain and update test plans, test cases, test environment, and testware through life cycle

7. What’s a ‘test plan’?

A software project test plan is a document that describes the objectives, scope, approach, and focus of a software testing effort. The process of preparing a test plan is a useful way to think through the efforts needed to validate the acceptability of a software product. The completed document will help people outside the test group understand the ‘why’ and ‘how’ of product validation. It should be thorough enough to be useful but not so thorough that no one outside the test group will read it. The following are some of the items that might be included in a test plan, depending on the particular project:
• Title
• Identification of software including version/release numbers
• Revision history of document including authors, dates, approvals
• Table of Contents
• Purpose of document, intended audience
• Objective of testing effort
• Software product overview
• Relevant related document list, such as requirements, design documents, other test plans, etc.
• Relevant standards or legal requirements
• Traceability requirements
• Relevant naming conventions and identifier conventions
• Overall software project organization and personnel/contact-info/responsibilties
• Test organization and personnel/contact-info/responsibilities
• Assumptions and dependencies
• Project risk analysis
• Testing priorities and focus
• Scope and limitations of testing
• Test outline - a decomposition of the test approach by test type, feature, functionality, process, system, module, etc. as applicable
• Outline of data input equivalence classes, boundary value analysis, error classes
• Test environment - hardware, operating systems, other required software, data configurations, interfaces to other systems
• Test environment setup and configuration issues
• Test data setup requirements
• Database setup requirements
• Outline of system-logging/error-logging/other capabilities, and tools such as screen capture software, that will be used to help describe and report bugs
• Discussion of any specialized software or hardware tools that will be used by testers to help track the cause or source of bugs
• Test automation - justification and overview
• Test tools to be used, including versions, patches, etc.
• Test script/test code maintenance processes and version control
• Problem tracking and resolution - tools and processes
• Project test metrics to be used
• Reporting requirements and testing deliverables
• Software entrance and exit criteria
• Initial sanity testing period and criteria
• Test suspension and restart criteria
• Personnel allocation
• Personnel pre-training needs
• Test site/location
• Outside test organizations to be utilized and their purpose, responsibilties, deliverables, contact persons, and coordination issues
• Relevant proprietary, classified, security, and licensing issues.
• Open issues
• Appendix - glossary, acronyms, etc.

8. What’s a ‘test case’?

• A test case is a document that describes an input, action, or event and an expected response, to determine if a feature of an application is working correctly.
• A test case should contain particulars such as test case identifier, test case name, objective, test conditions/setup, input data requirements, steps, and expected results.
• Note that the process of developing test cases can help find problems in the requirements or design of an application, since it requires completely thinking through the operation of the application. For this reason, it’s useful to prepare test cases early in the development cycle if possible.
9. What should be done after a bug is found?

The bug needs to be communicated and assigned to developers who can fix it.
After the problem is resolved, fixes should be re-tested, and determinations made regarding requirements for regression testing to check that fixes didn’t create problems elsewhere. If a problem-tracking system is in place, it should encapsulate these processes. A variety of commercial problem-tracking/management software tools are available . The following are items to be considered in the tracking process:
• Complete information such that developers can understand the bug, get an idea of it’s severity, and reproduce it if necessary.
• Bug identifier (number, ID, etc.)
• Current bug status (e.g., ‘Released for Retest’, ‘New’, etc.)
• The application name or identifier and version
• The function, module, feature, object, screen, etc. where the bug occurred
• Environment specifics, system, platform, relevant hardware specifics
• Test case name/number/identifier
• One-line bug description
• Full bug description
• Description of steps needed to reproduce the bug if not covered by a test case or if the developer doesn’t have easy access to the test case/test script/test tool
• Names and/or descriptions of file/data/messages/etc. used in test
• File excerpts/error messages/log file excerpts/screen shots/test tool logs that would be helpful in finding the cause of the problem
• Severity estimate (a 5-level range such as 1-5 or ‘critical’-to-’low’ is common)
• Was the bug reproducible?
• Tester name
• Test date
• Bug reporting date
• Name of developer/group/organization the problem is assigned to
• Description of problem cause
• Description of fix
• Code section/file/module/class/method that was fixed
• Date of fix
• Application version that contains the fix
• Tester responsible for retest
• Retest date
• Retest results
• Regression testing requirements
• Tester responsible for regression tests
• Regression testing results
A reporting or tracking process should enable notification of appropriate personnel at various stages.
For instance, testers need to know when retesting is needed, developers need to know when bugs are found and how to get the needed information, and reporting/summary capabilities are needed for managers.

10. What is ‘configuration management’?

Configuration management covers the processes used to control, coordinate, and track: code, requirements, documentation, problems, change requests, designs, tools/compilers/libraries/patches, changes made to them, and who makes the changes.

11. What if the software is so buggy it can’t really be tested at all?

The best bet in this situation is for the testers to go through the process of reporting whatever bugs or blocking-type problems initially show up, with the focus being on critical bugs. Since this type of problem can severely affect schedules, and indicates deeper problems in the software development process (such as insufficient unit testing or insufficient integration testing, poor design, improper build or release procedures, etc.) managers should be notified, and provided with some documentation as evidence of the problem.

12. How can it be known when to stop testing?

This can be difficult to determine. Many modern software applications are so complex, and run in such an interdependent environment, that complete testing can never be done. Common factors in deciding when to stop are:
• Deadlines (release deadlines, testing deadlines, etc.)
• Test cases completed with certain percentage passed
• Test budget depleted
• Coverage of code/functionality/requirements reaches a specified point
• Bug rate falls below a certain level
• Beta or alpha testing period ends

13. What if there isn’t enough time for thorough testing?

Use risk analysis to determine where testing should be focused.

Since it’s rarely possible to test every possible aspect of an application, every possible combination of events, every dependency, or everything that could go wrong, risk analysis is appropriate to most software development projects.
This requires judgement skills, common sense, and experience. (If warranted, formal methods are also available.)

Considerations can include:

• Which functionality is most important to the project’s intended purpose?
• Which functionality is most visible to the user?
• Which functionality has the largest safety impact?
• Which functionality has the largest financial impact on users?
• Which aspects of the application are most important to the customer?
• Which aspects of the application can be tested early in the development cycle?
• Which parts of the code are most complex, and thus most subject to errors?
• Which parts of the application were developed in rush or panic mode?
• Which aspects of similar/related previous projects caused problems?
• Which aspects of similar/related previous projects had large maintenance expenses?
• Which parts of the requirements and design are unclear or poorly thought out?
• What do the developers think are the highest-risk aspects of the application?
• What kinds of problems would cause the worst publicity?
• What kinds of problems would cause the most customer service complaints?
• What kinds of tests could easily cover multiple functionalities?
• Which tests will have the best high-risk-coverage to time-required ratio?

14. What if the project isn’t big enough to justify extensive testing?

Consider the impact of project errors, not the size of the project.
However, if extensive testing is still not justified, risk analysis is again needed and the same considerations as described previously in.
The tester might then do ad hoc testing, or write up a limited test plan based on the risk analysis.

15. What can be done if requirements are changing continuously?

A common problem and a major headache.
• Work with the project’s stakeholders early on to understand how requirements might change so that alternate test plans and strategies can be worked out in advance, if possible.
• It’s helpful if the application’s initial design allows for some adaptability so that later changes do not require redoing the application from scratch.
• If the code is well-commented and well-documented this makes changes easier for the developers.
• Use rapid prototyping whenever possible to help customers feel sure of their requirements and minimize changes.
• The project’s initial schedule should allow for some extra time commensurate with the possibility of changes.
• Try to move new requirements to a ‘Phase 2′ version of an application, while using the original requirements for the ‘Phase 1′ version.
• Negotiate to allow only easily-implemented new requirements into the project, while moving more difficult new requirements into future versions of the application.
• Be sure that customers and management understand the scheduling impacts, inherent risks, and costs of significant requirements changes. Then let management or the customers (not the developers or testers) decide if the changes are warranted - after all, that’s their job.
• Balance the effort put into setting up automated testing with the expected effort required to re-do them to deal with changes.
• Try to design some flexibility into automated test scripts.
• Focus initial automated testing on application aspects that are most likely to remain unchanged.
• Devote appropriate effort to risk analysis of changes to minimize regression testing needs.
• Design some flexibility into test cases (this is not easily done; the best bet might be to minimize the detail in the test cases, or set up only higher-level generic-type test plans)
• Focus less on detailed test plans and test cases and more on ad hoc testing (with an understanding of the added risk that this entails).

16. What if the application has functionality that wasn’t in the requirements?

It may take serious effort to determine if an application has significant unexpected or hidden functionality, and it would indicate deeper problems in the software development process.

If the functionality isn’t necessary to the purpose of the application, it should be removed, as it may have unknown impacts or dependencies that were not taken into account by the designer or the customer.
If not removed, design information will be needed to determine added testing needs or regression testing needs.
Management should be made aware of any significant added risks as a result of the unexpected functionality.
If the functionality only effects areas such as minor improvements in the user interface, for example, it may not be a significant risk.

17. How can Software QA processes be implemented without stifling productivity?

By implementing QA processes slowly over time, using consensus to reach agreement on processes, and adjusting and experimenting as an organization grows and matures, productivity will be improved instead of stifled. Problem prevention will lessen the need for problem detection, panics and burn-out will decrease, and there will be improved focus and less wasted effort. At the same time, attempts should be made to keep processes simple and efficient, minimize paperwork, promote computer-based processes and automated tracking and reporting, minimize time required in meetings, and promote training as part of the QA process. However, no one - especially talented technical types - likes rules or bureacracy, and in the short run things may slow down a bit. A typical scenario would be that more days of planning and development will be needed, but less time will be required for late-night bug-fixing and calming of irate customers.

18. What if an organization is growing so fast that fixed QA processes are impossible?

This is a common problem in the software industry, especially in new technology areas. There is no easy solution in this situation, other than:
• Hire good people
• Management should ‘ruthlessly prioritize’ quality issues and maintain focus on the customer
• Everyone in the organization should be clear on what ‘quality’ means to the customer

19. How does a client’server environment affect testing?

Client/server applications can be quite complex due to the multiple dependencies among clients, data communications, hardware, and servers.
Thus testing requirements can be extensive. When time is limited (as it usually is) the focus should be on integration and system testing.
Additionally, load/stress/performance testing may be useful in determining client/server application limitations and capabilities.
There are commercial tools to assist with such testing.

20. How can World Wide Web sites be tested?

Web sites are essentially client/server applications - with web servers and ‘browser’ clients. Consideration should be given to the interactions between html pages, TCP/IP communications, Internet connections, firewalls, applications that run in web pages (such as applets, javascript, plug-in applications), and applications that run on the server side (such as cgi scripts, database interfaces, logging applications, dynamic page generators, asp, etc.).
Additionally, there are a wide variety of servers and browsers, various versions of each, small but sometimes significant differences between them, variations in connection speeds, rapidly changing technologies, and multiple standards and protocols.
The end result is that testing for web sites can become a major ongoing effort.
Other considerations might include:
• What are the expected loads on the server (e.g., number of hits per unit time?), and what kind of performance is required under such loads (such as web server response time, database query response times).
• What kinds of tools will be needed for performance testing (such as web load testing tools, other tools already in house that can be adapted, web robot downloading tools, etc.)?
• Who is the target audience? What kind of browsers will they be using? What kind of connection speeds will they by using? Are they intra- organization (thus with likely high connection speeds and similar browsers) or Internet-wide (thus with a wide variety of connection speeds and browser types)?
• What kind of performance is expected on the client side (e.g., how fast should pages appear, how fast should animations, applets, etc. load and run)?
• Will down time for server and content maintenance/upgrades be allowed? how much?
• What kinds of security (firewalls, encryptions, passwords, etc.) will be required and what is it expected to do? How can it be tested?
• How reliable are the site’s Internet connections required to be? And how does that affect backup system or redundant connection requirements and testing?
• What processes will be required to manage updates to the web site’s content, and what are the requirements for maintaining, tracking, and controlling page content, graphics, links, etc.?
• Which HTML specification will be adhered to? How strictly? What variations will be allowed for targeted browsers?
• Will there be any standards or requirements for page appearance and/or graphics throughout a site or parts of a site??
• How will internal and external links be validated and updated? how often?
• Can testing be done on the production system, or will a separate test system be required? How are browser caching, variations in browser option settings, dial-up connection variabilities, and real-world internet ‘traffic congestion’ problems to be accounted for in testing?
• How extensive or customized are the server logging and reporting requirements; are they considered an integral part of the system and do they require testing?
• How are cgi programs, applets, javascripts, ActiveX components, etc. to be maintained, tracked, controlled, and tested?

• Pages should be 3-5 screens max unless content is tightly focused on a single topic. If larger, provide internal links within the page.
• The page layouts and design elements should be consistent throughout a site, so that it’s clear to the user that they’re still within a site.
• Pages should be as browser-independent as possible, or pages should be provided or generated based on the browser-type.
• All pages should have links external to the page; there should be no dead-end pages.
• The page owner, revision date, and a link to a contact person or organization should be included on each page.
21. How is testing affected by object-oriented designs?

Well-engineered object-oriented design can make it easier to trace from code to internal design to functional design to requirements.
While there will be little affect on black box testing (where an understanding of the internal design of the application is unnecessary), white-box testing can be oriented to the application’s objects. If the application was well-designed this can simplify test design.

22. What is Extreme Programming and what’s it got to do with testing ?

Extreme Programming (XP) is a software development approach for small teams on risk-prone projects with unstable requirements.
It was created by Kent Beck who described the approach in his book ‘Extreme Programming Explained’ .
Testing (’extreme testing’) is a core aspect of Extreme Programming.
Programmers are expected to write unit and functional test code first - before the application is developed.
Test code is under source control along with the rest of the code.
Customers are expected to be an integral part of the project team and to help develop scenarios for acceptance/black box testing.
Acceptance tests are preferably automated, and are modified and rerun for each of the frequent development iterations.

QA and test personnel are also required to be an integral part of the project team.

Detailed requirements documentation is not used, and frequent re-scheduling, re-estimating, and re-prioritizing is expected

Software Testing Glossary-I »

1 acceptance testing: Formal testing conducted to enable a user, customer, or other authorized entity to determine whether to accept a system or component.

2 actual outcome: The behavior actually produced when the object is tested under specified conditions.

3 ad hoc testing: Testing carried out using no recognised test case design technique.

4 alpha testing: Simulated or actual operational testing at an in-house site not otherwise involved with the software developers.

5 arc testing: See branch testing.

6 Backus-Naur form: A metalanguage used to formally describe the syntax of a language.

7 basic block: A sequence of one or more consecutive, executable statements containing no branches.

8 basis test set: A set of test cases derived from the code logic which ensure that 100 % branch coverage is achieved.

9 bebugging:

11 beta testing: Operational testing at a site not otherwise involved with the software developers.

10 behaviour: The combination of input values and preconditions and the required response for a function of a system. The full specification of a function would normally comprise one or more behaviours.

12 big-bang testing: Integration testing where no incremental testing takes place prior to all the system’s components being combined to form the system.

13 black box testing: See functional test case design.

14 bottom-up testing: An approach to integration testing where the lowest level components are tested first, then used to facilitate the testing of higher level components. The process is repeated until the component at the top of the hierarchy is tested.

15 boundary value: An input value or output value which is on the boundary between equivalence classes, or an incremental distance either side of the boundary.

16 boundary value analysis: A test case design technique for a component in which test cases are designed which include representatives of boundary values.

17 boundary value coverage: The percentage of boundary values of the component’s equivalence classes which have been exercised by a test case suite.

18 boundary value testing: See boundary value analysis.

19 branch: A conditional transfer of control from any statement to any other statement in a component, or an unconditional transfer of control from any statement to any other statement in the component except the next statement, or when a component has more than one entry point, a transfer of control to an entry point of the component.

20 branch condition: See decision condition.

22 branch condition combination testing: A test case design technique in which test cases are designed to execute combinations of branch condition outcomes. 21 branch condition combination coverage: The percentage of combinations of all branch condition outcomes in every decision that have been exercised by a test case suite.

23 branch condition coverage: The percentage of branch condition outcomes in every decision that have been exercised by a test case suite.

24 branch condition testing: A test case design technique in which test cases are designed to execute branch condition outcomes.

25 branch coverage: The percentage of branches that have been exercised by a test case suite

26 branch outcome: See decision outcome.

27 branch point: See decision.

28 branch testing: A test case design technique for a component in which test cases are designed to execute branch outcomes.

29 bug: See fault.

30 bug seeding: See error seeding.

31 C-use: See computation data use.

32 capture/playback tool: A test tool that records test input as it is sent to the software under test. The input cases stored can then be used to reproduce the test at a later time.

33 capture/replay tool: See capture/playback tool.

34 CAST: Acronym for computer-aided software testing.

35 cause-effect graph: A graphical representation of inputs or stimuli (causes) with their associated outputs (effects), which can be used to design test cases.

36 cause-effect graphing: A test case design technique in which test cases are designed by consideration of cause-effect graphs.

37 certification: The process of confirming that a system or component complies with its specified requirements and is acceptable for operational use.

38 Chow’s coverage metrics: See N-switch coverage.

39 code coverage: An analysis method that determines which parts of the software have been executed (covered) by the test case suite and which parts have not been executed and therefore may require additional attention.

40 code-based testing: Designing tests based on objectives derived from the implementation (e.g., tests that execute specific control flow paths or use specific data items).

41 compatibility testing: Testing whether the system is compatible with other systems with which it should communicate.

42 complete path testing: See exhaustive testing.

43 component: A minimal software item for which a separate specification is available.

44 component testing: The testing of individual software components. After [IEEE].

45 computation data use: A data use not in a condition. Also called C-use.

46 condition: A Boolean statement containing no Boolean operators. For instance, A

47 condition coverage: See branch condition coverage.

48 condition outcome: The evaluation of a condition to TRUE or FALSE.

49 conformance criterion: Some method of judging whether or not the component’s action on a particular specified input value conforms to the specification.

50 conformance testing: The process of testing that an implementation conforms to the specification on which it is based.

51 control flow: An abstract representation of all possible sequences of events in a program’s execution.

52 control flow graph: The diagrammatic representation of the possible alternative control flow paths through a component.

53 control flow path: See path.

54 conversion testing: Testing of programs or procedures used to convert data from existing systems for use in replacement systems.

55 correctness: The degree to which software conforms to its specification.

56 coverage: The degree, expressed as a percentage, to which a specified coverage item has been exercised by a test case suite.

57 coverage item: An entity or property used as a basis for testing.

58 data definition: An executable statement where a variable is assigned a value.

59 data definition C-use coverage: The percentage of data definition C-use pairs in a component that are exercised by a test case suite.

60 data definition C-use pair: A data definition and computation data use, where the data use uses the value defined in the data definition.

61 data definition P-use coverage: The percentage of data definition P-use pairs in a component that are exercised by a test case suite.

62 data definition P-use pair: A data definition and predicate data use, where the data use uses the value defined in the data definition.

63 data definition-use coverage: The percentage of data definition-use pairs in a component that are exercised by a test case suite.

64 data definition-use pair: A data definition and data use, where the data use uses the value defined in the data definition.

65 data definition-use testing: A test case design technique for a component in which test cases are designed to execute data definition-use pairs.

66 data flow coverage: Test coverage measure based on variable usage within the code. Examples are data definition-use coverage, data definition P-use coverage, data definition C-use coverage, etc.

67 data flow testing: Testing in which test cases are designed based on variable usage within the code.

68 data use: An executable statement where the value of a variable is accessed.

69 debugging: The process of finding and removing the causes of failures in software.

70 decision: A program point at which the control flow has two or more alternative routes.

71 Decision condition: A condition within a decision.

72 decision coverage: The percentage of decision outcomes that have been exercised by a test case suite.

73 decision outcome: The result of a decision (which therefore determines the control flow alternative taken).

74 design-based testing: Designing tests based on objectives derived from the architectural or detail design of the software (e.g., tests that execute specific invocation paths or probe the worst case behaviour of algorithms).

75 desk checking: The testing of software by the manual simulation of its execution.

76 dirty testing: See negative testing. [Beizer]

77 documentation testing: Testing concerned with the accuracy of documentation.

78 domain: The set from which values are selected.

79 domain testing: See equivalence partition testing.

80 dynamic analysis: The process of evaluating a system or component based upon its behaviour during execution.

81 emulator: A device, computer program, or system that accepts the same inputs and produces the same outputs as a given system.

82 entry point: The first executable statement within a component.

83 equivalence class: A portion of the component’s input or output domains for which the component’s behaviour is assumed to be the same from the component’s specification.

84 equivalence partition: See equivalence class.

85 equivalence partition coverage: The percentage of equivalence classes generated for the component, which have been exercised by a test case suite.

86 equivalence partition testing: A test case design technique for a component in which test cases are designed to execute representatives from equivalence classes.

87 error: A human action that produces an incorrect result. [IEEE]

88 error guessing: A test case design technique where the experience of the tester is used to postulate what faults might occur, and to design tests specifically to expose them.

89 error seeding: The process of intentionally adding known faults to those already in a computer program for the purpose of monitoring the rate of detection and removal, and estimating the number of faults remaining in the program.

90 executable statement: A statement which, when compiled, is translated into object code, which will be executed procedurally when the program is running and may perform an action on program data.

91 exercised: A program element is exercised by a test case when the input value causes the execution of that element, such as a statement, branch, or other structural element.

92 exhaustive testing: A test case design technique in which the test case suite comprises all combinations of input values and preconditions for component variables.

93 exit point: The last executable statement within a component.

94 expected outcome: See predicted outcome.

95 facility testing: See functional test case design.

96 failure: Deviation of the software from its expected delivery or service.

97 fault: A manifestation of an error in software. A fault, if encountered may cause a failure.

98 feasible path: A path for which there exists a set of input values and execution conditions which causes it to be executed.

99 feature testing: See functional test case design.

100 functional specification: The document that describes in detail the characteristics of the product with regard to its intended capability. [BS 4778, Part2]

101 functional test case design: Test case selection that is based on an analysis of the specification of the component without reference to its internal workings.

102 glass box testing: See structural test case design.

103 incremental testing: Integration testing where system components are integrated into the system one at a time until the entire system is integrated.

104 independence: Separation of responsibilities which ensures the accomplishment of objective evaluation. After [do178b].

105 infeasible path: A path which cannot be exercised by any set of possible input values.

106 input: A variable (whether stored within a component or outside it) that is read by the component.

107 input domain: The set of all possible inputs.

108 input value: An instance of an input.

109 inspection: A group review quality improvement process for written material. It consists of two aspects; product (document itself) improvement and process improvement (of both document production and inspection). After [Graham]

110 installability testing: Testing concerned with the installation procedures for the system.

111 instrumentation: The insertion of additional code into the program in order to collect information about program behaviour during program execution.

112 instrumenter: A software tool used to carry out instrumentation.

113 integration: The process of combining components into larger assemblies.

114 integration testing: Testing performed to expose faults in the interfaces and in the interaction between integrated components.

115 interface testing: Integration testing where the interfaces between system components are tested.

116 isolation testing: Component testing of individual components in isolation from surrounding components, with surrounding components being simulated by stubs.

117 LCSAJ: A Linear Code Sequence And Jump, consisting of the following three items (conventionally identified by line numbers in a source code listing): the start of the linear sequence of executable statements, the end of the linear sequence, and the target line to which control flow is transferred at the end of the linear sequence.

118 LCSAJ coverage: The percentage of LCSAJs of a component which are exercised by a test case suite.

119 LCSAJ testing: A test case design technique for a component in which test cases are designed to execute LCSAJs.

120 logic-coverage testing: See structural test case design. [Myers]

121 logic-driven testing: See structural test case design.

122 maintainability testing: Testing whether the system meets its specified objectives for maintainability.

123 modified condition/decision coverage: The percentage of all branch condition outcomes that independently affect a decision outcome that have been exercised by a test case suite.

124 modified condition/decision testing: A test case design technique in which test cases are designed to execute branch condition outcomes that independently affect a decision outcome.

125 multiple condition coverage: See branch condition combination coverage.

126 mutation analysis: A method to determine test case suite thoroughness by measuring the extent to which a test case suite can discriminate the program from slight variants (mutants) of the program. See also error seeding.

127 N-switch coverage: The percentage of sequences of N-transitions that have been exercised by a test case suite.

128 N-switch testing: A form of state transition testing in which test cases are designed to execute all valid sequences of N-transitions.

129 N-transitions: A sequence of N+1 transitions.

130 negative testing: Testing aimed at showing software does not work. [Beizer]

131 non-functional requirements testing: Testing of those requirements that do not relate to functionality. i.e. performance, usability, etc.

132 operational testing: Testing conducted to evaluate a system or component in its operational environment. [IEEE]

133 oracle: A mechanism to produce the predicted outcomes to compare with the actual outcomes of the software under test. After [adrion]

134 outcome: Actual outcome or predicted outcome. This is the outcome of a test. See also branch outcome, condition outcome and decision outcome.

135 output: A variable (whether stored within a component or outside it) that is written to by the component.

136 output domain: The set of all possible outputs.

137 output value: An instance of an output.

138 P-use: See predicate data use.

139 partition testing: See equivalence partition testing. [Beizer]

140 path: A sequence of executable statements of a component, from an entry point to an exit point.

141 path coverage: The percentage of paths in a component exercised by a test case suite.

142 path sensitizing: Choosing a set of input values to force the execution of a component to take a given path.

143 path testing: A test case design technique in which test cases are designed to execute paths of a component.

144 performance testing: Testing conducted to evaluate the compliance of a system or component with specified performance requirements. [IEEE]

145 portability testing: Testing aimed at demonstrating the software can be ported to specified hardware or software platforms.

146 precondition: Environmental and state conditions which must be fulfilled before the component can be executed with a particular input value.

147 predicate: A logical statement which evaluates to TRUE or FALSE, normally to direct the execution path in code.

148 predicate data use: A data use in a predicate.

149 predicted outcome: The behaviour predicted by the specification of an object under specified conditions.

150 program instrumenter: See instrumenter.

151 progressive testing: Testing of new features after regression testing of previous features. [Beizer]

152 pseudo-random: A series which appears to be random but is in fact generated according to some prearranged sequence.

153 recovery testing: Testing aimed at verifying the system’s ability to recover from varying degrees of failure.

154 regression testing: Retesting of a previously tested program following modification to ensure that faults have not been introduced or uncovered as a result of the changes made.

155 requirements-based testing: Designing tests based on objectives derived from requirements for the software component (e.g., tests that exercise specific functions or probe the non-functional constraints such as performance or security). See functional test case design.

156 result: See outcome.

157 review: A process or meeting during which a work product, or set of work products, is presented to project personnel, managers, users or other interested parties for comment or approval. [ieee]

158 security testing: Testing whether the system meets its specified security objectives.

159 serviceability testing: See maintainability testing.

160 simple subpath: A subpath of the control flow graph in which no program part is executed more than necessary.

161 simulation: The representation of selected behavioural characteristics of one physical or abstract system by another system. [ISO 2382/1].

162 simulator: A device, computer program or system used during software verification, which behaves or operates like a given system when provided with a set of controlled inputs. [IEEE,do178b]

163 source statement: See statement.

164 specification: A description of a component’s function in terms of its output values for specified input values under specified preconditions.

165 specified input: An input for which the specification predicts an outcome.

166 state transition: A transition between two allowable states of a system or component.

167 state transition testing: A test case design technique in which test cases are designed to execute state transitions.

168 statement: An entity in a programming language which is typically the smallest indivisible unit of execution.

169 statement coverage: The percentage of executable statements in a component that have been exercised by a test case suite.

170 statement testing: A test case design technique for a component in which test cases are designed to execute statements.

171 static analysis: Analysis of a program carried out without executing the program.

172 static analyzer: A tool that carries out static analysis.

173 static testing: Testing of an object without execution on a computer.

174 statistical testing: A test case design technique in which a model is used of the statistical distribution of the input to construct representative test cases.

175 storage testing: Testing whether the system meets its specified storage objectives.

176 stress testing: Testing conducted to evaluate a system or component at or beyond the limits of its specified requirements. [IEEE]

177 structural coverage: Coverage measures based on the internal structure of the component.

178 structural test case design: Test case selection that is based on an analysis of the internal structure of the component.

179 structural testing: See structural test case design.

180 structured basis testing: A test case design technique in which test cases are derived from the code logic to achieve 100% branch coverage.

181 structured walkthrough: See walkthrough.

182 stub: A skeletal or special-purpose implementation of a software module, used to develop or test a component that calls or is otherwise dependent on it. After [IEEE].

183 subpath: A sequence of executable statements within a component.

184 symbolic evaluation: See symbolic execution.

185 symbolic execution: A static analysis technique that derives a symbolic statement for program paths.

186 syntax testing: A test case design technique for a component or system in which test case design is based upon the syntax of the input.

187 system testing: The process of testing an integrated system to verify that it meets specified requirements. [Hetzel]

188 technical requirements testing: See non-functional requirements testing.

189 test automation: The use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, and other test control and test reporting functions.

190 test case: A set of inputs, execution preconditions, and expected outcomes developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement. After [IEEE,do178b]

191 test case design technique: A method used to derive or select test cases.

192 test case suite: A collection of one or more test cases for the software under test.

193 test comparator: A test tool that compares the actual outputs produced by the software under test with the expected outputs for that test case.

194 test completion criterion: A criterion for determining when planned testing is complete, defined in terms of a test measurement technique.

195 test coverage: See coverage.

196 test driver: A program or test tool used to execute software against a test case suite.

197 test environment: A description of the hardware and software environment in which the tests will be run, and any other software with which the software under test interacts when under test including stubs and test drivers.

198 test execution: The processing of a test case suite by the software under test, producing an outcome.

199 test execution technique: The method used to perform the actual test execution, e.g. manual, capture/playback tool, etc.

200 test generator: A program that generates test cases in accordance to a specified strategy or heuristic.

201 test harness: A testing tool that comprises a test driver and a test comparator.

202 test measurement technique: A method used to measure test coverage items.

203 test outcome: See outcome.

204 test plan: A record of the test planning process detailing the degree of tester indedendence, the test environment, the test case design techniques and test measurement techniques to be used, and the rationale for their choice.

205 test procedure: A document providing detailed instructions for the execution of one or more test cases.

206 test records: For each test, an unambiguous record of the identities and versions of the component under test, the test specification, and actual outcome.

207 test script: Commonly used to refer to the automated test procedure used with a test harness.

208 test specification: For each test case, the coverage item, the initial state of the software under test, the input, and the predicted outcome.

209 test target: A set of test completion criteria.

210 testing: The process of exercising software to verify that it satisfies specified requirements and to detect errors.

211 thread testing: A variation of top-down testing where the progressive integration of components follows the implementation of subsets of the requirements, as opposed to the integration of components by successively lower levels.

212 top-down testing: An approach to integration testing where the component at the top of the component hierarchy is tested first, with lower level components being simulated by stubs. Tested components are then used to test lower level components. The process is repeated until the lowest level components have been tested.

213 unit testing: See component testing.

214 usability testing: Testing the ease with which users can learn and use a product.

215 validation: Determination of the correctness of the products of software development with respect to the user needs and requirements.

216 verification: The process of evaluating a system or component to determine whether the products of the given development phase satisfy the conditions imposed at the start of that phase. [IEEE]

217 volume testing: Testing where the system is subjected to large volumes of data.

218 walkthrough: A review of requirements, designs or code characterized by the author of the object under review guiding the progression of the review.

Metrics in Software Testing »

1) Schedule variance = (Actual time taken - Planned time) / Planned time * 100

2) Effort variance = (Actual effort - Planned Effort)/Planned effort * 100

3) Defect unearthing efficiency = 100 * STRs found in pass 1/ ( STRs found in pass 1 + STRs found in pass 2 but existing in pass 1) = Defect unearthing efficiency for pass 1.
Thus defect unearthing efficiency can be found for all passes.

Also defect unearthing efficiency in terms of field STRs could be found as follows:

= 100 * Total STRs found in Polaris for a release/ (Total STRs found in Polaris for a release + Field STRs for that release)

4) Test case efficiency = (Total STRs - STRs not mapped)/Total STRs * 100
5) Test case coverage = (Total Test cases - STRs that cannot be mapped to test cases)/ Total Test Cases * 100

PRODUCTIVITY METRICS

1. OUTPUT / INPUT OR VALUE OF MATERIAL / COST OF PRODUCTION

Eg: Non Commented Software Source (NCSS) Per Engineer Per Month
NCSS per Person Month
NCSS per Function Point
NCSS can also be replaced by KLOC (Kilo Lines of Code)

QUALITY METRICS

1. DEFECTS PER KLOC
2. DEFECTS PER FUNCTION POINT
3. % OF MAINTENANCE / PROJECT EFFORT
4. POST RELEASE STABILITY
5. PREDELIVERY DEFECT REMOVAL EFFICIENCY
6. DELIVERED DEFECTS PER KLOC
7. (COST OF REWORK / TOTAL COST ) X 100

PROCESS IMPROVEMENT METRICS

1. PROCESS IMPROVEMENT OR OVERALL EFFICIENCY = RETURN ON INVESTMENT
2. % OF RECYCYLED CODE
3. % OF CALENDER TIME / PHASE
4. INCREASED RETURNS / INCREASED COST
5. % OF DEFECTS IN PHASE OF THIS YEAR / % OF DEFECTS IN PHASE OF LAST YEAR
6. DIFFICULTY COMPLEXITY = McCABE COMPLEXITY
7. TOTAL RECORDED PRE-DELIVERY DEFECTS / TOTAL FOUND DURING UAT
8. POST RELEASE DISCOVERED DEFECTS DENSITY OVER PERIOD

OTHERS

1. TEST COMPLETION CRITERIA = NO. OF HOURS OF TEST WITHOUT BUGS
2. DEFECTS PER WEEK
3. % BRANCH COVERAGE BY TEST
4. MAINTAINABILITY = MEAN TIME TO CORRECT
5. INTEGRITY = Σ ( 1 – THREAT X (1 – SECURITY) )
6. USABILITY = NET INCREASE IN PRODUCTION OVER EARLIER SYSTEM
7. CUSTOMER BEHAVIOR = VOLATALITY INDEX
8. CUSOMER BEHAVIOR = NO OF CHANGES IN REQUIREMENTS OVER A PERIOD
9. PRODUCTIVITY = $ PER KLOC
KLOC PER MONTH
MONTHS PER KLOC

10. DOCUMENTATION = PAGES PER KLOC PAGES PER PERSOM MONTHS $ PER PAGE
11. QUALITY = ERRORS PER KLOC $ PER ERROR
12. FUNCTIONALITY = FUNCTION POINT PER PROGRAM, FUNCTION POINT PER KLOC MAINTAINED
13. CUSTOMER SATISFACTION = NO. OF COMPLAINTS / PERIOD OF TIME
1 / NO. OF COMPLAINTS

PREVENTIVE CONTROLS

Controls that are designed to prevent an error, omission or malicious act from occurring.

1. DATA DICTIONARY
2. STRUCTURED TECHNIQUES
3. PROGRAMMING STANDARDS
4. DOCUMENTATION STANDARDS
5. PROCESSING PARAMETERS
6. ON-LINE PROMPTING
7. SELF-HELP FEATURES
8. DEFAULT OPTIONS
9. GOOD SCREEN DESIGN
10. FIELD HIGHLIGHTS
11. SCREEN DIAGNOSTIC MESSAGES
12. PRE NUMBERED FORMS
13. SYSTEM ASSIGNED NUMBERS
14. PRE-CODED FORMS / SCREENS
15. TURN AROUND DOCUMENTS
16. DATA OWNERSHIP
17. DATA CLASSIFICATION
18. REFERENCE VALUES OR CODE KEPT OUTSIDE THE PROGRAM
19. PASSWORDS TO FUNCTIONS
20. TRANSACTION CANCELLATION
21. DATA ENCRYPTION
22. MANAGEMENT APPROVALS
23. CONCURRENT ACCESS CONTROLS

DEFECTIVE CONTROLS

Controls that reflect that an error, omission or malicious act has occurred, and reports the occurrence.
 Access Violation Log

1. BATCH CONTROL TOTALS
2. HASH TOTALS
3. LIMIT CHECKS
4. REASONABLENESS TEST
5. CHECK DIGITS
6. OVERFLOW CHECKS
7. FORMAT CHECKS
8. DATA CHECKS
9. LABEL CHECKS
10. COMPLETENESS TESTS
11. RANGE TESTS
12. RECORD COUNTS
13. SIGN TEST
14. SIZE TEST
15. SEQUENTIAL CHECKS
16. DUPLICATION CHECKS
17. CROSS RECORD EDITING
18. SYSTEM MATCHING
19. FIELD COMBINATION TEST
20. VALIDITY CHECKS
21. RUN-TO-RUN TOTALS
22. SUSPENSE FILES
23. HEAD AND TRAILER RECORD VERIFICATION
24. BALANCE CONTROL
25. SYSTEM LOGGING OF TRANSACTIONS (LOG OFF)

COMPARISON TOTALS

1. COMPUTATION CONTROLS
2. RATIO TEST
3. ROUNDING TECHNIQUE
4. DESCRIPTIVE READ BACK
5. SYSTEM WALKTHROUGH
6. DATA CHECK
7. KEY VERIFICATION
8. ONE FOR ONE CHECK (MANUAL)

CORRECTION CONTROL

Controls that correct errors, omissions, or malicious acts one they are detected in future date.

1. PROGRAM COMMENTS
2. JOB CONTROL COMMENTS
3. AUTOMATIC ERROR CORRECTIONS
4. OVERRIDE BY SUPERVISOR
5. AUDIT TRAIL REPORTS
6. CONTROL REPORTS
7. EXCEPTION REPORTS
8. PRODUCTIVITY REPORTS
9. AGING REPORTS
10. ERROR REPORTS
11. BEFORE / AFTER IMAGE RECORD REPORTING FOR FILE MAINTENANCE
12. ERROR TOTALS
13. DOCUMENTATION

RECOVERY CONTROLS

1. AUTOMATIC BACKUP AND RECOVERY
2. JOURNALIZING
3. DATA RETENTION YEARS
4. CHECK POINT CONTROLS
5. TRANSACTION BACK OUT
6. RECOVERY LOGGING
7. FALL BACK PROCEDURE

What’s the difference between load and stress testing? »

Boris Beizer says:

One of the most common, but unfortunate misuse of terminology is treating “load testing” and “stress testing” as synonymous. The consequence of this ignorant semantic abuse is usually that the system is neither properly “load tested” nor subjected to a meaningful stress test.

1. Stress testing is subjecting a system to an unreasonable load while denying it the resources (e.g., RAM, disc, mips, interrupts,etc.) needed to process that load. The idea is to stress a system to the breaking point in order to find bugs that will make that break potentially harmful. The system is not expected to process the overload without adequate resources, but to behave (e.g., fail) in a decent manner (e.g., not corrupting or losing data). Bugs and failure modes discovered under stress testing may or may not be repaired depending on the application, the failure mode, consequences, etc. The load (incoming transaction stream) in stress testing is often deliberately distorted so as to force the system into resource depletion.

2. Load testing is subjecting a system to a statistically representative (usually) load. The two main reasons for using such loads is in support of software reliability testing and in performance testing. The term “load testing” by itself is too vague and imprecise to warrant use. For example, do you mean representative load,” “overload,” “high load,” etc. In performance testing, load is varied from a minimum (zero) to the maximum level the system can sustain without running out of resources or having, transactions suffer (application-specific) excessive delay.

3. A third use of the term is as a test whose objective is to determine the maximum sustainable load the system can handle. In this usage, “load testing” is merely testing at the highest transaction arrival rate in performance testing.

Quick Test Professional Questions & Answers Part 2 »

11.Keyword view in QTP is also termed as

Icon based view

12.What is the use of data table in QTP?

parameterizing the test

13.What is the use of working with actions?

To design a modular and efficient tests

14.What is the file extension of the code file and object repository file in QTP?

The extension for code file is .vbs and the extension for object repository is .tsr

15.What are the properties we can use for identifying a browser and page when using descriptive programming?

The name property is used to identify the browser and the title property is used to identify the page

16.What are the different scripting languages we can use when working with QTP?

VB script

17.Give the example where we can use a COM interface in our QTP project?

COM interface appears in the scenario of front end and back end.

18.Explain the keyword createobject with example

createobject is used to create and return a reference to an automation object.

For example:
Dim ExcelSheetSet
ExcelSheet=createobject(“Excel.Sheet”)

19.How to open excel sheet using QTP script?

You can open excel in QTP by using the following command
System.Util.Run”Path of the file”

20.Is it necessary to learn VB script to work with QTP?

Its not mandate that one should mastered in VB script to work with QTP. It is mostly user friendly and for good results we need to have basic VB or concepts which will suffice

21.If WinRunner and QTP both are functional testing tools from the same company. Why a separate tool QTP came in to picture?

QTP has some additional functionality which is not present in WinRunner. For example,you can test(Functionality and Regression testing) an application developed in .Net technology with QTP,which is not possible to test in WinRunner

22.Explain in brief about the QTP automation object model

The test object model is a large set of object types or classes that QTP uses to represent the objects in our application. Each test object has a list of properties that can uniquely identify objects of that class

23.What is a Run-Time data table?

The test results tree also includes the table-shaped icon that displays the run-time data table-a table that shows the values used to run a test containing data table parameters or the data table output values retrieved from a application under test

24.What are all the components of QTP test script?

QTP test script is a combination of VB script statements and statements that use QuickTest test objects ,methods and properties

25. What is test object?

Its an object that QTP uses to represent an object in our application. Each test object has one or more methods and properties that we can use to perform operations and retrieve values for that object. Each object also has a number of identification properties that can describe the object.

26.What are all the rules and guidelines want to be followed while working in expert view?

Case-sensitivity

VB script is not case sensitive and does not differentiate between upper case and lower case spelling of words.

Text strings

When we enter value as a string, that time we must add quotation marks before and after the string

Variables

We can use variables to store strings,integers,arrays and objects. Using variables helps to make our script more readable and flexible.

Parentheses

To achieve the desired result and to avoid the errors,it is important that we use parentheses() correctly in our statements.

Comments

We can add comments to our statements using apostrophe(’),either at a beginning of the separate line or at the end of a statement

Spaces

We can add extra blank spaces to our script to improve clarity. These spaces are ignored by the VB script