Software Testing
Software Testing
SOFTWARE TESTING
While all projects will benefit from testing, some projects may not require independent
test staff to succeed.
In some cases an IT organization may be too small or new to have a testing staff even if
the situation calls for it. In these circumstances it may be appropriate to instead use
contractors or outsourcing, or adjust the project management and development approach.
Inexperienced managers sometimes gamble on the success of a project by skipping
thorough testing or having programmers do post-development functional testing of their
own work, a decidedly high risk gamble.
• miscommunication or no communication
• programming errors
• time pressures
• software complexity
• changing
• poorly documented code
• A lot depends on the size of the organization and the risks involved. For large
organizations with high-risk (in terms of lives or property) projects, serious
management buy-in is required and a formalized QA process is necessary.
• Where the risk is lower, management and organizational buy-in and QA
implementation may be a slower, step-at-a-time process. QA processes should be
balanced with productivity so as to keep bureaucracy from getting out of hand.
2
• For small groups or projects, a more ad-hoc process may be appropriate,
depending on the type of customers and projects. A lot will depend on team leads
or managers, feedback to developers, and ensuring adequate communications
among customers, managers, developers, and testers.
• Other possibilities include incremental self-managed team approaches such as
'Kaizen' methods of continuous process improvement, the Deming-Shewhart
Plan-Do-Check-Act cycle, and others.
Validation typically involves actual testing and takes place after verifications are
completed. The term 'IV & V' refers to Independent Verification and Validation.
8. What is a 'walkthrough'?
9. What's an 'inspection'?
• poor requirements - if requirements are unclear, incomplete, too general, and not
testable, there will be problems.
• unrealistic schedule - if too much work is crammed in too little time, problems are
inevitable.
• inadequate testing - no one will know whether or not the program is any good
until the customer complains or systems crash.
• featuritis - requests to pile on new features after development is underway;
extremely common.
• miscommunication - if developers don't know what's needed or customer's have
erroneous expectations, problems are guaranteed.
Quality software is reasonably bug-free, delivered on time and within budget, meets
requirements and/or expectations, and is maintainable. However, quality is obviously
a subjective term. It will depend on who the 'customer' is and their overall influence
in the scheme of things. A wide-angle view of the 'customers' of a software
4
development project might include end-users, customer acceptance testers, customer
contract officers, customer management, accountants/testers/salespeople, future
software maintenance engineers, stockholders, magazine columnists, etc.
'Good code' is code that works, is bug free, and is readable and maintainable. Some
organizations have coding 'standards' that all developers are supposed to adhere to,
but everyone has different ideas about what's best, or what is too many or too few
rules. For C and C++ coding, here are some typical ideas to consider in setting
rules/standards.
'Design' could refer to many things, but often refers to 'functional design' or 'internal
design'. Good internal design is indicated by software code whose overall structure is
clear, understandable, easily modifiable, and maintainable; is robust with sufficient
error-handling and status logging capability; and works correctly when implemented.
Good functional design is indicated by an application whose functionality can be
traced back to customer and end-user requirements.
The life cycle begins when an application is first conceived and ends when it is no
longer in use. It includes aspects such as initial concept, requirements analysis,
functional design, internal design, documentation planning, test planning, coding,
document preparation, integration, testing, maintenance, updates, retesting, phase-out,
and other aspects.
One of the most reliable methods of ensuring problems, or failure, in a large, 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.
21. What steps are needed to develop and run software tests?
• 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
6
case should contain particulars such as test case identifier, test case name,
objective, test conditions/setup, input data requirements, steps, and expected
results.
• 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.
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
• 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
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
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.)
7
managers should be notified, and provided with some documentation as evidence of the
problem.
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:
29. 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.