Testing of systems is presently more of an art than a science, even considering current procedures and methodologies that support a more rigorous approach to testing. This becomes even more apparent during the testing of large, embedded systems that have evolved over time. To deliver the best possible product, the role of a System Tester has become vital in the lifecycle of product development. This pattern language has been derived from the experience of veteran System Testers to help System Testers evaluate the readiness of a product for shipping to the customer. Though these patterns have been derived from experience during the system test phase of the product lifecycle, many of the patterns are orthogonal to all testing phases. In addition to System Testers, these patterns may be useful to Designers and Project Managers.
These patterns have been grouped according to their usefulness in the system testing process: The Test Organization, Testing Efficiency, Testing Strategy, and Problem Resolution. This is not a complete pattern language.
The image below can be used to immediately move to a group of patterns or an individual pattern by clicking on the name of the pattern in which you are interested. It is recommended, however, that the paper be read from top to bottom, instead of moving between the image and each pattern individually.
Context
As a pattern language, these patterns share a common context. Each of the patterns may add to this context or slightly modify it, but it is this common context that helps focus these patterns into a pattern language. The context for an individual pattern will only be given when it modifies the common context.
A system is under development into which new features are being introduced. The system may be new development work, or may be an existing, working system. There are a limited number of customers for the system and the features are being developed at the request of these customers. The customers then sell the features to the end users. New features integrate well into the system, but introducing new features runs the risk of breaking old features. These features are implemented in the system by Designers in a design group. The Designers are responsible for everything from analysis, design, and implementation, through unit testing and integration testing.
The features of the system are designed in parallel. As code becomes available, incremental loads of the system are released for testing. Each of these loads may include a combination of complete or partial features. This process compresses the development schedule, but it also results in the introduction of problem resolution and features in parallel. Problems resolved in one load need to be resolved in any feature development that is in progress.
The system, in this case, is a large embedded system. It consists of multiple processor units and each processor is controlled by a multi-processing operating system. Events in the system are thus non-deterministic. Any feature of the system can have an interaction with any other feature in the system. Most of these patterns apply to the testing of any multi-processing, non-deterministic system. The set of all tests needed to completely verify such a system is infinitely large. The set of regression tests to reasonably test the system grows with every release, so that executing all of the tests would require more than the development schedule allows for a new feature release.
The features are being tested in parallel with the design effort by an independent group known as System Test whose members are known as System Testers. The testing done by this group is largely "black box" in nature. There is a reliable process in place for testing the system, from unit testing to system testing. The System Test group is responsible for regression testing the system, the conformance of new features to the specification, the equivalence of the system to prior releases, and the evaluation of the release of the system according to criteria set by the customer. These criteria are consistent with every release. System testing concentrates on the functionality of the system and ensures that the system continues to operate in a consistent manner. To accomplish this, the testing often takes the form of stressing or breaking the system.
These patterns do not represent the process of system testing any more than the GOF book [Gamma+95] represents object-oriented design. The System Testers understand the system testing process. Instead, they are a means of sharing some of the secrets of experienced System Testers. Following these patterns will help minimize stress and maximize enjoyment of doing system testing.
Forces
Just as these patterns share a common context, they also share common forces. The individual patterns may place more emphasis on specific forces, ignore some forces or add forces that are not important to the pattern language as a whole. Forces for an individual pattern will only be given in the case where they are modified or emphasized.
Most of the forces for these patterns are elements of risk management. The patterns evaluate these risks to find an acceptable, intelligent balance among cost, time, content and quality. The common forces are:
The following patterns focus on the relationship of the System Testers to the rest of the organization. They are less technical in nature and are closely related to the patterns of James Coplien [Coplien95], Neil Harrison [Harrison96], Alistar Cockburn [Cockburn96], and Don Olson [Olson95].
| Pattern: | The Tester's More Important Than The Test Cases | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Problem |
How should work be assigned to Testers to achieve maximum testing efficiency? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Forces |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Solution |
Assign tasks to System Testers based on their experience and talent. No matter how effective the test cases are, the testing results are highly dependent on the Tester. Davis states that "People are the key to success" in Principle 131 of [Davis95]. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Resulting |
Testers will be more effective if their skills are used appropriately. The resulting test activity will be more efficient and the Testers will be more productive. Repeated applications of this pattern can result in burnout of the Tester or the development of irreplaceable expertise. Testers who become too familiar with an area often overlook problems by making invalid assumptions. Career development often gets overlooked when existing skills are always used. No new skills are acquired. It is sometimes better to give assignments a half step beyond capabilities. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Rationale |
The Tester is just as important to the success of the project as the Designer. The Tester is the most important element in the testing equation. The same test case will not necessarily produce the same result in the hands of different Testers. Testers look at a list of errors differently. Some Testers know how to break the system vs. getting a correct result. Some Testers are good at finding problems. Some Testers are good at working with Designers. Matching the skills of the Testers with the appropriate tasks will produce more effective testing. DeMarco and Lister [DeMarco+87] documented that there is a wide variance in performance between the worst and best performers for a given task. To be successful, the best performers should be assigned to the most critical tasks and everyone should be given an assignment that best fits their skills. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Pattern: | Designers Are Our Friends |
|
Problem |
How can System Test work effectively with the Designers? |
| Forces |
|
|
Solution |
Good System Testers build rapport with Designers. Approach Designers with the attitude that the system has a problem that both of you need to work on together to resolve. This gives the Designer and the System Tester a common goal. Always Document the Problem. |
|
Resulting |
The System Tester/Designer relationship becomes one of cooperation in an attempt to resolve a problem. Designers are less likely to become defensive and "run and hide" when a System Tester approaches. |
|
Rationale |
We are all employees of the same company and should work with each other to solve problems. Designers and System Testers are partners. Building good relationships with Designers gets things done faster. Personalizing problems makes Designers defensive. We can learn from each other and benefit both. |
|
Related |
Document the Problem to provide the Designer with the information to resolve the problem. The members of a relationship should remain open to the contributions of other members. Don't Flip the Bozo Bit [McCarthy95, Rising96] and close off the relationship, regardless of past history. |
| Pattern: | Get Involved Early |
|
Problem |
How can System Test maximize the support from the Designers? |
| Forces |
|
|
Solution |
Establish a good working relationship with the Designers early in the project. Don't wait until you need to interact with a Designer to develop a working relationship. By that time it is too late. Trust must be built over time. One way to accomplish this is to learn the system and the features at the same time the Designer is learning them. Attend reviews of the requirements and design documentation. Invite the Designer to test plan reviews. |
|
Resulting |
When a good working relationship is built over time, it is easier to resolve problems when they are discovered. Be sure that the relationship with the Designer does not affect your judgment as an effective System Tester. There can be a tendency to avoid areas of conflict when friends are involved, to look the other way when problems are found in a certain area where the Designer is a close friend. It is also dangerous to have too much information about an area. This can lead to certain kinds of testing that depends on this knowledge instead of an objective black box view. |
|
Rationale |
We are all more willing to work with people we know well. Waiting until the heat of battle to get to know the people who can help you resolve problems leads to delays in solutions. If a trusting relationship has already been established, the problem solving process is smoother. |
|
Related |
Early involvement is important in establishing that Designers Are Our Friends. |
| Pattern: | Time to Test |
|
Alias |
Test When There's Something to Test |
|
Problem |
When is it appropriate to start testing? |
|
Context |
The system can be broken into areas, such as features or functional areas, which are minimally dependent on each other. Ideally, once an area is released for system testing, it would not be impacted in future software loads. |
| Forces |
|
|
Solution |
Ideally, system testing should not start until all the software is finished. However, waiting until everything is complete leaves no time for doing all of the system testing. Start testing when an area of functionality is available for testing, but not before. An agreement should be reached with the Designers that the area is ready for testing (see Designers Are Our Friends). Track areas that aren't ready for testing so you don't waste time in those areas. |
|
Resulting |
More interval is available for testing if testing begins on early increments of the software loads. This also exposes the load to more testing, which will uncover more problems. More critical problems will be discovered earlier, when there is time to correct them. By starting early, there is a risk that regression testing of the area will be required. An End User Viewpoint should be taken for this testing. Additionally, if testing is started too early, untested fixes start finding their way into the load. |
|
Rationale |
System Test is often pushed to start testing as early as possible. However, starting to test the system too early is a waste of time. It is possible, however, to test parts of the system that are ready earlier than others. |
|
Related |
You must Take Time in determining whether an area is ready for testing. |
| Pattern: | Take Time |
|
Problem |
How much time should Designers be given to finish work that is behind schedule? |
| Forces |
|
|
Solution |
Give Designers the time they request, within reason. It is Time to Test other areas in the mean time. |
|
Resulting |
System testing will take less time if the design quality is better. |
|
Rationale |
Higher quality systems take less time to test than poorer quality systems. By giving Designers time they truly need, there will be a significant pay-back in the end in avoiding the effort to test and fix all the problems in a poor quality system. Increasing planned development time 15% cuts the number of defects in half [Remer96]. All the forces of Take Time and Time to Test must be carefully weighed before deciding which pattern to follow. |
As stated in the context, it is not possible to completely test a system. The following patterns steer the Tester toward areas that are more likely to contain errors. Test plan development and testing can concentrate on these areas to find more problems earlier in the project.
| Pattern: | "Unchanged" Interfaces |
|
Problem |
How should scheduling of third party interface functionality developed outside the company be scheduled? |
|
Context |
Interfaces developed outside the company are used in the system, in whole or in part, without changes to that interface. The interface could be a GUI, a library, a hardware component or any other third-party product. The initial assumption is that if third party interface functionality is to be supported in the new system and if the same interface has been used in other systems and has not changed, then no testing or very limited testing is required. |
| Forces |
|
|
Solution |
The System Tester must not fall into the trap of assuming that unchanged interfaces will function correctly in the new system. The System Tester must pay particular attention to any interface ported from outside the company that is not assigned for inclusion in the feature list of the new system. Since no one else is directly impacted by this change, the System Tester needs to be pro-active in scheduling this testing. Testing the correct operation of the interface on the new system should begin as soon as that interface is chosen for the new system. This will verify the functionality of that interface. Once the ported interface is operational in the new system, testing should begin immediately to ensure that the functionality is the same and that it does not affect the rest of the system. This can be done while the Designers are working on the new features for the system. |
|
Resulting |
System Test will find problems with ported interfaces early in the project's life cycle and limit the impact of any problems on the system release. This will allow focused effort on fixing the problems while there is still time to change how the system functions, what is included in the system, or when a system is ready to be released. Less overall effort and stress will be expended during system development, time will be saved and the system will be released as planned. |
|
Rationale |
No matter how established a product is or how well written a chunk of code is, if it is not an in-house product there will always be problems with porting that functionality into a new system. If testing of the functionality is not immediately begun, problems will invariably be found at the worst possible timeright before release of the system. Any product brought in from outside the company will not meet the quality, functionality, or customer expectations of the company. Thus, changes will be made. |
| Pattern: | Ambiguous Documentation |
|
Problem |
How can possible problem areas of the system be pinpointed so that the most problems can be found in the least amount of time? |
|
Context |
Feature design documentation and/or user documentation is available. This can be the requirements from which the feature is developed, documentation developed by the Designer, or documentation developed for the customer. |
| Forces |
|
|
Solution |
Study the documentation available on the system. Look for areas that seem ambiguous or ill-defined. Write test plans that cover these areas more thoroughly and concentrate testing in these areas (see End User Viewpoint). If Designers can tell you all about a feature, it probably works. It's what they can't tell you that needs your attention during testing. It is also advantageous to raise these areas to the attention of the Designers and Systems Engineers so that problems in these areas can be resolved prior to system testing. These areas should still be tested more thoroughly than areas that are well documented and well understood. |
|
Resulting |
Problems are likely to be found and corrected earlier. Reviewing documentation reinforces that Designers Are Our Friends. |
|
Rationale |
If there's more than one interpretation of the documentation, Designers will write more than one code interpretation. This must be uncovered during system test if it is not detected earlier. If you Get Involved Early, there is a better chance of getting documentation fixed early, and thus the implementation correct. If problems still exist, finding them early makes it more likely that they will be fixed. Good specs help everyone! |
| Pattern: | Use Old Problem Reports |
|
Problem |
What areas of the system should be tested first so that the most problems can be found in the least amount of time? |
|
Context |
Testing of existing features is being considered. Problem reports from previous releases are available. |
|
Solution |
Examine problem reports from previous releases to help select regression tests. Since it would be inefficient to retest for all old problems, look at problems reported after the last valid "snapshot" of the system. Categorize problem reports to see if a pattern is determined that could be used for additional testing. |
|
Resulting |
Problems that still exist will be found and corrected. |
|
Rationale |
Since a problem report represents something that escaped in a previous release, this could be a good indicator of a problem in the current load. Problem reports tend to point to areas where problems always occur. Problem reports often represent a symptom that is difficult to connect with an underlying problem. Additionally, fixes of a previous release are often done in parallel with new development on the current releases. These fixes don't always find their way into the current load. |
| Pattern: | Problem Area |
|
Problem |
What areas of the system should receive concentrated testing, regardless of the features being implemented? |
|
Context |
Historical data is available for the system under test. |
|
Solution |
Keep a list of persistent problem areas and test cases to verify them, not just for resolution of the current problems, but also for use in subsequent testing. Retest regularly using these test cases, even one last time before the release goes out the door. Identify areas of the system that historically have problems. Test these areas thoroughly, even if there are no new features going into them. These areas can be identified by considering: the experience of the System Testers; Use Old Problem Reports; Ambiguous Documentation; observing areas that Designers tend to avoid working in from one release to the next. |
|
Resulting |
By testing problem areas early in the schedule, more time is available to correct any problems found. |
|
Rationale |
Areas of the system that historically have problems don't magically become error-free overnight. Some problems occur in every incremental release of the system. Some areas have problems in every release. These problems and problem areas should be tracked so that they can be systematically retested on every release of the system. |
Once a testing strategy has been set into place and testing has commenced, the following patterns help find problems that might not be found until it is too late to correct them. They also ensure that the delivered product will be acceptable to the customer.
| Pattern: | Busy System |
|
Problem |
Under what conditions should system tests be executed to find the most problems? |
|
Context |
Simulators exist that provide a reasonable amount of activity on the system. |
|
Solution |
Test in an environment which simulates a busy system. The level of activity need not stress the system, but should approach a level that the system regularly experiences. |
|
Resulting |
Tests that work fine under normal conditions often fail in an unacceptable manner when the system is busy. |
|
Rationale |
It is redundant to run a feature test case that has already passed during the system testing phase. However, these cases will often fail under a busy system. A telephony system can be busied using a Traffic Load Simulator which simulates phone calls into the system. By running feature tests with a moderate amount of traffic running on the system, problems are found that don't appear when the system is idle. |
|
Related |
Don't Trust Simulations. |
| Pattern: | Don't Trust Simulations |
|
Problem |
How should the test environment be configured when using test simulations? |
|
Context |
Simulations of system use are available, including simulators of real uses of the system. |
| Forces |
|
|
Solution |
Try to test in an environment as close to the real world as possible. However, system behavior may be correct when using a simulation, but not work at all in the real world. Apply simulations appropriately but don't use them as a substitute for real world testing. |
|
Resulting |
Systems that handle simulations, which tend to give predictable input to the system, often fail in the real world of unpredictable behaviors. By supplementing the simulation with real world testing, such situations are minimized. |
|
Rationale |
There is a proper use for simulations, but they are not substitutes for real-world testing. While a large portion of the testing can be done using simulations, testing of the system is not complete without providing real world scenarios in the testing process. A simulator can run a test case successfully one hundred times, but the test case may fail when run by a human because of unpredictable behaviors that are introduced. |
|
Related |
Follow End User Viewpoint to accomplish real world testing. |
| Pattern: | End User Viewpoint |
|
Problem |
How do you test the new features in a system without repeating testing that has already been completed? |
| Forces |
|
|
Solution |
Test outside the normal scope of the features. Take the end user's point of view. Don't system test with the same tests used for feature testing. Use the customer documentation. Test feature interactions. |
|
Resulting |
By testing from an end user viewpoint, flaws in the system, as the end user will use it, can be discovered and corrected before the system is shipped. These tests expand the scope of previous testing and are not redundant. |
|
Rationale |
End users don't use systems as they are designed. Designers develop features, but the system is sold to provide services to the end user. It is these services that the end user sees, not the features that are developed by the Designers. |
| Pattern: | Unusual Timing |
|
Problem |
What additional testing should be done that may not be covered by the test plans for an area? |
|
Solution |
Test unusual timing. Run tests more quickly or slowly than expected. Abort tests in the middle of execution. Real end users will use the system from an End User Viewpoint. |
|
Resulting |
Errors caused by unusual timings are detected and corrected. |
|
Rationale |
Things that work properly under normal timing conditions may break under unusual timing conditions. Testing for unusual timing scenarios is often difficult to set up and run. Test cases that are difficult to run are the ones that probably need to be run the most. |
| Pattern: | Multiple Processors |
|
Problem |
What strategy should be followed when System Testing a system comprised of multiple processors? |
|
Solution |
Test across multiple processors. |
|
Resulting |
Problems that occur in one processor will probably occur in other processors. Tests that pass on one processor may fail on another. |
|
Rationale |
When a problem is found in one processor, that feature will usually have problems running on other processors. A dirty feature is a dirty feature. Features that run on multiple processors aren't always designed to run on all processors. |
| Pattern: | Scratch 'n Sniff |
|
Alias |
Problem Cluster |
|
Problem |
Once testing is started, what is a good strategy for determining what to test next? |
|
Context |
A problem has already been found in an area. |
|
Solution |
Increase the testing in areas where problems have already been found. |
|
Resulting |
Problematic areas will be targeted sooner and problems resolved earlier. |
|
Rationale |
Problems tend to be found in clusters. A problem found in an area is a good indicator of other problems in the same area. Scratch 'n Sniff if it smells bad, it probably is. Bugs are like roaches: find one and you'll find a lot of them. They also evolve quickly. Testing can be organized so that a "first pass" is taken that tests the breadth of the system. Half of the problems found will be in 15% of the modules [Davis95]. Deeper testing of the areas with problems will likely find more problems. Use Old Problem Reports to look at areas that may need more testing. |
| Pattern: | Strange Behavior |
|
Problem |
What should be done when a feature is working, but not as expected? |
|
Context |
The System Tester has participated in the system testing of previous releases of the product and is familiar with feature behavior. |
|
Solution |
Take any unusual behavior as an indication of a possible problem and follow up. This should be done even if the problem is not related to the test being executed. Look for features that behave differently. Be wary when familiar tests produce results that, while acceptable, are not what was expected. |
|
Resulting |
A problem won't be missed because it doesn't produce feature behavior that is not significantly different from the expected outcome. |
|
Rationale |
Changes to the way a feature works, even though it may still work correctly, often indicate that the feature may have broken. If the change is deliberate, all System Testers should be notified. |
| Pattern: | Killer Test |
|
Problem |
How can the quality of a system under development be determined? |
|
Context |
Development is drawing to a close. The system is stable. The features are stable and all parties involved, especially management, are interested in how close the system is to being ready for release. |
|
Solution |
Develop a favorite killer test (usually a set of test cases) that can be run at any time, a test that always seems to find problems. This test should provide good system coverage and should be expected to fail, in some manner, most of the time. It is permissible to borrow a killer test, but it is preferred that the test be based on the tester's own experience, as the effectiveness of the test depends on the individual's skill and knowledge of the system. Killer Test is only used toward the end of a release, and is above and beyond a common regression test. It tends to be free-wheeling in nature and typically hard to document. The success of this type of testing is directly related to the individual running the test, because The Tester's More Important Than The Test Cases. While killer tests don't always find the same problem every time they are run, they usually find some problem. Don't wait until the very end of the release or there won't be time to correct the problems found. |
|
Resulting |
The results of the tests are a good gauge of the stability of the system. By finding and fixing the uncovered problems, the system becomes incrementally more stable. |
|
Rationale |
A test that usually fails and can be run in a reasonably short time gives a good measure for how the system is stabilizing. Additionally, since problems are likely to be found, this type of testing is highly efficient. |
The following patterns aid in communication and resolution of problems.
| Pattern: | Document The Problem |
|
Problem |
How should problems found in testing be communicated? |
|
Context |
A problem tracking system is available for problem documentation. |
| Forces |
|
|
Solution |
Write a problem report. Don't argue with a Designer. Don't accept a well-intentioned promise that may or may not get results. Don't informally document the problem. The project should not keep a private list of problems. Testers should not be penalized for documenting problems. Designers should not be punished when problems are documented against them. Do your homework before reporting problems to Designers. Be sure you can explain what happened. Designers always want to see a system debug output. |
|
Resulting |
Problems documented in a problem tracking system are more likely to get resolved in a timely manner. |
|
Rationale |
Use all the tools that are available, even if they are cumbersome. By thoroughly and officially documenting a problem, information does not get lost and a timely resolution is much more likely to occur. Documenting problems is always an area that a project wants to cut back. Cutting back causes many more problems than it seems to solve. In the end, it always takes longer to determine what the problems are than to resolve them. |
|
Related |
Remember, Designers Are Our Friends and System Testers should Get Involved Early. |
| Pattern: | Adopt-A-Problem |
|
Problem |
How can nagging problems be resolved efficiently so that productive testing can continue? |
|
Context |
A problem has been uncovered in the system that has no clear cut solution. Resolving the problem will most likely take a great deal of effort, or worse, it might not get resolved. This pattern should be followed in the context of Designers Are Our Friends. |
| Forces |
|
|
Solution |
Adopt a problem. Treat it as if it were your child. If you uncover a difficult problem, stick with it until it is resolved. Document the Problem. Retest the problem periodically to gather more data on it. Become the responsible designer for the problem. Once the problem is resolved, retest for it periodically to ensure that it stays fixed. If the problem reappears consistently, it may be a Problem Area. |
|
Resulting |
Following the progress of the solution for a problem shows the Designer that you are concerned about getting the problem resolved. Taking an active role in resolving the problem can prevent the problem from bouncing among Designers. Periodically retesting the problem leads to a better understanding of the problem and more symptomatic data. As a result, the probability that the Designer can solve the problem and provide a solution in a timely manner is increased. |
|
Rationale |
Designers have a multitude of things to do, including new development and resolving problems found during testing. Designers tend to work first on things that are known, concrete, and easy. Because of this, trying to resolve a difficult problem often gets pushed to a lower priority. By adopting the problem, there are in effect two people working on the problem. As the System Tester, you can continue to test and debug the problem to gain more information on it, be it information that the Designer requests, or information that appears to be different from previously collected data. The attention you give to the problem also communicates to the Designer that you think it is important to get the problem resolved and are willing to help in facilitating the problem resolution. This second point is important, because you should not come across as a nagging irritant that won't go away, but as a willing participant in the resolution process. Be sure the problem doesn't become a Pet Peeve. |
| Pattern: | Pet Peeve |
|
Problem |
The validity of a problem has been debated to the point of holding up progress. What should be done to resolve the debate? |
|
Context |
This problem should be applied in the context of Adopt-A-Problem and Document the Problem. |
|
Solution |
When a problem is adopted, be sure that the problem doesn't become an annoying thorn in the Designer's side. Don't carry concern for an unresolved problem to extremes, especially when you have no supporting documentation. Keep discussions at a professional level. When the status of the problem becomes a detriment to progress, the System Tester should bring in a third party, such as a Systems Engineer or requirements group, to help resolve the impasse. At this point the System Tester should stop following the status of the problem and start testing other areas. Don't involve the third party too early in the process. |
|
Resulting |
Problems are resolved and not forgotten but no one goes overboard in focusing on one problem to the detriment of the rest of the system. |
|
Rationale |
When deciding to Adopt-A-Problem, a System Tester can become so focused on a particular problem that it becomes a Pet Peeve. Carried to an extreme, this can destroy a good working relationship between the System Tester and the Designer. Problems in the system should not be taken personally by the System Tester [Davis95]. |
The individuals involved in the mining of these patterns have many years of experience in System Testing on the GTD-5® and other projects at AG Communication Systems. The GTD-5® is a central office telephone switch that has gone through many major releases over the past 16 years. The other projects have benefited from this experience and validate the existence of these patterns. Some releases of the GTD-5® and other projects have suffered the consequences of not applying one or more of these patterns. In addition, these patterns have been observed and used by some of the individuals at other companies involved in the development of real-time embedded systems. More information on AG Communication Systems and its product line can be found at http://www.agcs.com.
Acknowledgments
These system test patterns were mined in a patterns mining workshop held on May 10, 1996. The patterns were captured by David DeLano and Linda Rising with Greg Stymfal serving as facilitator for the group. The workshop was attended by the following AGCS System Testers: Dave Bassett, Arvind Bhuskute, Bob Bianca, Ray Fu, Hubert Fulkerson, Eric Johnstone, Rich Lamarco, Krishna Naidu, Ed Nuerenberg, and Lori Ryan. Many of these System Testers, as well as the following, have participated in reviews of the patterns: John Balzar, Terry Bartlett, Ernie Englehart, Carl Gilmore, Neil Khemlani, Jim Kurth, Bob Nations, John Ng, Jim Peterson, Mike Sapcoe, Bill Stapleton, Frank Villars, and Weldon Wong. Thanks to Dave Strand for suggesting the name Scratch 'n Sniff.
"Unchanged" Interfaces has been adapted from a pattern written by Mike Sapcoe during an earlier Patterns Writing course held by David and Linda.
We are grateful for the time and effort given by Ralph Johnson, Neil Harrison and Brian Marick in shepherding these patterns. We would also like to thank the participants of the writers workshop at PLoP '96 for their many valuable comments.
References