Reviewed by Darin. Landed by Maciej.
[WebKit-https.git] / WebKitSite / quality / reduction.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
2 <html>
3 <head>
4   <meta content="text/html; charset=ISO-8859-1"
5  http-equiv="content-type">
6   <title>Test Case Reduction</title>
7   <link rel=stylesheet href="../webkitdev.css">
8 </head>
9 <body>
10 <!--begin sidebar -->
11 <iframe id="sidebar" src="../sidebar.html"></iframe>
12 <!--end sidebar -->
13
14 <div id="banner">
15 Test Case Reduction
16 </div>
17
18 <div id="content">
19 <h2>A general guide to test case reduction</h2>
20 <p>
21 The basic idea behind bug reduction is to take a page that demonstrates a problem and
22 remove as much content as possible while still reproducing the original problem.
23 </p>
24 <h4>Why is this needed?</h4>
25 <p>
26 A reduced test case can help identify the central problem on the
27 page by eliminating irrelevant information, i.e., portions of the HTML
28 page's structure that have nothing to do with the problem.
29 With a reduced test case, the development team will spend
30 less time identifying the problem and more time determining the
31 solution. Also, since a site can change its content or design, the
32 problem may no longer occur on the real-world site. 
33 By constructing a test case you can capture the initial problem.
34 </p>
35 <h4>The first steps</h4>
36 <p>
37 Really the first step in reducing a page is to identify that main
38 problem of the page. For example:
39 <ul>
40   <li>Does the page have text overlapping an image? </li>
41   <li>Is there a form button that fails to work?</li>
42   <li>Is there a portion of the page missing or misaligned?</li>
43 </ul>
44 </p>
45 <p>
46 After you have made this determination, you need to create a local copy
47 of the page created from the page source window. After saving this
48 source, it's a good idea to put a <code>&lt;BASE&gt;</code> element in the
49 <code>HEAD</code> so that any images/external style sheet or scripts that use a
50 relative path will get loaded. After the <code>BASE</code> element has been added,
51 load the local copy into the browser and verify that problem is still
52 occurring. In this case, let's assume the problem is still present.
53 </p>
54 <h4>Work from top to bottom</h4>
55 <p>
56 In general, it's best to start from the top of the <code>&lt;DOCTYPE&gt;</code> and
57 work down through the <code>HEAD</code> to the <code>BODY</code> element. Take a look at the HTML
58 file in a text editor and view what types of elements are present in the
59 <code>&lt;head&gt;</code>. Typically, the <code>HEAD</code> will include the <code>&lt;title&gt;</code>
60 element, which is required, and elements such as <code>&lt;link&gt;</code>,
61 <code>&lt;style&gt;</code> and <code>&lt;script&gt;</code>.
62 </p>
63 <p>
64 The reduction process is to remove one element at a time, save, and reload the
65 test case. If you have removed the element and the page is still
66 displaying the problem, continue with the next element. If removing an
67 element in the <code>HEAD</code> causes the problem to not occur, you may have found
68 one piece in of the problem. Re-add this element back into the <code>HEAD</code>,
69 reload the page and confirm the problem is still occurring and move
70 on to the next element in the <code>HEAD</code>.
71 </p>
72
73 <h4>Finished the <code>HEAD</code>? Continue with the <code>BODY</code>!</h4>
74 <p>
75 Once the <code>HEAD</code> element has been reduced, you need to start reducing
76 the number of required elements in the <code>BODY</code>. This will tend to be the
77 most time consuming since hundreds (thousands) of elements will be
78 present. The general practice is start removing elements by both their
79 <code>&lt;start&gt;</code> and <code>&lt;/end&gt;</code> elements. This is especially true for
80 tables, which are frequently nested. You can speed up this process by
81 selecting groups of elements and removing them but ideally you need to
82 save and reload the test case each time to verify the problem is
83 happening.
84 </p>
85 <p>
86 Another way to help you identify unnecessary elements is to temporary
87 uncheck 'Enable Javascript' in the Preferences. If you turn this option
88 off and loading your test case still reproduces the problem, then any
89 script elements that are present can be removed since they are not a
90 factor in this issue. Let's say that you have reduced the page down to
91 a nested table with an ordered list with an <code>&lt;link&gt;</code> element that need
92 to be present. It's good practice to identify that CSS rule that is
93 being in the external file and add it directly to the test case. Create
94 a <code>&lt;style&gt;</code> <code>&lt;/style&gt;</code> in the head and copy/paste the contents
95 of the .css file into this style element. Remove the <code>&lt;link&gt;</code> and
96 save the changes. Load the test case and verify the problem is still
97 occurring. Now manually delete or comment out each CSS rule until you
98 have just the required set of rules to reproduce.
99 </p>
100 </div>
101 </body>
102 </html>