--- Kamel/HCI_text.tex 2003/03/09 17:27:08 1.10 +++ Kamel/HCI_text.tex 2003/04/08 12:43:40 1.16 @@ -7,12 +7,12 @@ \begin{centering} \huge{HCI Text}\\ \huge{DVC002: Människa-datorinteraktion (MDI), 5p}\\ - \huge{2003, period 1}\\\vspace{.3in} + \huge{Läsåret 2003-2004, läsperiod 1}\\\vspace{.3in} \large{av}\\ \LARGE{Jonas Petersson \& Mathias Börjesson}\\\vspace{.4in} \large{Institutionen för programvaruteknik och datavetenskap\\ Blekinge Tekniska Högskola\\\vspace{.03in}} - \texttt{e-mail:}\\ + \texttt{e-post:}\\ \emph{jopd01@student.bth.se}\\ \emph{tb00mbo@student.bth.se}\\ \end{centering} @@ -55,32 +55,33 @@ kommer användarna att med glädje byta, även om det kan innebära vissa initiala problem. - \subsection{Användandet av script vid mjukvaruproduktion} + \subsection[Script vid mjukvaruproduktion]{Användandet av script vid mjukvaruproduktion} Detta kan lätt tyckas att detta inte har med MDI att göra, men vi kommer att förklara detta lite senare. Tanken med att använda diverse script är främst att - abstrahera krångliga kommandon (eller om man vill långa) + kristallisera krångliga kommandon (eller om man vill långa) från användaren, och istället bara använda ett kort kommando. Detta innebär att det blir enklare att hålla ordning på det man utvecklar då det i scriptet går snabbt att skriva ner de kommandon som ser till att källfilerna ligger i en katalog, de kompilerade programmet i en, och hjälp filerna i en tredje (om - programmeringsspråket stödjer detta (t.ex. java API).\\ + programmeringsspråket stödjer detta (t.ex. Java API). + - %Eller är det svaret vi skall skjuta in? Men hur är detta något som är intressant ur en MDI synpunkt?\\ Jo, tanken var ju att ta alla dom krångliga kommandona, och helt enkelt byta ut mot ett kort script. Krasst sett är detta grunden för MDI. Att ta något krångligt - kommando, och byta ut mot ett lättare. + kommando, och byta ut mot ett lättare. Eller att på + annat sätt underlätta användandet av en produkt. - \subsection{GUI design mönster} + \subsection{GUI designmönster} GUI står för Graphical User Interface, eller grafiskt - användar gränsnitt på svenska. Ett GUI kan se ut på + användargränsnitt på svenska. Ett GUI kan se ut på ett (nästan) oändligt antal sätt, men alla dessa följer ett eller flera mönster för hur man använder dessa. Då dessa mönster upprepas så är det viktigt för oss som @@ -105,46 +106,152 @@ \subsection{Prototyper och Mock-ups} - En mock-up är en form av prototyp. Den görs i ett - passande material, och beroende på vilken information - man har om den färdiga produkten så görs den med den - detaljnivå som är passande. Denna mock-up används sedan - för att testa om konceptet man har håller, och hur det - skall implementeras. En mock-up behöver inte vara för en - programvara, utan kan lika gärna vara för en fysisk - produkt, men i kursen har vi inriktat oss på programvara - då detta är det intressanta för oss. Då man skapat en - mock-up så tar man denna, och testar på en eller flera - tilltänkta användare, och lyssnar på deras åsikter om - den. När man har kommit förbi detta stadiet så kan man - bygga en lite mera avancerad prototyp för att vidare - utveckla produkten. En mock-up är vanligtvis (eller - i alla fall dom vi har gjort) ``dynamiskt statiska'' - vilket kan låta som en motsägelse, men vad vi menar med - det är att den görs dynamisk är att det går att byta - detaljer i mock-upen för att symbolisera interaktion. En - annan fördel med en mock-up framför en fungerade - prototyp är att en mock-up är gjord av ett billigt - material, och går snabbt att göra och göra om då man inser att - lösningen man har inte håller, utan behöver göras om för - att passa användaren och hans behov. + Det finns flera olika sätt att demonstrera en idé, men + den bästa brukar vara att kunna visa upp något. Det kan + vara bra att kunna berätta om idéen man har, men om man + kan ge kunden något han eller hon (dock för att underlätta + läsningen i fortsättningen använder vi ett könlöst han + för att symolisera en person av okänt kön, om inte annat + sägs) kan se, ta på, och till viss del + kunna interagera med så är det mycket enklare, dels att + sälja idén, dels att upptäcka fel och brister i den. + + Nu vet ju vi att vi bara har använt mock-ups i denna + kursen, men det vore synd att inte ta tillfället i akt + och prata lite om prototyper också. + + \subsubsection{Mock-up} + + En mock-up är en form av prototyp. Den görs i ett + passande material, och beroende på vilken information + man har om den färdiga produkten så görs den med den + detaljnivå som är passande. Denna mock-up används sedan + för att testa om konceptet man har håller, och hur det + skall implementeras. En mock-up behöver inte vara för en + programvara, utan kan lika gärna vara för en fysisk + produkt, men i kursen har vi inriktat oss på programvara + då detta är det intressanta för oss. Då man skapat en + mock-up så tar man denna, och testar på en eller flera + tilltänkta användare, och lyssnar på deras åsikter om + den. När man har kommit förbi detta stadiet så kan man + bygga en lite mera avancerad prototyp för att vidareutveckla + produkten. En mock-up är vanligtvis (eller + i alla fall dom vi har gjort) ``dynamiskt statiska'' + vilket kan låta som en motsägelse, men vad vi menar med + det är att den görs dynamisk är att det går att byta + detaljer i mock-upen för att symbolisera interaktion. En + annan fördel med en mock-up framför en fungerade + prototyp är att en mock-up är gjord av ett billigt + material, och går snabbt att göra och göra om då man inser att + lösningen man har inte håller, utan behöver göras om för + att passa användaren och hans behov. + + \subsubsection{Lågnivåprototyper} + + En lågnivåprototyp är en enkel prototyp, som snarare + syftar till att visa den grundläggande idéen. Den kan + vara en mock-up, eller något annat. En lågnivåprototyp + är något som går relativt snabbt att slänga + ihop, och brukar vanligtvis vara ganska så billig. Den + kan vara i ett material som är väldigt långt från den + färdiga produkten (en mock-up på en kartongbit är ju + väldigt långt från ett färdigt program på datorn, och + vi är ganska säkra på att man kan komma ännu längre om + man bara vill). + + Lågnivåprototypen använder man för att demonstrera + idéer, koncept och dyl. Den kan inte till fullo + användas för att fånga alla krav, men i samverkan med + andra metoder (som t.ex. intervjuer, användningsfall + osv) kan man komma nära nog i många fall. + + \subsubsection{Högnivåprototyper} + + En högnivåprototyp är en ''bättre`` prototyp, oftast + så ligger den närmare den färdiga produkten än + lågnivåprototypen till utseende, och material (där det + finns). Det som främst skiljer en högnivåprototyp + från en lågnivå är att högnivån har funktionalitet + (verklig sådan, inte att man vänder blad). + + \subsubsection{Vilken väljer vi?} + + Marc Rettig (1994) anser att om man är tvungen att + välja så är det är bättre att välja + lågnivåprototyper framför högnivå, detta för att: + + \begin{itemize} + \item Dom tar lång tid att göra + \item Kritiker och testar tenderar att kritisera + prototypen, och inte funktionaliteten i den. + \item Utvecklar drar sig för att göra om något dom + har lagt timmar (eller dagar) på att göra. + \item En mjukvaru prototyp kan sätta förväntningarna + för högt. + \item En enda bugg i prototypen kan sätta stop för + testningen av denna. + \end{itemize} + + Vi måste säga att vi håller med honom. En lågnivåprototyp + kan säga det mesta en högnivå kan, och det + den inte kan säga är det tveksamt om man kan få + tillbaka av den tid det tar att göra högnivåprototypen + (iallafall i de små projekt vi har jobbat + med hittills), det kan ju ändras om det är ett stort + projekt, men vi är inte helt säkra på det. En + prototyp skall endast ses som ett + utvecklingsverktyg, det är ju inget som utvecklar av + sig självt, på sin höjd kan det ju driva + utvecklingen framåt. + + Vi anser att de projekt vi har jobbat med har varit + så pass små att en högnivåprototyp inte skulle ha + hjälp oss komma framåt, utan snarare tvärt om, men + om man jobbar med större projekt så skall man nog + inte underskatta värdet av en högnivåprototyp, dock + så tror vi att det är viktigt att inte överskatta + den heller. + + Ett undantag bör dock göras. Om man kan utnyttja + prototypen, eller en ansenlig del av denna senare. + Om man t.ex. gör en prototyp av ett GUI, med begränsad + (eller igen) funktionalitet så kan man ju använda + detta i den färdiga produkten, förutsatt att det + faller väl ut. + + + + \subsection{Erfarenhet} Vi tror att vi kommer att använda någon form av - mock-uper efter denna kursen då en mock-up är ett snabbt + prototyper efter denna kursen då en lågnivåprototyp är ett snabbt sätt att visa hur man menar att GUI't skall se ut, och om man har ett förslag till ett GUI så är det enkelt att hitta funktionalitet som man har missat, och det kan även vara enklare att förklara vad man vill göra för en kund som inte kunskaper inom programvaruutveckling vad det är som man skall göra, och vad han får och inte får. - Han kan även ta mock-upen och visa för slutanvändarna, + Han kan även ta prototypen och visa för slutanvändarna, och dessa kan också komma till tals om hur produkten skall se ut, och dess funktionalitet. - \section {Designmönster} +<<<<<<< HCI_text.tex + Man kan även se en möjlighet till att kunden kan komma + med mera direkta förslag på förändingar/förbättringar, + eller till och med själv göra designen (eller del av + den). + + Dessutom så innebär en prototyp av något slag att man + underlättar kommunikationen mellan utvecklaren och + kunden, och då ofta kund och utvecklare har olika + kunnskaper/erfarenheter innebär detta att man minskar + risken för missförstånd, och kan rätta till ev design + missar i ett tidigt stadium. Prototypen kan även till + viss del användas för att hitta saknad funktionalitet, + dock så kan det vara värre att hitta felaktig. - När man designar GUI'n så är det nästan omöjligt att - inte använda något/några design mönster. Dom flesta sätt + \section {Designmönster} + inte använda något/några designmönster. De flesta sätt att strukturera upp ett GUI följer de mönster som finns definierade. Detta märkte vi av på första laborationen när vi skulle identifiera mönster som vi hade använt i @@ -173,7 +280,7 @@ \subsection{Vikten av att känna igen sig i ett program} En viktig sak med att få användaren att känna igen sig - är att detta ger en ``säkerhets känsla'' i programmet, + är att detta ger en ``säkerhetskänsla'' i programmet, användaren känner att han vet (i viss mån) hur han skall bära sig åt för att göra olika saker. Nästan alla program där man kan spara sitt arbete, öppna en fil med @@ -183,14 +290,14 @@ användare kan känna igen sig även om han aldrig har nyttjat programmet tidigare. - \section{Interaktions Design} + \section{Interaktionsdesign} - När man pratar om interaktions design så menar man att + När man pratar om interaktionsdesign så menar man att man sätter användaren och hans behov i fokus, och att man inte så mycket bryr sig om tekniken bakom. Detta innebär dock att för att kunna designa något så - måste vi känna målgruppen och dess behov. Att jobba med + måste vi känna till målgruppen och dess behov. Att jobba med interaktions design är väldigt snarlikt till att jobba med en användarcentrerad lösning. Det går antingen att jobba med interaktions design om man har en färdig målgrupp som @@ -200,13 +307,29 @@ Om man har en färdig målgrupp som har behov av en produkt så är det ``enkelt'' att skapa denna då man hela tiden kan rådfråga målgruppen, skapa mock-uper, prototyper osv, och - få direkt feedback på det man har gjort. + få direkt feedback på det man har gjort. Det finns undantag + då man inte kan skapa mock-uper och det är när själva slut + produkten är hemligstämplad och det finns andra aktörer på + marknaden som jobbar med samma område. Att då låta vanliga + användare komma i kontakt med sin design innebär att hemlig + information kan spridas till konkurrenterna om de nu råkar + få tag på dessa testpersoner, och fråga ut dessa. En annan sak som är viktig, mycket viktig med Interaktions - design är att den sker iterativt. + design är att den sker iterativt. Detta för att om det + inte sker iterativt så kan man inte dra maximalt värde av + denna. Det finns ju en risk att om man gör en ändring så + som ska lösa ett problem, introducerar man två nya, och om + processen inte sker iterativt så finns det ingen möjlighet + att finna detta fören det har gått en lång tid, och det + kostar mer att åtgärda. \section{Konceptuella modeller} + En konceptuell modell är en beskrivning av systemet, i + form av tankar och idéer om hur systemet skall verka och + se ut, och att det kan förstås av användaren. + \emph{``Det viktigaste är att designa användarens konceptuella modell. Allt annat skall ses som underordnat för att göra modellen klar, tydlig och @@ -216,7 +339,7 @@ modell som \emph{``en beskrivning av det föreslagna systemet i termer av integrerade idéer och koncept om vad det skall göra, bete sig samt se ut som, som skall - förstås av användaren på rätt sätt''}\\ + förstås av användaren på rätt sätt''} När man skapar en konceptuell modell så är det viktigt att man funderar över hur den slutliga produkten skall @@ -227,9 +350,9 @@ En viktig del av den konceptuella modellen är att besluta vad användaren skall göra när han använder - produkten. Detta kan även kallas interaktions sätt + produkten. Detta kan även kallas interaktionssätt dvs hur en användare skall få utföra jobbet. När man - väljer interaktions sätt så får man även tänka över hur + väljer interaktionssätt så får man även tänka över hur man skall interagera med produkten (programvaran), skall det vara med knappar, menyer, röstkommandon osv. @@ -257,20 +380,23 @@ \item Instruera \item Konversera \item Manipulera och navigera - \item Utforska och surfa %är surfa en bra översättning av browsing? + \item Utforska och ögna igenom %är surfa en bra översättning av browsing? \end{itemize} När man instruerar så förklarar man vad man vill att systemet skall göra, man ger order. Detta kan ske t.ex. - med knappar, menyer osv.\\ + med knappar, menyer osv. + När man konverserar så gör man det som man gör med en människa, antingen talar man till systemet med rösten, eller så skriver man, men man håller sig till ett - normalt språk.\\ + normalt språk. + När man manipulerar och navigerar så har man en representation (av något) som man kan manipulera för att uppnå önskat resultat. Det är en klar fördel om representationen delar vissa egenskaper som användaren - kan förstå av den fysiska världen.\\ %analoga lät fel, men fysiska låter heller inte riktigt bra... Jag höll på att skriv riktiga, men kom att tänka på vad det skulle innebära + kan förstå av den fysiska världen. %analoga lät fel, men fysiska låter heller inte riktigt bra... Jag höll på att skriv riktiga, men kom att tänka på vad det skulle innebära + När man utforskar och surfar så är systemet utformat på ett sådant vis att användaren kan få information utan att behöva formulera frågor. @@ -280,44 +406,73 @@ ofta kan man få ett resultat som blir närmare det användaren efterfrågar om man väljer att blanda flera aktiviteter. - \subsubsection{Instruera} - b + Detta är en relativt enkel modell att bygga upp, även om + det kan vara krångligt att bygga upp den på ett bra + sätt. Antingen kan man använda knappar, menyer osv för + att ge instruktioner, eller så kan man använda + textsträngar. En klar nackdel med denna modellen är att + om kommandona är långa (eller krångliga) kommer + användaren att glömma bort det, och behöva extra hjälp + när han skall nyttja denna. Detta är ett vanligt + mönster, och återfinns i flera produkter på ett sätt + eller ett annat. \subsubsection{Konversera} - a + Denna metoden är vanligast om det handlar om någon form + av expert system, eller sökfunktioner. En klar fördel + med att nyttja detta mönster är att även en människa med + små kunskaper inom både data, och ämnet som experten kan + kan ställa frågor, och få hjälp. En nackdel med detta + mönstret är att om användaren ställer frågor på ett sätt + som man inte har tänkt sig, eller som inte finns med i + informations basen så kan svaren till användaren bli + helt uppåt väggarna om man inte är noga med hur man + behandlar indatan. \subsubsection{Manipulera och navigera} - a - - \subsubsection{Utforska och surfa} - - a - - \subsection{Konceptuella modeller baserat på objekt} - - När man utgår från ett objekt så tar man ett objekt som - användaren kan relatera till, en bok, kaffe bryggare - eller dyl. Och sedan så gör man sin modell så att den - liknar det fysiska objektet. Det bör även gå att - manipulera objektet på ett vis som liknar det fysiska - objektet. Men man bör även tänka på vilka funktioner en - användare kan tänkas önska utöver dom som finns i det - verkliga objektet. Om man gör en ordebehandlare kan det - vara väldigt trevligt om denna klarar av att t.ex. - kompilera texten, rättstavning osv. + Visualisering måste innehålla mycket mer än att bara tillåta folk att ``se'' + information. Dom måste också kunna manipulera och fokusera sig på vad som är relevant + och känna igen det för att skapa ny information. Funktioner som hypertext (t.ex. HTML) + har blivit en dominant metod för att länka samman dokument, vilket tillåter användaren + att navigera sig genom dokument på ett väldigt dynamiskt och personligt sätt. + + \subsubsection{Utforska och ögna igenom} + + Hypertext är + en smidig metod för att söka efter information då man + kan länka vidare till djupare information då en + användare hittar något som intresserar. Nackdelen med + denna metod är att det kan bli grötigt, och att det + kan vara svårt att komma igång om man inte riktigt vet + vad man söker efter. Det ger däremot användaren en möjlighet + att hoppa runt på ett snabbt sätt mellan dokumenten tills + han/hon hittar det som söktes. + + \subsection{Konceptuella modeller baserat på objekt} + + När man utgår från ett objekt så tar man ett objekt som + användaren kan relatera till, en bok, kaffe bryggare + eller dyl. Och sedan så gör man sin modell så att den + liknar det fysiska objektet. Det bör även gå att + manipulera objektet på ett vis som liknar det fysiska + objektet. Men man bör även tänka på vilka funktioner en + användare kan tänkas önska utöver dom som finns i det + verkliga objektet. Om man gör en ordebehandlare kan det + vara väldigt trevligt om denna klarar av att t.ex. + kompilera texten, rättstavning osv. - \subsection{Interface metaforer} + \subsection{Interface-metaforer} Denna metod går ut på att man tar och försöker efterlikna en välkänd metod, eller något som användaren känner igen för att manipulera systemet. Det handlar oftast om att man försöker abstrahera bort hur datorn gör, och istället - likna det vi något som man känner igen. Dock så är boken - vi har väldigt kritisk mot denna metoden att utveckla + likna det vid något som man känner igen. Då boken är + väldigt kritisk mot denna metoden att utveckla produkter, så vi tänker inte gå in på denna så djupt. Dock så tror vi att det borde vara en bra metod att iallafall fundera på, men man måste nog vara försiktig så att man @@ -329,15 +484,15 @@ upp tid att hålla på med, men faktum är att den tid (och de pengar) man lägger ner på MDI tjänar man igen ganska så fort. Dessutom så är det med hjälp av en mock-up lätt att tidigt - fånga design fel, eller till och med logik fel, och ju + fånga designfel, eller till och med logikfel, och ju tidigare man kan hitta fel, desto billigare blir dom att avhjälpa. En annan viktig sak att tänka på med MDI är att man kan på - ett sätt använda det som en reklam tavla för sitt företag, + ett sätt använda det som en reklamtavla för sitt företag, om man gör en extraordinär lösning på något så kommer detta att sprida sig, men det kommer ännu mer att sprida - sig om man gör dåliga MDI lösningar. Ett företag som + sig om man gör dåliga MDIlösningar. Ett företag som tidigare har köpt en produkt som kanske är bra, bara det att de inte kan nyttja den kommer inte att köpa en produkt till av samma företag som den förra.