Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Домендік инженерия – жаңа бағдарламалық қамтамасыз ету жүйелерін жасауда домендік білімді қайта пайдаланудың толық процесі. Бұл жүйелі бағдарламалық жасақтаманы қайта пайдалану және өнімдік желіні құрудың маңызды түсінігі. Жүйелі бағдарламалық жасақтаманы қайта пайдаланудағы негізгі ұғым – домен. Көптеген ұйымдар тек бірнеше доменде жұмыс істейді. Олар клиенттердің әртүрлі қажеттіліктерін қанағаттандыру үшін белгілі бір доменде ұқсас жүйелерді әртүрлі өзгерістермен қайта-қайта құрастырады. Әрбір жаңа жүйе нұсқасын бастапқыдан құрудың орнына, домендегі бұрынғы жүйелердің бөліктерін қайта пайдалану арқылы айтарлықтай үнемдеуге қол жеткізуге болады. Домендерді анықтау, олардың шектерін белгілеу және домендегі жүйелер арасындағы ортақ белгілер мен айырмашылықтарды анықтау процесі – домендік талдау деп аталады. Бұл ақпарат модельдерде сақталады, олар домендік іске асыру кезеңінде қайта пайдаланылатын компоненттер, доменге тән тіл немесе доменде жаңа жүйелер құруға арналған қосымша генераторлары сияқты артефакттарды жасау үшін қолданылады. ISO26550:2015 стандарты бойынша анықталған өнімдік желінің инженериясында Домендік инженерия Қолданбалық инженериямен толықтырылады, ол өнімдік желіден алынған жеке өнімдердің өмірлік циклын басқарады.
Domain engineering, is the entire process of reusing domain knowledge in the production of new software systems. It is a key concept in systematic software reuse and product line engineering. A key idea in systematic software reuse is the domain. Most organizations work in only a few domains. They repeatedly build similar systems within a given domain with variations to meet different customer needs. Rather than building each new system variant from scratch, significant savings may be achieved by reusing portions of previous systems in the domain to build new ones. The process of identifying domains, bounding them, and discovering commonalities and variabilities among the systems in the domain is called domain analysis. This information is captured in models that are used in the domain implementation phase to create artifacts such as reusable components, a domain specific language, or application generators that can be used to build new systems in the domain. In product line engineering as defined by ISO26550:2015, the Domain Engineering is complemented by Application Engineering which takes care of the life cycle of the individual products derived from the product line.
Мақсаты
Домендік инженерия бағдарламалық жасақтама артефактілерін қайта пайдалану арқылы әзірленген бағдарламалық өнімдердің сапасын арттыруға бағытталған. Домендік инженерия көрсеткендей, көптеген дамытылған бағдарламалық жүйелер жаңа емес, бір сала ішіндегі басқа жүйелердің түрленулері болып табылады. Осының нәтижесінде, домендік инженерияны қолдану арқылы бизнес пайданы максималды деңгейге жеткізе алады және бұрынғы бағдарламалық жүйелерден алынған түсініктер мен іске асыруларды мақсатты жүйеге қолданып, нарыққа шығу уақытын қысқарта алады. Қабылданатын шығындар азаюы тіпті іске асыру кезеңінде де байқалады. Бір зерттеу көрсеткендей, доменге тән тілдерді қолдану код мөлшерін – әдістер мен символдар санын 50%-дан астамға, ал кодтың жалпы жолдар санын шамамен 75%-ға дейін азайтуға мүмкіндік берді. Домендік инженерия бағдарламалық жасақтаманы жасау процесінде жиналған білімді жинақтауға шоғырланады. Қайта пайдалануға болатын артефактілерді жасау арқылы компоненттерді жаңа бағдарламалық жүйелерде төмен құнмен және жоғары сапада қайта пайдалануға болады. Бұл бағдарламалық жасақтаманы әзірлеу циклінің барлық кезеңдеріне қатысты болғандықтан, домендік инженерия үш негізгі кезеңге де назар аударады: талдау, жобалау және іске асыру, бұл қолданбалық инженериямен паралель жүреді. Бұл доменге қатысты бағдарламалық жасақтаманы іске асыру компоненттерінің жиынтығын ғана емес, сонымен қатар қайта пайдалануға және конфигурациялауға болатын талаптар мен жобаларды да қамтиды. Вебтегі деректердің және Заттар Интернетінің өсуіне байланысты, домендік инженерия тәсілі басқа салалар үшін де маңызды бола бастады. Веб-қызметтердің күрделі тізбектерінің пайда болуы қызмет түсінігінің салыстырмалы екенін көрсетеді. Бір ұйым әзірлеген және басқаратын веб-қызметтер басқа ұйымның платформасының бөлігі ретінде пайдаланылуы мүмкін. Қызметтер әртүрлі контексттерде қолданылуы мүмкін, сондықтан оларға әртүрлі конфигурациялар қажет, сондықтан қызметтер отбасын жобалау домендік инженерия тәсілінен пайда көреді.
Domain engineering is designed to improve the quality of developed software products through reuse of software artifacts. Domain engineering shows that most developed software systems are not new systems but rather variants of other systems within the same field. As a result, through the use of domain engineering, businesses can maximize profits and reduce time to market by using the concepts and implementations from prior software systems and applying them to the target system. The reduction in cost is evident even during the implementation phase. One study showed that the use of domain specific languages allowed code size, in both number of methods and number of symbols, to be reduced by over 50%, and the total number of lines of code to be reduced by nearly 75%. Domain engineering focuses on capturing knowledge gathered during the software engineering process. By developing reusable artifacts, components can be reused in new software systems at low cost and high quality. Because this applies to all phases of the software development cycle, domain engineering also focuses on the three primary phases: analysis, design, and implementation, paralleling application engineering. This produces not only a set of software implementation components relevant to the domain, but also reusable and configurable requirements and designs. Given the growth of data on the Web and the growth of the Internet of Things, a domain engineering approach is becoming relevant to other disciplines as well. The emergence of deep chains of Web services highlights that the service concept is relative. Web services developed and operated by one organization can be utilized as part of a platform by another organization. As services may be used in different contexts and hence require different configurations, the design of families of services may benefit from a domain engineering approach.
Фазалары
Домендік инженерия, қолданбалы инженерия сияқты, үш негізгі кезеңнен тұрады: талдау, жобалау және іске асыру. Бірақ, бағдарламалық жасақтама инженериясы бір жүйеге назар бөлер болса, домендік инженерия жүйелер тобына назар бөледі.
Domain engineering, like application engineering, consists of three primary phases: analysis, design, and implementation. However, where software engineering focuses on a single system, domain engineering focuses on a family of systems.
Домендік талдау
Домендік талдау доменді анықтау, домен туралы ақпаратты жинау және домендік модельді құру үшін қолданылады. Ерекшелік модельдерін пайдалану арқылы (алғаш рет ерекшеліктерге бағытталған домендік талдау әдісінің құрамдас бөлігі ретінде ұсынылған), домендік талдау домендегі ортақ және өзгешеліктерді анықтауға бағытталған. Домендік талдауды қолдану арқылы дәстүрлі қолданбалық инженерия тәсілімен жасалатын статикалық конфигурациялардың орнына, конфигурацияланатын талаптар мен архитектураларды жасауға болады. Домендік талдау талаптарды инженериядан едәуір өзгеше, сондықтан домендік модельде кездесетін конфигурацияланатын талаптарды жасау үшін дәстүрлі талаптарды алу тәсілдері тиімсіз. Домендік инженерияны тиімді қолдану үшін, бағдарламалық жасақтаманы әзірлеу өмірлік циклінің бастапқы кезеңдерінде қайта пайдалануды қарастыру қажет. Дамытылған ерекшелік модельдерінен ерекшеліктерді таңдау арқылы технологияны қайта пайдалану мүмкіндігі ерте кезеңде қарастырылады және оны даму процесінің барлық кезеңінде тиімді қолдануға болады. Домендік талдау, негізінен, домендегі бұрынғы тәжірибеден алынған деректерге сүйенеді. Алайда, талаптарды инженериядан айырмашылығы, домендік талдау тек ақпаратты жинау және формалдаудан ғана тұрмайды, сонымен қатар шығармашылық компонентті де қамтиды. Домендік талдау процесінде инженерлер домен туралы білімді қазіргі білімнен асырып, қайта конфигурациялау мүмкіндігін арттыру үшін ұқсастықтар мен айырмашылықтар бойынша жіктеуге тырысады. Тиімді домендік модель домендегі өзгермелі және тұрақты ерекшеліктерді ғана емес, сонымен қатар доменде қолданылатын терминологияны, жүйедегі ұғымдарды, идеяларды және құбылыстарды анықтайды. Ерекшелік модельдері ұғымдарды қажетті және қосымша ерекшеліктерге бөліп, конфигурацияланатын талаптардың толыққанды формалдануын қамтамасыз етеді.
Domain analysis is used to define the domain, collect information about the domain, and produce a domain model. Through the use of feature models (initially conceived as part of the feature oriented domain analysis method), domain analysis aims to identify the common points in a domain and the varying points in the domain. Through the use of domain analysis, the development of configurable requirements and architectures, rather than static configurations which would be produced by a traditional application engineering approach, is possible. Domain analysis is significantly different from requirements engineering, and as such, traditional approaches to deriving requirements are ineffective for development of configurable requirements as would be present in a domain model. To effectively apply domain engineering, reuse must be considered in the earlier phases of the software development life cycle. Through the use of selection of features from developed feature models, consideration of reuse of technology is performed very early and can be adequately applied throughout the development process. Domain analysis is derived primarily from artifacts produced from past experience in the domain. However, unlike requirements engineering, domain analysis does not solely consist of collection and formalization of information; a creative component exists as well. During the domain analysis process, engineers aim to extend knowledge of the domain beyond what is already known and to categorize the domain into similarities and differences to enhance reconfigurability. An effective domain model not only includes the varying and consistent features in a domain, but also defines the vocabulary used in the domain and defines concepts, ideas and phenomena, within the system. Feature models decompose concepts into their required and optional features to produce a fully formalized set of configurable requirements.
Доменді жобалау
Домендік дизайн домендік талдау кезеңінде жасалған домендік модельді пайдаланады және домендегі барлық жүйелерге сәйкес келетін жалпы архитектураны жасауға бағытталған. Қолданбалық инженерия функционалдық және функционалдық емес талаптарды жоба жасау үшін қолданатыны сияқты, домендік инженерияның домендік жобалау кезеңі домендік талдау кезеңінде әзірленген конфигурацияланатын талаптарды қабылдайды және жүйелер отбасы үшін конфигурацияланатын, стандартталған шешімді шығарады. Домендік дизайнның мақсаты – әртүрлі талаптар конфигурацияларына қарамастан, домендегі жүйелерде ортақ проблеманы шешетін архитектуралық үлгілерді жасау. Домендік дизайн кезінде үлгілерді әзірлеумен қатар, инженерлер үлгінің қолданылу аймағын және контекстің үлгіге қатыстылығын анықтауы керек. Контекстің шектелуі маңызды: тым көп контекст үлгінің көптеген жүйелерге қолданылмауына әкеледі, ал тым аз контекст үлгінің пайдалы болу үшін жеткіліксіз күшті болуына себеп болады. Пайдалы үлгі жиі қайталанатын және жоғары сапалы болуы тиіс. Домендік дизайнның мақсаты – дамытылған мүмкіндіктер моделі ұсынатын икемділікті сақтай отырып, мүмкіндігінше көп домендік талаптарды қанағаттандыру. Архитектура домендегі барлық жүйелердің талаптарын қанағаттандыру үшін жеткілікті икемді, ал шешімді негіздеуге арналған сенімді базаны қамтамасыз ету үшін жеткілікті қатаң болуы керек.
Domain design takes the domain model produced during the domain analysis phase and aims to produce a generic architecture to which all systems within the domain can conform. In the same way that application engineering uses the functional and non functional requirements to produce a design, the domain design phase of domain engineering takes the configurable requirements developed during the domain analysis phase and produces a configurable, standardized solution for the family of systems. Domain design aims to produce architectural patterns which solve a problem common across the systems within the domain, despite differing requirement configurations. In addition to the development of patterns during domain design, engineers must also take care to identify the scope of the pattern and the level to which context is relevant to the pattern. Limitation of context is crucial: too much context results in the pattern not being applicable to many systems, and too little context results in the pattern being insufficiently powerful to be useful. A useful pattern must be both frequently recurring and of high quality. The objective of domain design is to satisfy as many domain requirements as possible while retaining the flexibility offered by the developed feature model. The architecture should be sufficiently flexible to satisfy all of the systems within the domain while rigid enough to provide a solid framework upon which to base the solution.
Доменді іске асыру
Домендік ішкі жүйелерді жасау – белгілі бір сала бойынша жекешелендірілген бағдарламаны тиімді түрде жасауға арналған процестер мен құралдарды құру.
Domain implementation is the creation of a process and tools for efficiently generating a customized program in the domain.
Сын
Домендік инженерия жалпы бағдарламалық қамтамасыз ету мүмкіндіктерін "қайта пайдалану үшін инженерияға" немесе "қайта пайдаланумен инженерияға" тым көп назар бөлгені үшін сынға ұшырады, оның орнына жеке адамның көзқарасы, тілі немесе жағдайы бағдарламалық қамтамасыз етуді жобалау кезінде ескерілуі керек.
Domain engineering has been criticized for focusing too much on "engineering for reuse" or "engineering with reuse" of generic software features rather than concentrating on "engineering for use" such that an individual's world view, language, or context is integrated into the design of software.