01.02.2015 Views

Arkitekturspecifikation - Lysator

Arkitekturspecifikation - Lysator

Arkitekturspecifikation - Lysator

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!