İçeriğe geç
academia.sh

Ders 11 / 24

Kullanılabilirlik Sezgileri

Yerleşik değerlendirme ölçütlerinin ilke ilke uygulanması; birden çok değerlendiricinin bulgularının örtüşmesinin hesaplanması ve tek değerlendiricinin en ağır sorunu niçin kaçırdığı.

İçindekiler

Prototip hazır ama katılımcı çağırmadan önce ucuz bir denetim yapılabilir. Kullanılabilirlik sorunlarının bir bölümü, kullanıcıya hiç gösterilmeden, bilinen ölçütler elde tutularak arayüz gözden geçirilerek bulunur. Bu yöntem katılımcı oturumunun yerini almaz; oturumu gereksiz yere harcamamak için önce yapılır.

Kullanılabilirlik sezgisi (usability heuristic), arayüzü değerlendirirken kullanılan genel bir ölçüttür. “Sezgi” adı, kesin bir kural olmamasından gelir: ölçüt sağlanmadığında kesin bir kusur değil, incelenmesi gereken bir aday çıkar. Bu ders yerleşik ölçüt kümesini ilke ilke uygular ve kaç kişinin değerlendirmesi gerektiğini hesaplar.

Yerleşik Ölçüt Kümesi

Alanda uzun süredir kullanılan on ilke, kataloğun kararlarıyla eşleştirilerek okunur.

  • Sistem durumunun görünürlüğü. Kullanıcı her an ne olduğunu bilir. Arama çalışırken bir bekleme durumu, ödünç alma sırasında bir ilerleme göstergesi.
  • Sistemin gerçek dünyayla örtüşmesi. Arayüz kurumun değil kullanıcının sözlüğünü konuşur. “Dolaşım işlemleri” kurumun sözlüğüdür; “ödünç alma” kullanıcının.
  • Kullanıcı denetimi ve özgürlüğü. Yanlış adım geri alınabilir, işlem yarıda bırakılabilir, önceki duruma dönülebilir.
  • Tutarlılık ve standartlar. Aynı şey her yerde aynı adla ve aynı biçimde. Yinelenme ve Tutarlılık dersinde görsel için konan kuralın yapı düzeyindeki karşılığı.
  • Hatanın önlenmesi. İyi bir hata iletisinden daha iyisi, hatanın hiç oluşmamasıdır. Gecikme ücreti tahsil edilecekse önce onaylatılır.
  • Hatırlamak yerine tanımak. Kullanıcı önceki ekranda gördüğünü ezberlemek zorunda kalmaz. Raf kodunu akılda tutturmak yerine ödünç adımında yeniden göstermek.
  • Kullanımda esneklik ve verim. Sık kullanan için kısa yol, yeni kullanan için açık yol; ikisi aynı arayüzde bulunur.
  • Ölçülü tasarım. Ekranda gereksiz bilgi bulunmaz; her eklenen öge, asıl bilginin görünürlüğünü azaltır.
  • Hataların tanınması ve giderilmesi. İleti ne olduğunu, niçin olduğunu ve ne yapılması gerektiğini söyler.
  • Yardım ve belgelendirme. Yardım gerekiyorsa aranabilir, kısa ve göreve bağlıdır; yardıma gerek duyulmaması ise daha iyidir.

Ölçütlerin adları kalıp gibi kullanılmaz. Değerlendirmenin çıktısı “tutarlılık ilkesi ihlal edilmiş” değil, “ödünç alma eylemi listede Al, kayıt ayrıntısında Ödünç al, onay ekranında Emanet olarak adlandırılıyor” biçiminde yazılır. İlke, bulgunun sınıfını verir; bulgu, ilkenin yerini tutmaz.

Oturumun Yürütülmesi

Değerlendirme üç kuralla yapılır.

Bağımsız. Her değerlendirici arayüzü tek başına gezer ve bulgularını kendi listesine yazar. Birlikte gezilirse ilk konuşanın bulguları diğerlerinin dikkatini yönlendirir ve bağımsız bulgu sayısı düşer.

İki geçişli. İlk geçiş akışı bütün olarak izler ve genel yapıyı kavrar; ikinci geçiş her ekranı ölçüt listesiyle tek tek tarar. Tek geçişte yapılan değerlendirme, akışın bağlamını bilmeden ekran yargılar.

Şiddet puanlı. Her bulguya bir şiddet verilir. Aşağıdaki hesapta dört düzeyli bir ölçek kullanılıyor: 1 biçimsel bir kusur, 2 küçük bir engel, 3 görevi belirgin biçimde zorlaştıran bir sorun, 4 görevi tamamlanamaz kılan ya da geri alınamaz zarar üreten bir sorun. Puan, bulgular birleştirildikten sonra sıralamayı yapar.

Bir Değerlendirici Yetmez

Beş değerlendirici prototipi bağımsız olarak inceledi ve bulgular birleştirildi.

// sezgi-degerlendirmesi.mjs — bes degerlendiricinin bulgularinin ortusmesi ve siddet uzlasisi

// Her bulgu: hangi ilkeye ait ve hangi degerlendirici kac siddet verdi (1 kucuk, 4 buyuk)
const BULGULAR = [
  { ad: "yukleme durumu gosterilmiyor", ilke: "durum gorunurlugu", puan: { D1: 2, D2: 3, D3: 2, D4: 2, D5: 3 } },
  { ad: "ayni eylem farkli adlarla", ilke: "tutarlilik", puan: { D1: 3, D2: 3, D4: 2 } },
  { ad: "odunc alma geri alinamiyor", ilke: "denetim ve ozgurluk", puan: { D2: 4, D3: 3, D5: 4 } },
  { ad: "hata iletisi nedeni yazmiyor", ilke: "hatadan kurtulma", puan: { D1: 3, D3: 4, D4: 3, D5: 3 } },
  { ad: "kurum sozlugu kullaniliyor", ilke: "gercek dunyayla ortusme", puan: { D2: 3, D5: 2 } },
  { ad: "geri donuste arama kayboluyor", ilke: "denetim ve ozgurluk", puan: { D1: 4, D2: 4, D3: 4, D4: 3, D5: 4 } },
  { ad: "ucret once onaylatilmiyor", ilke: "hatanin onlenmesi", puan: { D3: 4 } },
  { ad: "yer tutucu etiket yerine geciyor", ilke: "hatirlamak yerine tanimak", puan: { D1: 3, D4: 3 } },
  { ad: "raf kodu aciklanmiyor", ilke: "gercek dunyayla ortusme", puan: { D2: 3, D3: 3, D4: 4 } },
  { ad: "aramayi yineleme kisayolu yok", ilke: "esneklik ve verim", puan: { D5: 2 } },
  { ad: "uc eylem esit agirlikta", ilke: "olculu tasarim", puan: { D1: 3, D2: 2 } },
  { ad: "yardim derinde", ilke: "yardim ve belgelendirme", puan: { D4: 1 } },
];
const DEGERLENDIRICI = ["D1", "D2", "D3", "D4", "D5"];

const ortanca = (d) => {
  const s = [...d].sort((a, b) => a - b), o = s.length >> 1;
  return s.length % 2 ? s[o] : (s[o - 1] + s[o]) / 2;
};

console.log("bulgu                              ilke                        bulan  ortanca  aralik");
for (const b of BULGULAR) {
  const p = Object.values(b.puan);
  console.log(
    `${b.ad.padEnd(34)} ${b.ilke.padEnd(27)} ${String(p.length).padStart(5)} ${ortanca(p).toFixed(1).padStart(8)}  ${Math.min(...p)}-${Math.max(...p)}`
  );
}

console.log("\ndegerlendirici  buldugu bulgu  kapsama");
for (const d of DEGERLENDIRICI) {
  const n = BULGULAR.filter((b) => d in b.puan).length;
  console.log(`${d.padEnd(14)} ${String(n).padStart(14)}  ${((n / BULGULAR.length) * 100).toFixed(1)}%`);
}

// k degerlendiricinin butun altkumeleri uzerinden beklenen birlesim
const altKumeler = (dizi, k) =>
  k === 0 ? [[]] : dizi.flatMap((x, i) => altKumeler(dizi.slice(i + 1), k - 1).map((r) => [x, ...r]));
console.log("\ndegerlendirici sayisi  altkume  beklenen bulunan  beklenen kapsama");
for (let k = 1; k <= DEGERLENDIRICI.length; k++) {
  const kumeler = altKumeler(DEGERLENDIRICI, k);
  const toplam = kumeler.reduce(
    (t, kume) => t + BULGULAR.filter((b) => kume.some((d) => d in b.puan)).length, 0);
  const ort = toplam / kumeler.length;
  console.log(
    `${String(k).padStart(21)}  ${String(kumeler.length).padStart(7)}  ${ort.toFixed(2).padStart(16)}  ${((ort / BULGULAR.length) * 100).toFixed(1).padStart(15)}%`
  );
}

// Tek kisinin buldugu bulgular ve siddet uzlasisi
const tek = BULGULAR.filter((b) => Object.keys(b.puan).length === 1);
console.log(`\nyalniz bir degerlendiricinin buldugu bulgu: ${tek.length} / ${BULGULAR.length}  (${((tek.length / BULGULAR.length) * 100).toFixed(1)}%)`);
console.log(`  ${tek.map((b) => b.ad).join("; ")}`);

const cokBulan = BULGULAR.filter((b) => Object.keys(b.puan).length >= 3);
const yayilim = cokBulan.map((b) => Math.max(...Object.values(b.puan)) - Math.min(...Object.values(b.puan)));
console.log(`\nuc ve daha cok kisinin buldugu ${cokBulan.length} bulguda siddet yayilimi: ortalama ${(yayilim.reduce((a, c) => a + c, 0) / yayilim.length).toFixed(2)} puan, en cok ${Math.max(...yayilim)} puan`);

// Ilke basina bulgu sayisi
const ilkeler = new Map();
for (const b of BULGULAR) ilkeler.set(b.ilke, (ilkeler.get(b.ilke) ?? 0) + 1);
console.log("\nilke                        bulgu");
for (const [i, c] of [...ilkeler].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])))
  console.log(`${i.padEnd(27)} ${c}`);
bulgu                              ilke                        bulan  ortanca  aralik
yukleme durumu gosterilmiyor       durum gorunurlugu               5      2.0  2-3
ayni eylem farkli adlarla          tutarlilik                      3      3.0  2-3
odunc alma geri alinamiyor         denetim ve ozgurluk             3      4.0  3-4
hata iletisi nedeni yazmiyor       hatadan kurtulma                4      3.0  3-4
kurum sozlugu kullaniliyor         gercek dunyayla ortusme         2      2.5  2-3
geri donuste arama kayboluyor      denetim ve ozgurluk             5      4.0  3-4
ucret once onaylatilmiyor          hatanin onlenmesi               1      4.0  4-4
yer tutucu etiket yerine geciyor   hatirlamak yerine tanimak       2      3.0  3-3
raf kodu aciklanmiyor              gercek dunyayla ortusme         3      3.0  3-4
aramayi yineleme kisayolu yok      esneklik ve verim               1      2.0  2-2
uc eylem esit agirlikta            olculu tasarim                  2      2.5  2-3
yardim derinde                     yardim ve belgelendirme         1      1.0  1-1

degerlendirici  buldugu bulgu  kapsama
D1                          6  50.0%
D2                          7  58.3%
D3                          6  50.0%
D4                          7  58.3%
D5                          6  50.0%

degerlendirici sayisi  altkume  beklenen bulunan  beklenen kapsama
                    1        5              6.40             53.3%
                    2       10              9.00             75.0%
                    3       10             10.50             87.5%
                    4        5             11.40             95.0%
                    5        1             12.00            100.0%

yalniz bir degerlendiricinin buldugu bulgu: 3 / 12  (25.0%)
  ucret once onaylatilmiyor; aramayi yineleme kisayolu yok; yardim derinde

uc ve daha cok kisinin buldugu 6 bulguda siddet yayilimi: ortalama 1.00 puan, en cok 1 puan

ilke                        bulgu
denetim ve ozgurluk         2
gercek dunyayla ortusme     2
durum gorunurlugu           1
esneklik ve verim           1
hatadan kurtulma            1
hatanin onlenmesi           1
hatirlamak yerine tanimak   1
olculu tasarim              1
tutarlilik                  1
yardim ve belgelendirme     1

Sayıların Söylediği

Tek değerlendirici yarıyı bulur. Beş kişinin her biri on iki bulgunun yarısı dolayındakini buldu; bütün tek kişilik altkümeler üzerinden beklenen kapsama %53.3. Değerlendirmeyi tek kişinin yapması, sorunların yarısını görmemeyi baştan kabul etmektir.

Kazanç azalarak artar. İki değerlendiricide beklenen kapsama %75, üçte %87.5, dörtte %95. Birinciden ikinciye geçmek 21.7 puan kazandırıyor, üçüncüden dördüncüye geçmek 7.5 puan. Değerlendirici sayısı üç ile dört arasında seçilir; beşinci kişi bu örnekte 5 puan ekliyor ve aynı emek katılımcı oturumuna daha çok kazandırır.

En ağır bulguyu tek kişi buldu. “Ücret önce onaylatılmıyor” bulgusunun şiddeti 4 — ölçekteki en yüksek değer — ve yalnızca üçüncü değerlendirici buldu. Beş kişilik havuzdan rastgele seçilen tek bir değerlendiricinin bu bulguyu bulma olasılığı beşte birdir. Bu, tek değerlendiriciyle çalışmanın asıl riskidir: kaçırılan bulgu, kaçırılan bulguların ortalaması kadar önemsiz olmak zorunda değildir.

Şiddet konusunda uzlaşma iyi, kapsama konusunda kötü. Üç ve daha çok kişinin bulduğu altı bulguda şiddet yayılımı ortalama bir puan; kimse aynı bulguya 1 ile 4 arasında değişen puanlar vermedi. Değerlendiriciler bir sorunu gördüklerinde ağırlığı konusunda benzer düşünüyorlar; ayrıştıkları yer sorunu görüp görmemeleri. Bu yüzden birleştirme aşamasında tartışılacak şey puan değil, listede olmayan bulgudur.

İki ilke öne çıkıyor. Denetim ve özgürlük ile gerçek dünyayla örtüşme ilkelerinde ikişer bulgu var; ikisi de kullanıcı araştırmasında ölçülen sorunlarla aynı yere işaret ediyor — geri dönüşte kaybolan arama ve açıklanmayan raf kodu. Sezgi değerlendirmesi ile alan verisi aynı bulguda buluştuğunda kanıt gücü artar; altıncı derste konan çok kaynaklılık ölçütü burada da geçerlidir.

Sezgi Değerlendirmesinin Sınırı

Yöntem ucuzdur ve bu ucuzluk sınırının da kaynağıdır.

Bulgular hipotezdir. Değerlendirici arayüzü kullanıcı olarak değil, ölçüt listesiyle gezen bir uzman olarak görür. “Yardım derinde” bulgusunun şiddeti 1 verildi; gerçek kullanıcılar hiç yardım aramıyorsa şiddeti sıfırdır, aramaya çalışıp bulamıyorlarsa çok daha yüksektir. Bunu sezgi değil ölçüm söyler.

Yanlış bulgu üretebilir. Ölçüt listesiyle gezmek, ihlal aramaya yönelten bir tutum doğurur; her sapma bir kusur gibi görünür. Yerleşik bir ölçütten bilinçli olarak sapan bir karar — beşinci derste tartışılan ayırt edici kararlar — sezgi değerlendirmesinde ihlal olarak işaretlenir. Bu yüzden bulgular tasarım gerekçeleriyle birlikte gözden geçirilir.

Ne yapılmak istendiğini söylemez. Sezgi, arayüzün var olan hâlini ölçütlere göre denetler. Kullanıcının aslında başka bir şey yapmak istediğini, aradığı bilginin arayüzde hiç bulunmadığını ya da görevin tümüyle gereksiz olduğunu sezgi değerlendirmesi bulamaz. Bunlar araştırmanın ve kullanıcı testinin alanıdır.

Özet

  • Kullanılabilirlik sezgisi bir kural değil bir ölçüttür; sağlanmadığında kesin kusur değil, incelenecek aday çıkar ve bulgu ilke adıyla değil somut olguyla yazılır.
  • Değerlendirme bağımsız, iki geçişli ve şiddet puanlı yürütülür; birlikte gezmek bağımsız bulgu sayısını düşürür.
  • Örnek veride tek değerlendiricinin beklenen kapsaması %53.3; üç değerlendiricide %87.5, dörtte %95 ve kazanç azalarak artar.
  • En yüksek şiddetli bulguyu beş değerlendiriciden yalnızca biri buldu; kaçırılan bulgunun ortalama kadar önemsiz olacağı varsayılamaz.
  • Değerlendiriciler şiddet konusunda uzlaşıyor, kapsama konusunda ayrışıyor; birleştirmede tartışılacak olan puanlar değil listede eksik olanlardır.
  • Sezgi değerlendirmesi hipotez üretir, yanlış bulgu verebilir ve kullanıcının ne yapmak istediğini söyleyemez.

Sonraki Adım

Sezgi değerlendirmesi on iki aday üretti ve her biri bir varsayım. Hangilerinin gerçek kullanıcıyı gerçekten durdurduğu ölçülmeden bilinemez. Sonraki ders prototipi katılımcının eline verir: oturumun nasıl kurulduğunu, kaç katılımcının yeterli olduğunu ve “beş kullanıcı yeter” savının hangi koşulda doğru, hangi koşulda yanıltıcı olduğunu keşif eğrisini hesaplayarak gösterir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat