Extracted Best Practices sorted by Testability

BP with Machine Tests

  1. [ACCESS_KEYS] Assign access keys to links in navigational menus and frequently accessed functionality.

    5.2.5.2 What to test

    Machine Test: Test for the presence of the accesskey attribute.

    Human Test: Verify the presence of the accesskey attribute on links such as the home page.

  2. [LINK_TARGET_ID] Clearly identify the target of each link.

    5.2.6.3 What to test

    Human Test: Check for proper descriptions (e.g. no use of "Click here").

    Machine Test: Check for links to non-HTML formats.

    Human Test: If present check whether there is information about the format of the target of the link.

  3. [LINK_TARGET_FORMAT] Note the target file's format unless you know the device supports it.

    5.2.6.3 What to test

    Human Test: Check for proper descriptions (e.g. no use of "Click here").

    Machine Test: Check for links to non-HTML formats.

    Human Test: If present check whether there is information about the format of the target of the link.

  4. [IMAGE_MAPS] Do not use image maps unless you know the target client supports them effectively.

    5.2.7.3 What to test

    IMAGE_MAPS Machine Test: Send a request to the site with a user agent that does not support client-side image maps and check the map element is not present.

  5. [POP_UPS] Do not cause pop-ups or other windows to appear and do not change the current window without informing the user.

    5.2.8.2 What to test

    POP_UPS Machine Test: Look for the target attribute on links.

    AUTO_REFRESH Machine Test: Check whether meta http-equiv="refresh" content="<the same URI>" is used.

    AUTO_REFRESH Human Test: If auto-refresh is used, check that options are provided to stop any page using auto-refresh.

    REDIRECTION Machine Test: Check whether meta http-equiv="refresh" content="<a different URI>" is used.

  6. [AUTO_REFRESH] Do not create periodically auto-refreshing pages, unless you have informed the user and provided a means of stopping it.

    5.2.8.2 What to test

    POP_UPS Machine Test: Look for the target attribute on links.

    AUTO_REFRESH Machine Test: Check whether meta http-equiv="refresh" content="<the same URI>" is used.

    AUTO_REFRESH Human Test: If auto-refresh is used, check that options are provided to stop any page using auto-refresh.

    REDIRECTION Machine Test: Check whether meta http-equiv="refresh" content="<a different URI>" is used.

  7. [REDIRECTION] Do not use markup to redirect pages automatically. Instead, configure the server to perform redirects by means of HTTP 3xx codes.

    5.2.8.2 What to test

    POP_UPS Machine Test: Look for the target attribute on links.

    AUTO_REFRESH Machine Test: Check whether meta http-equiv="refresh" content="<the same URI>" is used.

    AUTO_REFRESH Human Test: If auto-refresh is used, check that options are provided to stop any page using auto-refresh.

    REDIRECTION Machine Test: Check whether meta http-equiv="refresh" content="<a different URI>" is used.

  8. [EXTERNAL_RESOURCES] Keep the number of externally linked resources to a minimum.

    5.2.9.3 What to test

    Machine Test: Count the number of linked images, style sheets and other linked items.

    Human Test: Review whether a similar effect could be obtained using fewer links.

  9. [PAGE_SIZE_USABLE] Divide pages into usable but limited size portions.

    5.3.2.3 What to test

    PAGE_SIZE_USABLE Machine Test: Measure the total size of the markup for a page; check that it does not exceed the allowable size for the device - 10 kilobytes for the Default Delivery Context.

    Human Test: Check that the page is still usable (e.g. not cut in the middle of a sentence, just before the end of a section, and so on).

    PAGE_SIZE_LIMIT Machine Test: Measure the total size of markup and images for a page; check that it does not go over the allowed size for the device - 20 kilobytes for the Default Delivery Context.

  10. [PAGE_SIZE_LIMIT] Ensure that the overall size of page is appropriate to the memory limitations of the device.

    5.3.2.3 What to test

    PAGE_SIZE_USABLE Machine Test: Measure the total size of the markup for a page; check that it does not exceed the allowable size for the device - 10 kilobytes for the Default Delivery Context.

    Human Test: Check that the page is still usable (e.g. not cut in the middle of a sentence, just before the end of a section, and so on).

    PAGE_SIZE_LIMIT Machine Test: Measure the total size of markup and images for a page; check that it does not go over the allowed size for the device - 20 kilobytes for the Default Delivery Context.

  11. [SCROLLING] Limit scrolling to one direction, unless secondary scrolling cannot be avoided.

    5.3.3.3 What to test

    SCROLLING Machine Test: Check for width attributes and width style properties wider than the screen size - for the Default Delivery Context, 120 pixels.

    Human Test: If it is wider than the screen size, check that the use case warrants it (e.g. maps).

    SCROLLING_LIMIT Human Test: Browse URIs within a site with a mobile user agent and observe that on pages with elements that require secondary scrolling only those elements require it, and the rest of the page requires only primary scrolling.

  12. [GRAPHICS_FOR_SPACING] Do not use graphics for spacing.

    5.3.5.2 What to test

    GRAPHICS_FOR_SPACING Machine Test: Check for very small and/or transparent graphics.

    LARGE_GRAPHICS Machine Test: Check dimensions of graphics.

  13. [LARGE_GRAPHICS] Do not use images that cannot be rendered by the device. Avoid large or high resolution images except where critical information would otherwise be lost.

    5.3.5.2 What to test

    GRAPHICS_FOR_SPACING Machine Test: Check for very small and/or transparent graphics.

    LARGE_GRAPHICS Machine Test: Check dimensions of graphics.

  14. [USE_OF_COLOR] Ensure that information conveyed with color is also available without color.

    5.3.6.2 What to test

    USE_OF_COLOR Human Test: Browse the page in a monochrome environment.

    COLOR_CONTRAST Human Test: Browse the page under a strong light parallel to the screen.

    Machine Test: There are automatic tools to test color contrast.

  15. [COLOR_CONTRAST] Ensure that foreground and background color combinations provide sufficient contrast.

    5.3.6.2 What to test

    USE_OF_COLOR Human Test: Browse the page in a monochrome environment.

    COLOR_CONTRAST Human Test: Browse the page under a strong light parallel to the screen.

    Machine Test: There are automatic tools to test color contrast.

  16. [BACKGROUND_IMAGE_READABILITY] When using background images make sure that content remains readable on the device.

    5.3.7.2 What to test

    Machine Test: Test for the presence of a background image.

    Human Test: Test readability both on devices that support them and devices that do not.

  17. [PAGE_TITLE] Provide a short but descriptive page title.

    5.4.1.2 What to test

    Machine Test: Test for presence of the title element.

    Human Test: Test that the title is descriptive of content.

  18. [NO_FRAMES] Do not use frames.

    5.4.2.2 What to test

    Machine Test: Test for presence of frame related elements - check for frameset and iframe elements.

  19. [TABLES_SUPPORT] Do not use tables unless the client is known to support them.

    5.4.4.3 What to test

    TABLES_SUPPORT Machine Test: Send a request to the site with a user agent that does not support tables and check the table element is not present.

    Machine Test: Check that there are no nested tables.

    TABLES_LAYOUT Machine Test: Check that no column or row in a table is empty or contains only a 1x1 transparent GIF.

    Machine Test: If there is a table element, check to see whether there is rendered content outside the element. If there is not then it is likely that the table is being used for layout.

  20. [TABLES_NESTED] Do not use nested tables.

    5.4.4.3 What to test

    TABLES_SUPPORT Machine Test: Send a request to the site with a user agent that does not support tables and check the table element is not present.

    Machine Test: Check that there are no nested tables.

    TABLES_LAYOUT Machine Test: Check that no column or row in a table is empty or contains only a 1x1 transparent GIF.

    Machine Test: If there is a table element, check to see whether there is rendered content outside the element. If there is not then it is likely that the table is being used for layout.

  21. [TABLES_LAYOUT] Do not use tables for layout.

    5.4.4.3 What to test

    TABLES_SUPPORT Machine Test: Send a request to the site with a user agent that does not support tables and check the table element is not present.

    Machine Test: Check that there are no nested tables.

    TABLES_LAYOUT Machine Test: Check that no column or row in a table is empty or contains only a 1x1 transparent GIF.

    Machine Test: If there is a table element, check to see whether there is rendered content outside the element. If there is not then it is likely that the table is being used for layout.

  22. [TABLES_ALTERNATIVES] Where possible, use an alternative to tabular presentation.

    5.4.4.3 What to test

    TABLES_SUPPORT Machine Test: Send a request to the site with a user agent that does not support tables and check the table element is not present.

    Machine Test: Check that there are no nested tables.

    TABLES_LAYOUT Machine Test: Check that no column or row in a table is empty or contains only a 1x1 transparent GIF.

    Machine Test: If there is a table element, check to see whether there is rendered content outside the element. If there is not then it is likely that the table is being used for layout.

  23. [NON-TEXT_ALTERNATIVES] Provide a text equivalent for every non-text element.

    5.4.5.3 What to test

    NON-TEXT_ALTERNATIVES Machine Test: Test for presence of alt attribute on images and text content on objects.

    Human Test: Check the relevance of the meaning of the content of alt attributes.

    OBJECTS_OR_SCRIPT Machine Test: Test for the presence of object or script elements in content delivered to a device that does not support them.

    Human Test: If present, test that the user experience is acceptable.

  24. [OBJECTS_OR_SCRIPT] Do not rely on embedded objects or script.

    5.4.5.3 What to test

    NON-TEXT_ALTERNATIVES Machine Test: Test for presence of alt attribute on images and text content on objects.

    Human Test: Check the relevance of the meaning of the content of alt attributes.

    OBJECTS_OR_SCRIPT Machine Test: Test for the presence of object or script elements in content delivered to a device that does not support them.

    Human Test: If present, test that the user experience is acceptable.

  25. [IMAGES_SPECIFY_SIZE] Specify the size of images in markup, if they have an intrinsic size.

    5.4.6.2 What to test

    IMAGES_SPECIFY_SIZE Machine Test: Test for presence of width and height attributes on img elements.

    IMAGES_RESIZING Machine Test: Check width and height attributes are equal to image dimensions.

  26. [IMAGES_RESIZING] Resize images at the server, if they have an intrinsic size.

    5.4.6.2 What to test

    IMAGES_SPECIFY_SIZE Machine Test: Test for presence of width and height attributes on img elements.

    IMAGES_RESIZING Machine Test: Check width and height attributes are equal to image dimensions.

  27. [VALID_MARKUP] Create documents that validate to published formal grammars.

    5.4.7.2 What to test

    Machine Test: Validate documents.

  28. [MEASURES] Do not use pixel measures and do not use absolute units in markup language attribute values and style sheet property values.

    5.4.8.3 What to test

    Machine Test: Send a request to the site with a user agent that supports relative measures correctly and check the values of font-size are not absolute or pixels.

  29. [STYLE_SHEETS_USE] Use style sheets to control layout and presentation, unless the device is known not to support them.

    5.4.9.3 What to test

    STYLE_SHEETS_USE Machine Test: Send a request to the site with a user agent that supports CSS and check that style sheets are used and that the page does not use formatting tags (e.g. font).

    STYLE_SHEETS_SUPPORT Human Test: Disable style sheets and check that the page is still readable.

    STYLE_SHEETS_SIZE Machine Test: Check that the elements in a style sheet are used in the pages that reference it.

  30. [STYLE_SHEETS_SUPPORT] Organize documents so that they may be read without style sheets.

    5.4.9.3 What to test

    STYLE_SHEETS_USE Machine Test: Send a request to the site with a user agent that supports CSS and check that style sheets are used and that the page does not use formatting tags (e.g. font).

    STYLE_SHEETS_SUPPORT Human Test: Disable style sheets and check that the page is still readable.

    STYLE_SHEETS_SIZE Machine Test: Check that the elements in a style sheet are used in the pages that reference it.

  31. [STYLE_SHEETS_SIZE] Keep style sheets small.

    5.4.9.3 What to test

    STYLE_SHEETS_USE Machine Test: Send a request to the site with a user agent that supports CSS and check that style sheets are used and that the page does not use formatting tags (e.g. font).

    STYLE_SHEETS_SUPPORT Human Test: Disable style sheets and check that the page is still readable.

    STYLE_SHEETS_SIZE Machine Test: Check that the elements in a style sheet are used in the pages that reference it.

  32. [MINIMIZE] Use terse, efficient markup.

    5.4.10.3 What to test

    Machine Test: Count the number of non-significant white space characters in the document.

  33. [CONTENT_FORMAT_SUPPORT] Send content in a format that is known to be supported by the device.

    5.4.11.3 What to test

    CONTENT_FORMAT_SUPPORT Machine Test: Check MIME types of content with various user agents.

    CONTENT_FORMAT_PREFERRED Machine Test: Check MIME types of content with various user agents and check that the preferred format is sent or that the format is compatible with the Default Delivery Context.

  34. [CONTENT_FORMAT_PREFERRED] Where possible, send content in a preferred format.

    5.4.11.3 What to test

    CONTENT_FORMAT_SUPPORT Machine Test: Check MIME types of content with various user agents.

    CONTENT_FORMAT_PREFERRED Machine Test: Check MIME types of content with various user agents and check that the preferred format is sent or that the format is compatible with the Default Delivery Context.

  35. [CHARACTER_ENCODING_SUPPORT] Ensure that content is encoded using a character encoding that is known to be supported by the target device.

    5.4.12.3 What to test

    Machine Test: Check that the encoding is declared in some way and is supported. The content type may be declared in one or more of the following ways: The Content-Type HTTP header, the XML declaration for XML-based content, the CSS @charset rules for CSS, the Content-Type Meta element for HTML content.

  36. [CHARACTER_ENCODING_USE] Indicate in the response the character encoding being used.

    5.4.12.3 What to test

    Machine Test: Check that the encoding is declared in some way and is supported. The content type may be declared in one or more of the following ways: The Content-Type HTTP header, the XML declaration for XML-based content, the CSS @charset rules for CSS, the Content-Type Meta element for HTML content.

  37. [COOKIES] Do not rely on cookies being available.

    5.4.14.3 What to test

    Machine Test: Check that an alternative to cookies is used for session management when they are not available.

  38. [CACHING] Provide caching information in HTTP responses.

    5.4.15.3 What to test

    Machine Test: Check for the presence of cache headers on the HTTP response.

  39. [FONTS] Do not rely on support of font related styling.

    5.4.16.3 What to test

    Machine Test: Check for the presence of font related styling in an environment that does not support it.

    Human Test: If present, ensure that the author's intentions remain clear.

  40. [MINIMIZE_KEYSTROKES] Keep the number of keystrokes to a minimum.

    5.5.1.3 What to test

    AVOID_FREE_TEXT Machine Test: Check whether input type="text" and textarea are used.

    Human Test: If one of them is used, check whether it can be replaced by a pre-determined entry.

    PROVIDE_DEFAULTS Machine Test: Check if there is a pre-selected value in controls (selected or checked attribute set).

    Human Test: If not, check if there could be sensible pre-selection in the context (e.g. most common choice).

    DEFAULT_INPUT_MODE Machine Test: Send a request with a user agent known to support the inputmode attribute, and if the response is in a language that supports this attribute, check that it is present on input type="text" and textarea elements.

  41. [AVOID_FREE_TEXT] Avoid free text entry where possible.

    5.5.1.3 What to test

    AVOID_FREE_TEXT Machine Test: Check whether input type="text" and textarea are used.

    Human Test: If one of them is used, check whether it can be replaced by a pre-determined entry.

    PROVIDE_DEFAULTS Machine Test: Check if there is a pre-selected value in controls (selected or checked attribute set).

    Human Test: If not, check if there could be sensible pre-selection in the context (e.g. most common choice).

    DEFAULT_INPUT_MODE Machine Test: Send a request with a user agent known to support the inputmode attribute, and if the response is in a language that supports this attribute, check that it is present on input type="text" and textarea elements.

  42. [PROVIDE_DEFAULTS] Provide pre-selected default values where possible.

    5.5.1.3 What to test

    AVOID_FREE_TEXT Machine Test: Check whether input type="text" and textarea are used.

    Human Test: If one of them is used, check whether it can be replaced by a pre-determined entry.

    PROVIDE_DEFAULTS Machine Test: Check if there is a pre-selected value in controls (selected or checked attribute set).

    Human Test: If not, check if there could be sensible pre-selection in the context (e.g. most common choice).

    DEFAULT_INPUT_MODE Machine Test: Send a request with a user agent known to support the inputmode attribute, and if the response is in a language that supports this attribute, check that it is present on input type="text" and textarea elements.

  43. [DEFAULT_INPUT_MODE] Specify a default text entry mode, language and/or input format, if the target device is known to support it.

    5.5.1.3 What to test

    AVOID_FREE_TEXT Machine Test: Check whether input type="text" and textarea are used.

    Human Test: If one of them is used, check whether it can be replaced by a pre-determined entry.

    PROVIDE_DEFAULTS Machine Test: Check if there is a pre-selected value in controls (selected or checked attribute set).

    Human Test: If not, check if there could be sensible pre-selection in the context (e.g. most common choice).

    DEFAULT_INPUT_MODE Machine Test: Send a request with a user agent known to support the inputmode attribute, and if the response is in a language that supports this attribute, check that it is present on input type="text" and textarea elements.

  44. [TAB_ORDER] Create a logical order through links, form controls and objects.

    5.5.2.3 What to test

    Machine Test: Check that there are no tabindex attributes or layout effects that affect the order of presentation.

    If there are tabindex attributes check that all controls have a tab index and that they are used consistently.

    Human Test: If there are either tabindex attributes or layout effects that might affect the order of presentation, then check that the order is usable.

  45. [CONTROL_LABELLING] Label all controls appropriately and explicitly associate labels with controls.

    5.5.3.2 What to test

    Machine Test: Check if the label element is used in forms.

    Human Test: Check whether the labels are properly positioned with regard to the controls.

  46. [CONTROL_POSITION] Position labels so they lay out properly in relation to the controls they refer to.

    5.5.3.2 What to test

    Machine Test: Check if the label element is used in forms.

    Human Test: Check whether the labels are properly positioned with regard to the controls.

BP without Machine Tests

  1. [SUITABLE] Ensure that content is suitable for use in a mobile context.

    5.3.1.2 What to test

    Human Test: Examine content to determine if, given the subject matter, it is appropriate in a mobile context.

  2. [CLARITY] Use clear and simple language.

    5.3.1.2 What to test

    Human Test: Examine content to determine if, given the subject matter, it is appropriate in a mobile context.

  3. [LIMITED] Limit content to what the user has requested.

    5.3.1.2 What to test

    Human Test: Examine content to determine if, given the subject matter, it is appropriate in a mobile context.

  4. [CENTRAL_MEANING] Ensure that material that is central to the meaning of the page precedes material that is not.

    5.3.4.3 What to test

    Human test: Browse URIs within a site with a mobile user agent and observe that the most important/relevant information is conveyed first.

  5. [ERROR_MESSAGES] Provide informative error messages and a means of navigating away from an error message back to useful information.

    5.4.13.3 What to test

    Enter an extraneous URI, known not to represent an actual resource on the site, and check that a HTTP 404 error response is accompanied by a page whose markup is appropriate for the requesting device, or the default context.

    Human Test: Check that the page returned contains an explanation of the error and appropriate corrective actions, without assuming any technical knowledge on the part of the end user.

BP without Tests

  1. [THEMATIC_CONSISTENCY] Ensure that content provided by accessing a URI yields a thematically coherent experience when accessed from different devices.

  2. [CAPABILITIES] Exploit device capabilities. Do not take a least common denominator approach.

  3. [DEFICIENCIES] Take reasonable steps to work around deficient implementations.

  4. [TESTING] Carry out testing on actual devices as well as emulators.

  5. [URIS] Keep the URIs of site entry points short.

  6. [NAVBAR] Provide only minimal navigation at the top of the page.

  7. [BALANCE] Take into account the trade-off between having too many links on a page and asking the user to follow too many links to reach what they are looking for.

  8. [NAVIGATION] Provide consistent navigation mechanisms.

  9. [STRUCTURE] Use features of the markup language to indicate logical document structure.