-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Design V2 of test format to enable variable AT setting, command, and assertion mappings for a test #974
Comments
@jscholes, we will discuss this in our Tuesday meeting. Please study ahead of then if at all possible. This could take a couple of hours to fully digest. After drafting #975, I'm super excited about the simplicity and flexibility these changes manifest. And, it is amazingly simple to do the refactoring. As soon as I can, I will generate a mockup of a test preview for the refactored slider test plan. |
Per our discussion this morning, I'm changing the command settings to json. However, instead of making another json file, it appears to me that it would be very beneficial to use the existing support.json where keys for the ATs are already defined. I would like your recommendation for the syntax we should use in the CSV file for referring to a specific setting for a specific screen reader. For example, what should be the syntax for telling the build script to look up browse mode for NVDA. Here is a relevant snippet from the support.json that I just pushed to the slider-refactor branch used by PR #975.
Perhaps no complex syntax is necessary. It may be adequate to simply specify only the value of the name property of an object in the settings array for the relevant AT. The build script can:
Any thoughts on this? |
@jscholes, I have finished updating the specs to reflect the suggestions you made today:
In addition, inspired by your suggestion to change settings to JSON, I revised the specification for assertion tokens to greatly simplify the syntax used to write assertions with tokens. This change should also simplify the build script. I added an assertionTokens array to the objects in the ats array in support.json. |
I ran into one more issue. there are problems with using a colon character to separate assertion priority and assertion number in the assertionExceptions column of the AT_KEY-commands.csv file. If you specify a value of something like It seems to me that the simplest solution is to use a different character that will ensure any spreadsheet program will leave the value as a string. I decided to use the vertical bar or pipe character since we were already using it in the instructions field as a separator. I've now updated all the documentation and PR #975 to incorporate all the changes we have discussed plus this one. I also added more documentation regarding the precedence of assertion priorities since there are three places they can be specified -- assertions.csv, tests.csv, and AT_KEY-commands.csv. In general, I think it is rare they will be used outside assertions.csv except for when removing an assertion from a specific command by setting its priority to 0. Nevertheless, I specified an order of precedence in the event a value appears in all three places. You might also notice in support.json that I included a "instructions" property for each setting in the settings array. The value for instructions is an array where each entry is a separate step in the instructions. My expectation is that each entry in the array will be a list item when displaying those instructions for each command. I have also made editorial changes to the instructions; they are different from what we currently have in the test runner. I will next be working on the mockup and specs for the test plan preview and test runner. |
As I'm working on the mockup of the preview, I am looking at a couple more changes:
|
Considering the other changes we are making, this might actually be the least disruptive time to adopt your preferred solution for specifying the strings that represent keyboard commands. Could you please describe what you would like instead of keys.mjs. Assuming you want JSON, how would you like it structured? |
I have added a I also specified that assertions should be presented in the order they are specified in the assertions column of tests.csv. Do you think we should have a similar sequencing number for the order of commands in a test? |
I just made several more changes:
The files are getting more and more readable and easier and easier to create. Have a look at the CSV files in PR #975. |
Here are outstanding questions to answer ASAP, e.g., in the next couple of days ... or sooner:
|
@mcking65 Planning to direct some serious attention at this today, but I think I can answer |
@jscholes wrote:
OK thank you! That's agood point, space separation it is. I will update the wiki and PR 975 later today. |
I just thought of one more awesome benefit of separating assertions into their own file. The assertions are currently written in the form:
This is pretty understandable in most contexts, but not as clear as it could be. Here's a proposal for how we could make the runner and reports easier to understand by making assertion wording for each. In the reports, when w3c/aria-at-app#733 is done, we will have tables with rows that have columns for priority, assertion, and verdict. There is one table for each command. So, a row could contain:
This table would read much more nicely if we had another form of the assertion wording like this:
And, it could be even easier to read if it were constructed like this:
With very little work, in assertions.csv, we could have two columns for the assertion in each row: one for assertionQuestion and one for assertionPhrase. We could have a question form for the runner:
Now that we are moving to a Yes/No radio group in #961, the question form of the assertion could make the runner even easier to understand. The phrase form of the assertion would reduce the number of words in the reports and make them even easier to consume. |
This is what the assertions.csv file would look like with my above suggestion. I separated out priority, I thought that it would be a bad idea to combine priority if the assertion wording has multiple representations. This is a straightforward conversion from current wording with some regular expressions. The following table is what I currently have in the #975 branch. I have not changed the format specification on the wiki. I think this could really pay off. I just want to be sure you don't have any objections. Slider
|
@mcking65 I love the phrased form of assertions that can be easily combined with priority strings. However, you wrote:
I'm sorry to only be picking up on this now, but I was under the impression that we would be switching to checkboxes rather than binary radio groups. When the user only has two choices of yes/no, checkboxes seem the more appropriate form control by far, particularly in the context of human testing on this project where there are many assertions on one page, and where every small ounce of inefficiency can scale. Granted, a radio group takes up one tab-stop just like a checkbox. But when navigating with a screen reader cursor, moving past a single checkbox is easier and quicker than moving through two radio buttons. If we multiply this by, say, five assertions across five commands, that would be 25 checkboxes vs 50 radios. In #969, the rationale for radios vs checkboxes is:
I don't understand what this means, i.e. what is the difference between having a collection of unchecked checkboxes vs a collection of radio groups with no default choice? Meanwhile, I was also hoping that switching to checkboxes would allow us to eradicate the assertions tables for testers, which add a lot of verbosity and confusion. We could just have a I feel very strongly that radios are not an optimal direction, so let's discuss this more on Tuesday. However, assuming for the rest of this comment that checkboxes are adopted:
|
@mcking65 Having read the wording around checkboxes vs radios again, I understand now what you're driving at. With checkboxes, having the box unchecked is the same as indicating a failure. But having two unchecked radios does not indicate anything, and is simply an invalid state. Despite that, I think the advantages of checkboxes for human testers and admins outweighs the data validation concern by a significant margin. Perhaps we can build some failsafes into the validation, e.g.:
I don't know if these are good or feasible ideas. But I do know that I have an image in my head of a hugely simplified form for testers that will accelerate their efforts, and make the editing of results far less error-prone for test admins. |
@mcking65 Also, just to say: catching unintentional errors in tester input is what the conflict system is designed for. I think we should let it do its job in the name of presenting a nicer UI to testers. |
@jscholes wrote:
Exactly. I was considering the value of more robust form validation. The goal of such validation would be ensuring that the tester did not accidentally overlook any commands or assertions. Since there will be many more commands per test, the likelihood of completely overlooking one is more likely.
I see two mitigating factors that help support your case for checkboxes:
Given it is rare that all assertions fail for a command (not sure if it has happened once yet), your second suggestion that the form confirm that the tester intends to state that all assertions failed for command X would not add any observable inertia and thus could be a reasonable measure to further ensure that the form is complete.
OK. I made myself a simple mockup of some questions comparing radio and checkbox experiences, and I understand why you believe so strongly in the efficiency proposition of a checkbox-based experience. I will change the assertions.csv to have a column for "assertionStatement" to use in the runner and "assertionPhrase" to use in reports. I will also update related issues, including #969, #973, and w3c/aria-at-app#738. |
@mcking65 This is all looking good. Regarding the presentation number column for tests and commands, is it intended to assist in PR reviews to explicitly demonstrate how command and/or test ordering has changed? Otherwise, it seems like we would be served equally well by just moving rows around. |
@jscholes wrote:
I was wondering whether the order of rows is sufficient. I am leaning toward the explicit declaration because it:
|
@jscholes, I've updated the V2 wiki page with the following changes, most of which we discussed above. In assertions.csv:
In AT_KEY-commands.csv:
In references.csv:
I have updated PR #975 that refactors the slider test plan with all the above changes. I have also finished a mockup of builder output and specified how the builder needs to change in #977. Please have a look at that mockup and spec. The mockup is in an attached zip. |
Fair enough, I'm onboard with this idea. Can we therefore consider, as far as the build scripts are concerned, the ordering of non-header rows to be irrelevant? E.g. the following is a valid, if odd, commands file that I'm only using to demonstrate the point:
This way, we should be able to shuffle rows around so that their ordering matches the presentation order for readability, but not have the position of a row be used for sorting or any other purpose (including in hashing). |
@jscholes wrote:
Definitely
Right except that I don't know how/when the hashing is done. Ideally it would be done on an object built from the files rather than the file itself. |
I have updated the V2 format specification with the following changes. Revised testId and assertionId descriptions:
Revised presentationNumber specifications for tests and commands:
Revised requirements related to refId values as described in the assertion and references sections:
Defined new values for reference types:
Revised reference value specification for Added requirements for Added a section describing how link text and href values are calculated for reference links. Updated validation rules. |
Test Format Definition V2 is finalized and implemented in the aria-at app. |
Problem
Consider tasks that are tested by the slider test plan, e.g., navigate forwards to a slider, read information about a slider, and increment a slider. The current test format has the following problems:
As a result, even though all the slider tests cover only 9 unique tasks, there are 21 tests in the slider plan! Further, even with 21 tests, they still do not cover important behaviors, e.g., mode switching for JAWS and NVDA, nor do they cover some important ways of using VoiceOver. Together, these constraints are having significant negative impacts on the readability, understandability, and completeness of ARIA-AT reports.
In addition to the above constraints on what can be tested and reported, there are multiple characteristics of the current test plan composition format that make writing and maintaining the tests unnecessarily difficult.
Solution
Make changes to the test format that:
New Test Format Definition
This wiki page provides a draft of a V2 test format that includes the following changes.
tests.csv
:jaws-commands.csv
. The new command mapping files have a new, simpler format. Each row represents a single test/command pair. This format allows:Using this format, the slider test plan, which has 21 tests using the current format, can be reduced to 9 tests. In addition, it is very simple to specify mode switching tests as well as VoiceOver quick nav tests. PR #975 contains a draft of the slider test plan using this format.
Build script modifications
Changes to the build scripts will be specified and tracked by #977.
App changes
To-do: Define required app changes, e.g., addition of commandSettings to command display.
The text was updated successfully, but these errors were encountered: