N-version programming as an opportunity to exclude errors in software

One of the methods for increasing computer system dependability level is the N-version programming method. Liming Chen and Algirdas Avizienis proposed this concept with the main hypothesis that «independent efforts in software development will significantly reduce the likelihood of identical failure...

Full description

Saved in:
Bibliographic Details
Published in:Математичні машини і системи
Date:2019
Main Author: Cespedes Garcia, P.D.
Format: Article
Language:English
Published: Інститут проблем математичних машин і систем НАН України 2019
Subjects:
Online Access:https://nasplib.isofts.kiev.ua/handle/123456789/151943
Tags: Add Tag
No Tags, Be the first to tag this record!
Journal Title:Digital Library of Periodicals of National Academy of Sciences of Ukraine
Cite this:N-version programming as an opportunity to exclude errors in software / P.D. Cespedes Garcia // Математичні машини і системи. — 2019. — № 1. — С. 203–208. — Бібліогр.: 9 назв. — англ.

Institution

Digital Library of Periodicals of National Academy of Sciences of Ukraine
id nasplib_isofts_kiev_ua-123456789-151943
record_format dspace
spelling Cespedes Garcia, P.D.
2019-06-01T17:11:14Z
2019-06-01T17:11:14Z
2019
N-version programming as an opportunity to exclude errors in software / P.D. Cespedes Garcia // Математичні машини і системи. — 2019. — № 1. — С. 203–208. — Бібліогр.: 9 назв. — англ.
1028-9763
https://nasplib.isofts.kiev.ua/handle/123456789/151943
621.3.019.3
One of the methods for increasing computer system dependability level is the N-version programming method. Liming Chen and Algirdas Avizienis proposed this concept with the main hypothesis that «independent efforts in software development will significantly reduce the likelihood of identical failures that occurs in two or more versions of the program». The main goal of N-version programming is to increase the reliability of the software by bounding design errors. The effectiveness of a multiversion system depends on the variety of variations at the executive teams formation stage, different algorithms implementation, design and testing tools.
Одним із методів підвищення рівня гарантоздатності комп'ютерних систем є метод багатоверсійного програмування. Ця концепція була запропонована Лімінгом Ченом і Альгірдасом Авіженісом у вигляді основної гіпотези про те, що «незалежні зусилля при розробці програмного забезпечення значно зменшать імовірність ідентичних збоїв, що виникають у двох або більше версіях програми». Метою багатоверсійного програмування є підвищення надійності роботи програмного забезпечення за рахунок локалізації помилок проектування. Ефективність багатоверсійної системи залежить від різноманітності варіацій на етапах утворення груп виконавців, використання різних алгоритмів, засобів проектування та випробувань.
Одним из методов повышения уровня гарантоспособности компьютерных систем является метод многоверсионного программирования. Эта концепция была предложена Лимингом Ченом и Альгирдасом Авиженисом в виде основной гипотезы о том, что «независимые усилия при разработке программного обеспечения значительно уменьшат вероятность идентичных сбоев, возникающих в двух или более версиях программы». Целью многоверсионного программирования является повышение надежности работы программного обеспечения за счет локализации ошибок проектирования. Эффективность многоверсионной системы зависит от разнообразия вариаций на этапах образования групп исполнителей, использования разных алгоритмов, средств проектирования и испытаний.
en
Інститут проблем математичних машин і систем НАН України
Математичні машини і системи
Якість, надійність і сертифікація обчислювальної техніки і програмного забезпечення
N-version programming as an opportunity to exclude errors in software
N-версійне програмування як можливість недопущення помилок у програмному забезпеченні
N-версионное программирование как возможность исключения ошибок в программном обеспечении
Article
published earlier
institution Digital Library of Periodicals of National Academy of Sciences of Ukraine
collection DSpace DC
title N-version programming as an opportunity to exclude errors in software
spellingShingle N-version programming as an opportunity to exclude errors in software
Cespedes Garcia, P.D.
Якість, надійність і сертифікація обчислювальної техніки і програмного забезпечення
title_short N-version programming as an opportunity to exclude errors in software
title_full N-version programming as an opportunity to exclude errors in software
title_fullStr N-version programming as an opportunity to exclude errors in software
title_full_unstemmed N-version programming as an opportunity to exclude errors in software
title_sort n-version programming as an opportunity to exclude errors in software
author Cespedes Garcia, P.D.
author_facet Cespedes Garcia, P.D.
topic Якість, надійність і сертифікація обчислювальної техніки і програмного забезпечення
topic_facet Якість, надійність і сертифікація обчислювальної техніки і програмного забезпечення
publishDate 2019
language English
container_title Математичні машини і системи
publisher Інститут проблем математичних машин і систем НАН України
format Article
title_alt N-версійне програмування як можливість недопущення помилок у програмному забезпеченні
N-версионное программирование как возможность исключения ошибок в программном обеспечении
description One of the methods for increasing computer system dependability level is the N-version programming method. Liming Chen and Algirdas Avizienis proposed this concept with the main hypothesis that «independent efforts in software development will significantly reduce the likelihood of identical failures that occurs in two or more versions of the program». The main goal of N-version programming is to increase the reliability of the software by bounding design errors. The effectiveness of a multiversion system depends on the variety of variations at the executive teams formation stage, different algorithms implementation, design and testing tools. Одним із методів підвищення рівня гарантоздатності комп'ютерних систем є метод багатоверсійного програмування. Ця концепція була запропонована Лімінгом Ченом і Альгірдасом Авіженісом у вигляді основної гіпотези про те, що «незалежні зусилля при розробці програмного забезпечення значно зменшать імовірність ідентичних збоїв, що виникають у двох або більше версіях програми». Метою багатоверсійного програмування є підвищення надійності роботи програмного забезпечення за рахунок локалізації помилок проектування. Ефективність багатоверсійної системи залежить від різноманітності варіацій на етапах утворення груп виконавців, використання різних алгоритмів, засобів проектування та випробувань. Одним из методов повышения уровня гарантоспособности компьютерных систем является метод многоверсионного программирования. Эта концепция была предложена Лимингом Ченом и Альгирдасом Авиженисом в виде основной гипотезы о том, что «независимые усилия при разработке программного обеспечения значительно уменьшат вероятность идентичных сбоев, возникающих в двух или более версиях программы». Целью многоверсионного программирования является повышение надежности работы программного обеспечения за счет локализации ошибок проектирования. Эффективность многоверсионной системы зависит от разнообразия вариаций на этапах образования групп исполнителей, использования разных алгоритмов, средств проектирования и испытаний.
issn 1028-9763
url https://nasplib.isofts.kiev.ua/handle/123456789/151943
citation_txt N-version programming as an opportunity to exclude errors in software / P.D. Cespedes Garcia // Математичні машини і системи. — 2019. — № 1. — С. 203–208. — Бібліогр.: 9 назв. — англ.
work_keys_str_mv AT cespedesgarciapd nversionprogrammingasanopportunitytoexcludeerrorsinsoftware
AT cespedesgarciapd nversíineprogramuvannââkmožlivístʹnedopuŝennâpomilokuprogramnomuzabezpečenní
AT cespedesgarciapd nversionnoeprogrammirovaniekakvozmožnostʹisklûčeniâošibokvprogrammnomobespečenii
first_indexed 2025-11-26T23:47:52Z
last_indexed 2025-11-26T23:47:52Z
_version_ 1850783419599945728
fulltext © Cespedes Garcia P.D., 2019 203 ISSN 1028-9763. Математичні машини і системи, 2019, № 1 UDC 621.3.019.3 P.D. CESPEDES GARCIA * N-VERSION PROGRAMMING AS AN OPPORTUNITY TO EXCLUDE ERRORS IN SOFTWARE * Institute of Mathematical Machines and Systems National Academy of Sciences of Ukraine, Kyiv, Ukraine Анотація. Одним із методів підвищення рівня гарантоздатності комп’ютерних систем є метод багатоверсійного програмування. Ця концепція була запропонована Лімінгом Ченом і Альгірдасом Авіженісом у вигляді основної гіпотези про те, що «незалежні зусилля при розробці програмного забезпечення значно зменшать імовірність ідентичних збоїв, що виникають у двох або більше вер- сіях програми». Метою багатоверсійного програмування є підвищення надійності роботи програ- много забезпечення за рахунок локалізації помилок проектування. Ефективність багатоверсійної системи залежить від різноманітності варіацій на етапах утворення груп виконавців, викорис- тання різних алгоритмів, засобів проектування та випробувань. Багатоверсійне програмне забез- печення визначається, як незалежно розроблені дві або більше функціонально еквівалентні про- грами, написані з однієї початкової специфікації. Різні версії програм мають усе необхідне для їх одночасного виконання і при цьому взаємодіють одна з одною на етапах порівняння результатів. Дослідження припускають, що незалежна розробка програмного забезпечення і подальше впрова- дження методів диверсності приведуть до створення версій, які містять суттєво різні помилки, що не приводять до відмов на етапах порівняння. Таким чином, якщо більшість версій видасть однакові значення, цей загальний результат, імовірно, буде вірним. Також слід звернути увагу на проектування багатоверсійної системи як системи з декількома видами версійної надлишковості на всіх етапах її життєвого циклу. Це дозволить диверсифікувати систему не тільки на етапі розробки, але й на попередніх етапах проектування системи. Незважаючи на те, що були прове- дені дослідження, які ставлять під сумнів актуальність багатоверсійного проектування, ряд дос- лідницьких груп підтвердили значно вищу коректність обчислень, яких здатні досягти багатовер- сійні системи у порівнянні зі звичайними системами. Ключові слова: гарантоздатність, N-версійне програмування, багатоверсійні системи, надлишко- вість, диверсність, відмовостійка система, розробка програмного забезпечення. Аннотация. Одним из методов повышения уровня гарантоспособности компьютерных систем является метод многоверсионного программирования. Эта концепция была предложена Лимингом Ченом и Альгирдасом Авиженисом в виде основной гипотезы о том, что «независимые усилия при разработке программного обеспечения значительно уменьшат вероятность идентичных сбоев, возникающих в двух или более версиях программы». Целью многоверсионного программирования является повышение надежности работы программного обеспечения за счет локализации ошибок проектирования. Эффективность многоверсионной системы зависит от разнообразия вариаций на этапах образования групп исполнителей, использования разных алгоритмов, средств проекти- рования и испытаний. Многоверсионное программное обеспечение определяется как независимо разработанные две или более функционально эквивалентные программы, написанные из одной ис- ходной спецификации. Разные версии программ имеют всѐ необходимое для их одновременного вы- полнения и при этом взаимодействуют друг с другом на этапах сравнения результатов. Исследо- вания предполагают, что независимая разработка программного обеспечения и дальнейшее внед- рение методов диверсности приведут к созданию версий, которые содержат существенно разные ошибки, не приводящие к отказам на этапах сравнения. Таким образом, если большинство версий выдадут одинаковые значения, этот общий результат, вероятно, будет верным. Также следует обратить внимание на проектирование многоверсионной системы как системы с несколькими видами версионной избыточности на всех еѐ этапах жизненного цикла. Это позволит диверсифи- цировать систему не только на этапе разработки, но и на предварительных этапах проектиро- вания системы. Несмотря на то, что были проведены исследования, ставящие под сомнение ак- туальность многоверсионного проектирования, ряд исследовательских групп подтвердили значи- 204 ISSN 1028-9763. Математичні машини і системи, 2019, № 1 тельно более высокую корректность вычислений, которых способны достичь многоверсионные системы в сравнении с обычными системами. Ключевые слова: гарантоспособность, N-версионное программирование, многоверсионные систе- мы, избыточность, диверсность, отказоустойчивая система, разработка программного обеспе- чения. Abstract. One of the methods for increasing computer system dependability level is the N-version pro- gramming method. Liming Chen and Algirdas Avizienis proposed this concept with the main hypothesis that «independent efforts in software development will significantly reduce the likelihood of identical fail- ures that occurs in two or more versions of the program». The main goal of N-version programming is to increase the reliability of the software by bounding design errors. The effectiveness of a multiversion sys- tem depends on the variety of variations at the executive teams formation stage, different algorithms im- plementation, design and testing tools. Multiversion software is defined as independently developed two or more functionally equivalent programs written from the same specification source. Different program ver- sions have everything they need for simultaneous execution, and at the same time, they interact with each other at the results comparison stages. Researches suggest that independent software development and further implementation of diversity methods will lead to the creation of versions that contain significantly different errors and they will not lead to failures at the comparison stages. Thus, if most versions produce the same values, this overall result is likely will be correct. Moreover, a multiversion system design must be considered, as a system with several types of versioned redundancy at all stages of its life cycle. This will allow diversifying the system not only at the development stage, but at the preliminary stages of sys- tem design as well. Despite the conducted studies that discredited the relevance of multiversion design, a number of research groups have confirmed the significantly higher calculations accuracy, which multiver- sion systems are capable to achieve, in comparison with conventional systems. Keywords: dependability, N-version programming, multiversion systems, redundancy, diversity, fault- tolerant system, software development. 1. Introduction Complex systems with its constant software failures causes lots of trouble, any failure in security systems can lead to unpleasant consequences, which is why modern systems are subject of high reliability requirements. The most common source of computer system failures are software de- fects. They had been formed during the development phase, no one detected them during testing and verification, and finally they appeared while operating a set of an input data or due to the physical or informational environment features [1]. The testing stage cannot always eliminate every software error, more accurate testing of a critical application system is expensive. This forces to search for more affordable methods to improve the quality of a complex system [2]. 2. The emergence of N-version programming approach Duplication technique (hardware redundancy) is often used in critical systems, this approach pro- tects against hardware accidental failures. In addition to redundancy, there is a multiversion (N- version) programming (NVP) technique, it is based on the idea of using redundancy in software. Multiversion programming partially transfers hardware duplication approach to software devel- opment. The idea is to execute simultaneously several independently developed but functionally equivalent software versions by different development teams. A kind of software redundancy that increases the system chances to provide correct results by compensating each other’s errors. Thus, the risk of simultaneous and single-type failures in a multiversion system decreases with an increase in the number of implemented versions. This N-version method provides the necessary level of critical systems safety and reliability when designing a multiversion system, this diversity can be implemented in the following stages [3]: 1. Training, experience, and location of developers. 2. Algorithms and data structures. ISSN 1028-9763. Математичні машини і системи, 2019, № 1 205 3. Programming languages. 4. Software development methods. 5. Development tools and environments. 6. Testing tools and methods. The research on N-version efficiency received much efforts, Liming Chen and Algirdas Avizienis introduced the concept itself in 1977 with the main hypothesis that independent soft- ware development efforts would significantly reduce the chances of identical failures using two or more program versions. At the early stages, attention was focused mainly on modeling a sys- tem that implements the principle of the N-version programming approach. There were discus- sions about simultaneous failures possibilities in different versions, later this topic was researched in pair with N-version programming software failures. For example in [2], we see that constraints of the software reliability stemmed from multiversion method problems. The authors also paid attention to the pricing issue and to the multiversion system optimal structure as well. The research has led to significant breakthroughs in the field of N-version programming, A. Avizienis, P. Popov, L. Strigini have made a significant contribution to the NVP methodolo- gies development, they describe processes and tools for multiversion software implementation, testing, practical use and maintenance. These and other studies were focused on diversity and re- ducing the odds of simultaneous and similar failures, which led to meaningful results in develop- ing multiversion applications. Further, developments in the modeling field and quantified influ- ence of diversity on the reliability of multiversion systems were carried out [3]. John Knight and Nancy Leveson demonstrated [4] that independent version development is not enough for the system to become completely crash independent. Their research was im- portant for the NVP, since they encouraged researchers to study the question of how to effective- ly implement diversity and quantify its effect more carefully. Many researchers, who were in- volved or interested in N-version programming, misunderstood their criticism and perceived it as a definitive statement against the NVP, even though it was not true. D. Knight and N. Leveson warned that independence of failures, though mathematically convenient in theoretical work, could not be assumed in reality. However, according to A. Avizienis, independent failure is mere- ly an ideological objective, and is not a basis for, or even an assumption of N-version program- ming [3]. In [5], there is a suggestion to divide redundancy into external and internal at the early multiversion system designing stages, and to carry out the project formation, respectively, in two stages: theoretical design and a software development. Thorough discussion about taxonomy and versioned redundancy classification is occurred in [1], diversity principles and their terminologi- cal aspects are clarified, and different types of versioned redundancy being analyzed, taking into account the capabilities of modern computer technologies and experience in developing multiver- sion systems. Also worth mentioning the performer’s personal characteristics diversity, different developers even if they work separately, often make the same mistakes. The most likely reason is a random personal characteristics coincidence between the participants in a multiversion project where the same techniques and tools for development are used (e.g. similarities in implementa- tions of the most common techniques in solving various tasks during the learning process) [6]. 3. The concept of N-version programming Traditional software has only one version. Input data always being processed in the same way, any failures lead to an error in the calculations results. To avoid this problem, when writing and testing code, software developers have to eliminate as many errors as possible. Since, it is almost impossible to eliminate all errors during a complex system development, the concept of a fault- tolerant software was introduced in pair with redundancy. With its introduction, users assumed a significant reliability level increase along with the software systems performance boost. N- version programming is one of the most common methods for developing fault-tolerant applica- 206 ISSN 1028-9763. Математичні машини і системи, 2019, № 1 tion systems. It is defined as an independently developed set of N ≥ 2 structurally different, but functionally equivalent programs (versions) that corresponds to the same initial specification. Each software version process source data separately and simultaneously, the voting/matching mechanism is an inter-stage point for output data from each version to interact with each other. This mechanism will not allow any failure to affect the entire system result. When we talk about «independently developed programs», it means that there are N- number of developers groups who do not interact with each other, they use different development tools, programming languages and algorithms for the task implementation. A visual representa- tion of multiversion software is shown in Fig. 1. Figure 1 – An example of a N-version programming system The main goal of the technical, or the so-called initial specification, is to establish the functional requirements completely, while leaving the widest possible choice of implementations for designers and developers. It also specifies special functions that are necessary for each ver- sion execution in accordance with the fault-tolerance requirements. The initial specification should define [7]: 1. Functions that must be implemented by multiversion software. 2. Data formats for special mechanisms: comparison vectors, comparison status indicators and synchronization mechanisms. 3. Cross-check points for comparison vector generation. 4. Comparison algorithm. 5. Response to the possible outcomes. At various system operation stages, these special mechanisms allow to control the entire system using N-version execution environment (NVX) that acts as an additional software and/or hardware [8]. With comparison algorithm implementation, it is necessary to establish explicitly the acceptable range of numerical results. «Comparison algorithm» expression is used as a gen- eral term to the comparison principle. Specifically, «matching» algorithm refers to systems with two implemented versions, while «voting» algorithm refers to systems with more than two ver- sions. Some NVX implementations are developed in such way, that they make the final decision, taking into account each individual result of each N-version. Decision-making algorithms imple- mentation can vary from simple, where the most common results considered as valid, to algo- rithms that are more complex. Among other duties, the NVX must: provide the necessary inter- version communication; manage synchronization control; perform error-masking for each stage at the inter-stage comparison points to ensure version functioning; execute error-correction func- tions and, in general, manage system efficiency [3]. ISSN 1028-9763. Математичні машини і системи, 2019, № 1 207 4. Versioned redundancy types classification Form of redundancy in a multiversion project determines the system development direction. Op- tions for engineering implementation are called external multiversion. Internal multiversion is responsible for technical and software solutions. Formation of a multiversion project with an external multiversion diversity starts from consideration of all factors that would be taken into the project account. Next, based on the initial specification, a hierarchy is formed from a set of variants, which are preliminarily divided into categories. From a variety of options consider reasonable combinations, and at the final stage, generate system versions. At the initial planning stage, project managers make decisions about: hardware diversity options, operating system, software, recommended programming languages, specifications, development tools, and testing options. After forming the general development concept, the project developers establish functional specifications. They start to develop architec- ture, data structures, algorithms, afterwards they write code and test it. Also, they are engaged in providing quality control, designing supporting documentation, and ultimately, they maintain software support [9]. Details about delivering redundancy to a multiversion system at all its life cycle stages considered in [1]. It is proposed that system level consists of six types of versioned redundancy (VR): 1. Various teams of performers achieve Subjective VR. The work [6], on the diversity of a programmers personal characteristics, considers the reasons why the development of a project by several groups is the basis for a successful results in terms of personality differences. 2. VR of design is based on applying various concepts of technologies and architectures in the development of hardware and software and the system as a whole. 3. VR of software suggests applying different software versions. Their diversity caused by various types of VR's implementation, it applies to the software development stages: algorithms and logic implementation, software architecture, programming languages, operating systems and databases. 4. Functional VR is achieved by implementing different functionality to achieve an identi- cal result. 5. Signal VR is provided by using various data sources that determines the system func- tioning algorithm. 6. VR of equipment is achieved with the help of various components, printed circuit boards, computer bus organization, and different equipment manufacturers. Implementation of multiversion system at the program stage is achieved based on diversi- ty of life cycle models levels. It offers a choice between a model with the minimum required and maximum set of processes to ensure quality. By choosing the programming languages, develop- ment tools and the developers themselves, you can achieve a diversity of resources and tools. Project solutions diversity is achieved by taking into account the possible choices of architecture and platforms, records, formats and ways of representing data [1]. Options for classifying multiversioning at a conceptual level are considered in accordance with approaches to system design and calculation systems that are used for representing and pro- cessing information in multiversion system channels [1]. 5. Conclusion Multiversion system development combines the principles of redundancy with the condition of identical functionality. The main goal of this approach is to increase the system dependability level. Performer groups diversity at all project life cycle stages implements a multiversioning principle, starting with the requirements development and finishing with commissioning. With the same specification, independent development teams create several project implementations 208 ISSN 1028-9763. Математичні машини і системи, 2019, № 1 using different hardware, methods, tools, programming languages, etc. To achieve correct output results in the multiversion system, there is either comparison or voting algorithm at the final cal- culation stage, systems with inter-stage testing and error masking are also possible. There are disputes between NVP method researchers regarding the errors independence when developing different versions for the system. It is assumed that independence in the system development will lead to statistically independent errors, the experiment [4] suggests opposite. The multiversion system weak point is the comparison algorithm, system calculations accuracy and output data fidelity depends on the algorithm that is used in the N-version execution envi- ronment. It could be either «voting» or «matching» algorithm, depending on quantity of imple- mented versions in the system, it determines which of the results among each version is correct. The results of several independent versions are more likely to provide «reliable» data than the results of a single version, but there are some debates whether the effect of the multiversion method implementation is worth the time, efforts and costs [3]. The positive effect from designing multiversion software can be achieved when compar- ing output data using voting algorithm, therefore the number of versions should be at least 3, keep in mind that it will also significantly increase development costs. It’s noted that when the devel- opment of complex multiversion software is completed, it has to be upgraded, since it is morally and technologically obsolete. Multiversion software is efficient in long-lived especially critical systems – astronautics, armament, etc., where software has been tested and developed for years and, subsequently «lashed» into the ROM. REFERENCES 1. Сиора А.А., Скляр В.В., Харченко В.С. (n,m)-версионные системы: таксономия, модели и техно- логии. Вісник Харківського національного університету. Математичне моделювання. Інфор- маційні технології. Автоматизовані системи управління. 2008. № 833. С. 231–246. 2. Min X., Chengjie X., Szu-Hui Ng. A study of N-version programming and its impact on software avail- ability. International Journal of Systems Science. 2014. Vol 45, N 10. P. 2145–2157. 3. Liburd D.S. An N-version Electronic Voting System. Massachusetts Institute of Technology. Dept. of Electrical Engineering and Computer Science. 2004. P. 15–31. 4. Knight J.C., Leveson N.G. An experimental evaluation of the assumption of independence in multiver- sion programming. IEEE Transactions on Software Engineering. 1986. Vol. 12, N 1. P. 96–109. 5. Дужий В.И., Шостак А.В., Дужий И.В. Оценка показателя версионной избыточности при проек- тировании программного обеспечения. Радіоелектронні і комп’ютерні системи. 2009. № 6. С. 159–165. 6. Варламова Н.В., Мищенко В.О. Разнообразие личностных характеристик программистов как ос- нова успешности программной диверсности. Вісник Харківського національного університету імені В.Н. Каразіна. Математичне моделювання. Інформаційні технології. Автоматизовані си- стеми управління. 2016. № 30. С. 27–35. 7. Chen L., Avizienis A.A. N-Version Programming: A Fault-Tolerance Approach to Reliability of Soft- ware Operation. Fault-Tolerant Computing. Highlights from Twenty-Five Years. 1995. P. 113–119. 8. Avizienis A.A. The Methodology of N-version Programming / ed. M. Lyu. Software Fault Tolerance: John Wiley & Sons, 1995. P. 35. 9. Дужий В.И., Дужий И.В., Шостак А.В. Разработка многоверсионной иерархии решений при про- ектировании программного обеспечения. Радіоелектронні і комп’ютерні системи. 2007. № 8. С. 173–176. Cтаття надійшла до редакції 12.02.2019