miercuri, octombrie 10, 2007

Timpi in dezvoltarea proiectelor

Timpii in dezvoltarea unui proiect reprezinta faze din procesul de dezvoltare. In esenta se refera la starea proiectului care evolueaza prin treceri intre surse - dezvoltare si artifacte - runtime. Din acet motiv se pot confuda cu fazele clasice din build-ul unui proiectului (in Maven spre exemplu – build phases, in cazul ANT nu existe faze standard).

Modul de lucru consta in repetarea urmatorilor pasi:

  1. se editeaza sursele, resursele, testele unitare
  2. se face build pentru a obtine artifactele
    • in procesul de build se executa si testele unitare, eventual se populeaza baza de date cu date de test (plugin Maven, DbUnit)
  3. artifactele se deployaza in serverul de aplicatii (la rece sau la cald)
    • se poate face manual, folosi plugin-uri de maven, target-uri de ant, sau manageri pe care ii pun la dispozitie serverele de aplicatii
  4. se testeaza functional
    • manual in browser
    • folosind teste automate (Canoo WebTests, Selenium IDE)

Timpii de dezvoltare pentru un proiect:

  • edit time
    • se referal la scrierea/editarea surselor si a testelor
    • in dezvoltare proiectul are o structura de directoare proprie
      • structura de directoare este sicronizata cu SCM-ul pentru a fi accesibila celorlalti dezvoltatori
      • in Maven exista o structura predefinita, in pom.xml se marcheaza doar exceptiile de la reguli
    • in urma procesului de build vor rezulta artifactele pentru runtime (aplicatii enterprise, web, simple jar-uri)
  • design time
    • se refera la folosirea unui IDE pentru a face design
    • in cazul componentelor Swing sau JSF
  • generation time
    • se refera la generarea de surse
    • se poate folosi un famework de tip MDA
    • se pot folosi diverse plugin-uri de maven sau tarsk-uri de ant de generare
  • compile time
    • reprezinta procesul de compilare
    • in CLASSPATH trebuie sa existe toate dependintile utilizate in surse
  • boot time
    • reprezinta faza de startare a unei masini virtuale cu incarcarea resurselor
    • se refera la un server de aplicatii, containere usoare, micro kernel-uri
    • in general serverul incarca foarte multe resurse la startare, gen pool-uri de obiecte, pool-uri de working threads care sunt ridicare in container si ready de a accepta request-uri pe mai multe fire de executie
    • se prefera un timp pierdut in bootare decat timp pierdut in runtime
  • configuration time
    • reprezinta o faza din procesul de boot in care sunt cititesc fisierele de configurare si se incarca resursele descrise acolo
    • spre exemplu: faces-config.xml pentru JSF, struts-config.xml pentru Struts, application-context.xml pentru Spring, etc
    • si alte fisiere de configurare conform anumitor specificatii: web.xml pentru aplicatia web, application.xml pentru aplicatii enterprise, fisiere in care se declara MBean-uri JMX, etc
  • run time
    • reprezinta faza de rulare a aplicatiei intr-o masina virtuala Java (JVM)
    • JVM permite expunerea de porturi prin care clientii (in general IDE-uri) se pot conecta pentru debug, profiling, configurare/management in runtime, etc
    • in general in JVM se porneste un server de aplicatii care incarca mai multe aplicatii definite de dezvoltator
    • la pornirea masinii virtuale se porneste un thread din grupul run care executa metoda main dintr-o clasa publica expusa ca parametru (poate fi chiar serverul de aplicatii daca aplicatia nu este stand-alone – acesta ridica in runtime aplicatiile deployate)