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