AdaControl je besplatan (pod GMGPL licencom) alat koji otkriva upotrebu različitih vrsta konstrukata u Ada programima. Njegova prvenstvena namena je kontrola pravilnog korišćenja stila ili pravila programiranja, ali se takođe može koristiti i kao moćan alat za traženje upotrebe (ili ne-upotrebe) različitih oblika stilova programiranja, ili dizajn obrazaca. Traženi elementi variraju od vrlo jednostavnih, kao što je pojavljivanje određenih objekata, deklaracija, ili naredbi, do veoma sofisticiranih, kao što je proveravanje da li su poštovani određeni obrasci pri programiranju.
Skupom pravila je definisano koji elementi, ili konstrukti, se traže; sledeća tabela daje sažeti prikaz pravila koja se trenutno proveravaju AdaControl-om. Broj u zagradi, iza naziva pravila, pokazuje koliko (za dato pravilo) ima pod-pravila, ako ih ima. Uzimajući u obzir sva moguća pravila i pod-pravila, ovo daje 421 test koji se trenutno može izvoditi AdaControl-om!
Abnormal_Function_Return | Kontroliše dizajn obrazac koji osigurava da funkcija uvek vraća rezultat. |
Allocators | Kontroliše pojavljivanja alokatora, ili svih, ili onih koji ciljaju na određene tipove. |
Array_Declarations (x6) | Kontroliše nekoliko metrika u deklaracijama nizova i tipove koji se koriste kao indeksi |
Barrier_Expressions | Kontroliše elemente dozvoljene u izražavanju barijera zaštićenih unosa. |
Case_Statement (x4) | Kontroliše nekoliko metrika u case naredbama. |
Characters (x4) | Kontroliše pojavljivanja kontrolnih karaktera (poput tabulatora) u izvornom kodu. |
Comments (x4) | Kontroliše sadržinu i postavljanje određenih komentara. |
Declarations (x141) | Kontroliše pojavljivanja određenih Ada deklaracija. |
Default_Parameter | Kontroliše pozivanja potprograma i instancijalizacije generičkog procesa koje koriste (ili ne) podrazumevanu vrednost za dati parametar. |
Dependencies (x4) | Kontroliše zavisnosti jedinica, ili prema skupu dozvoljenih jedinica, ili brojanjem. |
Directly_Accessed_Globals | Kontroliše dizajn obrazac koji osigurava da se svim globalnim promenljivama pristupa isključivo kroz za to namenjene potprograme. |
Duplicate_Initialization_Calls | Kontroliše dizajn obrasce koji sprečavaju dvostruku inicijalizaciju paketa ili promenljivih. |
Entities | Kontroliše pojavljivanja bilo kog Ada entiteta. |
Entity_Inside_Exception | Kontroliše pojavljivanja entiteta unutar rutina za obradu izuzetaka. |
Exception_Propagation (x5) | Kontroliše da li određeni potprogrami (ili procesi) ne mogu da izbacuju izuzetke, da li ni jedna razrada ne može da izbaci izuzetke, odnosno da li neki izuzetak ne može da iskoči izvan svog polja deklarisanja. |
Expressions (x28) | Kontroliše upotrebu određenih oblika izraza |
Global_References (x3) | Kontroliše nesinhronizovane pristupe globalnim promenljivama. |
Header_Comments (x2) | Kontroliše prisustvo komentara na početku svakog modula. |
Improper_Initialization (x3) | Kontroliše dizajn obrazac koji osigurava da je svaka promenljiva inicijalizovana pre nego se upotrebi, i da nije bespotrebno inicijalizovana. |
Instantiations | Kontroliše generičke instancijalizacije, ili sve, ili one koje koriste određene entitete. |
Insufficient_Parameters | Kontroliše upotrebu pozicionih parametara u pozivima gde vrednost ne pruža dovoljno informacija. |
Local_Access (x6) | Kontroliše upotrebu pristupnih vrednosti koje određuju ne-globalne entitete. |
Local_Hiding (x3) | Kontroliše pojavljivanja lokalnih identifikatora koji skrivaju iste takve, spoljne. |
Max_Blank_Lines | Kontroliše pojavljivanje većeg broja uzastopnih praznih linija, od navedenog broja. |
Max_Call_Depth | Kontroliše maksimalnu dubinu poziva potprograma. |
Max_Line_Length | Kontroliše maksimalnu dužinu programskih linija izvornog koda. |
Max_Nesting | Kontroliše ima li polja koja su dublje ugnežđena od datog limita. |
Max_Size (x10) | Kontroliše maksimalnu dužinu kompozitnih naredbi. |
Max_Statement_Nesting (x5) | Kontroliše ima li kompozitnih naredbi koje su dublje ugnežđene od datog limita. |
Movable_Accept_Statements | Kontroliše naredbe koje bi se mogle premestiti van neke accept naredbe. |
Multiple_Assignments (x2) | Kontroliše višestruka dodeljivanja vrednosti jednoj istoj promenljivoj, ili komponentama neke strukturirane promenljive koja se može zameniti agregatnom funkcijom dodele vrednosti. |
Naming_Convention | Kontroliše formu dozvoljenih (ili zabranjenih) imena u deklaracijama. |
No_Operator_Usage (x2) | Kontroliše celobrojne tipove tamo gde nema operatora, ili gde su upotrebljeni samo logički operatori. |
Non_Static (x6) | Kontroliše ne-statičke izraze u indeksnim ili diskriminantnim ograničenjima, ili u instancijalizacijama. |
Not_Elaboration_Calls | Kontroliše pozive potprograma sa mesta izvan koda razrade paketa. |
Not_Selected_Name | Kontroliše da li su određeni entiteti uvek imenovani uz korićenje izabranog označavanja. |
Object_Declarations (x3) | Kontroliše različite parametre deklarisanja objekata (konstante i promenljive). |
Parameter_Aliasing | Kontroliše potprograme i pozive unosa gde je promenljiva obezbeđena za više od jednog [ulaznog] izlaznog parametra. |
Parameter_Declarations (x4) | Kontroliše karakteristike parametara u entitetima koji se mogu pozivati (procedure, funkcije i unosi) |
Potentially_Blocking_Operations | Kontroliše upotrebu potencijalno blokirajućih operacija iz zaštićenih operacija. |
Pragmas | Kontroliše korišćenje specifičnih pragmi. |
Record_Declarations | Kontroliše različite aspekte komponenti nekog zapis-tipa. |
Reduceable_Scope (x9) | Kontroliše deklaracije koje bi se mogle premestiti u dublje ugnežđena polja. |
Representation_Clauses (x10) | Kontroliše pojavljivanja reprezentacijskih klauzula. |
Return_Type (x8) | Kontroliše upotrebu određenih vrsta tipova kao povratnih tipova funkcija. |
Side_Effect_Parameters | Kontroliše pozive potprograma i generičke instancijalizacije koje pozivaju funkcije sa neželjenim efektom, stvarajući tako zavisnost od redosleda izračunavanja. |
Silent_Exceptions | Kontroliše rutine za obradu izuzetaka koje ne izbacuju ponovo izuzetke, niti pozivaju naznačene potprograme. |
Simplifiable_Expressions (x7) | Kontroliše pojavljivanja različitih formi izraza koji bi mogli biti pojednostavljeni. |
Simplifiable_Statements (x10) | Kontroliše pojavljivanja različitih formi naredbi koje bi mogle biti pojednostavljene. |
Statements (x61) | Kontroliše pojavljivanja Ada naredbi. |
Style (x15) | Kontroliše različite forme konstrukata, generalno preporučenih u pravilima stila. |
Terminating_Tasks | Kontroliše dizajn obrazac koji osigurava da se procesi nikada ne završe. |
Type_Initial_Values | Kontroliše da li svaki deklarisani tip ima jednu pridruženu inicijalizacionu konstantu. |
Uncheckable (x3) | Kontroliše konstrukte koji se ne mogu statički proveriti drugim pravilima |
Units (x2) | Kontroliše da li su analizirane sve potrebne jedinice, i samo one. |
Unnecessary_Use_Clause (x5) | Kontroliše use klauzule u paketima, gde ni jedan elemenat datog paketa nije referenciran iz opsega date use klauzule. |
Unsafe_Paired_Calls | Kontroliše dizajn obrazac koji osigurava da određeni pozivi uvek idu u paru (poput P/V procedura). |
Unsafe_Unchecked_Conversion | Kontroliše instancijalizacije Unchecked_Conversion (neproverene konverzije) izmeđi tipova različitih ili nenavedenih veličina. |
Usage (x11) | Kontroliše korišćenje objekata u određenim stanjima (u specifikacijama paketa, read, written modified...). |
Use_Clauses (x2) | Kontroliše pojavljivanja use klauzula, osim za u naznačenim paketima. |
With_Clauses (x3) | Kontroliše pravilno korišćenje with klauzula. |
Za više detalja o ovim pravilima, ili uopšteno o korišćenju AdaControl-a, molimo vas da pogledate korisnički vodič, dole.
AdaControl je alat za rad iz komandne linije, ali je potpuno integrisan u AdaCore-ovo GPS okruženje. Iz GPS-a, možete pokretati AdaControl, popravljati kršenja pravila, ili uređivati pravila sa samo nekoliko klikova.
Ali AdaControl je više od skupa pravila pisanja koda: to je kompletno okruženje, dizajnirano da se lako proširuje. Ako u njemu nema vašeg omiljenog pravila, možete ga dodati sami! A mi ćemo, naravno, u budućnosti nastaviti da povećavamo broj pravila. Ako želite da vidite kako je to moguće, molimo vas da pogledate AdaControl vodič za programere (AdaControl programmer guide).
Početni razvoj AdaControl-a je sponzorisala kompanija Eurocontrol. Neka pravila su podržana od strane kompanija BelgoControl, Ansaldo-STS (raniji CSEE-Transport) i SAGEM-DS. To je “zreo" alat, koji se rutinski koristi za proveru Ada programa u kompanijama Eurocontrol (Brisel, više od 1_100_000 linija koda, Mastriht), BelgoControl, Ansaldo-STS, Faiveley, SAGEM-DS (nivo DO178B/A)... On je takođe izvršavan naspram svih testova izvršnih fajlova, iz ACATS-a.
AdaControl je ASIS aplikacija.
AdaControl je besplatan alat, pod GMGPL licencom. Ipak, to je komercijalni proizvod Adalog-a, za koji mi nudimo ugovor o održavanju. Takođe nudimo usluge razvoja pravila za vaše specifične potrebe, ili, uopštenije, pomoć pri definisanju i korišćenju pravila programiranja. Za informacije, molimo kontaktirajte info@adalog.fr.
AdaControl, kao i svaka druga ASIS aplikacija, može da radi samo ako je kompajliran istim kompajlerom koji i sam koristi kada izvršava kompajliranje nekog programa. Stoga je kao izvršni fajl postavljen samo za GNAT GPL/2012 (Windows i Linux); za upotrebu sa bilo kojom drugom verzijom GNAT-a, molimo vas da preuzmete izvorni kod, i da ga kompajlirate (što je prilično lako uraditi, pod uslovom da je ASIS instaliran). Program je testiran samo sa GNAT-om, ali bi trebalo da je lako prenosiv u bilo koji kompajler koji pruža ASIS interfejs.
UPOZORENJE: Jedna nekompatibilnost je uvedena sa ASIS interfejsom za Ada-u 2005/2012, koji je bio neophodan da se pravilno obrade neke od novih funkcija. Ova izmena je uključena u Gnat, počev sa verzijama GnatPRO 7.1.0 i GPL-2012. Distribucija AdaControl-a, u obliku izvornog koda, je zato obezbeđena u dve varijante , “stari Gnat" za prethodne verzije, i “novi Gnat" za ove, i za novije verzije.
ZIP ili TGZ verzije vam omogućavaju da instalirate AdaControl onako kako želite; pod Windows-om, instalacioni alati sve automatski instaliraju - pod pretpostavkom da se direktorijum
Trenutna razvojna verzija (nestabilna) je dostupna (pod GIT-om) na SourceForge-u. Takođe, putem ove strane možete slati izveštaje o greškama u programu (Hosted Apps/MantisBT), i čak dati sopstvenu ocenu AdaControl-a.
Vodič za korisnike
Distribucija sa izvornim kodom
Distribucija sa izvršnim fajlom
Windows Gnat GPL 2012Distribucija sa izvršnim fajlom
Linux Gnat GPL 2012
ZIP fajl
(1,86Mo)TGZ fajl
(1,55Mo)Windows instalacioni
program (1,45Mo)ZIP fajl
(5,71Mo)Instalacioni program
(3.89Mo)ZIP fajl
(5,61Mo)
SourceForge