Books & ebooks about Microsoft tools, technologies, & research. Plus programming best practices. We hope you enjoy this post.
We’re pleased to announce that Engineering Software for Accessibility (Microsoft Press, 2009; 100 pages) is now available as a free download or as a hard-copy book via Barnes & Noble and Amazon. The book was written by Jason Grieves, a Program Manager on the Windows Accessibility Team, and his colleague Masahiko Kaneko.
Jason had this to say about the book over on the Windows Blog:
Our expectations of software are very high (as they should be!). We expect that the software we use will be reliable, secure, and perform well - we expect the software to “just work.” There are many ways that we experience software, some of us use the traditional input method of keyboard and mouse. I and many other people augment this with accessible solutions such as larger screens, speech recognition, and screen readers. In Windows we consider accessibility just like reliability, performance, and security to be fundamental to all software in the operating system. Our feature teams create their software to meet these and other core requirements, which combine to create an operating system that meets the essential expectations of our users. In Windows 7 we continued the integration of accessibility requirements into our software engineering process. Accessibility, like the other fundamental requirements, has been planned, designed, implemented and tested in Windows 7. In an effort to enable software developers to create accessible Windows applications, we wanted to share our process with the community. We have captured this engineering process in a new book, Engineering Software for Accessibility. The book addresses three basic questions: How do you plan for accessibility? How do you design your software for accessibility? How can you implement and test to your software to confirm it meets the accessible design? You will learn that properly implemented accessibility enables access to Windows applications for users with a variety of capabilities. We are pleased to offer you the ability to follow much of process our engineers used to make Windows 7 the most accessible operating system Microsoft has yet produced!
Our expectations of software are very high (as they should be!). We expect that the software we use will be reliable, secure, and perform well - we expect the software to “just work.” There are many ways that we experience software, some of us use the traditional input method of keyboard and mouse. I and many other people augment this with accessible solutions such as larger screens, speech recognition, and screen readers.
In Windows we consider accessibility just like reliability, performance, and security to be fundamental to all software in the operating system. Our feature teams create their software to meet these and other core requirements, which combine to create an operating system that meets the essential expectations of our users. In Windows 7 we continued the integration of accessibility requirements into our software engineering process. Accessibility, like the other fundamental requirements, has been planned, designed, implemented and tested in Windows 7.
In an effort to enable software developers to create accessible Windows applications, we wanted to share our process with the community. We have captured this engineering process in a new book, Engineering Software for Accessibility. The book addresses three basic questions:
You will learn that properly implemented accessibility enables access to Windows applications for users with a variety of capabilities. We are pleased to offer you the ability to follow much of process our engineers used to make Windows 7 the most accessible operating system Microsoft has yet produced!
We’d like to share the book’s Introduction today. We’ll share other excerpts in the future.
Introduction
What comes to mind when you think of accessibility? If you’re like most people, you mightconjure up images of a wheelchair or perhaps someone who is blind. What about someonewith a broken arm, a child with a learning disability, or a 65-year-old who needs high-prescriptioneyeglasses to read? When it comes to technology, accessibility pertains to awide range of people with a wide range of abilities, not just the folks with disabilities.
Accessible technology is technology that users can adapt to meet their visual, hearing,dexterity, cognitive, and speech needs and interaction preferences. Accessible technologyincludes accessibility options and utilities built into products, as well as specialty hardwareand software add-ons called assistive technology (AT) that help individuals interact with acomputer.
There are essentially two types of users of accessible technology: (1) those who need it,because of disabilities or impairments, age-related conditions, or temporary conditions (suchas limited mobility from a broken arm), and (2) those who use it out of preference, for a morecomfortable or convenient computing experience. The majority of computer users (54 percent)are aware of some form of accessible technology, and 44 percent of computer users usesome form of it, but many of them are not using AT that would benefit them (Forrester 2004).
A 2003–2004 study commissioned by Microsoft and conducted by Forrester Researchfound that over half—57 percent—of computer users in the United States between theages of 18 and 64 could benefit from accessible technology. Most of these users did notidentify themselves as having a disability or impaired but expressed certain task-relateddifficulties or impairments when using a computer. Forrester (2003) also found thefollowing number of users with these specific difficulties:
• One in four experiences a visual difficulty.• One in four experiences pain in the wrists or hands.• One in five experiences hearing difficulty.
Besides permanent disabilities, the severity and type of difficulty or impairment an individualexperiences can vary throughout a person’s life. Table I-1 lists the four key classes of disabilitiesand the types of accessibility options, utilities, or AT devices your users might use toaddress their difficulties or impairments.
By 2010, the number of accessible technology users is expected to rise to 70 million, up from57 million users in 2003 (Forrester 2004). Among users who use built-in accessibility optionsand utilities, 68 percent have mild or severe difficulties or impairments, whereas the remaining32 percent have no difficulties or impairments (Forrester 2004). Among users who use ATproducts, such as trackballs or screen magnifiers, 65 percent did not report health issues asreasons for using AT products, but rather cited that these products make computers easier touse, more comfortable, and more convenient, or that they wish to avoid developing a futurehealth issue (Forrester 2004).
If a majority of your users could benefit from your product being accessible, doesn’t it justmake sense to build an accessible product? If you have decided to do so, you are sending amessage to your customers that their needs matter. Populations in many countries are gettingolder. Civil rights for people with disabilities are gradually being extended to encompassdigital inclusion. Governments are requiring procurement officials to purchase products thatare the most accessible (mandated in the U.S. by Section 508 of the Rehabilitation Act). Fortechnology producers, creating accessible products is just the right thing to do, and it makesgood business sense.
Who Should Read This Book
This book is intended to be an introduction to create accessible software products. If you wantto understand how to incorporate programmatic access and keyboard access into your interfacesand how accessibility fits into the software development cycle, this book is for you. Ifyou are a project manager or someone who is overseeing the development of an accessibleproduct, you should also find this book helpful in understanding how accessibility is integratedat each stage of the development cycle.
What This Book Covers
As you might guess, accessibility should be integrated from the beginning of the productdevelopment cycle, when the application or product is in the planning or design phase, ratherthan later, when retrofitting your product for accessibility can be extremely costly—andsometimes impossible, because part of accessibility development requires attention at thearchitecture level. This book will guide you through the process of planning for the two criticalpieces for accessibility, programmatic access and keyboard access, from the beginning ofthe software development lifecycle and integrating it throughout. It is, therefore, suggestedthat you first read the chapters in this book sequentially and then afterwards use this book asa reference as you develop your product. This book will also show you how to map out thelogical hierarchy for your product and plan for implementation using UI Automation (UIA),Microsoft’s accessibility API, to create products that work with assistive technologies.
Here is what to expect in each chapter:
• Chapter 1, “The UI Automation Environment,” provides definitions and anoverview of UIA and its role in accessibility.• Chapter 2, “Designing the Logical Hierarchy,” walks you through the steps fordesigning a logical hierarchy of your product, which will serve as a model for youraccessibility implementation.• Chapter 3, “Designing Your Implementation,” guides you through the processof designing the implementation of the controls in your UI.• Chapter 4, “Testing and Delivery,” discusses testing for the programmatic accessand keyboard access in your product and documentation for delivery, as well as abrief summary of steps for incorporating accessibility into your product.
The Basics
As mentioned, programmatic access and keyboard access are two critical pieces to accessibilityand are the basis for this book. Let’s go over these two areas a little further, as well assome basic information and settings you should be aware of when developing for accessibility.
Programmatic Access
Programmatic access is critical for creating accessibility in applications. Programmatic access isachieved when an application or library of UI functionality exposes the content, interactions,context, and semantics of the UI via a discoverable and publicly documented application programminginterface (API). Another program can use the API to provide an augmentative,automated, or alternate user interaction. Basic information conveyed through programmaticaccess includes: navigation, interactive controls, asynchronous changes to the page, keyboardfocus, and other important information about the UI.
Programmatic access involves ensuring all UI controls are exposed programmatically to theAT. Without it, the APIs for AT cannot interpret information correctly, leaving the user unableto use the products sufficiently or forcing the AT to use undocumented programming interfacesor techniques never intended to be used as an “accessibility” interface. When UI controlsare exposed to AT, the AT is able to determine what actions and options are available to theuser. Without proper programmatic access, a user may receive useless, erroneous, or even noinformation about what they are doing in the program.
Keyboard Access
Keyboard access pertains to the keyboard navigation and keyboard focus of an application.For users who are blind or have mobility issues, being able to navigate the UI with a keyboardis extremely important; however, only those UI controls that require user interaction to functionshould be given keyboard focus. Components that don’t require an action, such as staticimages, do not need keyboard focus.
It is important to remember that unlike navigating with a mouse, keyboard navigation islinear. So, when considering keyboard navigation, think about how your user will interact withyour product and what the logical navigation for a user will be. In Western cultures, peopleread from left to right, top to bottom. It is, therefore, common practice to follow this patternfor keyboard navigation, though there are exceptions to this practice.
When designing keyboard navigation, examine your UI, and think about these questions:
• How are the controls laid out or grouped in the UI?• Are there a few significant groups of controls?
o If yes, do those groups contain another level of groups?
• Among peer controls, should navigation be done by tabbing around, or via specialnavigation (such as arrow keys), or both?
The goal is to help the user understand how the UI is laid out and identify the controls thatare actionable. If you are finding that there are too many tab stops before the user completesthe navigation loop, consider grouping related controls together. Some controls that arerelated, such as a hybrid control, may need to be addressed at this early exploration stage.Once you begin to develop your product, it is difficult to rework the keyboard navigation, soplan carefully and plan early!
Go further: For guidelines on designing keyboard focus and keyboard navigation, go tohttp://go.microsoft.com/fwlink/?LinkId=150842.
Respect Your User
When developing accessible products, a key thing to keep in mind is to respect your enduser’s preferences and requirements. Whether they are selecting larger icons, choosing highcontrast, or using a screen reader, users configure their system settings for a more comfortableuser experience. It is absolutely essential, then, that you allow system-wide settings towork with your product. Overriding those settings through hard-coding might impede oreven prevent a user from accessing parts of your products.
Visual UI Design Settings
When designing the visual UI, ensure that your product has a high contrast setting, uses thedefault system fonts and smoothing options, correctly scales to the dots per inch (dpi) screensettings, has default text with at least a 5:1 contrast ratio with the background, and has colorcombinations that will be easy for users with color deficiencies to differentiate.
High Contrast Setting
One of the built-in accessibility features in Microsoft’s Windows operating systems is the HighContrast mode, which heightens the color contrast of text and images on the computerscreen. For some people, increasing the contrast in colors reduces eyestrain and makes iteasier to read. When you verify your UI in high contrast, you want to check that controls, suchas links, have been coded consistently and with system colors (not with hard-coded colors) toensure that they will be able to see all the controls on the screen that a user not using highcontrast would see.
System Font Settings
To ensure readability and minimize any “unexpected” distortions to the text, make sure thatyour product always adheres to the default system fonts and uses the anti-aliasing andsmoothing options. If your product uses custom fonts, users may face significant readabilityissues and distractions when they customize the presentation of their UI (through the use ofa screen reader or by using different font styles to view your UI, for instance).
High DPI Resolutions
For users with vision impairments, having a scalable UI is important. UIs that do not scalecorrectly in high dpi resolutions may cause important UI components to overlap or hide othercomponents and can become inaccessible. Since the release of Windows Vista, the Windowsplatform replaced large font settings with dpi configurations.
Go further: For more information on how to write high dpi applications, go tohttp://go.microsoft.com/fwlink/?LinkId=150842.
Color Contrast Ratio
The updated Section 508 of the Americans with Disability Act, as well as other legislations,requires that the default color contrasts between text and its background must be 5:1. Forlarge texts (18-point font sizes, or 14 points and bolded) the required default contrast is 3:1.
Go further: For more information on checking color contrast, go tohttp://go.microsoft.com/fwlink/?LinkId=150842.
Color Combinations
About 7 percent of males (and less than 1 percent of females) have some form of color deficiency.Users with colorblindness have problems distinguishing between certain colors, so it isimportant that color alone is never used to convey status or meaning in an application. As fordecorative images (such as icons or backgrounds), color combinations should be chosen in amanner that maximizes the perception of the image by colorblind users.
Go further: For more information on color combinations, go tohttp://go.microsoft.com/fwlink/?LinkId=150842.
How Accessibility Fits into the Development Cycle
Now that we’ve covered some of the basics, let’s talk about how accessibility fits into eachstage of the development cycle—requirements, design, implementation, verification, andrelease. You can adapt this model to the development cycle for your product. Figure I-1provides a comprehensive view of a traditional software development cycle and activitiesyou can do to incorporate accessibility into your product.
Requirements Stage
There may be a variety of reasons why you may want to incorporate accessibility into yourproduct for a variety of reasons: you want to create software that’s accessible for a loved one,you hope to sell your product to the U.S. government, you want to expand your market base,your company or the law requires it, or you simply desire to do the right thing for your customers.When you decide to create a new product or update an existing one, you shouldknow whether you will incorporate accessibility into your product.
Once you have set your requirements, generate personas that exemplify users of varying typesof abilities. Create scenarios to determine what design features will delight and assist yourusers, and illustrate how your users will accomplish tasks with your product. Prioritize yourfeatures, and make sure that all users can complete your use cases. Beware of blanks in yourspecifications! Your goal is to ensure that your product will be usable by people of varyingabilities.
Go further: For more information on personas, go tohttp://go.microsoft.com/fwlink/?LinkId=150842.
Design Stage
In the design stage, the framework you will use is critical to the development of your product.If you have the luxury of choosing your framework, think about how much effort it will take tocreate your controls within the framework. What are the default or built-in accessibility propertiesthat come with it? Which controls will you need to customize? When choosing yourframework, you are essentially choosing how much of the accessibility controls you will get“for free” (that is, how much of the controls are already built-in) and how much will requireadditional costs because of control customizations. If accessibility was implemented in thepast, look at the design docs for those earlier versions to see how accessibility features wereimplemented in them.
Once you have your framework, design a logical hierarchy to map out your controls (Chapter2 covers this topic in more detail). If your design is too complex, or your framework won’teven support the features that you are thinking of, it may not be worth the time, money, oreffort to develop them. Accessibility can sometimes be a way to measure the usability andapproachability of your product’s overall design. For instance, if you are finding that thedesign of your keyboard navigation or logical hierarchy is becoming way too complex, it’slikely that your user will have a hard time navigating your UI and will have a bad experiencewith your product. Go back to the drawing board, and make sure you are following fundamentaluser experience (UX) and accessible design practices. It’s likely that somebody hasalready addressed the same design issues you’re facing.
When you have designed your programmatic access and keyboard access implementation,ensure that all accessibility API information is noted in the specs, including all the basicdevelopment settings touched on earlier (settings for high contrast, system font defaults, adpi-aware UI, a 5:1 text-to-background contrast ratio, and color combinations that will beeasy for users with color deficiencies to differentiate). Keep in mind that it may be harder (oreasier) to adhere to certain accessibility settings, depending on the framework. Programmaticaccess is often limited by the UI framework for the application, so it is crucial in the designstage to reconfirm the standards and expectations of the accessibility API supported by the UIframework. Keyboard navigations and the flexibility of accessibility implementations areusually tied to the architecture of the UI framework.
It is absolutely critical to note that when designing your programmatic access, you shouldavoid creating new custom controls as much as possible, because the cost for development,documentation, and help on how to interact with the control is significant, and ATs may notknow how to interact with the control.
Implementation Stage
In the implementation stage, you will need to make sure that the chosen architecture andspecs will work. If the specs do not work, go back to the design stage, and figure out a moreeffective or less expensive alternative.
When you implement the specs, be sure to keep the user experience in mind as you developyour product. Accessibility personas are great for reminding you of who your users are!
Verification Stage
In the verification or test stage, ensure that all the specs were implemented correctly and thatthe accessibility API is reporting correctly for programmatic access. Your accessibility API,such as UIA, must expose correctly to AT. For testing, use both accessibility test tools and full-featured,third-party accessibility aids. Write test cases and build verification tests for youraccessibility scenarios to ensure that all the specs were implemented correctly.
Consider leveraging automated testing, and establish a process and metrics for accessibilitybugs. You want to have clear and consistent severity ratings for these problems. Such ratingsmay look something like the following:
• High severity means that no workarounds are available for your target users, or the bugblocks the user from completing the task.• Moderate severity means that workarounds are available, or that the bug does not blockthe user’s ability to complete the operation. Do not overlook moderate severity issues,just because there is a workaround. These issues can sometimes introduce other,significant usability or product quality issues.• Low severity means that the bug’s impact to accessibility with workarounds is low.
The verification stage is a good time to start documenting all the accessibility options andfeatures of your product. Just be sure to create documentation for your users in accessibleformats! If you hope to sell your product to the U.S. government, you may also start funnelingthis information into a Section 508 Voluntary Product Accessibility Template (VPAT), which is astandardized form developed by the Information Technology Industry Council (ITIC) to showhow a software product meets key regulations of Section 508 of the Rehabilitation Act. Youabsolutely want to address any high severity issues before the VPAT process, as any problemswith your product will be subject to VPAT documentation.
Before your final release, be sure to obtain and incorporate feedback from your customersand partners throughout the development cycle. Include people with disabilities in yourusability studies and beta testing. Work with your usability team to plan for specific accessibilitystudies. Include AT vendors in feedback programs, and collaborate with them to ensurethat their products work with yours. Ideally, you should not need to make any major changesto your product at this stage. Any major (or expensive) changes should be reserved for yournext revision.
Go further: For more information on accessibility tools and declarations of conformance, go tohttp://go.microsoft.com/fwlink/?LinkId=150842.
Release Stage
In the release stage, continue to engage with AT vendors and users. Include accessible documentationboth internally and externally with your product, and collaborate with yourmarketing group on go-to-launch activities and external messaging for your product.
Ready, Set, Go!
At this point, you should now have a general understanding of what accessibility is, the typesof AT your users may be relying on to use your product, the basic development settings youshould include in your product, and how accessibility fits into the development cycle. You arenow ready to learn more about the various components in the UIA architecture, how todesign a logical hierarchy, design your implementation, and how to test your implementationand deliver your product. Through each stage of the process, you will continue to learn howto set the foundation for accessibility through programmatic access and keyboard access. Formore information on the visual UI design settings mentioned earlier (such as high contrast,default font, and high dpi settings), which are also necessary for an accessible product, checkout the sample of resources we provide to get you started.
Remember, designing and developing for accessibility is one of the best ways to give youclarity about the user experience in general. By creating accessible products, you are workingto improve the user experience for all people. The next chapter proceeds with an introductionto UIA, Microsoft’s accessibility API, which will help you integrate accessibility into yourproduct.
The download link requires authentication... Is this right?
Matt,
It did not ask me any authentication to download the book.
Best,
--S
Why does this article contain a table that is an image without any alt tags? The table could be made just as accessible as the text, but dropping it in as an image makes me question the author's and publisher's commitment to real accessibility -- it's such a basic detail to have missed.
The downloaded Word document (engineering_for_accessibility_eBook.doc) has quite a few problems. During a cursory scan I noticed these:
The graphics on pages x, xi, xix, 19, 22, 23, 28, 30, 31, 32, 34, 46?, 47, 55, 56, 57, 60, and 61? are not displaying correctly.
There are several instances of tables split across pages and/or separated from their titles.
Two pages are numbered 70.
The title for Appendix A is missing on page 65.
The Table of Contents indicates that the Index begins on page 75, but there is no Index.
Consequently, I wonder how useful this book really is. If you're interested, I'm available for freelance editing. charlwalkr@juno.com