• No results found

Granskad: Datum: Signatur: Godkänd : Datum: Signatur:

N/A
N/A
Protected

Academic year: 2022

Share "Granskad: Datum: Signatur: Godkänd : Datum: Signatur:"

Copied!
13
0
0

Loading.... (view fulltext now)

Full text

(1)

DESIGNSPECIFIKATION MultiPC v1.0

Ansvarig: Håkan Lindegren

Granskad: ____ Datum:_________ Signatur:_________

Godkänd : ____ Datum:_________ Signatur:_________

(2)

Innehållsförteckning

1 ALLMÄNT...3

2 REFERENSER ...3

3 TERMINOLOGI ...3

4 RELATION TILL ANDRA DOKUMENT...3

5 SUBSYSTEMINDELNING...3

6 SUBSYSTEM...4

6.1 WEBBPLATS...4

6.1.1 Stödgraf ...4

6.1.2 Krävda gränssnitt ...4

6.1.3 Erbjudet gränssnitt ...4

6.1.4 Funktion...4

6.1.5 Övrigt...4

6.2 MULTIPC GUI ...4

6.2.1 Stödgraf ...4

6.2.2 Krävda gränssnitt ...5

6.2.3 Erbjudet gränssnitt ...6

6.2.4 Funktion...6

6.2.5 Övrigt...6

6.3 MULTIPC LOGIK...6

6.3.1 Stödgraf ...6

6.3.2 Krävda gränssnitt ...7

6.3.3 Erbjudet gränssnitt ...7

6.3.4 Funktion...11

6.3.5 Övrigt...11

6.4 MULTIPC HJÄLP...11

6.4.1 Stödgraf ...11

6.4.2 Krävda gränssnitt ...11

6.4.3 Erbjudet gränssnitt ...12

6.4.4 Funktion...12

6.4.5 Övrigt...12

7 PROBLEM...12

8 ÖVRIGT...13

(3)

1 ALLMÄNT

Det här dokumentet ska beskriva hur MultiPC v1.0 ska konstrueras. Dokumentet specificerar en hierarkisk indelning i subsystem. För subsystemen visas sedan beroendediagram, klassdiagram, arkitekturdiagram m.m.

2 REFERENSER

[DETDOK] Lindegren, Håkan: MultiPC v1.0: Detaljkrav.

[ANVDOK] Lindegren, Håkan: MultiPC v1.0: Användarkrav.

3 TERMINOLOGI

Fasadklass

En fasadklass läggs ovanpå en struktur av klasser för att dölja den underliggande strukturen. Det enda det externa systemet ser av stödsystemet är fasadklassen.

Singleton

Ett designmönster som kan tas till då ett system endast ska ha en instans av en klass. Ett alternativ vore att ha en enda global instans av klassen.

4 RELATION TILL ANDRA DOKUMENT

Det här dokumentet bör granskas mot detaljkravspecifikationen.

Dokumentet ska fungera som indata till implementationen.

Dokumentet ska granskas och rättas till i samband med verifiering som följer på implementationen.

5 SUBSYSTEMINDELNING

Webbplats

Installationsfil

MultiPC GUI MultiPC Logik

MultiPC Hjälp

Webbplats ska utgöra en webbplats med information om produkten MultiPC. Från webbplatsen ska det gå att ladda ner en installationsfil med ett PC-program för multiplikationsträning. PC-programmet delas in i två subsystem, ett för GUI:t och ett för logiken. Det ska utvecklas en windows hjälpfil för PC-programmet.

(4)

6 SUBSYSTEM 6.1 Webbplats 6.1.1 Stödgraf

Grafen visar beroenden mellan filer på webbplatsen. Där inget filltillägg anges gäller att det ska vara .html.

6.1.2 Krävda gränssnitt

På webbplatsen: stöd för ASP v2.0.

Hos användaren: Webbläsare med stöd för ramar.

6.1.3 Erbjudet gränssnitt

Filen index.html ger entré till webbplatsen.

6.1.4 Funktion

Subsystemet ska tillhandahålla MultiPC webbplats.

6.1.5 Övrigt

Gränssnitt mot det nerladdningsbara PC-programmet utgörs av filen mulsetup.zip.

6.2 MultiPC GUI

6.2.1 Stödgraf

(5)

Arkitektur

GUI:t ska accessa logiken via den enda klassen multipc_logic_c.

GUI-klasser och beroenden

Klasserna i GUI:t kommer att genereras av utvecklingsverktyget.

Ttraining_frm

Klass som ska hantera visning av träningsfönstret där en elev kan öva på tal. Träningsfönstret kommer att vara huvudfönster i programmet.

Tnames_frm

Klass som ska hantera visning av fönstret där en elev kan skriva in sitt namn.

Tresult_frm

Klass som ska hantera visning av facit då en elev har gjort klart ett prov.

Tstatistics_frm

Klass som ska hantera visning av statistik för en viss provtyp.

Tdetailed_frm

Klass som ska hantera visning av detaljstatistik för ett visst tal.

Tmsg_frm

Klass som ska hantera visning av felmeddelanden.

Ttestmode_frm

Klass som ska hantera visning av resultatet av en körning i testmod.

6.2.2 Krävda gränssnitt

En PC med Windows 2000.

Fönsterkomponenter i utvecklingsverktyget.

multipc_logic_c utvecklad och klar enligt nedan.

mulhelp.hlp utvecklad och klar enligt nedan.

(6)

6.2.3 Erbjudet gränssnitt

En programfil multipc.exe via vilket PC-programmet kan startas.

6.2.4 Funktion

Subsystemet ska tillhandahålla PC-programmet MultiPC.

6.2.5 Övrigt

EXE-filen ska inte splittras i två delar. Logiken ska länkas ihop med GUI:t.

multipc.exe ska tillsammans med mulhelp.hlp utgöra indata för installationen. Installationen ska tillsammans med en readme-fil packas ihop i filen mulsetup.zip.

6.3 MultiPC logik 6.3.1 Stödgraf

problem_s

En struct som ska hålla reda på två stycken heltal. Heltalen ska representera ett multiplikationsproblem, t.ex.

7•3.

answered_problem_s

En struct som ”är en” problem_s med ett heltal för avgivet svar och ett heltal för den tid det tog att avge svaret.

answers_log_c

Klass som ska hålla ordning på tio stycken answered_problem_s. Ska hantera data för facitfönstret.

details_answer_s

Struct som ska hålla reda på detaljer om ett enda problem för detaljstatistiken. I praktiken en problem_s och

(7)

en vektor med alla elevens svar, dock högst 30 stycken. Att det ska vara högst 30 stycken ges av detaljkraven för MultiPC.

detailed_answers_log_c

Klass som ska hantera detaljstatistik för samtliga 100 multiplikationstal som är möjliga.

statistics_problem_s

En struct som ”är en” problem_s förstärkt med två heltal för antalet försök och antalet rätt.

statistics_log_c

Klass som ska hantera statistik för samtliga 100 multiplikationstal som är möjliga.

problem_generator_c

Klass som ska slumpa fram nya multiplikationstal. Den får aldrig slumpa samma två tal i rad, det ges av kravställningen för MultiPC.

multidb_c

Klass som ska fungera som gränssnitt mot filhantering av elevnamn. Eftersom den troligen ska byggas ut till ett generellt databasgränssnitt i framtida utgåvor får den namnet multidb_c.

multipc_logic_c

Ska ge GUI-klasserna ett snällt gränssnitt via vilket de kan manipulera logiken.

6.3.2 Krävda gränssnitt

En C++ kompilator.

6.3.3 Erbjudet gränssnitt

En fasadklass multipc_logic_c med följande gränssnitt:

// Konstanter för felhantering vid läsning och skrivning // av elevnamn

// --- typedef enum

{

DB_OK, DB_CORRUPT, WRITE_FAILED, DB_FULL

} db_status_t;

class multipc_logic_c {

public:

// Ska returnera en unik instans av multipc_logic_c // Parametrar: INGA

//

// Retur:

// Pekare till unik instans //

// Felhantering: INGEN

// --- static multipc_logic_c *get_instance();

// Returnerar status för elev DB

// För anrop INNAN get_first_pupil/get_next_pupil // Parametrar: INGA

(8)

//

// Retur:

// Status hos elev DB: DB_OK eller DB_CORRUPT //

// Felhantering:

// Via statusvärdet

// Om status är DB_CORRUPT kommer ny och tom elevfil // att skapas. Anroparen kan sedan fortsätta.

// Jämför med detaljkraven under 120

// --- db_status_t get_db_status();

// För att loopa över och läsa in elevnamn // Parametrar:

// first_name: för lagring av elevs förnamn, minst 40 tecken // last_name: för lagring av elevs efternamnnamn, minst 40 tecken // item_found: sätts till 1 om elev fanns, 0 annars

//

// Retur:

// item_found = 1 indikerar att det fanns ytterligare en elev // item_found = 0 ==> Ingen elev, övriga param oförändrade //

// Felhantering: INGEN

// --- void get_first_pupil(

char first_name[], char last_name[], int &item_found );

void get_next_pupil(

char first_name[], char last_name[], int &item_found );

// Sätter aktuell elev // Parametrar:

// first_name: elevens förnamn, max 40 tecken // last_name: elevens efternamn, max 40 tecken //

// Retur: INGEN //

// Felhantering: INGEN

// --- void set_pupil(

char first_name[], char last_name[] );

// Ger tillbaka namn på aktuell elev // Parametrar:

// first_name: elevens förnamn, minst 40 tecken // last_name: elevens efternamn, minst 40 tecken //

// Retur:

// Namndata i first_name och last_name //

// Felhantering: INGEN

// --- void get_pupil(

char first_name[], char last_name[] );

// För lagring av nytt elevnamn

// Sätter också aktuell elev, d.v.s. anropar set_pupil // Parametrar:

// first_name: elevens förnamn, max 40 tecken

(9)

// last_name: elevens efternamn, max 40 tecken // db_status: sätts till DB_OK om det gick bra //

// Retur:

// db_status = DB_OK ==> skrivning gick bra

// db_status = WRITE_FAILED ==> skrivning misslyckades, // elev EJ lagrad

// db_status = DB_FULL ==> redan fullt i elev-DB // elev EJ lagrad

//

// Felhantering:

// Via db_status

// --- void store_name(

char first_name[], char last_name[],

db_status_t &db_status );

// För inställning av tabell // Parametrar:

// table: heltal inom [1 .. 10]

//

// Retur: INGEN //

// Felhantering: INGEN

// --- void set_table( int table );

// Returnerar inställd tabell // Parametrar: INGA

//

// Retur:

// Vald tabell, ett heltal inom [1 .. 10]

//

// Felhantering: INGEN

// --- int get_table();

// Ska ge nästa framslumpade problem // Parametrar:

// problem: operand_a/_b får värden //

// Retur:

// operand_a inom [1 .. 10], operand_b = aktuell tabell //

// Felhantering: INGEN

// --- void get_next_problem(

answered_problem_s &problem );

// Rensar den interna svarsloggen // För anrop innan ett prov startar // Parametrar: INGA

//

// Retur: INGEN //

// Felhantering: INGEN

// --- void clear_answers();

// För lagring av ett besvarat tal // Parametrar:

// answer: svarsdata som ska lagras

(10)

//

// Retur: INGEN //

// Felhantering: INGEN

// --- void store_answer(

answered_problem_s &answer );

// För att loopa över de givna svaren i ett prov // Parametrar:

// answer: får svarsdata för ett svar

// correct_answer: får korrekt svar [1 .. 100]

// item_found: sätts till 1 om svar fanns, 0 annars //

// Retur:

// item_found = 1 indikerar att det fanns ytterligare ett svar // item_found = 0 ==> Inget svar, övriga param oförändrade //

// Felhantering: INGEN

// --- void get_first_answer(

answered_problem_s &answer, int &correct_answer,

int &item_found );

void get_next_answer(

answered_problem_s &answer, int &correct_answer,

int &item_found );

// För att loopa över statistiken i vald tabell // Parametrar:

// answer_statistics: får statistik om ett tal // item_found: sätts till 1 om svar fanns, 0 annars //

// Retur:

// item_found = 1 indikerar att det fanns ytterligare statistik // item_found = 0 ==> Ingen statistik, övriga param oförändrade //

// Felhantering: INGEN

// --- void get_first_stats(

statistics_problem_s &answer_statistics, int &item_found );

void get_next_stats(

statistics_problem_s &answer_statistics, int &item_found );

// För att ställa in aktuellt tal för detaljstatistiken // Ska kombineras med set_table()

// Parametrar:

// operand_a: värdet av första operanden //

// Retur: INGEN //

// Felhantering: INGEN

// --- void set_details_number( int number );

// Returnerar inställt details_number // Parametrar: INGA

//

// Retur:

// Inställd detaljoperand, ett heltal inom [1 .. 10]

//

(11)

// Felhantering: INGEN

// --- int get_details_number();

// För att loopa över detaljstatistik för vald tabell och valt // detaljnummer

// Parametrar:

// answer_details: data får svar som avgivits // correct_answer: får korrekt svar

// item_found: sätts till 1 om svar fanns, annars 0 //

// Retur:

// item_found = 1 indikerar att det fanns ytterligare svar // item_found = 0 ==> Inget svar, övriga param oförändrade //

// Felhantering: INGEN

// --- void get_first_detail(

int &answer,

int &item_found );

void get_next_detail(

int &answer,

int &item_found );

6.3.4 Funktion

Subsystemet ska tillhandahålla ett lätthanterligt skal ovanpå MultiPC logikklasser.

6.3.5 Övrigt

Inga för utvecklingsverktyget specifika datatyper ska utnyttjas av multipc_logic_c eller dess stödklasser.

multipc_logic_c fungerar som en fasadklass och den uppfyller designmönstret Singleton.

6.4 MultiPC hjälp

6.4.1 Stödgraf

MultiPC GUI mulhelp.hlp

GUI-klasserna i PC-programmet kommer att aktivera hjälpfilen via anropet:

Application->HelpJump( ”HelpID” )

där ”HelpID” är en sträng För att det ska fungera krävs att PC-programmet utnyttjar de ID-strängar som definieras nedan.

6.4.2 Krävda gränssnitt

WinHelp i MS-Windows.

(12)

6.4.3 Erbjudet gränssnitt

En hjälpfil mulhelp.hlp med ID-strängar enligt följande:

INTRODUCTION STARTWIN TRAINING RESULTS STATISTICS DETAILS HINTS

ERROR_MESSAGES

Ovanstående ID-strängar ska utnyttjas för rubrikerna i hjälpen, se [DETDOK]. Det ska dessutom finnas ID-strängar som ger separata ingångar till hjälpen från samtliga felmeddelandefönster som dyker upp. Här gäller:

NONAME_FOUND för meddelandet att inga namn hittades.

6.4.4 Funktion

Subsystemet ska tillhandahålla en hjälpfil för MultiPC PC-program.

6.4.5 Övrigt

Nya felmeddelanden som definieras ska i hjälpen ges engelska, beskrivande namn. Den här sektionen ska fyllas på i samband med att ändringsloggen töms.

7 PROBLEM

1. Samtliga felmeddelanden är inte definierade

Det ska finnas utgångar till hjälpsystemet från samtliga felmeddelanden som dyker upp. De är ännu inte identifierade.

Lösning

Följ namnkonventionen under ”MultiPC hjälp” ovan. För in i Ändringsloggen så att det inte glöms bort.

2. Många parametrar

Vissa av funktionerna i mul_logic_c kräver flera parametrar. Vore det inte bättre att synliggöra de strukter som finns internt under mul_logic_c?

Lösning

Det kan vara en god idé. Ignorera nu.

Dokumentera som återstående problem.

3. Inklippta diagram, inklippt kodgränssnitt

UML-graferna har klippts in via ett ritverktyg. Det gör det svårt att ändra i det här dokumentet. Om kodgränssnitt ändras måste man ändra även här i dokumentet.

Lösning

Ignorera nu. Kanske bättre att lägga diagram och kodgränssnitt som bilagor?

Dokumentera som återstående problem.

(13)

4. Var finns Javaapplet?

Enligt detaljkraven 40 och 45 ska det utvecklas en Javaapplet. Den borde vara med här.

Lösning

TBD Komplettera det här dokumentet snarast.

5. Generering av namn

Enligt detaljkraven 200 ska det utvecklas testverktyg för att generera namn. Det borde vara med här.

Lösning

TBD Red ut. Är testverktyget så trivialt att det går bra ändå?

8 ÖVRIGT

Avsiktligt lämnad tom.

References

Related documents

planverksamheten flyttas från bygg- och miljönämnden till teknisk nämnd, att en ny tjänst inrättas som administrativ chef från och med 2019-01-01 med uppdrag att leda och

att godkänna utredningen Skötsel av tomt och mark i Svedala kommun med innehållande förslag till organisationsförändringar avseende skötsel av tomt och mark för samtliga objekt

Vid sammanträdet i augusti månad beslutade tekniska nämnden att återkomma till ärendet vid tekniska nämndens möte i september för yttrande avseende preliminära

Teknisk chef Fredrik Löfqvist och nämndsekreterare Alexandra Pamp föredrar ärendet. Handlingar

informationen till handlingarna och att i övrigt hänskjuta ärendet till nämnden den 18 september för behandling och beslut om yttrande.. Ett förslag till yttrande

Skolverkets beslut, daterat 2018-04-26, om statsbidrag för kostnader för samordnare av frågor som rör utveckling av verksamhet för nyanlända elever för 2017.. Ordförandes signatur

- Antalet beslut om rätt till utbildning 2018-07-01—2018-12-31: 19 Beslut om yttrande om åtagande att svara för kostnader (interkommunal ersättning) för sökandes utbildning

Ordförandes signatur Justerandes signatur Utdragsbestyrkande - Beslut, 2018-08-10, att föreslå kommunstyrelsen att hos kommunfullmäktige begära 1 000 tkr i utökad