Cosa intendiamo per "design" nell'ingegneria del software?

6

Ho letto diverse metodologie software. Ogni metodo ha una fase di progettazione in una certa misura, più o meno.

Non sono chiaro su cosa intendiamo con la progettazione. Significa scrivere il tuo processo di pensiero su come codifichi la funzione? O è un modo per dire ciò che hai codificato o codificherà.

Il punto in cui sono più confuso è il mondo reale, che è diverso dal mettere i tuoi pensieri nei documenti e dire che funzionerà. Dato che i dettagli della codifica possono cambiare, non so quale sia il motivo di avere un disegno prima della codifica.

    
posta Huzaifa 11.09.2011 - 08:19
fonte

10 risposte

6

Innanzitutto, il design è, a mio avviso, un processo di preparazione / riflessione sul progetto / software / applicazione, quindi è coerente, soddisfa gli obiettivi, soddisfa i requisiti. Il design aiuta anche a rendere più efficiente il processo di produzione del software (perché riguarda alcune cose veramente basilari del progetto, come dovrebbero funzionare ecc.).

Wikipedia dice:

Software design is a process of problem solving and planning for a software solution. After the purpose and specifications of software are determined, software developers will design or employ designers to develop a plan for a solution. It includes low-level component and algorithm implementation issues as well as the architectural view.

Il che significa che fai un piano prima di costruire la struttura (in questo caso: software).

E perché progettiamo prima, quindi implementiamo, anche se molte cose cambiano? Si prega di vedere la seguente immagine (fonte: link ) che chiarisce questo il meglio (almeno io la penso così):

    
risposta data 11.09.2011 - 05:12
fonte
4

Buona domanda! (anche se è più appropriato per programmers.stackexchange)

Anche io meditavo molto su questo punto; come puoi progettare un programma prima di averlo codificato? Voglio dire che non sai cosa scrivi dopo tutto!

Bene, per me, in poche parole, molti grandi artigiani del nostro settore hanno echeggiato;

Un buon programmatore dice "Posso risolvere questo problema" e scrive 100 righe di codice. Un grande programmatore dice 'Ho visto questo problema prima' e ri-usa il codice che ha scritto l'ultima volta.

Progettare un programma è sedersi, riflettere sulle varie problematiche del dominio del problema e lavorare in modo generale su come risolvere il problema, o su come lo hai risolto in precedenza, e (più così ho trovato di recente) quando decidere cosa è importante e cosa no.

Credo che quello a cui sto guidando è che il design è tutto sulla visualizzazione di un'immagine più grande; ma è difficile farlo finché non ci sei stato almeno una volta.

Per usare una metafora, qualsiasi programmatore può scrivere un programma che mescoli farina e acqua; ma ci vuole ulteriore comprensione per creare un sistema che faccia un dolce.

Ok, male metafora - ma spero che tu veda a cosa sto guidando.

    
risposta data 11.09.2011 - 05:20
fonte
4

L'intenzione di un software design è di fallire a poco prezzo e fallire presto. Quando progetti la tua implementazione, sei costretta a pensare alle cose in anticipo. È sempre più economico scoprire di avere commesso un errore in una fase di progettazione piuttosto che rendersi conto che l'80% del lavoro che hai svolto senza un progetto deve essere rielaborato a causa di un difetto di progettazione.

Altri con più esperienza di te avranno anche la possibilità di rivedere il tuo progetto prima di impiegare tempo a implementare la tua soluzione e segnalare eventuali errori di alto livello nel tuo sistema.

Fornisce anche a coloro che entrano nei tuoi panni in futuro la possibilità di leggere qualcosa di documentato piuttosto che cercare di capire il tuo codice.

Ovviamente, a seconda della granularità del tuo progetto, alcune cose potrebbero cambiare, ma l'architettura generale rimane la stessa circa il 90% delle volte (con sufficiente esperienza).

    
risposta data 11.09.2011 - 08:29
fonte
3

La progettazione del software è una fase di una metodologia software che, una volta eseguita, fornisce una chiara definizione di come il problema in questione possa essere risolto al meglio. Il design può andare in diverse iterazioni fino al suo completamento. Il progetto può riguardare diversi aspetti del sistema quali l'architettura della soluzione, la struttura dell'applicazione, la progettazione del database, le tecniche di integrazione, ecc. L'input del design è la pianificazione e l'analisi deliverable. La progettazione del software non si applica solo al sistema in generale, ma anche a ogni singolo componente del sistema. La progettazione del software dovrebbe essere la codifica del procedimento per i passaggi successivi. Diverse metodologie collocano le attività di progettazione in diverse fasi e le chiamano con nomi diversi.

Un significato del design del software può essere trovato in (tra molti altri) link

link

Trovo questo fumetto molto carino: link

    
risposta data 11.09.2011 - 08:54
fonte
3

Il Glossario standard IEEE della terminologia dell'ingegneria del software (IEEE Std 610.12-1990) definisce la progettazione del software come "il processo di definizione dell'architettura, dei componenti, delle interfacce e di altre caratteristiche di un sistema o componente" e "il risultato di [che ] processi". In sostanza, è l'analisi dei requisiti per produrre una sorta di descrizione di ciò che si intende costruire. Il risultato finale delle attività di progettazione è equivalente a progetti per la costruzione di un edificio.

Il design viene solitamente suddiviso in una descrizione di alto livello (o di livello superiore) del sistema che identifica vari componenti e in che modo i componenti interagiscono tra loro e una descrizione più dettagliata di ciascuno di quei componenti che consente loro di essere costruito.

Quando parli di design a qualsiasi livello, inizi a pensare a concetti come la distribuzione (quali componenti eseguiranno quali attività e dove questi componenti saranno localizzati), l'elaborazione di attività e concorrenti, i dati e gli eventi, la gestione degli errori e tolleranza agli errori, persistenza dei dati, interazione e presentazione. Considerate anche gli attributi di qualità (come manutenibilità, testabilità, portabilità, robustezza) del sistema e dei suoi componenti.

L'approccio al design dipende dalla metodologia di processo che stai utilizzando per costruire il sistema. Ad esempio, in un ciclo di vita sequenziale, tipicamente esegui "big design up-front" (BDUF), dove prendi i tuoi requisiti e produci un design di alto livello, finalizzalo (per la maggior parte), usalo per creare dettagliate progetta e implementa quel design. In una metodologia più iterativa e incrementale, è necessario prendere in considerazione tutti i requisiti noti, ma concentrare i propri sforzi sulla progettazione (e quindi sull'implementazione) di un sottoinsieme di tali funzionalità in un dato momento, evolvendo il prodotto e il suo design come aggiungere funzionalità aggiuntive.

Anche gli approcci e le tecniche specifici che utilizzi per progettare il tuo sistema variano a seconda del sistema. Ad esempio, la progettazione di un sito Web per il team locale della piccola lega, la progettazione di un'applicazione Web per Amazon e la progettazione di software per il controllo degli aeromobili sono molto diversi in termini di formalità e di ciò che è necessario documentare formalmente. Le specifiche di input, attività e output sono parte delle attività di progettazione che dovrebbero essere specificate nella documentazione di pianificazione del progetto (che, di nuovo, potrebbe variare in formalità dagli accordi verbali a una specifica estesa, a seconda del tipo di progetto).

    
risposta data 11.09.2011 - 19:52
fonte
2

Che cos'è il design?

C'è una certa quantità di variabilità che le persone includeranno sotto il titolo del design. Penso che per la maggior parte include la struttura dei sistemi e la struttura del codice.

La struttura del sistema è l'immagine macroscopica di come sarà la soluzione completa. Pensi attraverso la soluzione e fai una lista delle cose che sai di aver bisogno. Ad esempio un bisogno comune è un archivio dati. È quindi necessario decidere le specifiche, che tipo di archivio dati? Ha bisogno di essere un database, e di una struttura dati persistente, file flat, ecc. Pesate le esigenze del progetto contro i benefici di ogni implementazione, al fine di scegliere quella che meglio si adatta alle vostre esigenze.

Anche la struttura del codice fa parte del design. L'architettura generale, e forse anche suggerimenti su quale tipo di astrazione stare lontano o utilizzare. Dovrebbe essere strutturato come un unico sistema coeso. Dovrebbe essere suddiviso in componenti indipendenti che devono lavorare insieme. Come funzionerà la struttura del codice in un ambiente multi-processo, è una preoccupazione? Sarà invece multi-thread o dovremo preoccuparci di distribuire il carico di lavoro su server diversi? Questi sono i tipi di domande che inizi con.

Perché viene prima della codifica?

Non sempre viene prima della codifica, o almeno il design finale no. A volte devi prototipare per capire se un progetto funzionerà. La prototipazione consiste essenzialmente nella scelta di un disegno che si ritiene possa funzionare perché non è possibile o non si effettuerà l'analisi durante la fase di progettazione. Ciò non significa che tutte le domande debbano essere risolte in anticipo. Il design può essere un processo iterativo, tanto quanto scrivere codice. Devi capire però che certe decisioni hanno un impatto molto più ampio e provare a cambiarle in un secondo momento sarà estremamente costoso. Spostare un programma monolitico su un componente o SOA sarebbe estremamente costoso. Decidere di cambiare lingua è una decisione estremamente costosa. Quando prendi decisioni sul design, dovresti essere consapevole del costo associato al ripensamento di quelle decisioni in seguito su tutta la linea.

    
risposta data 11.09.2011 - 19:32
fonte
1

La maggior parte delle metodologie ha fasi diverse nel ciclo di vita del software. Tutto dipende dalla metodologia scelta. Tuttavia, la maggior parte di essi sta pianificando, progettando, codificando, implementando / implementando, e quindi facendo manutenzione. Ma dovrai guardarne le diverse per quello che valgono.

    
risposta data 11.09.2011 - 05:14
fonte
1

La progettazione è pensare a come strutturerai il tuo progetto: quali sottosistemi, componenti, moduli, ma anche quali classi, funzioni e variabili saranno costituiti. Prima di iniziare a scrivere codice, ti viene in mente qualche tipo di design, magari a livello di funzione o di classe, e forse è molto sottile, ma non puoi scrivere nulla senza avere un design in mente.

Il design che viene fatto in fase di progettazione è normalmente a livello di sistema, in cui decidi il tipo di sottosistemi in cui sarà composto il tuo prodotto (ad esempio web + database server) o quali saranno i componenti principali (come un utente gestione, elaborazione audio, astrazione database, ecc.). Queste astrazioni di alto livello aiuteranno a dividere le responsabilità, aiutare a pianificare il progetto e fornire la struttura principale del codice da scrivere.

Ma il design non è necessariamente una fase specifica, è qualcosa che viene ripetuto più e più volte su diversi livelli di astrazione. E come hai sottolineato, imparerai molto durante la codifica e alcune parti del design potrebbero dover cambiare, il che è perfettamente corretto. E le principali astrazioni, quelle che ho menzionato prima e che sono definite durante la fase di progettazione, sono generalmente su un'astrazione abbastanza alta da non essere influenzate da problemi a livello di codice.

    
risposta data 11.09.2011 - 05:47
fonte
0

Nella mia esperienza, il design è una delle fasi più importanti dello sviluppo del software, specialmente per i grandi progetti.

Wikipedia definisce la progettazione del software come:

Software design is a process of problem solving and planning for a software solution. After the purpose and specifications of software are determined, software developers will design or employ designers to develop a plan for a solution. It includes low-level component and algorithm implementation issues as well as the architectural view.

Ho visto incappare in così tanti problemi anche quando il percorso sembrava essere semplice e chiaro all'inizio. Trascorrere del tempo con il design risparmia il tuo tempo permettendoti di prevedere i problemi che potresti incontrare durante lo sviluppo.

    
risposta data 11.09.2011 - 08:28
fonte
0

Per essere riduzionista, e per prenderlo nel modo più semplice possibile ma pratico, puoi pensare a analisi , design e implementazione come una catena di azioni.

L'analisi è quando pensi solo agli aspetti generali del tuo progetto, senza pensare alla piattaforma specifica . Ad esempio, se si utilizzano i servizi Web, oppure no. Vuoi forzare i tuoi utenti a utilizzare la loro e-mail anziché il nome utente o no? Quanto dovrebbe durare il periodo di prova? Quali gateway di pagamento dovresti supportare? Queste sono domande di analisi, che non hanno nulla a che fare con la piattaforma e il linguaggio di programmazione .

Quando prendi le tue decisioni, il passo successivo è progettare , o scegliere un linguaggio di programmazione, una piattaforma (Linux, Windows, iOS), per scegliere gli schemi di progettazione, per riflettere sull'intero architettura del tuo progetto (come la creazione di Data Access Layer, ecc.). Design non è astratto dalla piattaforma.

Quindi dai ai tuoi documenti di progettazione gli sviluppatori, e dovrebbero trasformare quei documenti in codice reale.

    
risposta data 11.09.2011 - 08:48
fonte