スコアを計算する
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 -> {}
}
}