Arkitekturspecifikation - Lysator
Arkitekturspecifikation - Lysator
Arkitekturspecifikation - Lysator
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
“I Tal-Lab kan ingen höra dig skrika”<br />
<strong>Arkitekturspecifikation</strong><br />
Redaktör: Andreas Rasmussen<br />
Version: 1.0<br />
Datum: 2005-10-11<br />
Sammanfattning<br />
STUM är ett system för talsyntes. Det utvecklas åt avdelningen för Human-<br />
Centered Systems (HCS) vid Institutionen för datavetenskap (IDA) vid<br />
Linköpings Tekniska Högskola (LiTH).<br />
Syftet med projektet STUM är att utveckla en applikation för att utvärdera en<br />
ny metod för talsyntes. Detta dokument beskriver den övergripande arkitekturen<br />
hos systemet.<br />
Applikationen är ett forskningsverktyg och därför ställs det höga krav på att<br />
den är överblickbar, lätt att underhålla och går att vidareutveckla. Mot bakgrund<br />
av detta har arkitekturen gjorts mycket modulär och delarna är i så stor<br />
utsträckning som möjligt helt självständiga.<br />
Slutligen har flera olika implementationsmöjligheter analyserats och<br />
utvärderats med hänsyn till möjliga fortsättningsprojekt.
Projektidentitet<br />
Projektgrupp<br />
STUM<br />
PUM 1 2005<br />
Linköpings tekniska högskola<br />
Institutionen för datavetenskap (IDA)<br />
Projektmedlemmar<br />
Namn Ansvarsområde Telefon E-post<br />
Ali Aghajani Projektledare 073-0460493 aliag988@student.liu.se<br />
Kjell Enblom Dokumentansvarig 076-2353375 kjeen007@student.liu.se<br />
Filip Klasson Kvalitetsansvarig 076-2311778 filkl784@student.liu.se<br />
Johan Millving Designansvarig 070-9788619 johmi359@student.liu.se<br />
Andreas Rasmussen Implementationsansvarig 070-3718879 andra583@student.liu.se<br />
Gustav Veide Systemansvarig 070-5514745 gusve322@student.liu.se<br />
Patrik Sandström Kundansvarig 073-5464898 patsa014@student.liu.se<br />
Thomas Janowski Testansvarig 070-9507595 tomja961@student.liu.se<br />
E-postlista för hela gruppen<br />
pum1@und.ida.liu.se<br />
Hemsida<br />
www-und.ida.liu.se/~pum1<br />
Kund<br />
Institutionen för datavetenskap<br />
Kundkontakt<br />
Bertil Lyberg, berly@ida.liu.se<br />
Mustapha Skhiri, mussk@ida.liu.se<br />
Handledare<br />
Sten Sunnergren, sten.sunnergren@ekhosat.se<br />
Examinator och kursansvarig<br />
Robert Kaminski, IDA
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
Dokumenthistorik<br />
Version Datum Utfärdade ändringar Utfärdade av<br />
0.1 2005-10-03 Den första versionen av dokumentet färdigställdes. Andreas Rasmussen<br />
0.2 2005-10-05 Efter genomläsning och kommentering av projektgruppens<br />
alla medlemmar omarbetades i stort sett samtliga<br />
kapitel och ett nytt avsnitt om säkerhet lades till.<br />
1.0 2005-10-11 Rättning enligt inspektionsprotokoll. Förtydligande av<br />
avsnitt 5.2 om testbarhet och tillägg av förklaringar i<br />
bilaga A.<br />
Andreas Rasmussen<br />
Andreas Rasmussen<br />
ii
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-12-06<br />
iii
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
1 Inledning .................................................................................................................. 1<br />
1.1 Syfte ..................................................................................................................................... 1<br />
1.2 Översikt ............................................................................................................................... 1<br />
1.3 Läsanvisningar ..................................................................................................................... 2<br />
1.4 Dokumentberoenden ............................................................................................................ 2<br />
1.5 Distribution .......................................................................................................................... 2<br />
1.6 Förkortningar och ordförklaringar ....................................................................................... 2<br />
2 Systemöversikt ........................................................................................................ 5<br />
2.1 Bakgrund ............................................................................................................................. 5<br />
2.2 Projektmål ............................................................................................................................ 5<br />
2.3 Systemmiljö ......................................................................................................................... 5<br />
3 Övergripande designbeslut .................................................................................... 7<br />
3.1 Objektorientering ................................................................................................................. 7<br />
3.2 Implementationsspråk .......................................................................................................... 7<br />
3.2.1 Java .............................................................................................................................. 7<br />
3.2.2 Hantering av befintlig kod i C och Tcl/Tk ................................................................... 7<br />
3.3 Plattform .............................................................................................................................. 7<br />
4 Analys av användningsscenarion .......................................................................... 9<br />
4.1 Databasunderhåll ................................................................................................................. 9<br />
4.1.1 Beskrivning .................................................................................................................. 9<br />
4.1.2 Analys .......................................................................................................................... 9<br />
4.2 Talsyntes .............................................................................................................................. 9<br />
4.2.1 Beskrivning .................................................................................................................. 9<br />
4.2.2 Analys .......................................................................................................................... 9<br />
4.3 Sammanfattning ................................................................................................................. 10<br />
5 Arkitektur .............................................................................................................. 11<br />
5.1 Klasser ............................................................................................................................... 11<br />
5.2 Testbarhet .......................................................................................................................... 11<br />
5.2.1 Database ..................................................................................................................... 11<br />
5.2.2 DatabaseGUI .............................................................................................................. 11<br />
5.2.3 SynthesizerGUI .......................................................................................................... 12<br />
5.2.4 Synthesizer ................................................................................................................. 12<br />
5.2.5 Visualizer ................................................................................................................... 12<br />
5.3 Identifiering och analys av kritiska klasser ....................................................................... 12<br />
5.3.1 Kritiska designmoment .............................................................................................. 12<br />
5.3.2 Kritisk funktionalitet .................................................................................................. 12<br />
5.3.3 Anmärkning angående animering av ansikte ............................................................. 12<br />
5.4 Säkerhetsanalys ................................................................................................................. 13<br />
5.4.1 Informationssäkerhet ................................................................................................. 13<br />
5.4.2 Systemsäkerhet .......................................................................................................... 13<br />
5.4.3 Nätverkssäkerhet ........................................................................................................ 13<br />
5.5 Analys av prestanda ........................................................................................................... 13<br />
5.6 Analys av skalbarhet .......................................................................................................... 13<br />
5.7 Alternativ design ............................................................................................................... 14<br />
5.7.1 Alternativ arkitektur i tre lager .................................................................................. 14<br />
6 Filformat ................................................................................................................ 17<br />
iv
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
6.1 Databas .............................................................................................................................. 17<br />
6.2 Rörelsedata ........................................................................................................................ 17<br />
6.3 Ljuddata ............................................................................................................................. 17<br />
7 Kodbibliotek .......................................................................................................... 19<br />
7.1 Orator ................................................................................................................................. 19<br />
7.2 SQLite ................................................................................................................................ 19<br />
7.3 J2SE ................................................................................................................................... 19<br />
8 Designanvisningar ................................................................................................. 21<br />
8.1 Användande av UML ........................................................................................................ 21<br />
8.2 Designmetodik ................................................................................................................... 21<br />
8.3 Testbarhet .......................................................................................................................... 21<br />
8.4 Skalbarhet .......................................................................................................................... 21<br />
8.5 Databas .............................................................................................................................. 22<br />
9 Referenser .............................................................................................................. 23<br />
9.1 Externa dokument .............................................................................................................. 23<br />
9.2 Interna dokument ............................................................................................................... 23<br />
9.2.1 Källhänvisning ........................................................................................................... 23<br />
9.2.2 Befintliga dokument .................................................................................................. 23<br />
9.2.3 Planerade dokument ................................................................................................... 23<br />
Bilaga A Modulgränssnitt .............................................................................................................. 25<br />
A.1 Relationen mellan klasserna ............................................................................................. 25<br />
A.2 Datatyper .......................................................................................................................... 25<br />
A.2.1 SynthesizerGUI ......................................................................................................... 26<br />
A.2.2 Synthesizer ................................................................................................................ 26<br />
A.2.3 Processor ................................................................................................................... 26<br />
A.2.4 Visualizer .................................................................................................................. 27<br />
A.2.5 DatabasGUI ............................................................................................................... 27<br />
A.2.6 Database .................................................................................................................... 28<br />
Bilaga B Aktivitetsdiagram ............................................................................................................ 29<br />
B.1 Lägga till post i databas .................................................................................................... 29<br />
B.2 Radera post i databas ........................................................................................................ 30<br />
B.3 Redigera post i databas .....................................................................................................31<br />
B.4 Talsyntes ........................................................................................................................... 32<br />
Bilaga C Spårbarhet ....................................................................................................................... 33<br />
C.1 Funktionella krav .............................................................................................................. 33<br />
C.2 Icke-funktionella krav ....................................................................................................... 34<br />
v
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
1 Inledning<br />
Detta kapitel är en kort översikt av dokumentet i sin helhet. Det inleds med en<br />
beskrivning av dokumentets syfte, därefter följer läsanvisningar och dokumentberoenden.<br />
Kapitlet avslutas med en genomgång av tekniska termer, förkortningar<br />
och begrepp som är av särskild betydelse i projektet.<br />
1.1 Syfte<br />
Syftet med arkitekturspecifikationen är att ge en övergripande presentation av<br />
systemets struktur, de grundläggande designbeslut som fattats och de riktlinjer<br />
som tagits fram för det fortsatta arbetet.<br />
Dokumentet skall även lyfta fram hur de krav som ställts i kravspecifikationen<br />
[2005, Sandström] skall uppfyllas och därmed fungera som länk mellan kravoch<br />
designspecifikationerna.<br />
Slutligen skall dokumentet hitta och belysa svagheter i det tänkta systemets<br />
utformning vilka kan skapa problem i ett senare skede.<br />
1.2 Översikt<br />
Kapitel 1 förklarar dokumentets syfte samt ger en översikt av dispositionen<br />
med läsanvisningar för olika målgrupper. Det klargör dokumentberoenden<br />
och förklarar ord och förkortningar som används.<br />
Kapitel 2 presenterar kunden, ger en kort bakgrund till projektet och sammanfattar<br />
målsättningen med arbetet.<br />
Kapitel 3 handlar om grundläggande designbeslut som fattats på grund av de<br />
icke-funktionella kraven, projektgruppens erfarenheter och projektets karaktär.<br />
Kapitel 4 tar genom att analysera systemets användningsfall fram en övergripande<br />
struktur.<br />
Kapitel 5 konkretiserar denna struktur genom att fastslå en klasshierarki för<br />
implementationen. Därefter analyseras arkitekturen utifrån krav på skalbarhet,<br />
säkerhet och prestanda. Kritiska moduler identifieras och diskuteras.<br />
Slutligen presenteras en alternativ design.<br />
Kapitel 6 ger några korta riktlinjer för väsentliga filformat.<br />
Kapitel 7 presenterar befintliga kodbibliotek som skall, eller eventuellt skall,<br />
användas vid design och implementation.<br />
Kapitel 8 innehåller specifika riktlinjer för det fortsatta designarbetet.<br />
Kapitel 9 är en sammanställning av referenser som gjorts tidigare i dokumentet.<br />
Bilaga A innehåller alla modulgränssnitt och en översikt av hur de hänger<br />
samman.<br />
Bilaga B innehåller detaljerade aktivitetsdiagram som illustrerar hur de olika<br />
klasserna samverkar.<br />
Bilaga C är en återkoppling av samtliga krav ifrån kravspecifikationen [Sandström,<br />
2005] för att underlätta spårbarheten i arkitekturen.<br />
Kapitel 1: Inledning 1
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
1.3 Läsanvisningar<br />
För en fullständig bild av arkitekturen rekommenderas en fullständigt genomläsning<br />
kapitel för kapitel.<br />
Den som redan är bekant med projektmålen och ställda krav, och vill försäkra<br />
sig om att arkitekturen uppfyller dessa, bör först läsa kapitel 4 och avsnitt 5.1<br />
för att få en översiktlig bild av strukturen. Därefter läsa och följa hänvisningarna<br />
i bilaga C som återkopplar alla krav till resten av dokumentet.<br />
För en läsare som inte redan är bekant med projektet, och inte har intresse av<br />
tekniska detaljer, rekommenderas enbart kapitel 2, 3 och eventuellt delar av 4.<br />
För den som vill sätta sig in i och förstå arkitekturen samt de val som gjorts bör<br />
lägga extra vikt vid att läsa kapitel 4, 3, 5 och 6. Den som skall arbete med<br />
vidare design bör därefter noggrant studera kapitel 8 och detaljerna i bilagorna<br />
A och B.<br />
1.4 Dokumentberoenden<br />
<strong>Arkitekturspecifikation</strong>en bygger vidare på följande dokument. Ändringar i<br />
dessa kan medföra att dokumentet måste omarbetas:<br />
• Projektplan, [Aghajani, 2005]<br />
• Kravspecifikation, [Sandström, 2005]<br />
Dokument som bygger vidare på det här dokumentet och som påverkas av<br />
ändringar är:<br />
• Designspecifikation [Millving, 2005]<br />
• Programmeringshandbok [Rasmussen, 2005]<br />
• Testplan [Janowski, 2005]<br />
• Systemförvaltningsdokumentation [Enblom, 2005]<br />
1.5 Distribution<br />
Detta dokument skall distribueras till följande mottagare:<br />
• Dokumentexaminatorerna Johan Fagerström och Jonas Wallgren<br />
• Projektgruppens handledare Sten Sunnergren<br />
• Kunden, kontaktpersoner Bertil Lyberg och Mustapha Skhiri<br />
• Projektgruppens dokumentpärm<br />
1.6 Förkortningar och ordförklaringar<br />
Talsyntes<br />
Naturligt tal<br />
Konkatenering<br />
Difon<br />
Konsekutiva<br />
Satsanalys<br />
Metod eller process för framställning av konstgjort tal.<br />
Inspelning av mänskligt tal.<br />
Samman-slagning/-fogning av delar.<br />
Benämning på ljudbärande halvstavelser.<br />
På varandra följande.<br />
Språklig analys av text för att identifiera dess grammatiska<br />
struktur.<br />
2 Kapitel 1: Inledning
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
HCS<br />
IDA<br />
LiTH<br />
LiU<br />
Signalbehandling<br />
Talkurvan<br />
Human-Centered Systems. En avdelning vid IDA.<br />
Institutionen för datavetenskap vid LiTH.<br />
Linköpings Tekniska Högskola, en del av LiU.<br />
Linköpings Universitetet.<br />
Matematisk manipulation av signaler. I den aktuella applikationen<br />
handlar det om anpassning av talkurvan.<br />
En signal som beskriver tonläget hos naturligt tal.<br />
Kapitel 1: Inledning 3
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
4 Kapitel 1: Inledning
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
2 Systemöversikt<br />
Detta kapitel inleds först med en kort beskrivning av kunden och bakgrunden<br />
till projektet. Därefter följer en kort beskrivningen av projektets mål, och slutligen<br />
förklaras i vilken miljö systemet är tänkt att användas.<br />
En mer detaljerad beskrivning återfinns i kravspecifikationen [Sandström,<br />
2005].<br />
2.1 Bakgrund<br />
Vid avdelningen för Human-Centered Systems vid Institutionen för datavetenskap<br />
vid Linköpings tekniska högskola bedrivs bland annat forskning<br />
inom området talsyntes. Vid avdelningen finns både lingvister och datavetare.<br />
Vid avdelningen finns idag intresse av att utvärdera en ny metod för talsyntes<br />
som bygger på sammanfogning av längre bitar naturligt tal än vad som tidigare<br />
använts.<br />
Den tidigare metoden använder difoner, delar mindre än stavelser, och implementerades<br />
i ett projekt som heter Orator. Detta beskrivs delvis i [Projekt Orator,<br />
2005]. I den nya metoden skall längre bitar av naturligt tal användas; ord<br />
och stavelser<br />
2.2 Projektmål<br />
Projektets mål är att implementera den nya metoden för talsyntesen så att<br />
denna kan utvärderas. Den framtagna applikationen är ett forskningsverktyg<br />
och tänkt som första byggsten i ett större mer långsiktigt projekt, därför måste<br />
det vara lätt att förändra och vidareutveckla.<br />
Systemet skall omfatta en databas med naturligt tal, ett verktyg för att underhålla<br />
databasen och en applikation för att experimentera med talsyntesen.<br />
2.3 Systemmiljö<br />
Systemet skall bestå av ett enda program. Programmet skall vara självständig<br />
och inte beroende av andra applikationer utöver kod- och operativsystemspecifika<br />
bibliotek. Till applikationen finns endast en användare åt gången och<br />
programmet körs på användarens egen arbetsstation.<br />
Kapitel 2: Systemöversikt 5
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
6 Kapitel 2: Systemöversikt
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
3 Övergripande designbeslut<br />
Detta kapitel beskriver övergripande designbeslut så som: logisk struktur ,<br />
implementationsspråk och plattform. Systemet skall återanvända kod ifrån ett<br />
gammalt projekt och hur denna skall hanteras beskrivs här.<br />
3.1 Objektorientering<br />
Vid utformning av systemets arkitektur har vi valt att använda en objektorienterad<br />
struktur. Detta för att systemet skall bli modulärt. Ett modulärt system är<br />
oftast enklare att underhålla, vidareutveckla och återvända delar ifrån.<br />
3.2 Implementationsspråk<br />
3.2.1 Java<br />
Systemet skall utvecklas i Java. Anledningarna till detta är flera. Dels är det ett<br />
modernt objektorienterat språk och vi har valt en objektorienterad struktur för<br />
arkitekturen, dels är det det språk projektgruppen har störst erfarenhet av.<br />
Slutligen är det ett plattformsoberoende språk med en omfattande utvecklingsmiljö<br />
och ett stort klassbibliotek.<br />
3.2.2 Hantering av befintlig kod i C och Tcl/Tk<br />
Orator är implementerat i en blandning av C och Tcl/Tk. Eftersom delar av<br />
denna kod skall återanvändas av vårt projekt kommer dessa delar även fortsättningsvis<br />
att vara skrivna i C och Tcl/Tk.<br />
Java innehåller ett ramverk som heter JNI och som används för att anropa<br />
kompilerad plattformsberoende kod. Detta gränssnitt skall användas för att i<br />
språket C kapsla in koden ifrån Orator och sedan anropa den ifrån vår Javakod.<br />
3.3 Plattform<br />
Kunden har ställt krav på att systemet i första hand skulle gå att exekvera på<br />
Windows XP men ändå vara relativt enkelt att porta till andra plattformar.<br />
Koden ifrån Orator går att kompilera för både Windows och Unix.<br />
I och med valet av Java som implementationsplattform kommer den nyutvecklade<br />
koden redan från början att gå att köra på ett stort antal operativsystem.<br />
Kapitel 3: Övergripande designbeslut 7
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
8 Kapitel 3: Övergripande designbeslut
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
4 Analys av användningsscenarion<br />
Det finns endast två olika användningsscenarion för applikationen. Dessa<br />
beskrivs utförligt i kravspecifikationen [Sandström, 2005]. Här följer en kort<br />
översikt av dessa och en analys av vilken funktionalitet de kräver av implementationen<br />
samt hur denna kan grupperas i separata moduler.<br />
4.1 Databasunderhåll<br />
4.1.1 Beskrivning<br />
Applikationens databas innehåller tal- och rörelsedata kopplat till ord och stavelser<br />
som har märkts upp enligt särskilda uttalskonventioner.<br />
Systemet skall ge användaren möjlighet att underhålla databasen, det vill<br />
säga: lägga till, radera och uppdatera data.<br />
4.1.2 Analys<br />
För att systemet skall kunna tillhandahålla denna funktionalitet krävs det att<br />
en databas implementeras med de funktionerna och att det finns ett användargränssnitt<br />
för att använda dessa.<br />
Slutsatsen blir att följande moduler behöver ingå i systemets arkitektur:<br />
• En databas.<br />
• Ett användargränssnitt för databasen.<br />
4.2 Talsyntes<br />
4.2.1 Beskrivning<br />
Systemet skall ge användaren möjlighet att mata in text, märka upp denna<br />
enligt givna uttalskonventioner och sedan omvandla detta till syntetiskt tal<br />
och animerade ansiktsrörelser som sedan spelas upp för användaren.<br />
4.2.2 Analys<br />
Genom att bryta ned omvandlingen från text till tal och ansiktsrörelser i delomvandlingar<br />
identifieras följande konsekutiva delmoment:<br />
1. Inmatning av text.<br />
2. Uppmärkning av text.<br />
3. Sönderdelning av text i delelement.<br />
4. Matchning av delelement mot databas.<br />
5. Konkatenering av sökresultat.<br />
6. Uppspelning och visualisering.<br />
Närliggande steg har identifierats, grupperats och avgränsats i separata<br />
moduler. Dessa moduler är:<br />
• Moment ett och två är de enda steg som interagerar med användaren. De<br />
placeras därför i ett interaktivt användargränssnitt.<br />
• Moment tre placeras i samma modul som användargränssnittet eftersom<br />
sönderdelningen hänger ihop med uppmärkningen. Att placera den i en<br />
annan modul skulle troligtvis innebära att extra databehandling måste<br />
Kapitel 4: Analys av användningsscenarion 9
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
göras. Vid uppmärkning av texten skapas datastrukturer som kan behövas<br />
även vid sönderdelningen och då måste dessa tas fram i båda modulerna.<br />
• Moment fyra och fem placeras i en särskild syntesmodul. Denna modul<br />
kommunicerar utöver de angränsande modulerna i omvandlingsprocessen<br />
även med den tidigare identifierade databasmodulen.<br />
• Det sista momentet placeras i en egen modul.<br />
Slutsatsen blir att följande moduler kommer att behövas i arkitekturen:<br />
• Användargränssnitt för inmatning och uppmärkning av text.<br />
• Talsynteskomponent.<br />
• Visualiseringskomponent.<br />
4.3 Sammanfattning<br />
Med utgångspunkt i de användningsfall som beskrivs i kravspecifikationen<br />
[Sandström, 2005] har följande övergripande struktur för systemet tagits fram:<br />
10 Kapitel 4: Analys av användningsscenarion
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
5 Arkitektur<br />
I detta kapitel konkretiseras den övergripande struktur som tagits fram i kapitel<br />
4 och systemets arkitektur definieras som en klasshierarki i Java.<br />
5.1 Klasser<br />
Vi har funnit att de moduler som tagits fram i kapitel 4 är direkt överförbara<br />
till klasser i Java-implementationen, och att dessa är en tillräcklig uppsättning<br />
basklasser för att realisera arkitekturen. Klasserna döps till:<br />
Klassnamn<br />
Database<br />
DatabaseGUI<br />
SynthesizerGUI<br />
Synthesizer<br />
Visualizer<br />
Beskrivning<br />
Databas-abstraktionen/-implementationen<br />
Användargränssnittet för databasunderhåll.<br />
Användargränssnittet för talsyntes.<br />
Talsyntesklassen<br />
Klassen för uppspelning av tal och ansiktsrörelser<br />
Tabell 1: Modulklasser<br />
I bilaga A beskrivs klassernas inbördes relationer och beroenden. Där återfinns<br />
även definitioner av publika gränssnitt och datatyper.<br />
I bilaga B finns aktivitetsdiagram som illustrerar hur de olika användningsfallen<br />
i kapitel 4 realiserats av klasserna och hur klasserna samverkar med varandra.<br />
5.2 Testbarhet<br />
På grund av systemets objektorienterade struktur och väl avgränsade klasser<br />
med tydliga gränssnitt finns det mycket goda möjligheter att testa deras olika<br />
funktionalitet var för sig och oberoende av varandra.<br />
5.2.1 Database<br />
Databasklassens funktionalitet kan verifieras genom att ta fram ett testscenario<br />
där specifika data lagras, återläses och verifieras. Med kända testdata kan<br />
sedan även alla sök och uppdateringsmetoder testas.<br />
Databasen kan även stresstestas med skräpdata. Även skalbarheten kan<br />
undersökas på samma sätt.<br />
5.2.2 DatabaseGUI<br />
För detta användargränssnitt kan användsfallen verifieras genom att följa ett<br />
särskilt testprotokoll som innefattar alla ställda krav.<br />
Istället för att anropa databasen kan ett särskilt ramverk för testerna skrivas så<br />
att data- och kontrollflöda kan inspekteras. Ramverket kan även fungera som<br />
ett mellanlager mellan klassen och den riktiga databasen för att göra integrationstest.<br />
Kapitel 5: Arkitektur 11
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
5.2.3 SynthesizerGUI<br />
Testning kan ske enligt samma mönster som för DatabaseGUI.<br />
5.2.4 Synthesizer<br />
Denna klass är fullständigt deterministisk. Det vill säga att för varje givet indata<br />
finns endast ett möjligt ut-data. Därmed är funktionaliteten för denna<br />
klass enkel att verifiera.<br />
5.2.5 Visualizer<br />
Denna klass kan testas genom att ta fram ett testprotokoll och sedan mata klassen<br />
med statiska in-data och observera visualiseringen.<br />
5.3 Identifiering och analys av kritiska klasser<br />
Det finns två aspekter av denna analys. Den ena är klasser som är kritiska ur<br />
design- och implementationsperspektiv och den andra är klasser som är av<br />
kritisk betydelse för funktionen vid användning av det färdiga systemet.<br />
5.3.1 Kritiska designmoment<br />
Ur design- och implementationsperspektiv är databas- och visualiseringsklasserna<br />
kritiska.<br />
Problemet med visualiseringsdelen rör det animerade ansikte som bygger på<br />
plattformsberoende kompilerad kod som skall återanvändas ifrån Orator och<br />
integreras i systemets Java-implementation. En annan svårighet ligger i att<br />
synkronisera det uppspelade talet med det animerade ansiktet vid visualiseringen.<br />
Problemet med databasen är att det är en komplicerad klass där designarbetet<br />
kan bli en betydande belastning för projektgruppen. I avsnitt 5.5 diskuteras<br />
mer utförligt några alternativ gällande designen av databasen.<br />
5.3.2 Kritisk funktionalitet<br />
Eftersom systemet har en så pass avgränsad uppgift, och är uppbyggt av ett<br />
mycket litet antal klasser, så måste samtliga klasser fungera under körning för<br />
att systemet skall vara användbart. Ingen klass är därmed funktionellt sett<br />
viktigare än någon annan.<br />
5.3.3 Anmärkning angående animering av ansikte<br />
Det animerade ansiktet i visualiseringsklassen är inte ett baskrav. Kunden är<br />
väl medveten om de problem som finns med det, och ser hellre att tonvikten i<br />
arbetet läggs på processen text-till-tal än att lösa allt för stora problem med<br />
koden ifrån Orator.<br />
Kunden ser återanvändandet av den befintliga koden ifrån Orator som en tillfällig<br />
lösning och planerar att ersätta det med ett nytt egenutvecklat ansikte i<br />
framtiden. Arkitekturen har därför inte anpassats särskilt för att underlätta<br />
integrationen med det gamla ansiktet utan istället för att få en ren och stabil<br />
arkitektur i vilken ett nytt ansikte kan utvecklas.<br />
12 Kapitel 5: Arkitektur
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
5.4 Säkerhetsanalys<br />
5.4.1 Informationssäkerhet<br />
Applikationen innehåller inget särskilt skydd för den data som lagrats i databasen.<br />
Eftersom applikationen är ett forskningsverktyg är detta varken nödvändigt<br />
eller önskvärt. Istället eftersträvas enkelhet och tillgänglighet i<br />
lagringsmodellen.<br />
5.4.2 Systemsäkerhet<br />
Eftersom applikationen är helt självständig påverkar den inte säkerheten hos<br />
det övriga systemet. Kraschar applikationen så påverkar det inga andra program.<br />
Java-plattformen innebär dessutom ett extra lager mellan applikationen<br />
och operativsystemet så risken för att eventuella fel i koden skall innebära<br />
säkerhetsrisker är inte stor.<br />
5.4.3 Nätverkssäkerhet<br />
Applikationen innehåller inga moduler som kommunicerar med några nätverk.<br />
Nätverkssäkerheten är därmed inte en fråga som berör systemet.<br />
5.5 Analys av prestanda<br />
Den prestandakritiska delen av arkitekturen är sökningen i databasen och<br />
visualiseringen.<br />
Om sökningen tar för lång tid kommer det antingen innebära att talet hackar<br />
eller att det blir längre pauser mellan meningarna. Exakt vilket beror på hur<br />
synkroniseringen med visualiseringen implementeras efter designen.<br />
I visualiseringen är det framför allt det animerade ansiktet som ställer krav på<br />
en snabb dator och ett modernt grafikkort.<br />
Tal är en av naturen långsam process så prestandan får ses som tillfredsställande<br />
ifall applikationen kan spela upp syntetiskt tal utan hack och extra pauser.<br />
Med tanke på att applikationen dessutom är ett forskningsverktyg och<br />
inte skall samköras med andra tillämpningar finns det inte i dagsläget någon<br />
anledning att utöver detta försöka minimera minnes- och processorbelastningen.<br />
5.6 Analys av skalbarhet<br />
Skalbarheten hos applikationen beror på skalbarheten hos databasen. I sitt<br />
ursprungliga utförande kommer den att innehålla väldigt lite data vilket ger<br />
högst begränsade användningsområden, och inte ställer särskilt höga krav på<br />
databasens implementation. Därmed kommer eventuella begränsningar i<br />
databasimplementationen inte att märkas i inledningsskedet.<br />
Om det i ett senare skede visar sig att databasimplementationen trots allt inte<br />
är tillräckligt effektiv går det tack vare den modulära designen enkelt att byta<br />
ut den mot en ny eller exempelvis bygga ett abstraktionslager mot en kraftfull<br />
kommersiell databasmotor.<br />
Skalbarheten när det gäller vidareutveckling begränsas inte bara av arkitekturen<br />
utan även av den metod för talsyntes som den bygger på. De vidareutvecklingar<br />
kunden kunnat identifiera har tagits i beaktning vid utvecklingen<br />
av arkitekturen. De två viktigaste av dessa är:<br />
Kapitel 5: Arkitektur 13
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
• Vid konkatenering av bitar med naturligt tal uppkommer diskontinuiteter<br />
i talkurvan vid varje skarv. Genom att infoga en signalbehandlingsmodul<br />
mellan syntes- och visualiseringskomponenterna kan detta korrigeras.<br />
• Att manuellt tvingas märka upp ren text vid inmatningen begränsar<br />
användningsområdet av applikationen och ställer höga krav på användarens<br />
kunskaper i lingvistik. Genom att använda satsanalys kan uppmärkningen<br />
ske automatiskt. Genom att byta ut användargränssnittet för<br />
uppmärkning mot en modul som gör detta arbete automatiskt kan ren<br />
text matas in.<br />
I designanvisningarna i kapitel 8 finns under ett särskilt avsnitt 8.4 förslag på<br />
hur designen redan från början kan förberedas för dessa vidareutvecklingar.<br />
5.7 Alternativ design<br />
Systemet har en väldigt specifik uppgift. Det innebär att det innehåller få<br />
moment. Därmed kommer det oavsett metod att resultera i en arkitektur som<br />
består av få moduler.<br />
De moduler som valts har en tydlig logisk koppling till den funktionalitet de<br />
innesluter. Varje modul innesluter endast en aktivitet och det finns inte två<br />
moduler som överlappar varandra någonstans. Att göra någon annan naturlig<br />
uppdelning på den övergripande nivån är svårt.<br />
Möjligtvis skulle det kunna tänkas att moduler kan sönderdelas. Risken med<br />
det är att arkitekturen då kommer att innehålla implementationsdetaljer som<br />
egentligen inte hör hemma i den övergripande strukturen. En bra sönderdelning<br />
har hittats, och när denna övervägdes ledde detta fram till en alternativ<br />
modell med tre isolerade lager som presenteras nedan.<br />
5.7.1 Alternativ arkitektur i tre lager<br />
Den konkreta skillnaden mot den valda arkitekturen är att modulen som<br />
implementeras av klassen DatabaseGUI har splittrats i två moduler:<br />
Modul<br />
DatabaseGUI<br />
DatabaseControl<br />
Beskrivning<br />
Innehåller enbart själva användargränssnittet för att manipulera<br />
databasen. Låter användaren lägga till, söka, ändra och radera<br />
poster i databasen.<br />
Finns mellan DatabaseGUI och Database. Dess uppgift är att<br />
abstrahera bort lågnivåanrop till databasen som användargränssnittet<br />
inte behöver samt att verifiera den data som användaren<br />
försöker spara i databasen.<br />
Tabell 2: Nya klasser efter splittring<br />
Rent konceptuellt introduceras tre logiska lager som är fullständigt isolerade<br />
ifrån varandra. Det vill säga att moduler i ett lager enbart kan kommunicera<br />
med moduler i de närmast angränsande lagren. Lagren är i tur och ordning<br />
uppifrån och ned:<br />
• Interaktion<br />
• Logik<br />
• Lagring<br />
14 Kapitel 5: Arkitektur
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
I dessa tre lager går det nu att sortera in våra sex moduler utan ytterligare förändringar<br />
av den arkitektur vi valt:<br />
Lager<br />
Interaktion<br />
Logik<br />
Lagring<br />
Moduler<br />
DatabaseGUI, SynteziserGUI, Visualizer<br />
DatabaseControl, Syntesizer<br />
Database<br />
Tabell 3: Placering av klasser i lagerstrukturen<br />
vilket illustreras i följande figur:<br />
I aktivitetsdiagrammen som presenteras i bilaga B skulle inte själva aktiviteteten<br />
(flödesdiagrammet) utan enbart avgränsningen mellan modulerna behöva<br />
förändras för att stämma med 3-lagerdesignen.<br />
Kapitel 5: Arkitektur 15
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
16 Kapitel 5: Arkitektur
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
6 Filformat<br />
I detta kapitel beskrivs de filformat, eller riktlinjer för filformat, som kommer<br />
att användas av applikationen.<br />
6.1 Databas<br />
Databasen kommer att lagras på disk. Det exakta formatet för detta kommer<br />
att fastslås under designarbetet och är en direkt konsekvens av databasmotorns<br />
utformning. I kapitel 8.5 anges att databasen om möjligt skall implementeras<br />
med kodbiblioteket SQLite. I så fall kommer detta databasformat att<br />
användas.<br />
6.2 Rörelsedata<br />
Rörelsedata tas genom manuellt arbete fram med ett särskilt datorsystem som<br />
projektgruppen har tillgång till i tal-laboratioriet vid HCS. Resultatet är en<br />
textfil innehållandes en matris med X-, Y- och Z-koordinater.<br />
6.3 Ljuddata<br />
Projektgruppen har spelat in ljuddata och sedan bearbetat detta i ett datorprogram<br />
som heter WaveSurfer. Detta program utvecklas vid Kungliga Tekniska<br />
högskolan, avdelning “Speech, music and hearing” (TMH).<br />
WaveSurfer kan hantera ett flertal olika standardformat för ljud. Vilket av<br />
dessa som visar sig vara bäst lämpade för implementationen av STUM skall<br />
noggrant utredas vid framtagandet av designspecifikationen som i detalj skall<br />
utforma implementationen.<br />
Kapitel 6: Filformat 17
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
18 Kapitel 6: Filformat
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
7 Kodbibliotek<br />
7.1 Orator<br />
Orator är en befintlig applikation som avdelningen Human-Centered System<br />
vid Institutionen för Datavetenskap vid Linköpings universitet tillhandahållit<br />
källkoden för. Applikationen är utvecklad i C och Tcl/Tk. Koden är skyddad<br />
av upphovsrätt och projektgruppen har skrivit på ett avtal som reglerar<br />
användandet av denna. I Orator finns en implementation av ett animerat<br />
ansikte som skall återanvändas i implementationen.<br />
7.2 SQLite<br />
SQLite är en inbäddad miniimplementation av en generell databasmotor med<br />
ett SQL-gränssnitt. Kodbibliotektet är implementerat i C och måste därför<br />
utnyttjas genom JNI om det skall användas i implementationen. SQLite är fritt<br />
att använda (public-domain) och har en mycket liberal licens. Om möjligt skall<br />
detta användas till databasimplementationen.<br />
7.3 J2SE<br />
I Java 2 Standard Edition ingår ett stort klassbibliotek. Detta kodbibliotek<br />
kommer att användas så mycket som möjligt.<br />
Kapitel 7: Kodbibliotek 19
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
20 Kapitel 7: Kodbibliotek
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
8 Designanvisningar<br />
Detta kapitel ger övergripande riktlinjer för det fortsatta arbetet med designspecifikationen.<br />
Här bestäms standardisering av diagram och annan strukturerad<br />
notation. Riktlinjer för designen av klasserna ges.<br />
8.1 Användande av UML<br />
I designspecifikationen skall UML [OMG, 2003] genomgående användas för<br />
alla typer av diagram. Om någon annan standard ändå måste användas skall<br />
detta tydligt framgå och notationen beskrivas ordentligt.<br />
8.2 Designmetodik<br />
I detta dokument har en objektorienterad analys av systemet gjorts och arkitekturen<br />
har avgränsats i fem stycken klasser. Samspelet mellan dessa klasser,<br />
och gränssnittet mellan dem, har klarlagts.<br />
I designspecifikationen skall implementationen av var och en av dessa i detalj<br />
beskrivas. Vilken designmetodik som används för detta spelar ingen roll så<br />
länge det resulterar i klassimplementationer som fyller sin funktion och följer<br />
de specificerade gränssnitten.<br />
Eftersom klasserna har väldigt olika uppgifter är det inte alls säkert att det<br />
finns en enhetlig metodik som passar alla. Därför behöver inte samma designmetodik<br />
användas för alla klasser. Istället skall var och en av klasserna designas<br />
med den för modulen lämpligaste metodiken.<br />
Klasserna kan därmed utvecklas i stort sett oberoende av varandra. Det är<br />
dock mycket viktigt att designen, och designmetodiken, för var och en<br />
beskrivs mycket noggrant och alla designval tydligt motiveras.<br />
8.3 Testbarhet<br />
Vid designarbetet skall särskild hänsyn till riktlinjer i den övergripande testplanen<br />
tas och designval som försvårar testarbetet skall undvikas om möjligt.<br />
8.4 Skalbarhet<br />
För att redan från början anpassa arkitekturen för framtida tillägg föreslås två<br />
konkreta designval.<br />
Klassen SyntesizerGUI har som uppgift att ta in information ifrån användaren<br />
och producera en följd av datastrukturer, som representerar uppmärkt tal,<br />
vilka kan skickas vidare till Syntesizer för vidare bearbetning. Denna metod<br />
att interaktivt omvandla ren text till uppmärkt och sönderdelad text är bara en<br />
tänkbar lösning. Andra tänkbara lösningar som diskuterats är en scanner/parser<br />
för en särskild uppmärkningssyntax eller att automatiskt system som självständigt<br />
omvandlar texten. Den förstnämnda varianten förkastades pågrund<br />
av att den var oflexibel och ställde stora krav på användaren. Den andra varianten<br />
är ett relativt avancerat fortsättningsprojekt.<br />
För att underlätta implementationen av olika alternativ i första steget föreslås<br />
att en virtuell klass som implementerar gränssnittet används och att SynthesizerGUI<br />
sedan ärvs från den.<br />
Kapitel 8: Designanvisningar 21
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
På samma sätt är den avslutande visualiseringsklassen Visualizer endast en<br />
tänkbar lösning. En annan lösning skulle till exempel kunna vara en klass som<br />
exporterar talet och ansiktsrörelse som en filmsekvens som kan brännas på en<br />
DVD skiva eller liknande. Därför föreslås att även klassen i sista steget implementeras<br />
som en virtuell basklass och att Visualizer ärvs av denna.<br />
En annan vidareutveckling av systemet är att introducera signalbehandling<br />
mellan Synteziser- och Visualizer-klasserna. För att underlätta detta föreslås<br />
att en virtuell basklass “Processor” implementeras mellan dessa och att en<br />
enkel klass “Passthrough” ärvs av denna och vars enda funktion är att släppa<br />
igenom data i oförändrat skick.<br />
8.5 Databas<br />
Eftersom systemet skall vara skalbart är det önskvärt att hitta en färdig generell<br />
databasmotor som kan användas i projektet. Vid framtagandet av detta<br />
dokument har, som nämnts tidigare i kapitel 7.2, kodbiblioteket SQLite hittats<br />
och utvärderats. Om möjligt skall detta användas för implementation av databasen.<br />
Kan andra kodbibliotek eller lösningar hittas och dessa visar sig vara bättre<br />
lämpade för designen skall dessa användas. Kravet på systemet att det skall<br />
vara självständigt förbjuder dock lösningar som kopplar applikationen mot<br />
externa databassystem så som MySQL eller PostgreSQL.<br />
Då design av en generell databasmotor är ett arbete minst lika stort eller större<br />
än resten av erbetet med applikationen så är det inte ett alternativ ifall vi själva<br />
skall implementera kärnan i databasen. En egenutvecklad databas blir därmed<br />
applikationsspecifik och innebär att skalbarheten blir sämre. Eventuella förändringar<br />
i datastrukturen i framtiden kan bli arbetskrävande. Därför skall en<br />
egenutvecklad applikationsspecifik databas endast övervägas ifall alla andra<br />
möjligheter uttömts.<br />
22 Kapitel 8: Designanvisningar
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
9 Referenser<br />
9.1 Externa dokument<br />
[Projekt Orator, 2005] Projekt Orator (2005), LeveransRapport fas 4,5, DataDesign<br />
2005-08-31<br />
[OMG, 2003] Object Management Group, Inc. “OMG Unified Modeling Language<br />
Specification”, <br />
9.2 Interna dokument<br />
9.2.1 Källhänvisning<br />
Interna dokument finns tillgängliga på projektgruppens nätplats vid Institutionen<br />
för datavetenskap vid Linköpings tekniska högskola. Adressen dit är:<br />
http://und.ida.liu.se/~pum1/dokument<br />
9.2.2 Befintliga dokument<br />
[Aghajani, 2005] Aghajani, Ali (2005), Projektplan, Institutionen för Datavetenskap<br />
vid Linköpings universitet, Linköping.<br />
[Sandström, 2005] Sandström, Patrik (2005), Kravspecifikation, Institutionen<br />
för Datavetenskap vid Linköpings universitet, Linköping.<br />
9.2.3 Planerade dokument<br />
Följande dokument har ännu inte tagits fram men är en del av det fortsatta<br />
arbetet med systemet och nämns i detta dokument.<br />
[Millving, 2005] Millving, Johan (2005), Designspecifikation, Institutionen för<br />
Datavetenskap vid Linköpings universitet, Linköping.<br />
[Rasmussen, 2005] Rasmussen, Andreas (2005), Programmeringhandbok,<br />
Institutionen för Datavetenskap vid Linköpings universitet, Linköping.<br />
[Enblom, 2005] Enblom, Kjell (2005), Systemförvaltningsdokument, Institutionen<br />
för Datavetenskap vid Linköpings universitet, Linköping.<br />
[Janowski, 2005] Janowski, Thomas (2005), Testplan, Institutionen för Datavetenskap<br />
vid Linköpings universitet, Linköping.<br />
Kapitel 9: Referenser 23
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
24 Kapitel 9: Referenser
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
Bilaga A<br />
Modulgränssnitt<br />
I det här kapitlet beskrivs Java-klasserna som implementerar de moduler<br />
arkitekturen delats upp i.<br />
A.1 Relationen mellan klasserna<br />
Pilarna beskriver funktionellt beroende. Det vill säga att modulen vid pilens<br />
ände anropas av modulen vid pilens start.<br />
A.2 Datatyper<br />
För att minska ned antalet klassmetoder definieras en ren dataklass som<br />
kapslar in den data som skall transporteras runt i systemet. Denna klass skall<br />
heta Phrase men den kommer inte att fullständigt specifieras här. Anledningen<br />
till detta förklaras ned.<br />
För lagring och hantering av ljud- och rörelsedata finns två helt olika designalternativ.<br />
Antingen så lagras data inuti databasen eller så är databasen enbart<br />
ett index över en eller flera externa binärfiler. Beroende på vilket kommer<br />
datatypen att innehålla olika information. För att inte föregripa och i onödan<br />
låsa in detaljdesignen i detta avseende lämnas det beslut till senare då konsekvenserna<br />
av de olika strukturerna är lättare att bedömma.<br />
Phrase skall dessutom innehålla information om uttalsuppmärkningen av<br />
textstycket som datatypen skall representera. Exakt hur denna skall göras, och<br />
vilken information som behövs, beror på implementationen. Då det är kunden<br />
och inte projektgruppen som besitter den nödvändiga kunskapen i lingvistik<br />
kommer kunden aktivt att delta i implementationsdesignen för att hitta bästa<br />
möjliga representation. Därför definieras ej heller denna del av datastrukturen<br />
i detta skede.<br />
Bilaga A: Modulgränssnitt 25
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
A.2.1<br />
SynthesizerGUI<br />
SynthesizerGUI<br />
+SynthesizerGUI()<br />
+show(): void<br />
+hide(): void<br />
Tabell 4: Klassmetoder SynthesizerGUI<br />
Denna klass implementerar användargränssnittet för talsyntesen.<br />
Denna klass använder: Phrase, Synthesizer,Visualizer och Processor.<br />
Inga övriga kommentarer.<br />
A.2.2<br />
Synthesizer<br />
26 Bilaga A: Modulgränssnitt<br />
Synthesizer<br />
+Synthesizer()<br />
+synthesize(phrase: Phrase, visualizer: Visualizer): boolean<br />
+synthesize(phrase: Phrase, processor: Processor): boolean<br />
Tabell 5: Klassmetoder för Synthesizer<br />
Denna klass implementerar talsyntesmotorn (konkateneringsprocessen).<br />
Denna klass använder: Phrase, Database, Visualizer och Processor.<br />
Metoden synthesize anropas med en instans av dataklassen Phrase som innehåller<br />
text med information om uttalsmärkning. Den matchar denna mot<br />
informationen i databasen, kompletterar datastrukturen med tal- och rörelsedata<br />
och vidarebefodrar den därefter till det givna Visualizer- eller Processorobjektet<br />
för vidare behandling.<br />
A.2.3 Processor<br />
Det här är en utökning av den grundläggande arkitekturen som föreslås i kapitel<br />
8.4 för att redan från början förbereda arkitekturen för vidare utveckling.<br />
+Processor(visualizer: Visualizer)<br />
+Processor(processor: Processor)<br />
+process(phrase: Phrase: void)<br />
Processor<br />
Tabell 6: Klassmetoder för Processor<br />
Denna klass är tänkt som en abstrakt basklass från vilken olika typer av signal<br />
och databehandling kan implementeras mellan konkatenering och återkoppling<br />
till användaren.<br />
Denna klass använder: Phrase, Processor och Visualizer.<br />
En instans av Processor-klassen har en dedikerad funktion därför anges<br />
målklassen (konsumenten) i konstruktorn. Utdata ifrån objektet konsumeras<br />
antingen av ännu ett Processor-objekt, och en lång kedja av signalbehandling
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
kan därmed upprättas, eller ett Visualizer-objekt för återkoppling till användaren.<br />
Metoden process tar ett Phrase-objekt, manipulerar dess innehåll och vidarebefodrar<br />
det till konsumenten.<br />
A.2.4<br />
Visualizer<br />
+Visualizer()<br />
+visualize(phrase: Phrase: void)<br />
+reset(): void<br />
Visualizer<br />
Tabell 7: Klassmetoder för Visualizer<br />
Denna klass är tänk som en abstrakt basklass från vilken olika typer av återkoppling<br />
till användaren kan implementeras. I den aktuella implementation är<br />
detta uppspelning av tal och animering av rörelsedata.<br />
Denna klass använder: Phrase.<br />
Inga övriga kommentarer.<br />
A.2.5<br />
DatabasGUI<br />
DatabaseGUI<br />
+DatabaseGUI()<br />
+show(): void<br />
+hide(): void<br />
Tabell 8: Klassmetoder för DatabaseGUI<br />
Denna klass implementerar ett användargränssnitt för att manipulera och inspektera<br />
innehållet i databasen.<br />
Denna klass använder: Database och Visualizer.<br />
Inga övrig kommentarer.<br />
Bilaga A: Modulgränssnitt 27
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
A.2.6<br />
Database<br />
Database<br />
+Database(identifier: String)<br />
+add(phrase: Phrase): boolean<br />
+findText(text: String): long<br />
+findSyntax(syntax: String): long<br />
+findFirst(): long<br />
+findLast(): long<br />
+findNext(): long<br />
+findPrev(): long<br />
+getPhrase(entry: long): Phrase<br />
+getCurrentPhrase(): Phrase<br />
+getCurrentEntry(): long<br />
+update(phrase: Phrase): boolean<br />
+update(phrase: Phrase, node: long): boolean<br />
+remove(entry: long): boolean<br />
+removeCurrent(): boolean<br />
+close(): void<br />
Tabell 9: Klassmetoder för Database<br />
Denna klass implementerar en databas eller fungerar som abstraktionslager<br />
för en befintlig implementation.<br />
Denna klass använder: Inga andra klasser i arkitekturen.<br />
Argumentet till konstruktorn finns där för att gränssnittet redan från början<br />
skall innefatta möjligheten att arbeta med flera olika databaser. Detta är inte<br />
aktuellt i nuläget.<br />
28 Bilaga A: Modulgränssnitt
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
Bilaga B<br />
Aktivitetsdiagram<br />
Denna bilaga innehåller diagram som illustrerar hur funktionaliteten är<br />
fördelad mellan systemets huvudklasser samt hur dessa samverkar i de mest<br />
centrala användningsfallen.<br />
B.1 Lägga till post i databas<br />
Bilaga B: Aktivitetsdiagram 29
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
B.2 Radera post i databas<br />
30 Bilaga B: Aktivitetsdiagram
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
B.3 Redigera post i databas<br />
Bilaga B: Aktivitetsdiagram 31
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
B.4 Talsyntes<br />
32 Bilaga B: Aktivitetsdiagram
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
Bilaga C<br />
Spårbarhet<br />
Detta avsnitt beskriver var de krav som definierats i kravspecifikationen återfinns<br />
i arkitekturspecifikationen. Detta för att lätt kunna fastställa att alla krav<br />
kan uppfyllas med den nuvarande arkitekturen. I kravspecifikationen [Sandström,<br />
2005] återfinns en mer detaljerad beskrivning av kraven.<br />
Tabellerna innehåller det kravnummer och kravnamn som finns i kravspecifikationen<br />
[Sandström, 2005].<br />
För de funktionella kraven anges vilken modul som gör att kravet uppfylls.<br />
Alla icke-funktionella krav går inte att hänvisa till en speciell modul utan det<br />
kan istället finnas en hänvisning till ett kapitel i arkitekturspecifikationen som<br />
tar upp kravet.<br />
Vissa icke-funktionella krav kan ej härledas till arkitekturspecifikationen eftersom<br />
de handlar om datainnehåll i databasen och är kopplade till det datainsamlingsarbete<br />
projektgruppen måste att göra för systemet över huvudet taget<br />
skall kunna utvecklas, testas och användas. Dessa har markerats med texten<br />
“Datainsamling”.<br />
C.1 Funktionella krav<br />
Krav Benämning Modul<br />
F-1.1 Inmatning av uppmärkt text SynthesizerGUI<br />
F-1.2 Ta ut uppmärkt ord SynthesizerGUI<br />
F-1.3 Ta ut uppmärkt stavelse Synthesizer<br />
F-1.4 Konkatenera tal och<br />
rörelsemönster<br />
Synthesizer<br />
F-1.5 Koppling till Orator Visualizer<br />
F-1.6 Spela upp ljud Visualizer<br />
F-2.1 Lägg till data DatabaseGUI<br />
F-2.2 Ta bort data DatabaseGUI<br />
F-2.3 Söka efter uppmärkta ord Database<br />
F-2.4 Söka efter uppmärkt stavelse<br />
Database<br />
Bilaga C: Spårbarhet 33
Linköpings tekniska högskola<br />
Institutionen för datavetenskap<br />
PUM 1 2005<br />
<strong>Arkitekturspecifikation</strong> 1.0<br />
Andreas Rasmussen<br />
2005-10-11<br />
C.2 Icke-funktionella krav<br />
Krav Benämning Kapitel/Modul<br />
I-1.1 Separat system 2.3<br />
I-1.2 Systemmiljö - Windows 3.2.1<br />
I-1.3 Systemmiljö - Unix 3.2.1<br />
I-2.1 Innehåll-Data 6.1<br />
I-3.1 Datainsamling Datainsamling<br />
I-3.2 Innehåll-kvantitet Datainsamling<br />
I-3.3 Synkronisering Datainsamling<br />
I-4.1 Användarvänlighet SynthesizerGUI<br />
34 Bilaga C: Spårbarhet