l

2011年2月24日 星期四

歪批 GOMS (1)

Feb. 24 22:25~23:46

昨天在『窮人 HCI 設計入門 』提到了使用 patterns 來設計與分析使用者介面的方法,剛剛在『擠料』的時候,突然想到了好幾年前曾經看過某篇介紹用 GOMS (Goals, Operators, Methods, and Selection rules) 來分析使用者介面設計好壞的 paper。由於年代過於久遠那篇 paper 到底跑去哪裡 Teddy 一時也找不到,只好匆匆到 Wikipedia 上面惡補一下。

先說明一下這四個名詞:
  • Goals: 使用者想要達成的目標,例如,一個文書處理器(word 或是小作家)的使用者,想要『列印文件』。『列印文件』這件事就是使用者的 goal。
  • Operators: 使用者為了達成某項 goal 所需要執行的(單一最小) action (動作),以『列印文件』而言,使用者所需要的 operator 可能包含了:
    • move mouse
    • click mouse left button
    • release mouse left button
  • Methods: 為了達到 goal 所執行的一連串 operators 就稱為一個 method。一個系統同時間可能會提供好幾種不同的 methods  來達成同一個 goal。以列印文件為例,
    • Method 1: 用滑鼠透過 tool bar 來列印文件
      • 移動滑鼠到 tool bar 上面 Print 這個 icon 上
      • 按下滑鼠左鍵
      • 放開滑鼠左鍵
    •  Method 2: 用滑鼠透過 menu 來列印文件
      • 移動滑鼠到 file menu
      • 按下滑鼠左鍵
      • 移動滑鼠到 print item
      • 按下滑鼠左鍵
      • 放開滑鼠左鍵
    •  Method 3: 用鍵盤透過 menu 來列印文件
      • 按下 alt-f
      • 放開 alt-f
      • 按下 p
  • Selection rules: 如果同時存在一種以上的 method 都可以達成相同的 goal,則我們透過 selection rule 來描述在何種情況下應該選用哪種 method 會比較合適。
由於 GOMS 所描述的最小單位是 operator (按下鍵盤上的一個 key,移動一次滑鼠都算一個 operator),因此我們只要很簡單的去『加總』某個 method 所包含的 operators 就可以比較出用該 method 來達成某個 goal 是否合適,或是還有沒有改善的空間。

***
 再舉個例子,看一下 Teddy 家裡 Firefox 所顯示的『印列對話盒』:


從這個畫面可以看出來 Teddy 有三個印表機設定(實際上有兩台印表機),由於『印列對話盒』會記住 Teddy 的預設印表機,因此當 Teddy 要透過這個畫面列印文件的時候,只需要:

method 1:
  • 移動滑鼠到『列印』按鈕上
  • 按下滑鼠左鍵
  • 放開滑鼠左鍵
或是 method 2:
  • 按下 alt + p
  • 放開 alt + p
但是,如果 『印列對話盒』沒有記住 Teddy 的預設印表機,那結果就變成:

method 1:
  • 移動滑鼠到預設印表機上
  • 按下滑鼠左鍵
  • 放開滑鼠左鍵
  • 移動滑鼠到『列印』按鈕上
  • 按下滑鼠左鍵
  • 放開滑鼠左鍵
硬是多了三個 operators

或是 method 2:
  • 按下 tab 讓 focus 移到選擇印表機的這個 UI 元件
  • 放開 tab
  • 按下『方向鍵』(向上或向下) 移到所要選擇的印表機上
  • 放開『方向鍵』
  • 按下 alt + p
  • 放開 alt + p
活生生又是多了四個 operators

***

路人甲:一定要玩到這麼『龜』嗎!連一次滑鼠移動或是按一個按鍵都要計較。

沒錯,就是要『斤斤計較』。通常 developers 可能只有在開發軟體的時候會使用自己所開發的軟體,在那之後就很少會用到。但是,你的客戶很可能是每天都要用好幾個小時以上。就算是使用者為了達到某個 goal (例如,新增一筆客戶資料)只增加三次不必要的 operators(例如,移動滑鼠,按下滑鼠右鍵,放開滑鼠右鍵),萬一這個使用者一天要新增 100 筆客戶資料,那他就活該倒楣要多操作 3 * 100 = 300 operators。

這還只是為了完成一個 goal 而已,一整天下來如果要完成 N 個 goals,這個倒楣的使用者不腰酸背痛才有有鬼。長久下來,不到 35 歲就需要去看復健科門診了。

很多使用者介面,雖然好像只是『沒有把 cursor 移到預設的位置』,『沒有設定正確的 tab order』,『沒有 focus 在正確的 UI 元件上』這種小事,對於經常使用該軟體的使用者而言卻是大事。Teddy 還記得第一次跟 Kay 借用 iPhone 來玩,那種『增一分太肥,少一分太廋(恰到好處)』的感覺,不禁發出『為什麼人家的使用者介面可以設計的那麼好用』的感嘆。相較起使用 學弟 某人設計的軟體,卻發出了『為什麼用完之後 Teddy 的手肘那麼的酸痛』的感嘆... XD。

***

程式寫得再美,使用者不會去幫你做 code review,看不到你的『內在美』,所以還是賣不出去。介面設計的好,使用者用起來很爽,就有賣點了。也許這樣講不盡公平,你會說介面設計的好但是玩兩分鐘就當機了啊。但是,至少你的客戶願意花兩分鐘來玩。介面設計的爛,客戶可能只願意花『一眼』,連動手都省了。

***

友藏內心獨白:Programmers 除了寫程式以外還是要懂一些 HCI 設計方法,『小扁鑽』還是有需要滴,捅人自捅兩相宜。

2 則留言:

  1. 同感....我就是一天加100筆資料的人

    回覆刪除
  2. 話說前陣子 "神魔之塔" 更新了版本, 進入背包後多了一個切換 "卡片種類" 的選擇動作... (後略).
    當時心中浮現的就是 "開發者可能只會用幾次, 但實際使用者卻會每天用數十至數百次; 而這多出來的動作, 加總起來就很可觀了...", 以及 "站在使用者的角度來設計, 真的很重要."

    好的設計, 不太容易讓人有感; 只有當不好的設計出現時, 好的設計才會被突顯出來呀.

    回覆刪除