Costruire il frontend del software per l'hardware che non esiste ancora

6

Il nostro compito è creare un frontend software per controllare un dispositivo hardware che non esiste ancora. Dovremmo iniziare lo sviluppo circa un anno e mezzo prima che il primo prototipo sia disponibile, il progetto è pronto per un anno. Non è ancora chiaro di cosa saranno capaci l'hardware e il software embedded. Non ci sono ancora interfacce specifiche. Ciò avrà un impatto sulla progettazione del software client.

Ci sono solo poche cose che possiamo realmente costruire fintanto che le interfacce non sono specificate in dettaglio.

Certo, probabilmente dirai semplicemente: Scrivi una simulazione . Ma questo non è un compito facile e un intero finto potrebbe rivelarsi un intero progetto da solo.

Sto pensando di scrivere un livello adattatore in cui posso collegare qualsiasi dispositivo in un secondo momento, purché abbia le funzionalità promesse.

Ma mi piacerebbe ricevere consigli da voi, su come affrontare tali progetti ed evitare possibili insidie. A quali cose dovremmo prestare particolare attenzione? Come dovremmo avanzare su un simile progetto?

Ulteriori informazioni: Stiamo creando il progetto software simile a SCRUM, ma non tradizionale. Faremo una buona parte del design iniziale per stabilire una visione chiara, al fine di raggiungere gli obiettivi desiderati e minimizzare il numero di iterazioni.

Inoltre, abbiamo una visione chiara su ciò che l'hardware / software embedded dovrebbe fornire, semplicemente non sappiamo come andranno a farlo e se possono implementare i requisiti funzionali a tutti. Abbiamo iniziato un documento per raccogliere le interfacce che vorremmo avere per il software client (perché chi specifica prima, vince, g ). Abbiamo anche una visione piuttosto chiara di come dovrebbe apparire il cliente per offrire il miglior valore aziendale, ma non è ancora chiaro se l'hardware può supportare i nostri concetti e ci vorrà probabilmente del tempo prima che il progetto sia sicuro. Tuttavia, dovremmo iniziare lo sviluppo al più presto.

    
posta Falcon 01.05.2012 - 09:51
fonte

6 risposte

2

Non fornisci alcun suggerimento su cosa farà l'hardware, quindi presumo che non si tratti di dispositivi che richiedono la conformità a una specifica (come una scheda di rete).

Nel caso più generale, inizierei con un'API completamente specifica per accedere all'hardware previsto secondo le specifiche funzionali. Una volta approvata la tua API, puoi passare all'implementazione dell'hardware simulato come libreria solo software. Ciò ti darà un grande vantaggio anche dopo che l'hardware è stato eseguito, perché puoi eseguire il debug di un bel po 'dei tuoi client senza mai aver bisogno dell'hardware - molto più semplice che fare casino con un dispositivo hardware. Questo ti darà due prodotti da mantenere: la vera libreria e una libreria di emulazione; ma lo sforzo ne varrà la pena.

Una volta che l'hardware è pronto, puoi iniziare a rimuovere un sacco di codice dalla libreria e scaricare l'elaborazione sul tuo hardware. La libreria verrà quindi trasformata in un livello adattatore: conversione dell'implementazione hardware nell'API implementata nel software. Se la tua API corrisponde perfettamente all'hardware, la libreria sarà uno shim estremamente sottile, forse qualcosa che serializza i parametri, li invia all'hardware e legge i risultati. Oppure può rivelarsi qualcosa di simile all'hardware reale, quindi nella libreria sarà presente un bel po 'di codice, mantenendo lo stato lato client non banale che viene utilizzato per guidare l'hardware.

    
risposta data 01.05.2012 - 17:17
fonte
2

Questa sembra un'opportunità perfetta per me. Mi piacerebbe un progetto in cui non solo è fattibile ma desiderabile per il cliente passare attraverso molte fasi del prototipo prima di svilupparlo realmente.

Tutti alla riunione di progettazione iniziale avranno una visione leggermente diversa del software. Puoi aiutare ciascuno a visualizzare il prodotto molto facilmente con un prototipo di carta .

Puoi discutere delle differenze, mostrarle ai tuoi capi, ai tuoi clienti, a qualcuno che hai appena trascinato fuori strada e avere una buona idea di cosa funziona e cosa no, finché non arrivi a una singola visione .

Quindi puoi creare un prototipo fisico, in HTML o qualsiasi altro linguaggio di progettazione front-end che stai utilizzando. Non dovrebbe fare nulla. Dovrebbe essere solo un front-end, su cui le persone possono fare clic e digitare e spostarsi tra le loro tre schermate. Qualunque cosa. Lascia che le persone giochino, guardandole e imparino cosa funziona e cosa no, dove sono presenti le incongruenze nella progettazione, in cui le persone sentono la necessità di fare clic, ecc.

Allora e solo allora saprai veramente a cosa dovrebbe assomigliare l'interfaccia più semplice possibile per il tuo hardware. E poi puoi scrivere il tuo adattatore, lasciando solo le complicazioni dell'interfaccia reale, quando arriva, al codice.

    
risposta data 01.05.2012 - 10:18
fonte
1

Scrum è un'ottima scelta in un progetto con un livello tale di incertezze .

Devi lavorare con attività commerciali e amp; hardware team da vicino e iterate fino a raggiungere l'obiettivo.

Ciò significa che quando arrivano nuove informazioni e precisione, il proprietario del tuo prodotto riordina e inserisce più dettagli nelle sue storie utente.

Supponiamo che tu abbia pianificato la v0.1 ma, mentre il team dell'hardware funziona, vengono definite nuove specifiche. Definisci un nuovo target stimato.

Nuovirequisitieamp;lespecifichearrivanodinuovo.Ilnuovotargetèdefinito.Sigiraversolanuovadirezione,manonènecessarioriscriveretuttocompletamente.

Requisiti e amp; le specifiche possono cambiare molto spesso, ma man mano che avanziamo nel progetto, sia il business che il l'hardware ha una visione più chiara di ciò che devono fare. Anche tu.

Ovviamente,questoprogettocosteràmoltodipiùseavessirequisitipiùchiariall'inizio,matrateeme...èunasituazionepiuttostorara.

Leinformazionidovrebberoproveniredaattivitàcommercialiperchéhannounavisioned'insieme.Leinformazionidelteamhardwaresonofondamentaliperl'implementazionetecnicaeleinterfacce.

Chiaramente,unottimoProductOwnerdiScrumèlachiavediunprogettocosìpocochiaroerischioso.

Leillustrazioniprovengonodaunarticolodavveroeccezionalechiamato Rockets, Cars & Giardini: visualizzazione di waterfall, agile e stage gate .

    
risposta data 01.05.2012 - 11:43
fonte
1

Sure, you'll probably just say: Write a mock. But this isn't an easy task and a whole mock could turn out to be a whole project by itself.

Dovresti farlo anche tu - sviluppare una sorta di simulatore di software che sostituisce l'hardware reale. Non devi costruirlo in anticipo - in ogni iterazione, sviluppa il tuo simulatore solo nella misura in cui ne hai bisogno per testare le funzioni che hai finora nel tuo frontend. Diamine, non riesco a pensare a un modo efficace di sviluppo iterativo, prototipazione / visualizzazione delle funzioni all'utente se non hai una sorta di "backend" dietro di esso - i tuoi utenti devono vedere / lavorare con il tuo software se vuoi per ottenere un feedback, e se non si dispone anche dell'hardware e del simulatore, come dovrebbero?

Un simulatore sarà anche un utile strumento per testare il frontend anche quando l'hardware è disponibile, perché è possibile fornire funzionalità di test speciali in esso che il proprio hardware reale non fornisce. Non conosco il tuo hardware, ma quando è appena stato costruito ora, ho il sospetto che non sia così economico che ogni membro del tuo team ne ricava un pezzo unico? Quindi un simulatore si ripagherà da solo.

    
risposta data 01.05.2012 - 15:29
fonte
1

Scrivi prima il software, quindi guida i ragazzi dell'hardware per progettare ciò che hai consegnato. In questo modo Google ha cambiato il mercato degli smartphone di 180 gradi. Consegnarono un sistema operativo e costrinsero i produttori di hardware a progettarlo. Invece del modo in cui lo stavano facendo prima; la creazione di un sacco di hardware che ha causato la scrittura di molti e diversi software incompatibili.

    
risposta data 01.05.2012 - 16:22
fonte
1

Avrei avviato due diversi progetti: un mockup dell'interfaccia utente e un simulatore hardware.

Le persone orientate all'IU lavoreranno al mockup, lavorando con i clienti per determinare come deve funzionare il prodotto finale (proprio come se stessimo sviluppando per l'hardware già esistente).

Le persone più orientate all'hardware lavoreranno al simulatore. All'inizio sarà relativamente semplice perché apparentemente non si sa molto dell'hardware finale (ancora). Man mano che si impara di più sull'hardware pianificato, è possibile incorporare ciò che si impara. Allo stesso modo, mentre impari di più dalle persone dell'interfaccia utente, puoi incorporare ciò che stanno imparando.

Con il passare del tempo, si "crescono" i due più vicini, vale a dire che i primi prototipi probabilmente non tenteranno nemmeno di adattare l'hardware previsto oltre le idee generali di approssimativamente il fattore di formato previsto, la disposizione prevista per l'input dell'utente, ecc. Man mano che si impara di più sull'hardware reale, si personalizza il mockup per adattarlo a quello che effettivamente fornirà.

Un punto su questo è imparare quanto più è possibile prima viene consegnato il primo prototipo. Un altro è quello di fornire feedback alle persone dell'hardware, quindi se ciò che stanno progettando è completamente incapace di supportare funzionalità cruciali per gli utenti, avranno la possibilità di riprogettare in modo più appropriato. In alcuni casi, la risoluzione di un problema importante può essere piuttosto facile, purché ne siano a conoscenza abbastanza presto. Proprio come con il software, prima sanno di un problema hardware, meno costoso è quello di risolverlo.

Sebbene a nessuno di noi piaccia pensare in quella direzione, significa anche che se l'hardware che si ottiene non è in grado di svolgere il lavoro, potrebbe essere estremamente utile per il tuo futuro avere una traccia cartacea in cui hai detto loro il problema mesi prima del tempo.

    
risposta data 01.05.2012 - 18:09
fonte

Leggi altre domande sui tag