Come descrivere l'architettura di un prodotto software?

4

Sto lavorando alla mia tesi di CS Master presso un'azienda che fa interfacce utente nel campo dei dispositivi embedded. Come parte di ciò sto sviluppando una libreria per l'integrazione di un determinato dispositivo. La mia libreria C ++ racchiude i driver di dispositivo e integra le funzionalità del dispositivo nel framework Qt in modo che possa essere utilizzato con una varietà di applicazioni basate su Qt / QML.

Finora ho scritto molte note e una dettagliata documentazione API (usando Doxygen). Ma non ho idea di come formattare correttamente tutte le informazioni al fine di fornire una buona panoramica del mio lavoro nella tesi. Usare semplicemente la documentazione dell'API non ha senso dato che 1) è troppo dettagliato e 2) non fornisce una panoramica formale di come le cose sono strutturate e funzionano insieme.

Da quello che so, devo descrivere almeno i seguenti aspetti del prodotto software che sto sviluppando:

  • Tecnologia (e): quali tecnologie ho utilizzato. Ho diviso il mio progetto in:

    • una libreria che fornisce la gestione dei dispositivi, la conversione dei dati e l'integrazione Qt;
    • test; e
    • una raccolta di widget Qt già pronti che utilizzano la libreria.
  • Pattern: quali pattern software ho usato (MVC, Singleton, Factory, Observer ecc.). Il problema qui è che ci sono molti, molti modelli là fuori e c'è una contraddizione conosciuta quando si tratta di quale pattern è esattamente ciò che (solo il pattern MVC è molto famoso per questo) - scegli tre libri di autori diversi e c'è molto alta probabilità che le descrizioni di questo modello siano molto diverse!). Personalmente lavoro seguendo il principio "XYZ ha senso per me quindi lo userò", che probabilmente molti di voi troveranno troppo ampio. : D

  • Flusso di informazioni: principalmente diagrammi di sequenza e di flusso qui: se l'utente esegue l'azione X, come risponde il dispositivo e il resto del sistema.

  • Gestione dati: per l'archiviazione e l'elaborazione dei dati dal dispositivo, la mia libreria utilizza contenitori di dati come matrici, vettori, tabelle hash, ecc.

Dubito che questo sia sufficiente o addirittura corretto, ecco perché sto chiedendo aiuto. Non sono riuscito a trovare un tutorial passo passo che posso seguire. Inoltre, non so quanto sia profondo andare.

Ho chiesto al mio professore di materiale di livello hardware e ha detto che non vuole vederlo nella tesi e che dovrei concentrarmi su ciò che sto sviluppando .

Tuttavia questa restrizione aiuta solo un po 'dal momento che il framework Qt da solo ha una struttura enorme e complessa. Ad esempio, se utilizzo un QVector3D devo effettivamente descrivere dettagliatamente cosa è e come è gestito o posso supporre che un semplice "contenitore per vettori 3D" sia sufficiente?

Francamente, abbiamo studiato varie cose relative all'architettura software come i modelli ecc., ma non ci è mai stato mostrato come descrivere formalmente un sistema software. Tutto ciò che ho fatto in precedenza erano brevi rapporti di laboratorio e documentazione API + alcune statistiche di valutazione sulle prestazioni.

    
posta rbaleksandar 10.01.2017 - 13:14
fonte

3 risposte

8

Considera l'utilizzo di 4 + 1 Architecture view per descrivere l'architettura del tuo software.

Il riepilogo delle viste è riportato di seguito:

Visualizzazione dello sviluppo: una vista di implementazione dal punto di vista dello sviluppatore del software. I diagrammi UML (come il diagramma del pacchetto) potrebbero essere usati per rappresentare questa vista.

Vista logica: fornisce una vista funzionale che descrive la funzionalità che il sistema fornisce agli utenti finali. I diagrammi UML (come diagrammi delle classi e diagrammi delle attività) potrebbero essere utilizzati per rappresentare la vista logica.

Vista fisica: rivela il punto di vista di un ingegnere di sistema. Si riferisce anche alla vista di implementazione. È possibile utilizzare il diagramma di distribuzione per descrivere la vista.

Visualizzazione processo: Cattura gli aspetti dinamici (concorrenza, comportamento di runtime, ecc.) del sistema. I diagrammi di attività sono adatti per la vista.

Scenari: Scenari (o casi d'uso) descrivono sequenze di interazioni tra oggetti e tra processi.

    
risposta data 10.01.2017 - 16:47
fonte
2

Hai bisogno di diagrammi. Un buon diagramma è migliore di un muro di parole e può essere incollato in qualsiasi documento (inclusa una tesi). I diagrammi delle classi UML sono un ovvio punto di partenza. Aggiungi altri diagrammi UML se ti sono utili - come diagrammi di pacchetti, diagrammi di casi d'uso o diagrammi di sequenza. Magari usi altri tipi di diagrammi non UML se lo desideri.

Una volta che hai i diagrammi, puoi scrivere le parole intorno a loro.

    
risposta data 10.01.2017 - 16:27
fonte
2

Questa domanda ha più risposte corrette, quindi lascerò quella che @Tushar ha dato come quella giusta.

Nel mio caso una combinazione di due modelli si adatta abbastanza bene. Fino a questo momento ho effettivamente lavorato con un modello di architettura a strati . Una conferma che è "quella giusta" per il mio caso mi è venuta mentre cercavo altre informazioni e ho trovato .Net Micro Framework :

Il mio sistema ha un layout molto simile (eccetto che al posto di .NET sto usando Qt). Tuttavia, questo modello non include qualcosa che il 4 + 1 view model suggerito ha la vista Scenario . Quindi, quello che sto per fare è usare il modello di livello per descrivere la struttura generale del mio sistema, aggiungere diagrammi UML (principalmente attività e sequenza) per mostrare come vengono elaborati input e output e infine aggiungere una sezione per scenari che descrivono le funzionalità offerte dal mio software.

Trovo che il modello a strati sia relativamente semplicistico (a differenza del modello 4 + 1 in cui devi specificare molte cose che normalmente non ti infastidiscono nel mettere una tesi), ma offri una buona panoramica di un sistema in particolare quando si tratta di interazione tra hardware e software.

    
risposta data 17.01.2017 - 14:10
fonte

Leggi altre domande sui tag