Шеткі жағдайлар: Ерекше жағдайлар мен оларды басқару
Edge case
Шеттік жағдайлар – жүйедегі ерекше, шекті жағдайлар. Тестілеуде назар аудару қажет, себебі бұл қателерге себеп болуы мүмкін. Инженерлік шешімдерде маңызды!
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Шекті жұмыс параметрінде ғана туындайтын мәселе немесе жағдай.
Problem or situation that occurs only at an extreme operating parameter
Шекті жағдай – бұл тек қана ең жоғары немесе ең төменгі шекті жұмыс параметрінде ғана туындайтын мәселе немесе жағдай. Мысалы, стерео динамигі максималды дыбыспен ойнатылғанда, тіпті басқа ешқандай шекті жағдай болмаған кезде де дыбыстың бұрмалануы байқалуы мүмкін. Шекті жағдай күтілетін немесе күтілмеген болуы мүмкін. Инженерлік саласында, шекті жағдайларды жоспарлау және оларды тиімді шешу процесі маңызды міндет болып табылады, бірақ бұл міндет көбінесе назардан тыс қалуы немесе дұрыс бағаланбауы мүмкін. Шекті жағдайлардың негізгі себептері:
An edge case is a problem or situation that occurs only at an extreme (maximum or minimum) operating parameter. For example, a stereo speaker might noticeably distort audio when played at maximum volume, even in the absence of any other extreme setting or condition. An edge case can be expected or unexpected. In engineering, the process of planning for and gracefully addressing edge cases can be a significant task, and yet this task may be overlooked or underestimated. Some common causes of edge cases are:
Пайдаланушылардың болжамсыз мінез-құлқы
Қолданылу жағдайларының эволюциясы (мысалы, пайдаланушы мінез-құлқы уақыт өте келе өзгеруі мүмкін)
Тестілеудің жеткіліксіз көлемі
Өнімнің күрделілігі (мысалы, үлестірілген жүйелерде немесе микросервис архитектураларында)
Ресурстардың шектелуі (мысалы, шектеулі өңдеу қуаты, компьютер жадысы немесе компьютерлік сақтағыш)
Басқа сыртқы факторлар
Unpredictable user behavior
Evolution of use cases (e. g. user behavior may change over time)
Limited test coverage
Product complexity (for instance, in distributed systems or microservice architectures)
Resource limitations (e. g. limited processing power, computer memory, or computer storage)
Other external causes
Шекті жағдайлардың қарапайым мысалдары:
Some basic examples of edge cases include:
Қолданбадағы ұзын пайдаланушы аты ағып, дұрыс көрсетілмейді.
Бронирлеу жүйесі, ақпанның 29-ы сияқты (екі жылдық күндері) брондауды дұрыс өңдемейді.
A long username in an app overflows and displays incorrectly
A booking system does not handle reservations correctly on a leap day (February 29th)
Маңызды емес шекті жағдайлар инженерлік объектінің істен шығуына әкелуі мүмкін. Олар жобалау кезеңінде көзделмеген немесе объектіні қалыпты пайдалану кезінде мүмкін емес деп саналған болуы мүмкін. Осы себепті, жақсы инженерлік стандарттарды қалыптастыру әрекеттері көбінесе шекті жағдайлар туралы ақпаратты қамтиды.
Non trivial edge cases can result in the failure of an object that is being engineered. They may not have been foreseen during the design phase, and they may not have been thought possible during normal use of the object. For this reason, attempts to formalize good engineering standards often include information about edge cases.
Бағдарламалық жасақтама
Бағдарламалауда, шеткі жағдай дегеніміз, компьютерлік бағдарламаның артындағы алгоритмде ерекше өңдеуді қажет ететін кіріс мәндері болып табылады. Мұндай жағдайларда компьютерлік бағдарламалардың жұмысын тексеру үшін әдетте бірлік тесттері жасалады; олар алгоритмнің, функцияның немесе әдістің шекаралық шарттарын сынап көреді. Әрбір "шекараның" айналасындағы шеткі жағдайлардың тізбегін пайдалану, егер ол шекараларда дұрыс жұмыс істесе, басқа жерлерде де дұрыс жұмыс істеуі керек деген болжаммен, жеткілікті қамту мен сенімділік береді. Мысалы, екі санды бөлетін функцияны өте үлкен және өте кішкентай сандарды қолдана отырып сынауға болады. Бұл, егер ол шама спектрінің екі шетінде де жұмыс істесе, арасында да дұрыс жұмыс істеуі керек дегенді білдіреді. Бағдарламашылар бірлік тесттерінде қамтылмаған шеткі жағдайларды шешу үшін интеграциялық тесттерді де құра алады. Бұл тесттер жүйеге тұтасқанда ғана көрінетін жағдайларды қамтиды. Мысалы, бірлік тесті функцияның нәтижелерді дұрыс есептейтінін қамтамасыз ете алса, интеграциялық тест бұл функцияның дерекқормен немесе сыртқы API-мен интеграцияланғанда дұрыс жұмыс істейтінін қамтамасыз етеді. Бұл тесттер, әсіресе таратылған жүйелерде, микроқызметтерде және заттар интернеті (IoT) құрылғыларында жүйе күрделілігі артқанда маңызды. Әсіресе микроқызметтерде тест жасау қиын, себебі интеграциялық тесттер микроқызметтердің барлық соңғы нүктелерін қамтымайды, нәтижесінде шеткі жағдайлар жабылмауы мүмкін. Шеткі жағдайларға қатысты басқа тест түрлеріне жүктеме тестілеу және теріс/сәтсіздік тестілеу жатады. Екі әдіс те жүйедегі тест көлемін кеңейтуге және күтпеген шеткі жағдайлардың пайда болу ықтималдығын азайтуға бағытталған. Тестпен басқарылатын әзірлеуде шеткі жағдайлар жүйе талаптарына сәйкес анықталып, код жазу алдында тесттер арқылы ескеріледі. Мұндай құжаттама мүдделі тараптармен және басқа командалармен талқылаудан кейін өнім талаптарының құжатына енгізілуі мүмкін.
In programming, an edge case typically involves input values that require special handling in an algorithm behind a computer program. As a measure for validating the behavior of computer programs in such cases, unit tests are usually created; they are testing boundary conditions of an algorithm, function or method. A series of edge cases around each "boundary" can be used to give reasonable coverage and confidence using the assumption that if it behaves correctly at the edges, it should behave everywhere else. For example, a function that divides two numbers might be tested using both very large and very small numbers. This assumes that if it works for both ends of the magnitude spectrum, it should work correctly in between. Programmers may also create integration tests to address edge cases not covered by unit tests. These tests cover cases which only appear when a system is tested as a whole. For example, while a unit test may ensure that a function correctly calculates a result, an integration test ensures that this function works properly when integrated with a database or an external API. These tests are particularly relevant with increasing system complexity in distributed systems, microservices, and Internet of things (IoT) devices. With microservices in particular, testing becomes a challenge as integration tests may not cover all microservice endpoints, resulting in uncovered edge cases. Other types of testing which relate to edge cases may include load testing and negative/failure testing. Both methods aim at expanding the test coverage of a system, reducing the likelihood of unexpected edge cases. In test driven development, edge cases may be determined by system requirements and accounted for by tests, before writing code. Such documentation may go inside a product requirements document after discussions with stakeholders and other teams.