|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
TDD in J2ME...sviluppare l'interfaccia test driven
Devo svilupapre un progetto J2ME...e sono sorte le prime difficoltà... La prima è il debugging, ma con EclipseME sono riuscito a fare un passo avanti riuscendo a debuggare anche le MIDLet...
Volevo sviluppare Test First un'applicazione J2ME... Il problema è che le API MIDP vanno a fare chiamate native al "cellulare" ogni volta che anche solo si instanzia una Item... Avevo pensato a fare diversi Mock Object per le Form e le Item da immettere sulle form... Prima di tutto faccio una FormInterface con questi metodi: Codice:
public interface FormInterface
{
int append(Image img);
int append(ItemInterface item);
int append(String str);
void delete(int itemNum);
void deleteAll();
ItemInterface get(int itemNum);
int getHeight();
int getWidth();
void insert(int itemNum, ItemInterface item);
void set(int itemNum, ItemInterface item);
int size();
}
I metodi da implementare dovranno semplicemente fare una chiamata al corrispondente metodo della API facendo un cast al tipo Item... Poi creo una classe MockForm che implementa l'interfaccia FormInterface...di fatto questo MockForm è una semplice collection... Quello che mi "puzza" è ItemInterface... ItemInterface è un'interfaccia che è praticamente identica a quella di Item... Il problema a questo punto è che per qualsiasi Item XXXXX che voglio inserire nella Form devo: - creare XXXXXInterface che estende ItemInterface - creare MyXXXXX che estende XXXXX e implementa XXXXXInterface (i metodi dell'interfaccia sono già implementati da XXXXX) - creare MockXXXXX che implementa l'interfaccia XXXXXInterface (tutti i metodi del mock vanno implementati e devono simulare il funzionamento dell'item) La cosa mi sembra abbastanza complicata...cosa ne pensate ? C'è un modo più veloce ? Sicuramente l'implementazione dei metodi potrebbe essere minimale (tanto per chiarire molti dei metodi di Item non credo di doverli implementare)...o comunque implementerei gli altri metodi solo al momento in cui mi servirebbero nel codice... Pensavo che esistessero delle librerie che "simulavano" il funzionamento di un cellulare senza fare il deploy dell'applicazione sul simulatore... Ultima modifica di cionci : 28-04-2006 alle 17:57. |
|
|
|
|
|
#2 | ||||
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quote:
Provo a spiegare qualcosa di quello che ho sperimentato, penso sia abbastanza interessante, anche se non e' tutto collegato al TDD. Quote:
Un alternativa e' quella di usare tecniche di Aspect Oriented programming (aspectj in particolare) per istrumentare il codice (i .jar) delle librerie J2ME e rimpiazzare metodi e classi con implementazioni mock. Occhio che non e' assolutamente possibile distribuire i jar J2ME modificati per questioni di licenza. Quote:
Tieni presente che per applicazioni vere, il numero di interfacce, classi, metodi è da minimizzare specie se i dispositivi finali hanno limitazioni sulla dimensione delle midlet. Questo spesso obbliga a compromessi nel design (dello stesso tipo di quelli visti nelle API MIDP
Quote:
Alcune case produttrici forniscono tool specifici (Mi viene in mente Nokia, se ti iscrivi al loro sito di dev, o motorola ...), ma spesso sono solo modifiche minimali al WTK sun. Comunquei tool di questo tipo non sono poi cosi' utili. In un progetto che ho seguito la fase di sviluppo e test sui device e' durate anche 4/5 volte piu' lunga della fase in cui abbiamo usato gli emulatori ed ha portato ad un drastico redesign che ha rimosso molti dei layer di astrazione utilizzati. I problemi sono vari:
Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
||||
|
|
|
|
|
#3 | |||||
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il progetto è per scopi didattici e lo volevo provare almeno sul mio cellulare (LG 8330), ma viste le difficoltà credo che mi appoggerò al debugger e mi limiterò a sviluppare Test First la logica anche se questo probabilmente mi imporrrà un aumento del numero di classi...
Chiaramente non volevo fare un Mock per tutto, ma mi sarei limitato solamente a quei componenti che avrei usato... Quote:
Quote:
Quote:
Quote:
Quote:
La cosa che più mi ha stupito di J2ME è l'assoluta assenza di VM per PALMARI... Tranne in rari casi (alcuni modelli HP), la VM non viene distribuita con il palmare e si trova solo a pagamento (IBM J9 ad esempio)... Comunque ti ringrazio per i suggerimenti...ora saprò a chi rivolgermi Ah...l'idea era di realizzare una shell remota... Mi sono già fatto uno spike per la parte server e sono risucito a controllare perfettamente stdin e stdout da Java... Ora devo fare uno spike sul cellulare... Credo che il problema amggiore sarà il numero di righe di output che può contenere anche un semplice "ls" o "dir"... Dovrò studiarmi un metodo per gestirmi il buffer di queste righe (credo che anche la dimensione delle righe bufferizzate sarà determinante) e come farle "scorrere" sul dispositivo mobile... |
|||||
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Su alcuni LG ho fatto qualche prova, per un esperimento sulle API Push Registry (http://developers.sun.com/techtopics...cles/pushreg/), prova a vedere se il tuo modelle la supporta. Io l'ho utilizzata per installare una midlet che si risveglia quando riceve comandi telnet. La cosa positiva degli LG e' che hanno dato meno rogne dei motorola.
Per le liberie instrumentate con AOP, per riusarle in modo efficace su piu' progetti lo sforzo non e' banale. Se non sei piu' che esperto di aspectj e' meglio partire con casi e situazione specifiche, e piano piano riutilizzare la conoscenza. Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Consoco il Push Registry, ma dimmi una cosa... Come si fa a ricevere una connessione entrante se tutti i cellullari sono dietro ad un proxy (o almeno mi sembra) ?
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Ci sono varie modalita di connessione per Push registry. Quello che dici è corretto se si vogliono usare datagram UDP o connessioni TCP; un questo caso devi essere sulla stessa rete IP del device, quindi su un server dell'operatore che ti ha fornito l'IP.
Questa soluzione va bene per applicazioni/servizi dell'operatore che vogliono attivare una midlet. C'e' un alternativa, ed è quella di attivare il push registry con un SMS. La midlet quindi si attiva ed apre la connessione di dialogo in direzione opposta.
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sapevo degli SMS, ma mi imporrebbe di mettere un cellulare anche sul server...
Riguardo alla rete interna fra gli apparecchi collegati allo stesso operatore...hanno un indirizzo ip privato assegnato ? Sai come si potrebbe recuperare l'indirizzo ip privato assegnato ? Mi viene in mente una cosa interessante |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Anche a me era passata per la testa l'idea della connessione Cell-Cell. In linea di principio potrebbe funzionare, i cellulari che si registrano hanno un indirizzo IP assegnato, e rispondono al ping! Se non funziona è dovuto a configurazioni particolari della rete che bloccano connessioni che non vanno sui server di gateway.
Non so pero' dirti come recuperare IP direttamente da cellulare. Magari con dei nokia 6630 o 6680, che sono simbian, si puo' installare qualche SW e scoprire l'indirizzo IP.
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:54.



















