Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС

Π³ΠΎΠ²ΠΎΡ€ΠΈΠœ ΠΎ тСстировании
простым языком

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика это тСстированиС

Π’ΠΈΠ΄Ρ‹ тСстирования ΠΏΠΎ доступу ΠΊ ΠΊΠΎΠ΄Ρƒ

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΄ΠΎ сих ΠΏΠΎΡ€ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚? Π Π°Π·Π²Π΅ тСстированиС с доступом ΠΊ ΠΊΠΎΠ΄Ρƒ Π½Π΅ эффСктивнСС? ΠœΠΎΠΆΠ΅Ρ‚ сущСствуСт золотая сСрСдина? Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ.

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ тСстирования Ρ„Ρ€Π°Π·Ρ‹ «тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика» ΠΈ «тСстированиС Ρ‡Ρ‘Ρ€Π½ΠΎΠ³ΠΎ ящика» относятся ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ тСстировщик доступ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ тСстируСмого ПО ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π§Π΅Ρ€Π½Ρ‹ΠΉ ящик

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСстов ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика (black box test design technique) β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания ΠΈ/ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСстовых сцСнариСв, основанная Π½Π° Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ спСцификации ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы Π±Π΅Π· знания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры. (ISTQB)

ВСстируСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для тСстировщика – ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ящик, содСрТания ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚.

Основной посыл Ρ‚Π°ΠΊΠΎΠ³ΠΎ тСстирования Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ устроСна тСстируСмая систСма. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²Π²ΠΈΠ΄Ρƒ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ тСстировании тСстировщик ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ: тСст Π°Π½Π°Π»ΠΈΠ· ΠΈ исслСдованиС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΎΠ½ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° Π’Π— (тСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅), спСцификации ΠΈ ΠΏΡ€ΠΎΡ‡ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, которая описываСт этот ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅ΠΈ для тСстирования ΠΈΠ΄ΡƒΡ‚ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² (pattern β€” ΠΎΠ±Ρ€Π°Π·Π΅Ρ†) повСдСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ повСдСнчСским.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° такси ΠΈ Π²ΠΈΠ΄ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ для автоматичСской ΠΎΠΏΠ»Π°Ρ‚Ρ‹. НачинаСм Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ:
β€” Π§Ρ‚ΠΎ, Ссли ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ?
β€” А Ссли Π·Π°Π±Ρ‹Ρ‚ΡŒ/Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ срок дСйствия ΠΊΠ°Ρ€Ρ‚Ρ‹?
β€” Долларовая ΠΊΠ°Ρ€Ρ‚Π° привяТСтся?
β€” А ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ послС Π²Ρ‹Π·ΠΎΠ²Π° такси ΠΈ ΠΏΠΎΠ΄Π°Ρ‡ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ быстро ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ Π΅Π΅ Π΄ΠΎ списания оплаты… Π§Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚? Π‘ΠΏΠΈΡˆΡƒΡ‚ΡΡ срСдства? Или Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ»Π°Ρ‚Π° измСнилась с Π±Π΅Π·Π½Π°Π»ΠΈΡ‡Π½ΠΎΠΉ Π½Π° Π½Π°Π»ΠΈΡ‡Π½ΡƒΡŽ?

По сути, ΠΌΡ‹ тСстируСм ΠΈ строим прСдполоТСния Π½Π° основС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌ ΠΈ рисуСм сСбС Π² Π³ΠΎΠ»ΠΎΠ²Π΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ элСмСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ Π½Π° основании этого ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π΅ΠΌ тСсты, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ.

Π›ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ смотрим, ΠΊΠ°ΠΊ систСма Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡ‚ΠΎΠΌ запускаСм ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈ свСряСм Π΅Π³ΠΎ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² спСцификации.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅ΠΌ прСдставлСния ΠΎ структурС ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ устройствС систСмы. НуТно ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚, Π° Π½Π΅ Π½Π° Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° это Π΄Π΅Π»Π°Π΅Ρ‚.

Π‘Π΅Π»Ρ‹ΠΉ ящик

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСстов ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика (white-box test design technique): ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСстовых сцСнариСв Π½Π° основании Π°Π½Π°Π»ΠΈΠ·Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы. (ISTQB)

Π‘Π΅Π»Ρ‹ΠΉ ящик являСтся ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ ящику. ΠŸΡ€ΠΈ тСстировании Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ‚. А Π² Π±Π΅Π»ΠΎΠΌ этого Π½Π΅ трСбуСтся. Достаточно ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Основной посыл этого Ρ‚ΠΈΠΏΠ° тСстирования β€” Π½Π°ΠΌ извСстны всС Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстируСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика (ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ, стСклянного ящика, основанноС Π½Π° ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ структурноС тСстированиС) – ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ внутрСнняя структура/устройство/рСализация систСмы извСстны тСстировщику.

ΠœΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ значСния, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π·Π½Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π—Π½Π°Π½ΠΈΠ΅ всСх особСнностСй тСстируСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для этой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ. ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика – ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство систСмы, Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π΅Π΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… интСрфСйсов.

ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ тСстировщики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ящика, ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ экспСртизу Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π‘Π΅Ρ€Ρ‹ΠΉ ящик. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈΠ»ΠΈ ΠΌΠΈΡ„?

Π•Π³ΠΎ основной посыл Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ извСстны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстируСмой систСмы.

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

Π­Ρ‚Ρƒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ тСстирования Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ящика: Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ – Π½Π΅Ρ‚.

ΠšΡ‚ΠΎ-Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ этот Π²ΠΈΠ΄ тСстирования β€” это симбиоз Π±Π΅Π»ΠΎΠ³ΠΎ ΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика. ΠšΡ‚ΠΎ-Ρ‚ΠΎ противопоставляСт Π΅Π³ΠΎ Π±Π΅Π»ΠΎΠΌΡƒ ΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ внутрСнняя структура тСстируСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстна частично ΠΈ выясняСтся ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ исслСдования.

ISTQB относит тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ проСктирования тСстов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΌ «срСднСм» ΠΈΠ»ΠΈ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΒ» ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π² этом случаС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΈ Ρ€Π΅Ρ‡ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚. ΠœΡ‹ Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ тСсты, зная ΠΊΠΎΠ΄, Π»ΠΈΠ±ΠΎ Π½Π΅ зная Π΅Π³ΠΎ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² классификации ISTQB Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° тСстирования Π½Π΅ сущСствуСт.

Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π° собСсСдовании это явно стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ всС ящики эффСктивны?

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π΅Π»ΠΎΠ³ΠΎ ΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ. Наоборот, ΠΎΠ½ΠΈ Π³Π°Ρ€ΠΌΠΎΠ½ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, компСнсируя ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ нСдостатки.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ящиков ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сцСнариСв:

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² тСстирования свои нСоспоримыС ΠΏΠ»ΡŽΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ качСствСнный ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚.

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

ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ высокого качСства ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ Π΅Ρ‘ части ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ (unit) тСстированиС ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ большой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° малСнькиС Π±Π»ΠΎΠΊΠΈ, ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ для тСстов. Π›ΠΈΠ±ΠΎ, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСстов происходит ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ тСсты Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (TDD β€” test driven development), Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ разрабатыватся нСбольшими Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, подходящими ΠΏΠΎΠ΄ трСбования тСстов.

Одной ΠΈΠ· разновидностСй ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ propery-based testing (Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… QuickCheck, ScalaCheck). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ основан Π½Π° Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ справСдливы для Π»ΡŽΠ±Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, сСриализация с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ дСсСриализациСй Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Или, повторная сортировка Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΌΠ΅Π½ΡΡ‚ΡŒ порядок элСмСнтов Π² спискС. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… свойств Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… поддСрТиваСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ОсобСнно Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, основанных Π½Π° матСматичСских Π·Π°ΠΊΠΎΠ½Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слуТат ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами, справСдливыми для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ класса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π•ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… матСматичСских свойств β€” discipline β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этих свойств Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… (Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования тСстов).

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

Под ΠΊΠ°Ρ‚ΠΎΠΌ описаны нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ…ΠΎΠ΄ΠΎΠΌ с Ρ€Π°Π·Π½ΠΎΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ слоТности (вовлСчСнности) ΠΈ Ρ€Π°Π·Π½ΠΎΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ покрытия.

*Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ чистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния. (НСкоторыС сообраТСния, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π»Π΅Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС присутствуСт, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сброса этого состояния ΠΊ фиксированному Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ.)

ВСстовый стСнд (test bench)

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ тСстируСтся всСго ΠΎΠ΄Π½Π° функция, ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всСгда ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ², Ρ‚ΠΎ Ρƒ нас Π½Π΅Ρ‚ нСобходимости ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ unit test’Ρ‹. ВсС Ρ‚Π°ΠΊΠΈΠ΅ тСсты Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. Π’ΠΏΠΎΠ»Π½Π΅ достаточно Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ исходныС Π΄Π°Π½Π½Ρ‹Π΅ ( input ) ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ( expectedOutput ). Π§Ρ‚ΠΎΠ±Ρ‹ Π² случаС обнаруТСния ошибки ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ тСстовых Π΄Π°Π½Π½Ρ‹Ρ…, всС тСстовыС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Π΄ΠΎ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ( label ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€ΠΎΠΉΠΊΠΈ:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ TestCaseResult :

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³ΠΎΠ½ всСх тСстовых Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния:

Π­Ρ‚Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ….

Для удобства ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования

ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС ошибок:

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

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

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ нСизмСняСмыми структурами Π΄Π°Π½Π½Ρ‹Ρ… большим ΠΏΠΎΠ΄ΡΠΏΠΎΡ€ΡŒΠ΅ΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈΠ½Π·Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Monocle:

Π›ΠΈΠ½Π·Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ элСгантно «ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ части структур Π΄Π°Π½Π½Ρ‹Ρ…: КаТдая Π»ΠΈΠ½Π·Π° прСдставляСт собой getter ΠΈ setter для ΠΎΠ΄Π½ΠΎΠ³ΠΎ свойства. Π›ΠΈΠ½Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π»ΠΈΠ½Π·Ρ‹, «Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ» Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

ИспользованиС DSL для прСдставлСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΡ‚Ρ‘ΠΌ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ исходный Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ для получСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ тСстового ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° трСбуСтся внСсти нСсколько ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ этом вСсьма ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² тСкстовоС описаниС TestCase’Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ всСгда Π±ΡƒΠ΄Π΅ΠΌ Π·Π½Π°Ρ‚ΡŒ, для ΠΊΠ°ΠΊΠΈΡ… тСстовых Π΄Π°Π½Π½Ρ‹Ρ… выполняСтся тСстированиС.

Π§Ρ‚ΠΎΠ±Ρ‹ тСкстовый ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ расходился с фактичСскими измСнСниями, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ «Π΅Π΄ΠΈΠ½ΠΎΠΉ вСрсии ΠΏΡ€Π°Π²Π΄Ρ‹». (Если ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ информация трСбуСтся/ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…, Ρ‚ΠΎ слСдуСт ΠΈΠΌΠ΅Ρ‚ΡŒ СдинствСнный ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ источник ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π° Π²ΠΎ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ использования информация Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ автоматичСски, с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ прСобразованиями. Если этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ, ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚ΠΎ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ расхоТдСниС вСрсий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² описании тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅ΠΌ ΠΎΠ΄Π½ΠΎ, Π° Π² тСстовыС Π΄Π°Π½Π½Ρ‹Ρ… β€” Π΄Ρ€ΡƒΠ³ΠΎΠ΅. НапримСр, копируя ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ field2 = «456» ΠΈ коррСктируя Π΅Π³ΠΎ Π² field3 = «789» ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ случайно Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ описаниС. Π’ ΠΈΡ‚ΠΎΠ³Π΅ описаниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° измСнСния ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ….)

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСниями, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΡ… ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ модСль. МодСль Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ нас измСнСния. Π§Π°ΡΡ‚ΡŒΡŽ этой ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΡƒΠ΄Π΅Ρ‚ адрСсация ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², константы, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания.

МодСль ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Π”Ρ€ΡƒΠ³ΠΈΠΌ способом формирования экзСмпляров ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ спСциализированный язык (DSL), ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ измСнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° extension-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Ну Π° Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… случаях экзСмпляры ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСпосрСдствСнно, Ρ‡Π΅Ρ€Π΅Π· конструкторы.

Π―Π·Ρ‹ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ прСдставляСт собой довольно ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, записанной с использованиСм DSL:

Для прСдставлСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π°Π±ΠΎΡ€ классов Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ»Π°Π½Π°, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ класс SetProperty :

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ языка ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ прСдставляСт собой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ рСкурсивный Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, основанный Π½Π° PatternMatching’Π΅. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅:

Для нСпосрСдствСнного опСрирования свойствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ свойства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π·Π°Π΄Π°Ρ‚ΡŒ getter ΠΈ setter. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ( Map ) ΠΌΠ΅ΠΆΠ΄Ρƒ онтологичСскими свойствами ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠΌ Π»ΠΈΠ½Π·Π°ΠΌΠΈ.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ позволяСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ измСнСния ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΎΠ΄Π½Π°ΠΊΠΎ постСпСнно появляСтся ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ всё Π±ΠΎΠ»Π΅Π΅ слоТныС измСнСния ΠΈ модСль ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ нСсколько разрастаСтся. НапримСр, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ свойство с использованиСм значСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ свойства Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, field1 = field2 + 1 ), Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ DSL. А Ссли ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ свойства Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ DSL потрСбуСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ВСстированиС Π²Π΅Ρ‚Π²Π΅ΠΉ

ВСстируСмый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π½Π°ΠΌ ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту достаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° тСстовых Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ ΠΎΠ½. Π’ случаС наличия вСтвлСния ( if-then-else ), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±Π΅Π»Ρ‹ΠΉ ящик ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π°ΠΆΠ΄Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΈ исполнСны ΠΎΠ±Π΅ Π²Π΅Ρ‚ΠΊΠΈ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π°Π±ΠΎΡ€ΠΎΠ² Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, достаточных для покрытия всСх Π²Π΅Ρ‚Π²Π΅ΠΉ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, числСнно Ρ€Π°Π²Π½ΠΎ цикломатичСской слоТности ΠΊΠΎΠ΄Π° с вСтвлСниями.

Как ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π½Π°Π±ΠΎΡ€Ρ‹ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…? Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π±Π΅Π»Ρ‹ΠΌ ящиком, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡Π»Π΅Π½ΠΈΡ‚ΡŒ условия вСтвлСния ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ случаС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ ΠΎΠ΄Π½Π° Π²Π΅Ρ‚Π²ΡŒ, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС β€” другая. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ИмСя Ρ‚Π°ΠΊΠΎΠ΅ условиС, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° тСстовых случая:

(Π’ случаС, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· тСстовых сцСнариСв Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ условиС вмСстС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ спокойно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.)

Если Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… вСтвлСниях ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ нСзависимыС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ довольно просто ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… тСстовых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ.

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ всСх Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ тСстировании, Π½Π°ΠΌ Π½Π°Π΄ΠΎ всС измСнСния ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠΎΠ΄Π°Π΄ΠΈΠΌ Π½Π° Π²Ρ…ΠΎΠ΄ тСстируСмого ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ трСбуСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Для этого ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌ DSL для модСлирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° достаточно простого списка ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ T => T :

Ρ‚ΠΎΠ³Π΄Π° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой просто ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

или, для списка измСнСний:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ всС измСнСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ всСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ вСтвлСниям, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DSL ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ уровня абстракции, ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ структуру тСстируСмого Π±Π΅Π»ΠΎΠ³ΠΎ ящика:

Π—Π΄Π΅ΡΡŒ коллСкция tests содСрТит Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ измСнСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ всСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ комбинациям Π²Π΅Ρ‚Π²Π΅ΠΉ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° String Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС названия условий ΠΈ всС описания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сформирована агрСгированная функция ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. А Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΏΠ°Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° T => T β€” ΠΊΠ°ΠΊ Ρ€Π°Π· агрСгированная функция ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, получСнная Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π°Π΄ΠΎ всС Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ baseline-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ измСнСния, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΏΠ°Ρ€Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС эти измСнСния ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· структуры ΠΌΠΎΠ΄Π΅Π»ΠΈ тСстируСмого ΠΊΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π΄Π΅Ρ€Π΅Π²Π°, ΠΏΠ΅Ρ€Π΅Ρ‡Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ корня ΠΊ листам этого Π΄Π΅Ρ€Π΅Π²Π°. Π’Π΅ΠΌ самым Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. МоТно ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этого дублирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ DSL, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ измСнСния нСпосрСдствСнно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ baseline-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ продвиТСния ΠΏΠΎ вСтвям. Π’ этом случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ нСсколько мСньшС Π»ΠΈΡˆΠ½ΠΈΡ… вычислСний.

АвтоматичСскоС Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСстовых Π΄Π°Π½Π½Ρ‹Ρ…

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π±Π΅Π»Ρ‹ΠΌ ящиком, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС вСтвлСния. Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ построСния ΠΌΠΎΠ΄Π΅Π»ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ, содСрТащСйся Π² Π±Π΅Π»ΠΎΠΌ ящикС, ΠΈ использования ΠΌΠΎΠ΄Π΅Π»ΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ тСстовых Π΄Π°Π½Π½Ρ‹Ρ…. Π’ случаС, Ссли тСстируСмый ΠΊΠΎΠ΄ написан Π½Π° Scala, ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scalameta для чтСния ΠΊΠΎΠ΄Π°, с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² модСль Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² рассмотрСнном Ρ€Π°Π½Π΅Π΅ вопросС модСлирования Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, для нас Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх возмоТностСй ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка. Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ тСстируСмый ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ подмноТСства языка, Π»ΠΈΠ±ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС ΠΈΠ»ΠΈ DSL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. Π­Ρ‚ΠΎ позволяСт ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚Π΅Ρ… аспСктах языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ для нас интСрСс.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, содСрТащСго СдинствСнноС Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅:

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, подходящиС ΠΏΠΎΠ΄ ограничСния, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Π΅ простыми условными ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ с константами (большС/мСньшС константы, Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π²ΠΎ мноТСство, начинаСтся с константы). Π’Π°ΠΊΠΈΠ΅ условия Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ. Π”Π°ΠΆΠ΅ Ссли Π² тСстируСмом ΠΊΠΎΠ΄Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ нСслоТныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ² Π½Π° ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (inline) ΠΈ всё-Ρ‚Π°ΠΊΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ условных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π˜Π½Π°Ρ‡Π΅ обстоит Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π² условии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ. НапримСр, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ…ΡΡˆ-функция, Ρ‚ΠΎ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ…ΡΡˆ-ΠΊΠΎΠ΄Π°, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Π½Π΅ получится.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ, ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, нСвзирая Π½Π° Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ связи:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π΅Ρ‚ΠΊΠΈ, Π½ΠΎ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ фактичСски Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ тСстируСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° части ΠΊΠΎΠ΄Π°, которая ΠΈΠ½Π°Ρ‡Π΅ Π½Π°ΠΌ нСдоступна, всё Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования. Π’Π΅Π΄ΡŒ ΠΈ ΠΏΡ€ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌ тСстировании подфункция вызываСтся с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΈΡ… манипуляциях ΠΌΡ‹ замСняСм (подмСняСм) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ тСстирования. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС новая построСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½ΠΎΠ²Ρ‹Ρ… искуствСнных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Π·ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выдаст Ρ‚Π΅ ΠΆΠ΅ самыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. По-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, тСстированиС ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ интСрСс. Надо лишь ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… условиях измСнённая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ исходная.

ЗависимыС условия

Если ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰ΠΈΡ… мноТСств ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· подмноТСств пусто, Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ условиС всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ фиксированноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΈΠ»ΠΈ false Π²Π½Π΅ зависимости ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ‚ΠΊΠ°, которая Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ вызываСтся, являСтся «ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· ΠΊΠΎΠ΄Π° вмСстС с условиСм.

БвязанныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Рассмотрим случай, ΠΊΠΎΠ³Π΄Π° условиС вСтвлСния основано Π½Π° Π΄Π²ΡƒΡ… полях ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊΠΆΠ΅ связанных условиями:

БимвольноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС условия, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ «cΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ» (Symbolic Execution, БимвольноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ), ΡΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ значСниям ( field1 = field1_initial_value ). Π—Π°Ρ‚Π΅ΠΌ Π½Π°Π΄ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями производятся всС манипуляции, описанныС Π² тСстируСмом ΠΊΠΎΠ΄Π΅. ВсС манипуляции Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² символьном ΠΆΠ΅ Π²ΠΈΠ΄Π΅:

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

ВСстированиС Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ рСкурсивных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ вопрос Ρ†ΠΈΠΊΠ»ΠΎΠ² стороной. Бвязано это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ мСняСтся состояниС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠœΡ‹ ΠΆΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠ»ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ нашСго рассмотрСния чистыми функциями, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСизмСняСмых структур Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² сущСствуСт риск формирования Ρ‚Π°ΠΊΠΈΡ… условий, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π·Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ врСмя.

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ любой Ρ†ΠΈΠΊΠ» ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ рСкурсиСй. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпросто для слоТных Ρ†ΠΈΠΊΠ»ΠΎΠ². Но, допустим, Ρ‡Ρ‚ΠΎ Π² нашСм случаС такая опСрация Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π°. Π’Π΅ΠΌ самым, Π² тСстируСмом ΠΊΠΎΠ΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ наши рассуТдСния, сохраняя исходноС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ рассмотрСнии Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Как ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π±Π΅Π»Ρ‹ΠΉ ящик, учитывая Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π·Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ врСмя?

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ‚Π°ΠΊΠΎΠΉ конструкциСй ΠΊΠ°ΠΊ Y-ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ («ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ», stackoverflow:What is a Y-combinator? (2-ΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚), habr: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Y-ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π² 7 простых шагов). ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ Π² языках, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ Π² чистом Π²ΠΈΠ΄Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚. (Π‘Π°ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ являСтся рСкурсивным, поэтому Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° языкС, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.) Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Из рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ всС рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая пСрСдаётся Π² качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Вакая пСрСработанная функция ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ рСкурсивной, Π° слуТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΎΠΉ» для получСния Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Y-ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ «Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ» Π² ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (пСрСдавая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° собствСнноС ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅).

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

Бмысл тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ усСрдии ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ тСсты, написанныС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ сгСнСрированныС автоматичСски, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ всС Π²Π΅Ρ‚Π²ΠΈ тСстируСмого ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ обСспСчат 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅. Π’Π΅ΠΌ самым ΠΌΡ‹ смоТСм с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π΅Π»Ρ‹ΠΉ ящик Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚. Π₯ΠΌ. Π‘Π΅ΠΊΡƒΠ½Π΄ΠΎΡ‡ΠΊΡƒ. А Π² Ρ‡Ρ‘ΠΌ, собствСнно, смысл Ρ‚Π°ΠΊΠΎΠ³ΠΎ тСстирования, спросит Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ? Π’Π΅Π΄ΡŒ для любого содСрТимого Π±Π΅Π»ΠΎΠ³ΠΎ ящика Π±ΡƒΠ΄ΡƒΡ‚ построСны тСсты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π»Ρ‹ΠΉ ящик Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Ρ‚Π°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ тСстов всё ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ смысл:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности тСстирования, основанного Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ тСстирования Π½Π° основС спСцификации. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ссли ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ рСализация Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° спСцификации, Ρ‚ΠΎ наши тСсты Π½Π΅ замСтят Π΅Ρ‘ отсутствия. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ссли такая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ присутствовала, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² спСцификации (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, с ошибками), Ρ‚ΠΎ наши тСсты Π½Π΅ просто этих ошибок Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ°Ρ‚, Π° Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ошибки Π±ΡƒΠ΄ΡƒΡ‚ «ΠΊΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹» Π² тСстах. И Ссли ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅/Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽΡ‚ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ошибки, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ тСсты Π½Π΅ позволят этого просто Ρ‚Π°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

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

ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика смСщаСт Π°ΠΊΡ†Π΅Π½Ρ‚ с вопроса «Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄» Π½Π° «Ρ‡Ρ‚ΠΎ фактичСски Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄». Π˜Π½Ρ‹ΠΌΠΈ словами, вмСсто использования Π±ΠΎΠ»Π΅Π΅ высокого уровня абстракции, формирования тСстов Π½Π° основС спСцификации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΏΠ»Π°Π½Π΅ покрытия ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ случаСв.

Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Ρ‚Π°ΠΊΠΈΠΌ случаСм, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ, Ρ‚ΠΎ сообраТСния, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, основныС усилия ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄ Ρƒ Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΎΠ΄ΠΈΠ½ (Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), Π° ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ всС Π²Π΅Ρ‚Π²ΠΈ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ модСль тСстируСмого ΠΊΠΎΠ΄Π°. Для этого ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ спСциализированный DSL, достаточно Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ. Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ модСлью тСстируСмой Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ автоматичСски ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСстовыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ всС Π²Π΅Ρ‚Π²ΠΈ. Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, тСстируСмый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ автоматичСским прСобразованиям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для тСстирования (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΊ рСкурсии, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²). ΠŸΡ€ΠΈ использовании этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΏΠ»Π°Π½Π΅ покрытия ΠΊΠΎΠ΄Π°.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² благоприятных условиях ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… тСстов. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, заинтСрСсованныС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ°Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ области, Π³Π΄Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ· рассмотрСнных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ².

Благодарности

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ @mneychev Π·Π° Ρ‚Π΅Ρ€ΠΏΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΎΡ†Π΅Π½ΠΈΠΌΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

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

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

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