DESIGNSPECIFIKATION Rev 8 1(13) DESIGNSPECIFIKATION MultiPC v1.0 Ansvarig: Håkan Lindegren Granskad: Datum: Signatur: Godkänd : Datum: Signatur:
DESIGNSPECIFIKATION Rev 8 2(13) 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
DESIGNSPECIFIKATION Rev 8 3(13) 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 MultiPC GUI MultiPC Logik Installationsfil 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.
DESIGNSPECIFIKATION Rev 8 4(13) 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
DESIGNSPECIFIKATION Rev 8 5(13) 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.
DESIGNSPECIFIKATION Rev 8 6(13) 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
DESIGNSPECIFIKATION Rev 8 7(13) 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
DESIGNSPECIFIKATION Rev 8 8(13) 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[], void get_next_pupil( char first_name[], char last_name[], 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
DESIGNSPECIFIKATION Rev 8 9(13) 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
DESIGNSPECIFIKATION Rev 8 10(13) 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, void get_next_answer( answered_problem_s &answer, int &correct_answer, 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, void get_next_stats( statistics_problem_s &answer_statistics, 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]
DESIGNSPECIFIKATION Rev 8 11(13) 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, void get_next_detail( int &answer, 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.
DESIGNSPECIFIKATION Rev 8 12(13) 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.
DESIGNSPECIFIKATION Rev 8 13(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.