スコアを計算する
axe DevTools Mobile は、時間とともにアクセシビリティの進捗を追跡するのに役立つデータを結果オブジェクト内で提供します。以下に、iOSとAndroidでスキャンからアクセシビリティスコアを計算する方法を強調して説明します。このスコアは、アプリケーションのアクセシビリティがどのように進行しているかの指標を提供します。または、これらのデータポイントを使用して、チームに合った健康指標を開発することができます!
アルゴリズム
基本的には、他の製品で見たことがあるかもしれない同じアルゴリズムを使用することをお勧めしますが、モバイル向けに調整されています(私たちは ページという用語を使用していません)。以下のアルゴリズムを、チームに合わせて変更することをお勧めします!
(0.4 * s2 + 0.8 * s1 + s0) / TS
s2 = 深刻なスキャンの数 s1 = 中程度のスキャンの数 s0 = 軽微または問題のないスキャンの数 TS = スキャンの合計数
ご覧のとおり、スキャン結果は影響度に基づいてフィルタリングされます:重大、深刻、中程度、または軽微。これらの用語を次のように定義します:
- 軽微なスキャン = 少なくとも1つの軽微な問題と 何も 中程度、深刻、または重大な問題がない
- 中程度のスキャン = 少なくとも1つの中程度の問題と 何も 深刻または重大な問題がない
- 深刻なスキャン = 少なくとも1つの深刻な問題と 何も 重大な問題がない
- 重大なスキャン = 少なくとも1つの重大な問題
注:古いデータを扱う場合、「ブロッカー」の影響度が廃止されている場合もあります。
単一スキャンをスコア付けする
このアルゴリズムがどのように機能するかを示すために、単一のスキャンは次のいずれかのスコアを受け取ります:
0% - 少なくとも1つの 重大な 問題
40% - 少なくとも1つの 深刻な 問題があり、 重大な 問題はない
80% - 少なくとも1つの 中程度の 問題があり、 深刻な または 重大な 問題はない
100% - 軽微な または問題なし
一連のスキャンの評価
一連のスキャンにおいて、グループのアクセシビリティスコアは、そのグループ内の各スキャンのスコアの平均です。例として、次のような内訳で9つの画面グループを見てみましょう。
- 重大な問題を含む2つのスキャン (2)
- 深刻な問題を含む1つのスキャン (1)
- 中程度の問題を含む2つのスキャン (2)
- 軽微な問題を含む1つのスキャン (1)
- 問題のない3つのスキャン (3)
それぞれのスコアを持つスキャンの数を 我々のアルゴリズムに入力します。
0.4 * 1 + 0.8 * 2 + 4 / 9
iOS
結果オブジェクトから、各影響レベルの数を取得するためのサンプルコードはこちらです。
let critical = result.failures.filter { $0.impact == .CRITICAL }.count
let serious = result.failures.filter { $0.impact == .SERIOUS }.count
let moderate = result.failures.filter { $0.impact == .MODERATE }.count
let minor = result.failures.filter { $0.impact == .MINOR }.countAndroid
結果オブジェクトから、各影響レベルの数を取得するためのサンプルコードはこちらです。
val minorImpactCount = AtomicInteger(0)
val blockerCount = AtomicInteger(0)
val criticalCount = AtomicInteger(0)
val moderateCount = AtomicInteger(0)
val serious = AtomicInteger(0)
result?.axeResult?.axeRuleResults?.forEach {
when (it.impact) {
AxeImpact.MINOR.value -> minorImpactCount.incrementAndGet()
AxeImpact.BLOCKER.value -> blockerCount.incrementAndGet()
AxeImpact.CRITICAL.value -> criticalCount.incrementAndGet()
AxeImpact.MODERATE.value -> moderateCount.incrementAndGet()
AxeImpact.SERIOUS.value -> serious.incrementAndGet()
else -> {}
}
}