úterý 15. června 2010

Kompilace

Čas od času se setkávám s představou, že AX aplikaci není třeba kompilovat jako celek a že kompilace změněných objektů je dostačující. Na takových projektech pak dochází k záhadnému chování aplikace, na chyby se přichází až v průběhu nasazování a podobně. Jak je to možné?

Je to proto, že změněné objekty mají další závislosti. Například:

  1. Programátor přidá nový parametr metody, ale opomene změnit některá její volání.
  2. Programátor přidá nový parametr metody, ale neví, že třída má potomka překrývajícího danou metodu.
  3. Programátor přidá instanční proměnnou třídy, ale nezkompiluje předky a potomky (kompilace dopředu mnohdy nestačí!). V tomto případě je kód v pořádku, ale aplikace se nechová správně, což je právě to záhadné chování.
  4. Dva programátoři vytvoří samostatně funkční, ale konfliktní modifikace apod.

Nejjednodušší způsob, jak tyto problémy odhalit (a některé i vyřešit), je pravidelně kompilovat celou aplikaci (a kontrolovat výsledky!). Ačkoli lze kompilaci spouštět manuálně, pro pravidelný běh je daleko výhodnější použít plánovanou úlohu, například takto:

Ax32.exe konfigurace.axc -logdir=C:\log -startupCmd=CompileAll_+

Následovat může synchronizace databáze, odeslání výsledků kompilace e-mailem a podobně. Kompilační log lze naimportovat zpět do AX, na druhou stranu s ním občas trochu bojují webové prohlížeče (je to totiž XML s transformací do HTML).

Podíváme-li se ještě jednou na příklady 1. a 2., vidíme, že jde o chyby vývojáře. Aby bylo možné tyto chyby minimalizovat, je nezbytně nutné udržovat aktuální křížové reference. Bylo by ale naivní předpokládat, že na projektech, kde nepovažují za nutné aplikaci ani kompilovat, pravidelně aktualizují křížové reference. Osobně považuji prostředí bez aktuálních referencí za nezpůsobilé k vývoji.

Zrovna dnes mi na jednom projektu zakázal jakýsi tamní Project Engineer zkompilovat aplikaci s tím, že jde o velmi neobvyklý krok. Pokud je pro ně neobvyklý, není to dobré znamení. Na posledním projektu, kde mi tvrdili, že kompilace je zbytečná, selhalo hned první nasazení právě kvůli nezkompilované rodičovské třídě…

Žádné komentáře:

Okomentovat