High Level Design Document - Prof-Matteo-Palitto-Peano/GPO-Software-Project GitHub Wiki

High Level Design (HLD) e’ un documento tecnico di progettazione che scompone il progetto da realizzare in blocchi definendone le funzioni e le interazioni per ognuno di essi.

Normalmente, quando viene assegnato un progetto, il Pr Mgr affida l’aspetto tecnico ad un individuo con esperienza nel settore, che poi, solitamente, fara’ da coordinatore del team di realizzazione. Il suo ruolo e’ il “Lead Developer”. Esso offre consulenze tecniche al Pr Mgr durante la pianificazione ma diventa attore principale durante la fase di progettazione.

Il primo documento tecnico che viene generato dal Lead Developer e’ il HLD. La suddivisione a blocchi era gia’ stata fatta durante la pianificazione per la generazione della WBS, e per la previsione delle persone necessarie per la realizzazione e progettazione, necessarie per la stima dei costi; ma tale suddivisione era sommaria e comunque non formalizzata in un documento tecnico.

Con l’HLD il lead Developer definisce in modo formale la suddivisione del prodotto da realizzare in blocchi. Questa sudivisione e individuazione delle varie funzionalita' di ogni blocco, permette la scelta dei componenti del team di sviluppo, che naturalmente, dovranno avere le competenze necessarie per svolgere il compito assegnato.

Per esempio:
se un blocco del progetto  avrà a che fare con un DB, 
verrà’ scelto uno sviluppatore con esperienza con i DB…

Se l’interfaccia utente dovrà’ essere realizzata usando una tecnologia particolare,
si scegliera’ una persona con esperienza con quella tecnologia…

Un'altra funzione importante per l’HLD e’ l’organizzazione tra i vari team members (i membri del gruppo).

Infatti una volta definite le funzioni e le interazioni di ogni blocco, e completata l’assegnazione delle responsabilità’, ogni membro del gruppo dovrebbe poter iniziare il proprio lavoro con una certa autonomia.

Una volta che i vari blocchi sono stati decisi, ci potranno essere delle specifiche aggiuntive, questa volta non dettate dalle esigenze del cliente, ma bensì’ da esigenze tecniche e scelte a cui tutto il team si dovrà’ allineare, come per esempio il linguaggio di programmazione.

Ricapitolando la funzione del HLD:

  1. individuazione delle competenze necessarie, e quindi scelta dei team members
  2. organizzare il team di sviluppo in modo che ognuno abbia ben chiaro cosa sviluppare.
  3. L’individuazione di specifiche che derivano da esigenze tecniche

Vediamo un esempio di HLD: Consideriamo il progetto della Chat TCP.

Chat TCP High Level Design Document

Specifiche

Specifiche cliente:

  • Chat tra utenti in tempo reale
  • Chat puo' avere un numero indefinito di utenti
  • L’invio e la ricezione dei messaggi possono avvenire in modo simultaneo
  • La ricezione di un messaggio dovra’ essere stampato insieme al nome del mittente
  • un nuovo utente che si collega alla chat dovra’ essere annunciato al resto degli utenti
  • un nuovo utente che si collega ricevera’ i 10 messaggi piu’ recenti
  • Gli utenti potranno uscire dalla chat e gli altri utenti saranno notificati
  • Gli utenti avranno a disposizione una GUI
  • La connessione e’ importante che sia di qualita’ e che i messaggi inviati arrivino a destinazione

Specifiche Tecniche:

  • Linguaggio di programmazione Java
  • Utilizzo di Socket TCP

Suddivisione in Blocchi

image

Client

image

  • Ricevimento messaggi e stampa messaggi
  • Invio messaggi
  • GUI

Server

image

  • Ricevimento messaggi
  • invio messaggi
  • gestione messaggi
  • gestione utenti

Funzioni e Interazioni

Client

Funzioni:

Ogni utente interagisce con una GUI per partecipare alla CHAT

Interazioni:

  • Riceve messaggi tramite socket TCP da server
  • Invia messaggi al server per mezzo del socket TCP

GUI:

funzioni:

  • L’utente avra’ un area testo in cui inserire il Nick name
  • Un bottone per connettersi
  • Un bottone per disconnettersi
  • un area testo per inserire il testo da inviare
  • un area testo per la stampa dei messaggi della chat
  • L’invio e la ricezione puo’ avvenire in modo simultaneo interazioni:
  • riceve testo da inviare tramite tastiera
  • invia messaggio quando pulsante ENTER e’ premuto tramite il blocco “Invio Messaggio”
  • riceve messaggio da stampare nell’area CHAT dal blocco “Ricevi Messaggio”

Invio Messaggio

Funzioni:

  • L’invio del messaggio inserito dall'utente tramite GUI, accompagnato dal Nick name dell'utente
  • Deve essere eseguito in modo concorrente al blocco “Ricevi Messaggio”

Interazioni:

  • riceve da GUI il testo da inviare
  • inoltra il messaggio al socket

Ricevi Messaggio

Funzioni:

  • Riceve messaggio da Server e lo stampa nella GUI

Interazioni:

  • Riceve messaggio da socket
  • inioltra il messaggio da stampare alla GUI

Server

Funzioni/Interazioni:

Riceve i messaggi da uno dei vari clients e li invia a tutti i Clients

Gestore Connessioni

Funzioni:

  • Riceve richiesta di connessione da Clients
  • Affida la connessione ad un nuovo Socket Worker

Interazioni:

  • Riceve richiesta connessione da client
  • Aggiorna la lista dei client connessi mantenuta nel “Gestore Messaggi”
  • Invia messaggio al “Gestore Messaggi”

Socket Worker

Funzioni:

  • gestisce socket di connessione ad un client
  • viene eseguito in un proprio thread Interazioni:
  • Riceve messaggio da socket
  • Invia messaggi al “Gestore Messaggi”
  • Riceve messaggi da “Gestore Messaggi” da inoltrare a socket
  • inoltra al socket il messaggio da inviare al client

Gestore Messaggi

Funzioni:

  • Riceve messaggi dai Socket Workers e li inoltra a tutti i Socket Workers
  • Mantiene gli ultimi 10 messaggi ricevuti da inviare a nuovo Socket Worker che si connette
  • Mantiene la lista dei Socket Workers (clients) Interazioni:
  • Riceve messaggi dai Socket Workers
  • Richiede invio messaggio ai Socket Workers