Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся

ЛСкция 8: ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ систСм

7.2.3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ тСсты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ внСшним спСцификациям Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎ тСксту Π½Π° ЯП, относятся ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΅Π³ΠΎ характСристикам ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° этапС комплСксного тСстирования ΠΈ испытаний для опрСдСлСния ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΈ ΠΈΡ… соотвСтствия исходным трСбованиям.

Π’ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования входят:

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ «Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика» ΠΈ «ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ящика» основан Π½Π° Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ области Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° подобласти обнаруТСния ошибок. ΠŸΠΎΠ΄ΠΎΠ±Π»Π°ΡΡ‚ΡŒ содСрТит ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π»ΠΈΠ±ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Для тСстирования подобласти производится Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· элСмСнтов этой области.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‹Π»ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования :

7.3. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° процСсса тСстирования ПБ

Под инфраструктурой процСсса тСстирования понимаСтся:

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ тСстов Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ «Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика» ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ процСссов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, вопросы обСспСчСния Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈ восстановлСния Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ интСрфСйсы с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ ΠΈ систСмами. Π­Ρ‚ΠΎ способствуСт ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ тСстовых Π΄Π°Π½Π½Ρ‹Ρ… для провСдСния тСстирования.

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π³Ρ€ΡƒΠΏΠΏΠ° тСстирования Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ мноТСство тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСмонстрировали Π±Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€Π°Ρ… тСстов.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ «Π±Π΅Π»ΠΎΠ³ΠΎ ящика», ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстирования ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ вСтвям. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ тСстовыС Π½Π°Π±ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ проходят Ρ‡Π΅Ρ€Π΅Π· всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ всС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹.

7.3.1. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…

ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹ΠΉ стандарт ANSI/IEEE-729-83 раздСляСт всС ошибки Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΡ‚ΠΊΠ°Π·Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ наличия Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ².

Ошибки Π½Π° этапах процСсса тСстирования.ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ошибок Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ этапам Π–Π¦ ΠΈ ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ источники ΠΈΡ… возникновСния [7.12]:

Рассмотрим процСсс тСстирования, исходя ΠΈΠ· Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ стандарта ISO/IEC 12207, ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ‚ΠΈΠΏΡ‹ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС Π–Π¦.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ исходной ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ систСмы ΠΈ исходных Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ систСмС Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΈ спСцификации Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня систСмы ΠΈ построСнии ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ ошибками этого процСсса ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

ΠŸΡ€ΠΎΡ†Π΅ΡΡ проСктирования.Ошибки ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ описании Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π»ΠΎΠ³ΠΈΠΊΠΈ управлСния, структур Π΄Π°Π½Π½Ρ‹Ρ…, интСрфСйсов, Π»ΠΎΠ³ΠΈΠΊΠΈ модСлирования ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π΄Ρ€. Π’ основС этих ошибок Π»Π΅ΠΆΠ°Ρ‚ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ спСцификаций Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ² ΠΈ Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ². К Π½ΠΈΠΌ относятся ошибки, связанныС:

Π­Ρ‚Π°ΠΏ кодирования.На Π΄Π°Π½Π½ΠΎΠΌ этапС Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ² проСктирования, ошибок программистов ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ систСмы. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ошибок ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

ΠŸΡ€ΠΎΡ†Π΅ΡΡ тСстирования.На этом процСссС ошибки Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ программистами ΠΈ тСстировщиками ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ сборки ΠΈ тСстирования, Π²Ρ‹Π±ΠΎΡ€Π° тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ² ΠΈ сцСнариСв тСстирования ΠΈ Π΄Ρ€. ΠžΡ‚ΠΊΠ°Π·Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ошибками, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒΡΡ, ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΈ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π° статистикС ошибок ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² Ρ†Π΅Π»ΠΎΠΌ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ сопровоТдСния.На процСссС сопровоТдСния ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ошибки, ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ эксплуатационной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, нСдостаточныС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ модифицируСмости ΠΈ удобочитаСмости, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π»ΠΈΡ†, отвСтствСнных Π·Π° сопровоТдСниС ΠΈ/ΠΈΠ»ΠΈ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ ПО. Π’ зависимости ΠΎΡ‚ сущности вносимых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° этом этапС ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ практичСски Π»ΡŽΠ±Ρ‹Π΅ ошибки, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ пСрСчислСнным ошибкам Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… этапах.

ВсС ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, принято ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы [7.12]:

Ошибки вычислСний Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ нСточности исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡƒΠ», ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ примСнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вычислСний ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния связаны с нСобСспСчСниСм Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ скорости ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ восстановлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Ошибки Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ манипулирования Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ слСдствиСм нСкачСствСнной ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, сбоСв ΠΏΡ€ΠΈ занСсСнии ΠΈΡ… Π² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΈΠ· Π½Π΅Π΅.

Ошибки интСрфСйса относятся ΠΊ ошибкам взаимосвязи ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Ρ‡Ρ‚ΠΎ проявляСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ взаимодСйствии со срСдой функционирования.

Ошибки объСма относятся ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ слСдствиСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ объСмам ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ систСмы ΠΈΠ»ΠΈ интСнсивности ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Анализ Ρ‚ΠΈΠΏΠΎΠ² ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ условиСм создания ΠΏΠ»Π°Π½ΠΎΠ² тСстирования ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² тСстирования для обСспСчСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ПО.

Бвязь ошибки с ΠΎΡ‚ΠΊΠ°Π·ΠΎΠΌ.НаличиС ошибки Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ ПО ΠΏΡ€ΠΈ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π½ΠΎ-слСдствСнных связСй «ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΎΡ‚ΠΊΠ°Π·» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π½ΠΎ-слСдствСнных связСй «ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΎΡ‚ΠΊΠ°Π·» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ срСдств тСстирования ΠΈ обнаруТСния ошибок ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… классов, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ тСстирования Π½Π° мноТСствС Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…; Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡƒΡ‚Π΅ΠΉ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, тСстирования ΠΈ сопровоТдСния ПО.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ²:

НСкоторыС ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слСдствиСм Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ½ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ интСрфСйсов ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ порядка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², мСньшС ΠΈΠ»ΠΈ большС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚.ΠΏ.).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ ошибок.Ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Ρ‹ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΠ΄Π° ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ сопровоТдСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² самых Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Π΅Π΅ Ρ‚ΠΎΡ‡ΠΊΠ°Ρ….

Команда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² систСмы ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ синтаксис ΠΈ сСмантику описания систСмы. Однако Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Ρ‹ индСксы ΠΈΠ»ΠΈ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ВСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°

ЦСль Π»Π΅ΠΊΡ†ΠΈΠΈ

ΠžΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с встроСнным ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ошибок, способы ΠΈΡ… обнаруТСния ΠΈ устранСния.

ВСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ программист, условно дСлятся Π½Π° Ρ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹:

БинтаксичСскиС ошибки

Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π€ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ написании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹); ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ константС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ объявляли ( рис. 27.1); ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, константу) ΠΈΠ· модуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π±Ρ‹Π» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ uses ; ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… нСдосмотрах программиста.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, компилятор ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ошибки приостанавливаСт процСсс компиляции, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ ошибкС ΠΈ устанавливаСт курсор Π½Π° Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈΠ»ΠΈ послС Π½Π΅Ρ‘. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρƒ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ внСсти исправлСния Π² ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

Ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния

Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π€ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся

Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΈ Π²ΠΎ врСмя Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹. НапримСр, Ссли Π±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° чтСния Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° Π±Ρ‹Π»Π° сдСлана Π½Π΅ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚ Π½Π° эту ΠΊΠ½ΠΎΠΏΠΊΡƒ.

Однако ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Если Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ риск, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

АлгоритмичСскиС ошибки

Если Π²Ρ‹ Π½Π΅ допустили Π½ΠΈ синтаксичСских ошибок, Π½ΠΈ ошибок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ это Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅Ρ‚ ошибок. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² процСссС Π΅Ρ‘ тСстирования.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

основы Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ программирования тСст. ΠΎΠ°ΠΏ тСст. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² случаС, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ выраТСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch Π½Π΅ совпадаСт Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1.

int main(int argc, char** argv)

int main(int argc, char** argv)

int main(int argc, char** argv)

int main(int argc, char** argv)

int y = sizeof(x) / sizeof(int);

// Ρ„ΠΎΡ€ΠΌΠ° записи ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ†ΠΈΠΊΠ»Π° do while:

do // Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° do while

while (/*условиС выполнСния Ρ†ΠΈΠΊΠ»Π°*/); // ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π° do while

case constant1: statement1; [break;]

case constant2: statement2; [break;]

case constantN: statementN; [break;]

[default: statement N+l;]

int main(int argc, char** argv)

int foo(int x, int y)

double foo(double x, double y)

int main(int argc, char** argv)

содСрТит пояснСния ΠΊ тСксту ΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияния Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

2 сколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π‘++?

3 ΠΊΠ°ΠΊΠΎΠΉ слуТСбный Π·Π½Π°ΠΊ ставится послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° case?

4 ΠΊΠ°ΠΊΠΎΠΌΡƒ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ слову ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² случаС, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ выраТСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ?

5 ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ объявлСниС массива.

7 ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ (return)?

8 процСсс компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исходный тСкст Π² исполняСмый Ρ„Π°ΠΉΠ»

9 Ρ‡Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠ° отчаСтся ΠΎΡ‚ ΡˆΠ΅ΠΉΠΊΠ΅Ρ€Π°?

ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡˆΠ΅ΠΉΠΊΠ΅Ρ€Π° позволяСт ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π² Π΄Π²ΡƒΡ… направлСниях (ΠΈ слСва Π½Π° ΠΏΡ€Π°Π²ΠΎ ΠΈ справа Π½Π° Π»Π΅Π²ΠΎ)

10 Ρ‡Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° пСрСмСнная Π°, послС выполнСния этого ΠΊΠΎΠ΄Π° int a; for(a=0; a Β« β€œ ” Β« Β« endl;

26 КакоС ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ эквивалСнтно Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ слову true?

27 ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ записи условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² языкС с.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Если ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся

Как ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€?

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° столом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ просмотра, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ.

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ тСстированиС?

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это процСсс поиска ΠΈ устранСния ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Π΅Ρ‘ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

ВСстированиС β€” это испытаниС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ†Π΅Π»ΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π΅Ρ‘ составных частСй.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ тСстированиС (Π°Π½Π³Π». test β€” испытаниС) β€” это Π΄Π²Π° Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹Ρ… ΠΈ Π½Π΅ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° этапа:

ВСстированиС устанавливаСт Ρ„Π°ΠΊΡ‚ наличия ошибок, Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ° выясняСт Π΅Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ.

Английский Ρ‚Π΅Ρ€ΠΌΠΈΠ½ debuggingΠΎΡ‚Π»Π°Π΄ΠΊΠ°«) Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Π²Ρ‹Π»Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΆΡƒΡ‡ΠΊΠΎΠ²«. Π’Π΅Ρ€ΠΌΠΈΠ½ появился Π² 1945 Π³., ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² β€” «ΠœΠ°Ρ€ΠΊ-1» ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΅Π³ΠΎ элСктричСскиС Ρ†Π΅ΠΏΠΈ ΠΏΠΎΠΏΠ°Π» ΠΌΠΎΡ‚Ρ‹Π»Π΅ΠΊ ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» своими останками ΠΎΠ΄Π½ΠΎ ΠΈΠ· тысяч Ρ€Π΅Π»Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π’ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°?

Π’ соврСмСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… систСмах (Turbo Basic, Turbo Pascal, Turbo C ΠΈ Π΄Ρ€.) ΠΎΡ‚Π»Π°Π΄ΠΊΠ° осущСствляСтся часто с использованиСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΈ срСдства ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ обСспСчиваСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

ΠŸΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСст ΠΈ тСстированиС?

Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π€ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся

Как Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π»Π° Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌ этапом, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ Π΅Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹, являСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Π΅Π΅ выполнСния Π½Π° систСмС тСстов.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ условно ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ, Ссли Π΅Ρ‘ запуск для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ систСмы тСстовых исходных Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ всСх случаях Π΄Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Но, ΠΊΠ°ΠΊ справСдливо ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» извСстный Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΠΊ программирования Π­. ДСйкстра, тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ лишь Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок, Π½ΠΎ Π½Π΅ ΠΈΡ… отсутствиС. НСрСдки случаи, ΠΊΠΎΠ³Π΄Π° Π½ΠΎΠ²Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ «ΠΎΡ‚ΠΊΠ°Π·» ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° тСстов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΈΠ»ΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ извСстны эталонныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π’Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ эталонныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎ, Π° Π½Π΅ послС получСния ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС имССтся ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ нСвольной ΠΏΠΎΠ΄Π³ΠΎΠ½ΠΊΠΈ вычисляСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ Π½Π° машинС.

Какими Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ тСстовыС Π΄Π°Π½Π½Ρ‹Π΅?

ВСстовыС Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… условий возникновСния ошибок:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ стратСгии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок (части 1 ΠΈ 2)

Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся. Π€ΠΎΡ‚ΠΎ Ссли ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС ΠΎΠ½ΠΈ обнаруТатся

Π’ΠΈΠ΄Ρ‹ ошибок

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ошибки

БдСлаю ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΠΎΠΌΠΊΠΎΠ΅ заявлСниС: Ρ‚Π°ΠΊΠΈΠ΅ ошибки β€” Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ошибки.

ВсС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ инструкции. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄Π΅Π»ΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вводят люди, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠ»ΠΎΡ…ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈΡ… Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ, ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΠ± ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ввСсти Π·Π°Π½ΠΎΠ²ΠΎ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ошибкам ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ стратСгии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ошибок Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ.

Если Π² качСствС стратСгии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ исправимых ошибок Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ относится Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ случаСв Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. По сути, это Π΄Π°ΠΆΠ΅ Π½ΠΎΡ€ΠΌΠ°, ΠΏΠΎ мнСнию ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ошибки ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π»ΡƒΠ±ΠΈΠ½Π΅ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², вСроятно, внСшнСго ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Тёстко. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ΄ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.

БистСмныС ошибки

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ систСмныС ошибки нСльзя ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ нСдСтСрминистскиС ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎ этого Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π±Π΅Π· Π½Π°Ρ€Π΅ΠΊΠ°Π½ΠΈΠΉ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ошибок, зависящих ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, систСмныС ошибки β€” настоящиС ошибки.

Но ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ исправимыС ΠΈΠ»ΠΈ нСисправимыС?

Π­Ρ‚ΠΎ зависит ΠΎΡ‚ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π².

МногиС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ошибка Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти β€” нСисправимая. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти Π΄Π°ΠΆΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этой ошибки! И Ρ‚ΠΎΠ³Π΄Π° приходится просто сразу ΠΆΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Но ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ОБ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ сокСт, β€” это Π½Π΅ слишком Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ catch Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Но бросаниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ β€” Π½Π΅ всСгда ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€.

ΠšΡ‚ΠΎ-Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ скаТСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всСгда Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ послС Π΅Ρ‘ сбоя, Ρ‚ΠΎ ΠΎΠ±Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² try-catch Π² Ρ†ΠΈΠΊΠ»Π΅ β€” ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠΎΠ΄Π° ошибки ΠΈ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎΠ΅ исполнСниС, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Если Π²Ρ‹ создаётС Π²Ρ‹Π·ΠΎΠ² API Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сСбя, Ρ‚ΠΎ просто Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ подходящий для своСй ситуации ΠΏΡƒΡ‚ΡŒ ΠΈ слСдуйтС Π΅ΠΌΡƒ. Но Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Π΅Π³ΠΎ хотят ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ для этого случая. Для ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ нСисправимых ошибок ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Β«ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок», Π° ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° развития событий.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подтвСрТдСния (assertions), Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π’Π΅Π΄ΡŒ систСмныС ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΈ Π² Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ сборкС!

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ΡΠΊΠΈΠ΅ ошибки

Π­Ρ‚ΠΎ Ρ…ΡƒΠ΄ΡˆΠΈΠΉ Π²ΠΈΠ΄ ошибок. Для ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΈ ошибки Π±Ρ‹Π»ΠΈ связаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΏΠ»ΠΎΡ…ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ программистских ошибок ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΉΠΌΠ°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² runtime, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… макросов (assertion macros), раскиданных ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ»ΠΎΡ…ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ стратСгии: Π΄Π°Ρ‚ΡŒ ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Если исходноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΅ΠΉ ΠΏΠ»ΠΎΡ…ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ, Ссли ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ, это считаСтся Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π½Π΅ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° (caller). Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ (debug assertion).

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли отсутствиС ΠΏΠ»ΠΎΡ…ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ исходных Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, Π° докумСнтация опрСдСляСт, Ρ‡Ρ‚ΠΎ функция Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ bad_parameter_exception ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΅ΠΉ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (бросаниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ любая другая стратСгия ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ исправимых ошибок), ΠΈ функция всСгда Π΄ΠΎΠ»ΠΆΠ½Π° это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Пока это Π½Π΅ упомянуто Π² исходных условиях для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, это считаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ. Всё, Ρ‡Ρ‚ΠΎ прописано Π² исходных условиях, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, это Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Когда Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π° ΠΊΠΎΠ³Π΄Π° β€” постоянно?

К соТалСнию, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π½Π΅Ρ‚, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации. Π£ мСня Π΅ΡΡ‚ΡŒ лишь ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ я ΡΠ»Π΅Π΄ΡƒΡŽ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ API. Оно основано Π½Π° наблюдСнии, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ исходныС условия Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ. А Π·Π½Π°Ρ‡ΠΈΡ‚, условиС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ «провСряСмым» для Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ. Π’Π°ΠΊΠΆΠ΅ условиС «провСряСмоС», Ссли ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ. Если для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ это получаСтся исходноС условиС, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, провСряСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ посрСдством ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ подтвСрТдСния (Π° Ссли слишком Π΄ΠΎΡ€ΠΎΠ³ΠΎ, Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ провСряСтся).

Π₯отя Π² рядС случаСв это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ошибкой.

Об ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ std::exception

Если Π² качСствС стратСгии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ исправимых ошибок Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ рСкомСндуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π― ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· этих Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… классов:

ΠŸΠΎΠ΄Π²Π΅Π΄Ρ‘ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ

Π•ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок:

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ основных источника ошибок, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

Π“ΠΈΠ±ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок Π² C++

Иногда Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ вводят Π΄Π°Π½Π½Ρ‹Π΅ Π² нСдопустимом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Ρ„Π°ΠΉΠ» Π½Π΅ обнаруТиваСтся, сСтСвоС соСдинСниС сбоит, Π² систСмС кончаСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ. Всё это ошибки, ΠΈ ΠΈΡ… Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ.

Π­Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² высокоуровнСвых функциях. Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ это ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Но Π² случаС с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ функциями всё Π½Π΅ Ρ‚Π°ΠΊ просто. Они Π½Π΅ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΎΠ½ΠΈ Π·Π½Π°ΡŽΡ‚ лишь ΠΎ самом Ρ„Π°ΠΊΡ‚Π΅ сбоя ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± этом Ρ‚ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ ΠΈΡ… Π²Ρ‹Π·Π²Π°Π».

Π’ C++ Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: ΠΊΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ошибок ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. БСгодня ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСно использованиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Но Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ / Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ / Π½Π΅ хотят ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡ΡŒΡŽ-Π»ΠΈΠ±ΠΎ сторону. ВмСсто этого я ΠΎΠΏΠΈΡˆΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ удовлСтворят сторонников ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ². ОсобСнно ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ пригодятся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ foonathan/memory. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ прСдоставляСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы выдСлСния памяти (allocator classes), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим структуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСлСния.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ ситуации, ΠΊΠΎΠ³Π΄Π° Ρ‡Π΅Ρ€Π΅Π΄ΡƒΡŽΡ‚ΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‚Π²ΠΈ ΠΊΠΎΠ΄Π°. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС выглядят Π±ΠΎΠ»Π΅Π΅ подходящим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Благодаря ΠΈΠΌ Π²Ρ‹ смоТСтС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ, Π° Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” достаточно Ρ‚ΠΈΡ…ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ нСдостаток.

Но Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ситуациях ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ большоС прСимущСство: функция выдСлСния памяти Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π°Π»ΠΈΠ΄Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚. Π­Ρ‚ΠΎ функция «всё ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ», Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ слСдствиС согласно ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π‘ΠΊΠΎΡ‚Ρ‚Π° ΠœΠ°ΠΉΠ΅Ρ€Π° Β«Make interfaces hard to use incorrectly and easy to use correctlyΒ».

Учитывая Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² качСствС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок. Π­Ρ‚ΠΎΠ³ΠΎ мнСния придСрТиваСтся Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° Π‘++, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ мСня. Но ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я занимаюсь, β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ срСдства выдСлСния памяти, ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΎΠ½Π° для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (особСнно для ΠΈΠ³Ρ€ΠΎΠ΄Π΅Π»ΠΎΠ²) само использованиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ β€” ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π°ΠΆΠΈΡ‚ΡŒ эту Π³Ρ€ΡƒΠΏΠΏΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Но ΠΌΠ½Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ½ΠΈ нравятся Π·Π° ΡΠ»Π΅Π³Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ простоту ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π΄ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ИдСальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ ТСланию. Но, учитывая ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, нСльзя просто ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… мСстами с ΠΊΠΎΠ΄Π°ΠΌΠΈ ошибок, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ошибки β€” вСсь Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΊΠΎΠ΄ опираСтся Π½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ прозрачности ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. И Π΄Π°ΠΆΠ΅ Ссли Π±Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ ошибок ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, это лишило Π±Ρ‹ нас Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° прСимущСств послСдних.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, я ΠΌΠΎΠ³Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти: Ρ‡Π°Ρ‰Π΅ всСго Π²Ρ‹ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ это событиС ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· памяти. Π’ Ρ‚Π°ΠΊΠΈΡ… ситуациях ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ β€” просто способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ контроля Π΄Ρ€ΡƒΠ³ΠΎΠΉ части ΠΊΠΎΠ΄Π°, которая ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Но Π΅ΡΡ‚ΡŒ старый ΠΈ эффСктивный способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ контроля: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (function pointer), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ (handler function).

Если Ρƒ вас Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ Π²Ρ‹ просто ΠΈΡ… бросаСтС. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Ρ‚Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Если Π½Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ постусловия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π’Π΅Π΄ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого условия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ построСна Ρ€Π°Π±ΠΎΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π΄Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Π― Π½Π°Π·Ρ‹Π²Π°ΡŽ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

РСшСниС 1: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π‘Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ класс ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для настройки ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π― ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π΄Π΅Π»Π°Ρ‚ΡŒ это Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ std::new_handler :

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π½Π°ΠΌ ΠΆΠ΅ Π»Π΅Π³Ρ‡Π΅.

Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‚ΠΎ для удалСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условноС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (conditional compilation). Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ класс (mixin class), Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ элСгантСн: ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, пСрСдавая Π΅ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· своих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². А Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ макросом throw :

Когда я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… Ρƒ мСня Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ бросании ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этой ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ΅ Π²Π°ΠΌ Π΅Ρ‰Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ доступна опрСдСлённая ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ кастомизации, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π°ΠΌΠ΅Π½Π° нСполноцСнная, ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π±Π΅Π· дальнСйшСго продолТСния. Но Π² рядС случаСв, Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈ исчСрпании памяти, это Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

А Ссли я Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ послС бросания ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ позволяСт этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² связи с постусловиСм ΠΊΠΎΠ΄Π°. Как ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ?

ΠžΡ‚Π²Π΅Ρ‚ прост β€” Π½ΠΈΠΊΠ°ΠΊ. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, это нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. НСльзя просто Ρ‚Π°ΠΊ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ΄ ошибки вмСсто ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ссли функция Π½Π° это Π½Π΅ рассчитана.
Π•ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Одна Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки, Π° вторая бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.

Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΡŽ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Π½ΠΎ Ρ€Π°Π΄ΠΈ ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ излоТСния я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΎΠ± этом ΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° снова Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ выдСлСния памяти. Π’ этом случаС я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ этого Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠ½Π°Ρ‡Π΅ Π²Π°ΠΌ придётся Π»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° это Π΄ΠΎΡ€ΠΎΠ³ΠΎ. Π’Π°ΠΊΠΆΠ΅ это Π½Π΅ даст Π½Π°ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±Π΅Π· Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Если сдСлаСтС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ (overload) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ условного компилирования.

Но Π΄Π°ΠΆΠ΅ Ссли Ρƒ вас Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ всё Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ вторая вСрсия. НапримСр, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ наибольший Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ памяти, ΠΊΠ°ΠΊ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Ρ‡Π΅ΠΌ Π»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

РСшСниС 2: ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ

Если нСдостаточно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ. Одна ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°, Π° вторая бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Если рассматриваСмая функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΊΠΎΠ΄Π° ошибки. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π°ΠΌ придётся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для сигнализирования ΠΎΠ± ошибкС β€” ΠΊΠ°ΠΊ nullptr Π² Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, β€” Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для ΠΊΠΎΠ΄Π° ошибки, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Если Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ содСрТит нСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для обозначСния сбоя, Ρ‚ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ std::optional ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (exception overload) ΠΌΠΎΠΆΠ΅Ρ‚ β€” ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° β€” Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… вСрсии с ΠΊΠΎΠ΄ΠΎΠΌ ошибки, ΠΊΠ°ΠΊ это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅. Если ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, сотритС ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ условного компилирования.

std::system_error

Подобная систСма идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ΄Π°ΠΌΠΈ ошибок Π² Π‘++ 11.

Π­Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ систСму Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°ΠΌΠΈ ОБ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ β€” хотя ΠΈ слоТная β€” Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° слуТбС ΠΊΠΎΠ΄ΠΎΠ² ошибок, прСдоставляСмой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

Π”Π°, ΠΈ ΠΌΠ½Π΅ Π΅Ρ‰Ρ‘ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти. На сСгодняшний дСнь ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ΄Ρ‹ ошибок.

std::expected

Π’Ρ‹ΡˆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π½Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, содСрТащСго нСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для сигнализирования ΠΎΠ± ошибкС. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ получСния ΠΊΠΎΠ΄Π° ошибки.

А Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚!

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π²Ρ‹ создаётС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° приходится ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ использования. Под этим подразумСваСтся ΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ срСдств ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок: ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°, ΠΈΠ½ΠΎΠ³Π΄Π° β€” ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Одна ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… стратСгий β€” ΡƒΠ»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ этих ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ вызываСтся callback, Π° Π½Π΅ бросаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Π° для критичСских ошибок, которая Π² любом случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Как Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ этот способ Π½Π΅ унивСрсалСн, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя вСрсиями. Π­Ρ‚ΠΎ лишь ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π‘ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” просто ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΎΠ΄Π½Ρƒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π±Π΅Π·. Π­Ρ‚ΠΎ даст ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ свободу, ΠΎΠ½ΠΈ смогут Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚Ρƒ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΈΡ… ситуации. НСдостаток этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: Π²Π°ΠΌ придётся большС ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *