Инварианттар негізінде бағдарламалау: бағдарлама кодынан бұрын талаптар мен инварианттарды жазу. Қателерді табу, дұрыстықты тексеруге көмектеседі. Автоматтандыру мүмкіндігі.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Инвариантқа негізделген бағдарламалау – нақты бағдарламалық операторлардан бұрын спецификациялар мен инварианттар жазылатын бағдарламалау әдістемесі. Бағдарламалау процесінде инварианттарды жазудың бірнеше артықшылықтары бар: ол бағдарламашыдан бағдарламаның мінез-құлқы туралы ниеттерін нақты іске асырудан бұрын анықтауды талап етеді, ал инварианттарды орындау кезінде динамикалық түрде бағалауға болады, осы арқылы жиі кездесетін бағдарламалау қателіктерін анықтауға мүмкіндік туады. Сонымен қатар, егер инварианттар жеткілікті күшті болса, бағдарламалық операторлардың формальды семантикасына негізделген бағдарламаның дұрыстығын дәлелдеу үшін оларды пайдалануға болады. Тривиальды емес бағдарламаларды толық тексеру үшін, әдетте, қуатты формальды дәлелдеу жүйесімен байланыстырылған біріктірілген бағдарламалау және спецификация тілі қажет болады. Мұндай жағдайда дәлелдеуді автоматтандырудың жоғары деңгейіне де қол жеткізуге болады. Қазіргі қолданыстағы бағдарламалау тілдерінің көпшілігінде негізгі ұйымдастыру құрылымдары – бақылау ағыны блоктары, мысалы, for циклдары, while циклдары және if операторлары. Мұндай тілдер инварианттарды бірінші кезекте бағдарламалау үшін идеалды болмауы мүмкін, себебі олар бағдарламалаушыны инварианттарды жазудан бұрын бақылау ағыны туралы шешім қабылдауға мәжбүрлейді. Сонымен қатар, көптеген бағдарламалау тілдері спецификациялар мен инварианттарды жазу үшін жеткілікті қолдау көрсетпейді, өйткені оларда квантор операторлары жетіспейді және көбінесе жоғары реттік қасиеттерді білдіру мүмкін болмайды. Бағдарламаны оның дәлелдемесімен бірге әзірлеу идеясы Э. В. Дейкстраға тиесілі. Бағдарламалық операторлардан бұрын инварианттарды жазуды М. Х. ван Эмден, Дж. С. Рейнольдс және Р. Дж. Бэк түрлі формаларда қарастырған.
Invariant based programming is a programming methodology where specifications and invariants are written before the actual program statements. Writing down the invariants during the programming process has a number of advantages: it requires the programmer to make their intentions about the program behavior explicit before actually implementing it, and invariants can be evaluated dynamically during execution to catch common programming errors. Furthermore, if strong enough, invariants can be used to prove the correctness of the program based on the formal semantics of program statements. A combined programming and specification language, connected to a powerful formal proof system, will generally be required for full verification of non trivial programs. In this case a high degree of automation of proofs is also possible. In most existing programming languages the main organizing structures are control flow blocks such as for loops, while loops and if statements. Such languages may not be ideal for invariants first programming, since they force the programmer to make decisions about control flow before writing the invariants. Furthermore, most programming languages do not have good support for writing specifications and invariants, since they lack quantifier operators and one can typically not express higher order properties. The idea of developing the program together with its proof originated from E. W. Dijkstra. Actually writing invariants before program statements has been considered in a number of different forms by M. H. van Emden, J. C. Reynolds and R J Back.