Кіріспе

Модельдік архитектура аясындағы екі жақты инжиниринг (RTE) – бағдарламалық жасақтаманы әзірлеу құралдарының функционалдығы болып табылады, ол екі немесе одан көп байланысты бағдарламалық артефакттарды – мысалы, бастапқы кодты, модельдерді, конфигурациялық файлдарды, құжаттаманы және т.б. – бір-бірімен синхрондауды қамтамасыз етеді. Екі жақты инжиниринг қажеттілігі бірдей ақпарат бірнеше артефактта болғанда және кейбір артефакттар жаңартылған кезде сәйкессіздік туындау мүмкіндігі болғанда пайда болады. Мысалы, қандай да бір ақпарат тек бір артефактқа (бастапқы кодқа) қосылса немесе өзгертілсе, нәтижесінде ол басқа артефакттарда (модельдерде) жоқ болып қалуы немесе олармен сәйкес келмей қалуы мүмкін.

Шолу

Round trip инженериясы бағдарламалық қамтамасыз етудің дәстүрлі салаларымен тығыз байланысты: алдыңғы инженерия (спецификациялардан бағдарламалық қамтамасыз ету құру), кері инженерия (қолданыстағы бағдарламалық қамтамасыз етуден спецификацияларды құру) және қайта инженерия (қолданыстағы бағдарламалық қамтамасыз етуді түсіну және оны өзгерту). Round trip инженериясы көбінесе тек алға және кері инженерияны қолдайды деп қате түсіндіріледі. Шындығында, оны алға және кері инженериядан ерекшелейтін Round trip инженериясының басты ерекшелігі – бір уақытта дамыған артефакттарды, бір-біріне енгізілген өзгерістерді көрсету үшін әр артефақты бірте-бірте жаңарту арқылы синхрондау мүмкіндігі. Сонымен қатар, алдыңғы инженерияны тек спецификация ғана бар Round trip инженериясының ерекше жағдайы ретінде қарастыруға болады, ал кері инженерияны тек бағдарламалық қамтамасыз ету ғана бар Round trip инженериясының ерекше жағдайы ретінде қарастыруға болады. Көптеген қайта инженериялық шараларды, бағдарламалық қамтамасыз ету бұрын кері инженерияланған спецификацияға енгізілген өзгерістерді көрсету үшін жаңартылған кезде Round trip инженериясы ретінде қарастыруға болады.

Автоматты қадамдастыру

Сапар-сапар инженерлігінің тағы бір ерекшелігі – автоматты түрде анықталған қарама-қайшылықтарға жауап ретінде артефактілерді автоматты түрде жаңарту. Осы тұрғыдан алғанда, ол алға және кері инженерліктерден өзгеше, олар қолмен (дәстүрлі түрде) немесе автоматты түрде (артефактілерді автоматты түрде жасау немесе талдау арқылы) жүзеге асырылуы мүмкін. Автоматты жаңарту дереу немесе сұраныс бойынша болуы мүмкін. Дереу сапар-сапар инженерлігінде барлық байланысты артефактілер олардың біреуінде жасалған әр өзгерістен кейін бірден жаңартылады. Сұраныс бойынша сапар-сапар инженерлігінде артефактілердің авторлары бір уақытта артефактілерді жаңарта алады (таратылған ортада да) және белгілі бір сәтте қарама-қайшылықтарды анықтау үшін сәйкестікті тексеруді, олардың кейбіреулерін таратуды және мүмкін болатын қайшылықтарды шешуді таңдай алады.

Итерациялық тәсіл

Кері инженерлік итеративті даму процесін қамтуы мүмкін. Моделіңізді жаңартылған кодпен синхрондағаннан кейін, жұмыс істеудің ең жақсы жолын таңдауға, кодқа қосымша өзгерістер енгізуге немесе моделіңізге өзгерістер енгізуге толық құқығыңыз бар. Кез келген уақытта екі бағытта да синхрондауға болады және қажет болғанша циклді қайталауға болады.

Бағдарламалық жасақтама

Көптеген коммерциялық құралдар мен зерттеу прототиптері осы түрдегі RTE-ні қолдайды; 2007 жылғы кітап Rational Rose, Micro Focus Together, ESS Model, BlueJ және Fujaba сияқты құралдардың мұндай мүмкіндікке ие екенін көрсетеді, ал Fujaba дизайн үлгілерін де анықтай алады делінеді.

Шектеулер

Мысалы, 2005 жылғы Visual Studio туралы кітапта RTE құралдарының жиі кездесетін мәселесі – құралдарға бастапқы кодта еңбекті түсіндірмелер қалдыру арқылы көмектеспесе, кері инженерияланған модель бастапқы модельден өзгеше болады делінген. UML-дің мінез-құлқына қатысты бөлімдері RTE үшін одан да көп қиындықтар туғызады. Әдетте UML сынып диаграммалары белгілі бір деңгейде қолдау көрсетіледі; алайда, қауымдастырулар және қамту сияқты кейбір UML ұғымдары көптеген бағдарламалау тілдерінде тікелей бейнеленбейді, бұл жасалған кодтың пайдалануын және кодты талдау/кері инженерияның дәлдігін шектейді (мысалы, кодта қамтуды анықтау қиын). Айналымды инженерияның оңайырақ түрі фреймворк қолданбалық бағдарламалау интерфейстері (API) контекстінде жүзеге асырылады, онда қолданбамен фреймворк API-нің қолданылуын сипаттайтын модель, сол қолданбаның кодымен синхрондалады. Мұндай жағдайда API фреймворктің қолданбаларда қолданылуының барлық дұрыс жолдарын анықтайды, бұл кодтағы API қолданылуын дәл және толық анықтауға, сондай-ақ дұрыс API қолданысын іске асыратын пайдалы кодты жасауға мүмкіндік береді. Бұл санаттағы екі маңызды RTE жүзеге асыруы – фреймворкке қатысты модельдеу тілдері және Spring Roo (Java). Round trip инженериясы Object Management Group (OMG) модельге негізделген архитектурасында бірнеше модельдер арасындағы және модельдер мен код арасындағы үйлесімділікті сақтау үшін маңызды. OMG MDA үшін қажетті модельдік түрлендірулерді жүзеге асыру үшін QVT (сұрау/көрініс/трансформация) стандартын ұсынды. Қазіргі таңдағы күні стандарттың бірнеше іске асырылған нұсқалары бар. (РТЭ-ге қатысты МДА тәжірибесін көрсету қажет).

Кодты құру туралы дау

Модельдерден код жасау (түйіндеме инженериясы) дегеніміз – пайдаланушы шешімдерді абстрактілі түрде модельдейді, бұл шешімдер кейбір модельдік деректермен сипатталады, содан кейін автоматтандырылған құрал модельдерден бағдарламалық жүйе үшін кодтың бөліктерін немесе толық бастапқы кодты тудырады. Кейбір құралдарда пайдаланушы бағдарламаның бастапқы кодының қаңқасын, бастапқы код үлгісі түрінде ұсына алады, онда код жасау процесінде алдын ала анықталған элементтер бағдарламаның бастапқы кодының бөліктерімен алмастырылады. UML (егер MDA үшін қолданылса) диаграммаларының сипаттамасы, бағдарламалық кодта қамтылғандай бірдей ақпаратты қамтуға қажетті егжей-тегжейлілік жетіспегендігі үшін сынға ұшырады. Кейбір дамытушылар тіпті "Код – бұл дизайн" деп мәлімдейді.

Кемшіліктер

Шығарылған кодтың модельден тез өзгешеленуіне, кері инженерияланған модельдің кодты шағылыстыру қабілетін жоғалтуына немесе циклдік қайта инженериялау әрекеттері нәтижесінде осы екі проблеманың араласуына қатысты айқын тәуекел бар. UML-дің мінез-құлқымен/динамикалық бөлігіне қатысты, мысалы, күй диаграммалары сияқты мүмкіндіктерге бағдарламалау тілдерінде тікелей баламалары жоқ. Кодты генерациялау кезінде оларды аудару ортақ бағдарламалау операторларының (мысалы) жоқтығына немесе қате түсіндірілуіне әкелуі мүмкін. Егер түзетілгеннен кейін қайта импортталса, нәтижесінде өзгеше немесе толық емес модель пайда болуы мүмкін. Бұл, үлгіні іске асыру және пайдаланушыға арналған логика үшін кодты генерациялау кезеңінде қолданылатын код фрагменттеріне де қатысты: олар араласып кеткен жағдайда кері инженериялау арқылы оңай қалпына келтіру қиын болуы мүмкін. Сонымен қатар, жалпы мақсаттағы және салалық тілдер үшін қазіргі заманғы IDE-лерге (тестілеу, түзету, навигация және т.б.) теңдес келетін модельдеуге арналған жетілдірілген құралдар жетіспейді.