Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Даму әдістемесі
Итеративтік және инкременттік даму – бұл итеративтік жобалау немесе итеративтік әдіс пен даму үшін инкременттік құрастыру моделінің кез келген комбинациясы. Бұл терминнің қолданылуы бағдарламалық жасақтаманы әзірлеуде басталды, ал итеративтік және инкременттік екі терминді ұзақ жылдар бойы біріктіру ірі жобаларды жүзеге асыру үшін кеңінен ұсынылып келді. Мысалы, 1985 жылғы DOD STD 2167 стандартының (4.1.2-бөлімінде) мынадай сөздер келтірілген: «Бағдарламалық қамтамасыз етуді әзірлеу кезінде бағдарламалық қамтамасыз етуді әзірлеу циклінің бірнеше итерациясы бір уақытта жүргізілуі мүмкін». Сондай-ақ, «Бұл процесті «эволюциялық даму» немесе «инкременттік құрастыру» тәсілі деп сипаттауға болады». Бағдарламалық жасақтамада итерациялар мен инкременттер арасындағы байланыс жалпы бағдарламалық жасақтаманы әзірлеу процесімен анықталады.
Development methodology
Iterative and incremental development is any combination of both iterative design or iterative method and incremental build model for development. Usage of the term began in software development, with a long standing combination of the two terms iterative and incremental having been widely suggested for large development efforts. For example, the 1985 DOD STD 2167
mentions (in section 4.1.2): "During software development, more than one iteration of the software development cycle may be in progress at the same time." and "This process may be described as an 'evolutionary acquisition' or 'incremental build' approach." In software, the relationship between iterations and increments is determined by the overall software development process.
Шолу
Бұл әдістің негізгі идеясы – жүйелерді қайталанатын циклдар (итеративті) арқылы және бір уақытта кішігірім бөліктерде (инкрементті) дамыту, бұл бағдарламалық қамтамасыз етушілерге жүйенің бұрынғы бөліктерін немесе нұсқаларын дамыту барысында алған тәжірибесін пайдалануға мүмкіндік береді. Оқу жүйенің дамытылуы мен қолданылуынан туындайды, мүмкіндігінше процестің маңызды қадамдары бағдарламалық қамтамасыз ету талаптарының қарапайым іске асырылған кіші жиынтығынан басталып, толық жүйе дайын болғанға дейін дамып жатқан нұсқаларды қайталап жетілдіру арқылы жүзеге асырылады. Әрбір итерацияда дизайнға өзгерістер енгізіліп, жаңа функционалдық мүмкіндіктер қосылады. Процедураның өзі инициализация кезеңінен, итерация кезеңінен және Жобаны бақылау тізімінен тұрады. Инициализация кезеңі жүйенің бастапқы нұсқасын құрайды. Бұл бастапқы іске асырудың мақсаты – пайдаланушы реакция білдіре алатын өнімді жасау. Ол мәселенің негізгі аспектілерін көрсетіп, түсінуге және оңай іске асыруға болатын қарапайым шешім ұсынуы керек. Итерация процесін басқару үшін жобаны бақылау тізімі жасалады, онда орындалуы тиіс барлық тапсырмалар тіркеледі. Ол жаңа мүмкіндіктерді іске асыру және қолданыстағы шешімді қайта құру қажеттіліктерін қамтиды. Бақылау тізімі талдау кезеңінің нәтижелеріне сәйкес үнемі жаңартылып отырады. Итерация қайта жобалауды және іске асыруды қамтиды, ол қарапайым, түсінікті және модульді болуы керек, бұл сол кезеңде қайта жобалауға немесе жобаны бақылау тізіміне қосылатын болашақ тапсырма ретінде мүмкіндік береді. Дизайнның егжей-тегжейлі деңгейі итеративті тәсілмен шектелмейді. Жеңіл итеративті жобада код жүйенің негізгі құжаттама көзі болуы мүмкін, бірақ маңызды итеративті жобада ресми Бағдарламалық Қамтамасыз ету Дизайн Документі қолданылуы мүмкін. Итерацияның талдауы пайдаланушы пікірлеріне және қол жетімді бағдарлама талдау құралдарына негізделеді. Ол құрылымды, модульділікті, қолдануға ыңғайлылығын, сенімділігін, тиімділігін және мақсаттарға жетуді талдауды қамтиды. Жобаны бақылау тізімі талдау нәтижелеріне сәйкес өзгертіледі.
The basic idea behind this method is to develop a system through repeated cycles (iterative) and in smaller portions at a time (incremental), allowing software developers to take advantage of what was learned during development of earlier parts or versions of the system. Learning comes from both the development and use of the system, where possible key steps in the process start with a simple implementation of a subset of the software requirements and iteratively enhance the evolving versions until the full system is implemented. At each iteration, design modifications are made and new functional capabilities are added. The procedure itself consists of the initialization step, the iteration step, and the Project Control List. The initialization step creates a base version of the system. The goal for this initial implementation is to create a product to which the user can react. It should offer a sampling of the key aspects of the problem and provide a solution that is simple enough to understand and implement easily. To guide the iteration process, a project control list is created that contains a record of all tasks that need to be performed. It includes items such as new features to be implemented and areas of redesign of the existing solution. The control list is constantly being revised as a result of the analysis phase. An iteration involves redesign and implementation, which is meant to be simple, straightforward, and modular, supporting redesign at that stage or as a future task added to the project control list. The level of design detail is not dictated by the iterative approach. In a light weight iterative project the code may represent the major source of documentation of the system; however, in a critical iterative project a formal Software Design Document may be used. The analysis of an iteration is based upon user feedback and the program analysis facilities available. It involves analysis of the structure, modularity, usability, reliability, efficiency, and achievement of goals. The project control list is modified in light of the analysis results.
Фазалары
Кезеңдік даму жүйелік мүмкіндіктерді кезеңдерге (бөлімдерге) бөледі. Әрбір кезеңде мүмкіндіктердің бір бөлігі талаптардан бастап енгізілуге дейінгі салалық жұмыс арқылы жеткізіледі. Бірыңғай процесте кезеңдер/итерациялар мынадай фазаларға топтастырылады: бастама, нақтылау, құрылыс және ауысу. Бастама жобаның көлемін, талаптарды (функционалды және функционалды емес) және тәуекелдерді жоғары деңгейде, бірақ жұмыс көлемін бағалауға жеткілікті егжей-тегжейлі түрде анықтайды. Нақтылау жоғары тәуекелдерді азайтатын және функционалды емес талаптарды орындайтын жұмыс архитектурасын ұсынады. Құрылыс функционалды талаптарды талдау, жобалау, іске асыру және тестілеу арқылы өндіріске дайын кодпен архитектураны кезең-кезеңімен толықтырады. Ауысу жүйені өндірістік ортаға енгізеді. Әрбір фаза 1 немесе одан көп итерацияларға бөлінуі мүмкін, олар әдетте уақыт бойынша шектеледі, мүмкіндіктер бойынша емес. Архитекторлар мен талдаушылар әзірлеушілер мен тестілеушілерден бір итерацияға озып жұмыс істейді, осылайша өздерінің жұмыс өнімдерінің толық болуын қамтамасыз етеді.
Incremental development slices the system functionality into increments (portions). In each increment, a slice of functionality is delivered through cross discipline work, from the requirements to the deployment. The Unified Process groups increments/iterations into phases: inception, elaboration, construction, and transition. Inception identifies project scope, requirements (functional and non functional) and risks at a high level but in enough detail that work can be estimated. Elaboration delivers a working architecture that mitigates the top risks and fulfills the non functional requirements. Construction incrementally fills in the architecture with production ready code produced from analysis, design, implementation, and testing of the functional requirements. Transition delivers the system into the production operating environment. Each of the phases may be divided into 1 or more iterations, which are usually time boxed rather than feature boxed. Architects and analysts work one iteration ahead of developers and testers to keep their work product backlog full.
Пайдалануы/Тұрағы
Крейг Ларман мен Виктор Базилидің "Итеративті және үдемелі даму: қысқаша тарих" мақаласында ерте қолданылудың көптеген мысалдары келтірілген, олардың ең алғашқысы – NASA-ның 1960 жылдардағы «Меркурий» жобасы. Кейіннен «Меркурий» инженерлерінің бір бөлігі IBM-де жаңа бөлім құрды, онда «ІІД-нің маңызды жетістігінің тағы бір ерте және айқын мысалы – NASA-ның ғарыш кемесі бағдарламалық қамтамасының ядросы – 1977 жылдан 1980 жылға дейін салынған негізгі авиациялық бағдарламалық жүйе. Команда 31 айдың ішінде 17 итерацияда IID-ні қолданды, әр итерацияның орташа ұзақтығы шамамен сегіз аптаны құрады. Олардың «суарнау» өмірлік циклінен қашу себебі – бағдарламалық қамтама жасау процесінде ғарыш кемесі бағдарламасының талаптары өзгергендігі еді». Сонымен қатар, АҚШ-тың Халықаралық даму агенттігі (USAID) халықаралық даму жобаларын жобалау, бақылау, бағалау, үйрену және бейімдеу үшін өзінің бағдарламалау циклінде итеративті және үдемелі даму тәсілін қолданады. Бұл тәсіл ынтымақтастық, оқыту және бейімделу стратегияларын интеграциялауға бағытталған жобалық басқару арқылы бағдарламалауды итерациялау және бейімдеуді қамтиды.
Many examples of early usage are provided in Craig Larman and Victor Basili's article "Iterative and Incremental Development: A Brief History", with one of the earliest being NASA's 1960s Project Mercury. Some of those Mercury engineers later formed a new division within IBM, where "another early and striking example of a major IID success [was] the very heart of NASA’s space shuttle software—the primary avionics software system, which [they] built from 1977 to 1980. The team applied IID in a series of 17 iterations over 31 months, averaging around eight weeks per iteration. Their motivation for avoiding the waterfall life cycle was that the shuttle program’s requirements changed during the software development process." In addition, the United States Agency for International Development (USAID) also employs an iterative and incremental developmental approach to its programming cycle to design, monitor, evaluate, learn and adapt international development projects with a project management approach that focuses on incorporating collaboration, learning, and adaptation strategies to iterate and adapt programming.
Су тасқыны дамуының қарама-қарсылығы
Бағдарламалық жасақтаманы әзірлеу жобаларының сәтсіздікке ұшырауының басты себебі модельді таңдау болып табылады, сондықтан оны өте мұқият таңдау керек. Мысалы, Waterfall әзірлеу парадигмасы келесі кезеңге өтуден бұрын, әрбір саланың жобалық жұмыс өнімдерін бір қадамда аяқтайды. Бизнес құндылығы бірден, тек жобаның соңында ғана ұсынылады, ал итеративтік тәсілде кері қайту мүмкіндігі бар. Екі тәсілді салыстыра отырып, кейбір үлгілер көріне бастайды:
The main cause of the software development projects failure is the choice of the model, so should be made with a great care. For example, the Waterfall development paradigm completes the project wide work products of each discipline in one step before moving on to the next discipline in a succeeding step. Business value is delivered all at once, and only at the very end of the project, whereas backtracking is possible in an iterative approach. Comparing the two approaches, some patterns begin to emerge:
Пайдаланушының қатысуы: Waterfall моделінде пайдаланушы модельдің екі кезеңіне, яғни талаптарды анықтауға және қабылдау сынағына, сондай-ақ мүмкін пайдаланушыға оқу материалдарын жасауға қатысады. Ал инкременттік модельде клиент әрбір кезеңде қатысады. Өзгергіштік: Бағдарлама пайдаланушыға тек өмірлік циклдің құрастыру кезеңі аяқталғаннан кейін ғана тапсырылады, пайдаланушы қабылдауы үшін. Ал инкременттік модельде әрбір жаңару пайдаланушыға ұсынылады және пайдаланушы мақұлдағаннан кейін әзірлеуші келесі модульға көшуге рұқсат алады. Адам ресурстары: Инкременттік модельде Waterfall моделімен салыстырғанда аз қызметкерлер қажет болуы мүмкін. Уақыт шектеуі: Іске қосылған өнім бірнеше айдан кейін ұсынылады, ал инкременттік модельде өнім бірнеше апта ішінде пайдаланушыға беріледі. Жобаның көлемі: Waterfall моделі шағын жобаларға қолайсыз, ал инкременттік модель шағын да, ірі жобаларға да қолайлы.
User involvement: In the waterfall model, the user is involved in two stages of the model, i. e. requirements and acceptance testing, and possibly creation of user education material. Whereas in the incremental model, the client is involved at each and every stage. Variability: The software is delivered to the user only after the build stage of the life cycle is completed, for user acceptance testing. On the other hand, every increment is delivered to the user and after the approval of user, the developer is allowed to move towards the next module. Human resources: In the incremental model fewer staff are potentially required as compared to the waterfall model. Time limitation: An operational product is delivered after months while in the incremental model the product is given to the user within a few weeks. Project size: Waterfall model is unsuitable for small projects while the incremental model is suitable for small, as well as large projects.
Жабдықтар мен кіріктірілген жүйелерде қолдану
Итеративтік және инкременталды даму термині бағдарламалық жасақтама индустриясында пайда болғанмен, көптеген аппараттық және кіріктірілген бағдарламалық жасақтаманы әзірлеу жұмыстары итеративтік және инкременталды әдістерді қолданады. Мұның мысалдары көптеген салаларда кездеседі. Соңғы уақытта осы ойлау жолының өзгеруіне едәуір әсер еткен салалардың бірі – ғарышқа ұшыру индустриясы. Бұл индустрияда жедел және ауқымды технологиялық инновациялардың нәтижесінде жаңа бәсекелестік күштер пайда болды, осы өзгеріске жеке компаниялардың ғарышқа ұшыруды жүзеге асыруы себеп болды. SpaceX және Rocket Lab сияқты компаниялар соңғы он жылда коммерциялық орбиталық ұшыру қызметтерін ұсынып келеді, бұл мүмкіндік он жыл бұрын тек алты мемлекетке ғана қолжетімді болған. Технологияны дамытудың жаңа тәсілдері, баға белгілеу және қызметтер ұсынысы – соның ішінде 2016 жылдан бері қолжетімді болған, бұрын қолданылған (қайта пайдалануға болатын) күшейткіш сатысында ғарышқа ұшу мүмкіндігі – ғарышқа қол жеткізу бағасын одан әрі төмендетуде. Индустрия өзгеріске түскендіктен, басқа ұшыру конкурстары да мемлекеттік органдармен бірлесіп, ұзақ мерзімді даму тәжірибесін өзгерте бастады. Мысалы, АҚШ-тың ірі ұшыру қызметін ұсынатын United Launch Alliance (ULA) компаниясы 2015 жылы өзінің ұшыру бизнесін қайта құруға бағытталған он жылдық жобаны бастады – екі ұшыру құралын біреуге дейін азайтып, келесі он жылда жартылай қайта пайдалануға болатын және әлдеқайда төмен құнмен ұшыру жүйесіне итеративтік және инкременталды тәсіл арқылы қол жеткізуді көздеді.
While the term iterative and incremental development got started in the software industry, many hardware and embedded software development efforts are using iterative and incremental techniques. Examples of this may be seen in a number of industries. One sector that has recently been substantially affected by this shift of thinking has been the space launch industry, with substantial new competitive forces at work brought about by faster and more extensive technology innovation brought to bear by the formation of private companies pursuing space launch. These companies, such as SpaceX and Rocket Lab, are now both providing commercial orbital launch services in the past decade, something that only six nations had done prior to a decade ago. New innovation in technology development approaches, pricing, and service offerings—including the ability that has existed only since 2016 to fly to space on a previously flown (reusable) booster stage—further decreasing the price of obtaining access to space. As the industry has begun to change, other launch competitors are beginning to change their long term development practices with government agencies as well. For example, the large US launch service provider United Launch Alliance (ULA) began in 2015 a decade long project to restructure its launch business—reducing two launch vehicles to one—using an iterative and incremental approach to get to a partially reusable and much lower cost launch system over the next decade.