Java модельдеу тілі - Java Modeling Language

The Java модельдеу тілі (JML) Бұл спецификация тілі үшін Java бағдарламаларын қолдана отырып Қарақан стилі алдын-ала және кейінгі шарттар және инварианттар, бұл келесі келісім-шарт бойынша жобалау парадигма. Ерекшеліктер келесі түрде жазылады Java аннотациясы бастапқы файлдарға түсініктеме береді, оны кез-келген Java-мен құрастыруға болады құрастырушы.

Әр түрлі тексеру құралдары, мысалы, жұмыс уақытын бекіту және кеңейтілген статикалық тексергіш (ESC / Java ) көмек дамыту.

Шолу

JML - бұл Java модульдері үшін мінез-құлық интерфейсінің тілі. JML ұсынады семантика модуль дизайнерлерінің ниеттеріне қатысты екіұштылыққа жол бермей, Java модулінің мінез-құлқын ресми түрде сипаттау. JML идеяларды мұраға алады Эйфель, Ағаш және Нақтылау есебі, кез-келген Java бағдарламашысына қол жетімді бола отырып, қатаң формальды семантиканы қамтамасыз ету мақсатында. JML мінез-құлық ерекшеліктерін пайдаланатын әртүрлі құралдар бар. Техникалық сипаттамаларды аннотация ретінде Java бағдарламалық файлдарында жазуға немесе жеке спецификация файлдарында сақтауға болатындықтан, JML сипаттамалары бар Java модульдерін кез-келген Java компиляторымен өзгертусіз құрастыруға болады.

Синтаксис

JML сипаттамалары түсініктемелерде аннотация түрінде Java кодына қосылады. Java түсініктемелері @ белгісінен басталғанда JML аннотациялары ретінде түсіндіріледі. Яғни, формадағы түсініктемелер

// @ 

немесе

/ * @  @ * /

Негізгі JML синтаксисі келесі кілт сөздерді ұсынады

талап етеді
A анықтайды алғышарт үстінде әдіс содан кейін.
қамтамасыз етеді
A анықтайды кейінгі жағдай келесі әдіс бойынша.
сигналдар
Берілгенге арналған кейінгі шартты анықтайды Ерекше жағдай келесі әдіспен лақтырылады.
тек сигналдар
Берілген алғышарт болған кезде қандай ерекшеліктер болуы мүмкін екенін анықтайды.
тағайындалады
Төмендегі әдіс бойынша қандай өрістерді тағайындауға болатындығын анықтайды.
таза
Жанама әсері жоқ әдісті жариялайды (мысалы) тағайындайтын ештеңе жоқ сонымен қатар ерекше жағдайларды тастай алады). Сонымен қатар, таза әдіс әрқашан әдеттегідей аяқталады немесе ерекше жағдай туғызады.
өзгермейтін
Анықтайды кластың өзгермейтін қасиеті.
цикл_инварияты
A анықтайды цикл инвариантты цикл үшін.
сонымен қатар
Спецификация жағдайларын біріктіреді, сонымен қатар әдіс супер типтерден спецификацияларды мұрагер деп жариялай алады.
бекіту
JML анықтайды бекіту.
нақты_қоғамдық
Техникалық сипаттама мақсатында қорғалатын немесе жеке айнымалы деп жариялайды.

Basic JML келесі өрнектерді де ұсынады

нәтиже
Келесі әдістің қайтарылатын мәнінің идентификаторы.
old (<өрнек>)
Мәніне сілтеме жасайтын модификатор <expression> әдіске ену кезінде.
( forall ; ; )
The әмбебап квантор.
( бар ; ; )
The экзистенциалды квантор.
a ==> b
а білдіреді б
a <== b
а дегенді білдіреді б
a <==> b
а егер және егер болса б

стандартты сияқты Java синтаксисі логикалық және, немесе, емес. JML аннотациялары Java объектілеріне, объектілік әдістерге және түсіндірмеленетін әдіс шеңберіне кіретін және сәйкес көрінетін операторларға қол жеткізе алады. Бұлар кластардың, өрістердің және әдістердің қасиеттерінің формальды сипаттамаларын қамтамасыз ету үшін біріктірілген. Мысалы, қарапайым банк сыныбының түсіндірмелі мысалы келесідей болуы мүмкін

қоғамдық сынып Банк қызметі Мысалы{     қоғамдық статикалық ақтық int MAX_BALANCE = 1000;     жеке / * @ spec_public @ * / int тепе-теңдік;    жеке / * @ spec_public @ * / логикалық құлыпталған = жалған;      // @ public invariant балансы> = 0 && балансы <= MAX_BALANCE;     // @ тағайындалған баланс;    // @ тепе-теңдікті қамтамасыз етеді == 0;    қоғамдық Банк қызметі Мысалы()    {        бұл.тепе-теңдік = 0;    }     // @ 0 <сома && сома + қалдық     // @ тағайындалған баланс;    // @ балансты қамтамасыз етеді ==  ескі (қалдық) + сома;    қоғамдық жарамсыз несие(ақтық int сома)    {        бұл.тепе-теңдік += сома;    }     // @ 0 <сома & сома <= қалдық талап етеді;    // @ тағайындалған баланс;    // @ балансты қамтамасыз етеді ==  ескі (қалдық) - сома;    қоғамдық жарамсыз дебет(ақтық int сома)    {        бұл.тепе-теңдік -= сома;    }     // @ isLocked == шындықты қамтамасыз етеді;    қоғамдық жарамсыз lockAccount()    {        бұл.құлыпталған = шын;    }     // @ талап етеді! isLocked;    // @ қамтамасыз етеді  нәтиже == тепе-теңдік;    // @    // @ isLocked талап етіледі;    // @ signal_only BankingException;    қоғамдық / * @ таза @ * / int getBalance() лақтырады Банк қызметі    {        егер (!бұл.құлыпталған)        {                қайту бұл.тепе-теңдік;        }        басқа        {                лақтыру жаңа Банк қызметі();        }    }}

JML синтаксисінің толық құжаттары қол жетімді JML анықтамалық нұсқаулығында.

Құралды қолдау

Әр түрлі құралдар JML аннотациялары негізінде функционалдылықты қамтамасыз етеді. Айова штатының JML құралдары растауды тексеруді қамтамасыз етеді құрастырушы jmlc ол JML аннотацияларын жұмыс уақытының бекітулеріне түрлендіреді, құжаттама генераторы jmldoc өндіреді Джавадок құжаттама JML аннотацияларынан алынған қосымша ақпараттармен толықтырылған және қондырғының сынақ генераторы jmlunit генерациялайды JUnit JML аннотацияларынан алынған тест коды.

Тәуелсіз топтар JML аннотацияларын қолданатын құралдармен жұмыс істейді. Оларға мыналар жатады:

  • ESC / Java2 [1], кеңейтілген статикалық тексеру құралы, бұл мүмкіндіктен гөрі қаттырақ статикалық тексеруді орындау үшін JML аннотацияларын қолданады.
  • OpenJML өзін ESC / Java2 мұрагері деп жариялайды.
  • Daikon, динамикалық инвариантты генератор.
  • KeY, бұл ашық бастапқы коэффициенті бар JML фронталь және an Тұтылу қосылатын модуль (JML өңдеу ) қолдауымен синтаксисті бөлектеу JML.
  • Кракатоа, негізделген статикалық тексеру құралы Неге тексеру платформасы және Кок дәлелдеу көмекшісі.
  • JMLEclipse, Eclipse интеграцияланған даму ортасына арналған JML синтаксисі мен JML аннотацияларын қолданатын әр түрлі құралдардың интерфейстерін қолдайтын плагин.
  • Sireum / Kiasan, шартты тіл ретінде JML қолдайтын символдық орындалуға негізделген статикалық анализатор.
  • JMLUnit, JML аннотацияланған Java файлдарында JUnit тесттерін жүргізуге арналған файлдар құралы.
  • TACO, Java бағдарламасының Java Modeling Language спецификациясымен сәйкестігін статикалық түрде тексеретін, ашық кодты бағдарламаны талдау құралы.
  • VerCors растаушысы

Әдебиеттер тізімі

  • Гэри Т. Ливенс және Yoonsik Cheon. JML-мен келісімшарт бойынша жобалау; Оқу жобасы.
  • Гэри Т. Ливенс, Альберт Л. Бейкер және Клайд Руби. JML: Толық дизайнға арналған белгі; Хаим Киловта, Бернхард Румпе және Ян Симмондс (редакторлар), Кәсіпорындар мен жүйелердің мінез-құлық сипаттамалары, Клювер, 1999, 12 тарау, 175-188 беттер.
  • Гэри Т. Ливенс, Эрик Полл, Кертис Клифтон, Йонсик Чеон, Клайд Руби, Дэвид Кок, Питер Мюллер, Джозеф Кинири, Патрис Чалин және Даниэль М.Зиммерман. JML анықтамалық нұсқаулығы (DRAFT), қыркүйек 2009 ж. HTML
  • Мариеке Хуисман, Вольфганг Ахрендт, Даниэль Брунс және Мартин Хеншель. JML көмегімен формальды спецификация. 2014. жүктеу (CC-BY-NC-ND)

Сыртқы сілтемелер