Π Π°Π·Π½ΠΎΠ΅

Π‘Π΅Π»Ρ‹ΠΉ ящик тСстированиС: ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика / Π₯Π°Π±Ρ€

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

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

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

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

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

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

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

case class TestCase[A, B](label: String, input: A, expectedOutput: B)

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

case class TestCaseResult[A, B](testCase: TestCase[A, B], actualOutput: Try[B])

(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запуска ΠΌΡ‹ прСдставляСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Try, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.)

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

def runTestCases[A, B](cases: Seq[TestCase[A, B])(f: A => B): Seq[TestCaseResult[A, B]] = 
  cases
    .map{ testCase => 
      TestCaseResult(testCase, 
        Try{ f(testCase.input) }
      ) 
    }
    .filter(r => r.actualOutput != Success(r.testCase.expectedOutput))

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

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

def report(results: Seq[TestCaseResult[_, _]]): String = 
  s"Failed ${results.length}:\n" + 
    results
      .map(r => r.testCase.label + ": expected " + r.testCase.expectedOutput + ", but got " + r.actualOutput)
      .mkString("\n")

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

val testCases = Seq(
  TestCase("1", 0, 0)
)

test("all test cases"){
  val testBench = runTestCases(testCases) _
  val results = testBench(f)
  assert(results.isEmpty, report(results))
}

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

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

val baseline = MyObject(...) // Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
val testCases = Seq(
  TestCase("baseline", baseline, ???),
  TestCase("baseline + (field1 = 123)", baseline.copy(field1 = "123"), ???)
)

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

val baseline = ??? 
val testObject1 = (field1 composeLens field2).set("123")(baseline)
// Ρ‡Ρ‚ΠΎ эквивалСнтно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС:
val testObject1 = baseline.copy(field1 = baseline.field1.copy(field2 = "123"))

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

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

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

val testCases = Seq(
  TestCase("baseline", baseline, ???),
  TestCase("baseline + " + 
              "(field1 = 123) + " +  // описаниС 1-го измСнСния
              "(field2 = 456) + " +  // 2-Π³ΠΎ
              "(field3 = 789)",      // 3-Π³ΠΎ
           baseline
             .copy(field1 = "123")   // 1-Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
             .copy(field2 = "456")   // 2-Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
             .copy(field3 = "789"),  // 3-Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
           ???)
)

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

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

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

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

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

  1. ΠŸΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ экзСмпляров ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. (Π’ΠΎ Π΅ΡΡ‚ΡŒ фактичСски созданиС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ списка ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.)
  2. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкстового описания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
  3. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.
  4. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π°Π΄ модСлью.

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

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ языка ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

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

  1. МодСль структуры Π΄Π°Π½Π½Ρ‹Ρ….
  2. МодСль измСнСний.
  3. БобствСнно Embedded(?) DSL β€” Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ конструкции, extension-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ конструирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
  4. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ фактичСски «ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π° самом Π΄Π΅Π»Π΅, СстСствСнно, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΡƒΡŽ копию).

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

val target: Entity[Target] // ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вносятся измСнСния
val updateField1 = target \ field1 := "123"
val updateField2 = target \ subobject \ field2 := "456"
// или, бСз использования DSL:
val updateField1 = SetProperty(PropertyAccess(target, Property(field1, typeTag[String])), LiftedString("123"))
val updateField2 = SetProperty(PropertyAccess(PropertyAccess(target, 
                    Property(subobject, typeTag[SubObject])), 
                      Property(field2, typeTag[String])), LiftedString("456"))

Π’ΠΎ Π΅ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ extension-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² \ ΠΈ := Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ PropertyAccess, SetProperty ΠΈΠ· Ρ€Π°Π½Π΅Π΅ созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² target, field1, subobject, field2. Π’Π°ΠΊΠΆΠ΅ Π·Π° счёт (опасных) implicit-ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΉ строка «123» упаковываСтся Π² LiftedString (ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· implicit-ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΉ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ явно: lift("123")).

Π’ качСствС ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована типизированная онтология (см. https://habr.com/post/229035/ ΠΈ https://habr.com/post/222553/). (Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅: ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΠΈΠΌΠ΅Π½Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ свойства ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области: val field1: Property[Target, String].) ΠŸΡ€ΠΈ этом собствСнно Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ JSON. Удобство Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ½Ρ‚ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π² нашСм случаС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ модСль ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° онтология ΠΊΠ°ΠΊ Ρ€Π°Π· Π΄Π°Ρ‘Ρ‚ подходящий инструмСнт для адрСсации свойств.

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

  • Modify β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,
  • Changes β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ,
  • ForEach β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ,
  • ΠΈ Ρ‚.Π΄.

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

def eval(expression: DslExpression, gamma: Map[String, Any]): Any = expression match {
  case LiftedString(str) =>
    str
  case PropertyAccess(obj, prop) =>
    Getter(prop)(gamma).get(obj)
}
def change[T] (expression: DslChangeExpression, gamma: Map[String, Any], target: T): T = expression match {
  case SetProperty(path, valueExpr) =>
    val value = eval(valueExpr, gamma)
    Setter(path)(gamma).set(value)(target)
}

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

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

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

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

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

if (object.field1 == "123") A else B

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

val testCase1 = TestCase("A", field1.set("123")(baseline), /* result of A */)
val testCase2 = TestCase("B", field1.set(/* Π½Π΅ "123", Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, */"123" + "1">)(baseline), /*result of B*/)

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

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

DSL для формирования всСх ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

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

val change1: T => T = field1.set("123")(_)
// val change1: T => T = _.copy(field1 = "123")
val change2: T => T = field2.set("456")

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

val changes = change1 compose change2

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

val rawChangesList: Seq[T => T] = Seq(change1, change2)
val allChanges: T => T = rawChangesList.foldLeft(identity)(_ compose _)

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

val tests: Seq[(String, T => T)] =
           IF("field1 == '123'")  // Π½Π°Π·Π²Π°Π½ΠΈΠ΅ условия, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌ
           THEN( field1.set("123"))( // ΠΈΠ»ΠΈ target \ field1 := "123"
             IF("field2 == '456')
             THEN(field2.set("456"))(TERMINATE)
             ELSE(field2.set("456" + "1"))(TERMINATE)
           )
           ELSE( field1.set("123" + "1") )(TERMINATE)

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

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

val tests2: Seq[(String, T)] = tests.map(_.map_2(_(baseline)))

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

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

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

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

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

if(object.field1 == "123") A else B

УсловиС Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ поля field1 Π½Π° Π΄Π²Π° класса эквивалСнтности: == "123" ΠΈ != "123". Π’Π΅ΠΌ самым, всё мноТСство Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ разбиваСтся Π½Π° Π΄Π²Π° класса эквивалСнтности ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ этому ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ β€” ClassCondition1IsTrue ΠΈ ClassCondition1IsFalse. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ покрытия Π½Π°ΠΌ достаточно Π²Π·ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈΠ· этих Π΄Π²ΡƒΡ… классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠ±Π΅ Π²Π΅Ρ‚Π²ΠΈ A ΠΈ B. Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС, СдинствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π²Π·ΡΡ‚ΡŒ случайный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ field1 Π½Π° "123". ΠŸΡ€ΠΈ этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ окаТСтся Π² классС эквивалСнтности ClassCondition1IsTrue ΠΈ вычислСния ΠΏΠΎΠΉΠ΄ΡƒΡ‚ ΠΏΠΎ Π²Π΅Ρ‚Π²ΠΈ A. Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ класса ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² большС. Один ΠΈΠ· способов Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ класса: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… field1 == "123". Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ: Π²Π·ΡΡ‚ΡŒ случайный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ field1 Π½Π° "123" + "*" (для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ строки, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ новая строка Π½Π΅ Ρ€Π°Π²Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ).

Π’ качСствС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² случайных Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Arbitrary ΠΈ Gen ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ScalaCheck.

По-сути, ΠΌΡ‹ выполняСм ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ всС значСния Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… эта Π±ΡƒΠ»Π΅Π²Π° функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true β€” ClassCondition1IsTrue, ΠΈ всС значСния Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false β€” ClassCondition1IsFalse.

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

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

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

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

if(sha(object.field1)=="a9403...") ...
// послС ввСдСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ==> 
if(object.sha_field1 == "a9403...") ...

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

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

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

Если вСтвлСния Π² ΠΊΠΎΠ΄Π΅ ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π° нСзависимыС поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ покрытия Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ прямолинСйно. Достаточно Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ всС подмноТСства для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ тСстируСмого поля, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ подходящиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ значСния для всСх ΠΏΠΎΠ»Π΅ΠΉ. Если ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ условия ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‚ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ поля, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ€Π°Ρ‚ΡŒ пСрСсСчСниС подмноТСств. (НапримСр, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ условиС, x > 0, Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ β€” x <= 1. КаТдоС ΠΈΠ· условий ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎ Π΄Π²Π° подмноТСства, Π½ΠΎ Π·Π° счёт пСрСсСчСний Π² ΠΈΡ‚ΠΎΠ³Π΅ получится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ подмноТСства β€” (-∞, 0], (0, 1], (1, +∞), β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.)

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

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

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

if(x > 0)
  if(y > 0)
   if (y > x)

(Π—Π΄Π΅ΡΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ > 0, ΠΈ ΠΎΠ±Π° поля совмСстно Ρ‚ΠΎΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ β€” y > x.)

Если условиС являСтся «ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Ρ‹ΠΌ», ΠΊΠ°ΠΊ, Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ‚ΠΎ достаточно ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх условий, ΠΈ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ нСподходящиС значСния свойств. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ достаточно Π²Π΅Π»ΠΈΠΊΠ° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ нСподходящих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π² большом числС случаСв ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ подходящиС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ свойств ΠΈ «ΠΊΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ дСйствия» Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ достаточно большим.

Π’ случаС, Ссли условиС «ΠΆΡ‘сткоС», Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ (y == x + 1), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ поля Π½Π° основС сгСнСрированного ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

Если условиС «ΠΏΠΎΠ»ΡƒΠΆΠ΅ΡΡ‚ΠΊΠΎΠ΅» (y > x + 1 && y < x + 2), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ зависимый Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опрСдСляСтся сгСнСрированным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ поля.

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

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

val a = field1 + 10
// добавляСм Π² контСкст a = field_initial_value + 10
val b = a * 3
// добавляСм Π² контСкст b = 3 * field_initial_value + 30

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вСтвлСния ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° условия β€” true ΠΈ false. И расчёт производится сразу для Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ. ΠŸΡ€ΠΈ этом Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ ограничСния. НапримСр,

if(a > 0) A else B
// Π² Π²Π΅Ρ‚ΠΊΠ΅ A ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ field_initial_value + 10  > 0
// Π² Π²Π΅Ρ‚ΠΊΠ΅ B ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ field_initial_value + 10 <= 0

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

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

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

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

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

Рассмотрим Π²Π½Π°Ρ‡Π°Π»Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΉ частный случай хвостовой рСкурсии (Π₯востовая рСкурсия). ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ тСстируСмый ΠΊΠΎΠ΄, Π·Π°ΠΌΠ΅Π½ΠΈΠ² рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Для Ρ†Π΅Π»Π΅ΠΉ тСстирования ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ. Вакая Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π±Π΅Π»ΠΎΠ³ΠΎ ящика. НапримСр, Ссли Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ строки, Ρ‚ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ смоТСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… TestCase‘Π°. Π’ случаС, Ссли Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π°ΠΌ окаТСтся Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (throw ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Nothing ΠΈΠ»ΠΈ bottom, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…). Π’Π΅ΠΌ самым ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ тСстирования ΠΊΠΎΠ΄Π° Π±Π΅Π· Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ риска зависания.

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

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

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

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

  1. Если Π±Π΅Π»Ρ‹ΠΉ ящик являСтся ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ ΠΈ сущСствуСт нСнулСвая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки для Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ срСдС.
  2. Если сущСствуСт нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ (Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках ΠΈΠ»ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… окруТСниях).
  3. Код Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ»ΠΈ подвСргаСтся Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ, ΠΏΡ€ΠΈ этом ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ отличия ΠΎΡ‚ эталонного повСдСния.
  4. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ подмноТСства Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π½Π°ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

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

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

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

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

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

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

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

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

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

WHITE BOX TESTING β€” это тСстированиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры, Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ кодирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ этом Ρ‚ΠΈΠΏΠ΅ тСстирования ΠΊΠΎΠ΄ Π²ΠΈΠ΄Π΅Π½ тСстСру. ОсновноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ удобства использования, ΡƒΡΠΈΠ»Π΅Π½ΠΈΡŽ бСзопасности. ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика Ρ‚Π°ΠΊΠΆΠ΅ извСстно ΠΊΠ°ΠΊ тСстированиС Clear Box, тСстированиС Open Box, структурноС тСстированиС, тСстированиС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ бокса, тСстированиС Π½Π° основС ΠΊΠΎΠ΄Π° ΠΈ тСстированиС Glass Box. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π΄Π²ΡƒΡ… частСй ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Box Testing ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π•Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³, тСстированиС Blackbox , Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ тСстированиС с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния внСшнСго ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, тСстированиС Whitebox основано Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ прилоТСния ΠΈ вращаСтся Π²ΠΎΠΊΡ€ΡƒΠ³ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ тСстирования.

Π’Π΅Ρ€ΠΌΠΈΠ½ Β«WhiteBoxΒ» Π±Ρ‹Π» использован ΠΈΠ·-Π·Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. ЯсноС ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ имя WhiteBox символизируСт ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сквозь внСшнюю ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния (ΠΈΠ»ΠΈ Β«ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒΒ») Π² Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. Аналогично, Β«Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ящик» Π² Β« ВСстировании Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика Β» символизируСт Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ протСстирован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‹Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅

Π§Ρ‚ΠΎ Π²Ρ‹ провСряСтС Π² White Box Testing?

ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ тСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

  • Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Ρ‹Ρ€Ρ‹ Π² бСзопасности
  • Π‘Π»ΠΎΠΌΠ°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ структурированныС ΠΏΡƒΡ‚ΠΈ Π² процСссах кодирования
  • ΠŸΠΎΡ‚ΠΎΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ΄
  • ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ условных Ρ†ΠΈΠΊΠ»ΠΎΠ²
  • ВСстированиС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ основС

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

НаТмитС здСсь, Ссли Π²ΠΈΠ΄Π΅ΠΎ Π½Π΅ доступно

Как Π²Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика?

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ объяснСниС тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика, ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π° Π΄Π²Π° основных этапа . Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ тСстСры ΠΏΡ€ΠΈ тСстировании прилоТСния с использованиСм Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика:

ШАГ 1) ПОНИМАВЬ ИБВОЧНИК ΠšΠžΠ”

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

Π¨Π°Π³ 2) Π‘ΠžΠ—Π”ΠΠ’Π¬ Π˜Π‘ΠŸΠ«Π’ΠΠ’Π•Π›Π¬ΠΠ«Π• ДЕЛА И Π˜Π‘ΠŸΠžΠ›ΠΠ˜Π’Π¬

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ шаг ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π±Π΅Π»ΠΎΠ³ΠΎ ящика Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя тСстированиС исходного ΠΊΠΎΠ΄Π° прилоТСния Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ структуры. Одним ΠΈΠ· способов являСтся написаниС большСго количСства ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ исходного ΠΊΠΎΠ΄Π° прилоТСния. ВСстировщик Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСбольшиС тСсты для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса ΠΈΠ»ΠΈ сСрии процСссов Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ тСстировщик ΠΈΠΌΠ΅Π» Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ знания ΠΊΠΎΠ΄Π° ΠΈ часто выполнялся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС , тСстированиС ΠΈ тСстированиС Π½Π° ошибки, Π° Ρ‚Π°ΠΊΠΆΠ΅ использованиС инструмСнтов тСстирования, ΠΊΠ°ΠΊ ΠΌΡ‹ объясним Π΄Π°Π»Π΅Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ тСстирования WhiteBox

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°

Printme (int a, int b) {                       ------------  Printme is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code 

ЦСлью тСстирования WhiteBox являСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всСх Π²Π΅Ρ‚Π²Π΅ΠΉ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΊΠΎΠ΄Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ утвСрТдСния Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅, тСстовыС случаи WhiteBox Π±ΡƒΠ΄ΡƒΡ‚

  • A = 1, B = 1
  • А = -1, Π’ = -3

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ испытаний Π±Π΅Π»ΠΎΠΉ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ

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

Доступны Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструмСнты для Π°Π½Π°Π»ΠΈΠ·Π° покрытия ΠΊΠΎΠ΄Π°. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° покрытия

ΠžΡ…Π²Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²: β€” Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² процСссС тСстирования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ вСтвлСния β€” этот ΠΌΠ΅Ρ‚ΠΎΠ΄ провСряСт всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ (Ссли-Π΅Ρ‰Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ условныС Ρ†ΠΈΠΊΠ»Ρ‹) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ прилоТСния.

Помимо Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ, сущСствуСт мноТСство Ρ‚ΠΈΠΏΠΎΠ² покрытия, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ условий, ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… условий, ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ, ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚. Π”. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ свои прСимущСства ΠΈ пытаСтся ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ) всС части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Statement ΠΈ Branch, Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достигаСтС 80-90% покрытия ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ являСтся достаточным.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ https://www.guru99.com/code-coverage.html

Π’ΠΈΠΏΡ‹ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика

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

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

  • ВСстированиС Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти : ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. БпСциалист ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ качСства, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ‹Ρ‚ Π² ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Ρƒ вас ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Помимо Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ, нСсколько Ρ‚ΠΈΠΏΠΎΠ² тСстирования ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ тСстирования ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ящика. Они пСрСчислСны Π½ΠΈΠΆΠ΅

  • ВСстированиС проникновСния Π² White Box : Π’ этом тСстировании тСстировщик / Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± исходном ΠΊΠΎΠ΄Π΅ прилоТСния, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сСти, задСйствованныС IP-адрСса ΠΈ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сСрвСрС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ЦСль состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сторон, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΡƒΠ³Ρ€ΠΎΠ·Ρ‹ бСзопасности.
  • ВСстированиС ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ White Box : ВСстированиС ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ кодирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ тСстирования White Box

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список Π»ΡƒΡ‡ΡˆΠΈΡ… инструмСнтов тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика

  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΡƒΡ‚Π΅ΠΌ поиска скрытых ошибок.
  • ВСстовыС случаи Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.
  • ВСстированиС являСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС ΠΏΡƒΡ‚ΠΈ ΠΊΠΎΠ΄Π°.
  • ВСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Ρ€Π°Π½ΠΎ Π² SDLC, Π΄Π°ΠΆΠ΅ Ссли GUI нСдоступСн.

НСдостатки тСстирования WhiteBox

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

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ:

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

Β 

White/Black/Grey Box-тСстированиС — QALight

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

Π‘Π°ΠΌΡ‹ΠΌ высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ понятиС Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сразу нСсколько смСТных Ρ‚Π΅Ρ…Π½ΠΈΠΊ тСстирования. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ тСстирования ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΎΠ². Рассмотрим, для Π½Π°Ρ‡Π°Π»Π° нСсколько Ρ‚ΠΈΠΏΠΎΠ² тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡΒ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° тСстирования.

BlackΒ Box

Summary: ΠœΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ устроСна тСстируСмая систСма.

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика», Ρ‚Π°ΠΊΠΆΠ΅ извСстноС ΠΊΠ°ΠΊ тСстированиС, основанноС Π½Π° спСцификации ΠΈΠ»ΠΈ тСстированиС повСдСния – Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° тСстирования, основанная Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с внСшними интСрфСйсами тСстируСмой систСмы.

Богласно ISTQB:

тСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика – это:

– тСстированиС, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅, Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π΅ знания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы.

– тСст-Π΄ΠΈΠ·Π°ΠΉΠ½, основанный Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика – ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° написания ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСст-кСйсов Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ спСцификации ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы  Π±Π΅Π· знания Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Β«Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ящик»? ВСстируСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для тСстировщика – ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ящик, содСрТания ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚. ЦСлью этой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ являСтся поиск ошибок Π² Ρ‚Π°ΠΊΠΈΡ… катСгориях:

– Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

– ошибки интСрфСйса;

– ошибки Π² структурах Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ внСшним Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…;

– ошибки повСдСния ΠΈΠ»ΠΈ нСдостаточная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы;

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ВСстировщик ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ тСстированиС Π²Π΅Π±-сайта, Π½Π΅ зная особСнностСй Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдусмотрСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ поля Π²Π²ΠΎΠ΄Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° – спСцификация.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚ΠΈΠΏ тСстирования, ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΅Π³ΠΎ Π²ΠΈΠ΄Ρ‹. ВСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ систСмы, Π° Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ – соотвСтствСнно, ΠΎΠ±Ρ‰ΠΈΠ΅ характСристики нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π° всСх уровнях тСстирования (ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΡ‡Π½ΠΎΠ³ΠΎ), для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сущСствуСт спСцификация. НапримСр, ΠΏΡ€ΠΈ осущСствлСнии систСмного ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ тСстирования, трСбования ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ спСцификация Π±ΡƒΠ΄ΡƒΡ‚ основой для написания тСст-кСйсов.

Π’Π΅Ρ…Π½ΠΈΠΊΠΈ тСст-Π΄ΠΈΠ·Π°ΠΉΠ½Π°, основанныС Π½Π° использования Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

– классы эквивалСнтности;

– Π°Π½Π°Π»ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;

– Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ;

– Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ измСнСния состояния;

– тСстированиС всСх ΠΏΠ°Ρ€.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

– тСстированиС производится с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ нСточности ΠΈ противорСчия Π² спСцификации;

– тСстировщику Π½Π΅Ρ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ языки программирования ΠΈ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

– тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ спСциалистами, нСзависимыми ΠΎΡ‚ ΠΎΡ‚Π΄Π΅Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ прСдвзятого ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ;

– ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ тСст-кСйсы, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³ΠΎΡ‚ΠΎΠ²Π° спСцификация.

НСдостатки:

– тСстируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΡƒΡ‚Π΅ΠΉ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

– Π±Π΅Π· Ρ‡Π΅Ρ‚ΠΊΠΎΠΉ спСцификации (Π° это скорСС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…) достаточно Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эффСктивныС тСст-кСйсы;

– Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСсты ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ, Ссли ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования;

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика являСтся тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика, Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅.

Β 

WhiteΒ Box

Summary: Нам извСстны всС Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстируСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

Богласно ISTQB:

тСстированиС бСлого ящика – это:

– тСстированиС, основанноС Π½Π° Π°Π½Π°Π»ΠΈΠ·Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы.

– тСст-Π΄ΠΈΠ·Π°ΠΉΠ½, основанный Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ Π±Π΅Π»ΠΎΠ³ΠΎ ящика – ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° написания ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСст-кСйсов Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства систСмы ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

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

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° Π½Π΅ заводится.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях тСстирования – ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ систСмного, Π½ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ примСняСтся ΠΈΠΌΠ΅Π½Π½ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΅Π³ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

– тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π½Π½ΠΈΡ… этапах: Π½Π΅Ρ‚ нСобходимости ΠΆΠ΄Π°Ρ‚ΡŒ создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса;

– ΠΌΠΎΠΆΠ½ΠΎ провСсти Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСстированиС, с ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ большого количСства ΠΏΡƒΡ‚Π΅ΠΉ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

НСдостатки:

– для выполнСния тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ большоС количСство ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ

– ΠΏΡ€ΠΈ использовании Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстирования Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° тСстовых скриптов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎΠΉ, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° часто измСняСтся.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Black Box ΠΈ White Box

GreyΒ Box

Β 

Summary: Нам извСстны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстируСмой систСмы.

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ВСстировщик ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π΅Π΅ выполнСния. Π’Π°ΠΊΠΎΠ΅ Π·Π½Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСст-кСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ навСрняка Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° сСрого ящика ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях тСстирования – ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ систСмного, Π½ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ примСняСтся Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ взаимодСйствия Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика (white box testing)

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ




ΠΌΠ°Ρ€Ρ‚Π° 30, 2016



ОбновлСно: 04 апрСля 2016



ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ²: 29421


Π’ стратСгии White Box (Π±Π΅Π»Ρ‹ΠΉ ящик) тСстирования рассматриваСтся внутрСнняя Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ структура ΠΊΠΎΠ΄Π°. Π•Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ стСклянным, структурным, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ ящиком тСстирования. ВСсты, написанныС Π½Π° основС стратСгии White Box тСстирования Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ покрытиС написанного ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ, ΠΏΡƒΡ‚Π΅ΠΉ, отчСтности, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄Ρ€.

Π’ цСлях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика, тСстировщик ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ знаниями кодирования ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ‚. Π΅., Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π°. White Box тСст Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½ Π² тСстировщикС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ взглянув Π½Π° ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ/кусок ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

Β 

НаправлСния использования White Box тСстирования

ΠšΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ тСстСр ΠΈΠΌΠ΅Π» «структурныС» знания ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ систСма Π±Ρ‹Π»Π° Π²Π½Π΅Π΄Ρ€Π΅Π½Π°. НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄, Π½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ управлСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ†Π΅Π½Π΅Π½Ρ‹.

Участки ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ White Box тСстирования ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

  • ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π°
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅
  • ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
  • ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ условий
  • Π¦ΠΈΠΊΠ»Ρ‹
  • ΠŸΡƒΡ‚ΠΈ
  • ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…

Β 

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ аспСкта кодСкса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π² White Box тСстировании, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  • Π‘Ρ‹Π»ΠΎ Π»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π² соотвСтствии с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.
  • Π‘Ρ‹Π»ΠΈ Π»ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Ρ‹ ΠΌΠ΅Ρ€Ρ‹ бСзопасности Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ Π»ΠΈ ΠΎΠ½ΠΈ.
  • Π’Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ уязвимости ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

Β 

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° White Box тСстирования

  • Π—Π½Π°Π½ΠΈΠ΅ структуры Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ кодирования являСтся прСдпосылкой ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ становится ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² эффСктивном тСстировании ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  • Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ прСимущСство White Box тСстирования Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.
  • ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… строк ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ Π² ΠΊΠΎΠ΄Π΅.

Β 

НСдостатки White Box тСстирования

  • Π’Π°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры — это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ условиС, Ρ‚ΠΎ для осущСствлСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° тСстирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ тСстСр, Π° это, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС.
  • ΠŸΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кусок ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ скрытыС ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, приводящиС ΠΊ сбою прилоТСния.

Β 

Π’ΠΈΠ΄Ρ‹ испытаний White/Glass Box тСстирования

Β 

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ выполняСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС происходит Π½Π° самом Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ осущСствляСтся ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ модуля ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ встраивании ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Β 

БтатичСский ΠΈ динамичСский Π°Π½Π°Π»ΠΈΠ·

БтатичСский Π°Π½Π°Π»ΠΈΠ· состоит Π² просмотрС ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ Π² ΠΊΠΎΠ΄Π΅, динамичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Β 

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅

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

Β 

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

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

Β 

ВСстированиС ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти

Когда ΠΊΠΎΠ΄ написан, Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ сущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, которая Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ нСисправным. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π²ΠΎ врСмя тСстирования ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π±Π΅Π»ΠΎΠ³ΠΎ ящика провСряСтся Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² ΠΊΠΎΠ΄Π΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти. Π’ случаС ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния трСбуСтся большС памяти, ΠΈ это влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ.

Β 

ВСстированиС бСзопасности

ВСстированиС бСзопасности проводится для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ сСбя ΠΎΡ‚ нСсанкционированного доступа, Π²Π·Π»ΠΎΠΌΠ° (ΠΊΡ€Π΅ΠΊΠΈΠ½Π³, любоС ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Ρ‚.Π΄.) которая ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ тСстирования Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² тСстирования.

Β 

ΠœΡƒΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ тСстированиС

Π­Ρ‚ΠΎ своСго Ρ€ΠΎΠ΄Π° тСстированиС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ тСстируСтся Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ послС фиксации ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π°Π³Π°/Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°. Оно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΈ какая стратСгия кодирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ эффСктивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Β 

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

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

Β 

Β 

Β 

Β 

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» — IT-ΠšΡƒΡ€ΡΡ‹ Π² МинскС

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика»?

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈ структурой ΠΊΠΎΠ΄Π°. ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика Ρ‚Π°ΠΊΠΆΠ΅ называСтся тСстированиСм стСклянного, структурного, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ящика. ВСсты, написанныС Π½Π° основС тСстирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ написанного ΠΊΠΎΠ΄Π°, Π²Π΅Ρ‚Π²Π΅ΠΉ, ΠΏΡƒΡ‚Π΅ΠΉ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ Ρ‚. Π΄.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика, тСстировщик Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ знаниями Π² области программирования ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π°. ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ тСстировщик просмотрСл ΠΊΠΎΠ΄ ΠΈ выяснил, ΠΊΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ / ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ / Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° нСисправСн.

Π’ΠΈΠ΄Ρ‹ тСстирований ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика»:

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС:

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

БтатичСский ΠΈ динамичСский Π°Π½Π°Π»ΠΈΠ·:

БтатичСский Π°Π½Π°Π»ΠΈΠ· Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ всСго ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ любом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π΅ Π² ΠΊΠΎΠ΄Π΅. ДинамичСский Π°Π½Π°Π»ΠΈΠ· Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

Π’ этом Π²ΠΈΠ΄Π΅ тСстирования ΠΊΠΎΠ΄ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прилоТСния выполняСтся хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС утвСрТдСния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта.

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ:

НикакоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записано Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ кодирования, Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ‚Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ всСх Π²Π΅Ρ‚Π²Π΅ΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΈ Π² обСспСчСнии Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ΠΊ Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ повСдСнию прилоТСния.

ВСстированиС защищСнности:

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

ВСстированиС ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ:

Π’ΠΈΠ΄ тСстирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ тСстируСтся Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ послС исправлСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ошибки / Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΈ какая стратСгия кодирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² эффСктивной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Помимо всСх Π²ΠΈΠ΄ΠΎΠ² тСстирования, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ нСсколько Π²ΠΈΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ΄ тСстирования ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ящиков, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ касаСтся ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ), ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ тСстированиС ( тСстированиС Π½Π΅Π΄Π°Π²Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ), тСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ управляСт рСсурсами ΠΈ Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ‚. Π΄.). ΠšΡΡ‚Π°Ρ‚ΠΈ, Π½Π°ΡˆΠΈΒ ΠΊΡƒΡ€ΡΡ‹ ВСстирования ПО Π² МинскС Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ этот вопрос – Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ прямо сСйчас.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° тСстирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика:

  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры кодирования являСтся прСдпосылкой, становится ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π²Π²ΠΎΠ΄Π° / Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² эффСктивном тСстировании прилоТСния.
  • Π”Ρ€ΡƒΠ³ΠΈΠΌ прСимущСством тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄
  • Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² устранСнии Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… строк ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ скрытым Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°ΠΌ.

НСдостатками тСстирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

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

Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° Π½Π°ΡˆΠΈΒ ΠΊΡƒΡ€ΡΡ‹ ВСстирования ПО Π² МинскС прямо сСйчас ΠΈΠ»ΠΈ Π·Π°ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π·Π²ΠΎΠ½ΠΎΠΊ с бСсплатной ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΠ΅ΠΉ!

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ сСйчас / БСсплатная ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡ

White/Black/Grey Box-тСстированиС | BUGZA

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

Π‘Π°ΠΌΡ‹ΠΌ высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ понятиС типа, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сразу нСсколько смСТных Ρ‚Π΅Ρ…Π½ΠΈΠΊ тСстирования. Π’ΠΎ Π΅ΡΡ‚ΡŒ,Β ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ тСстирования ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΎΠ². Рассмотрим, для Π½Π°Ρ‡Π°Π»Π°, нСсколько Ρ‚ΠΈΠΏΠΎΠ² тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° тСстирования.

Black Box

Summary: ΠœΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ устроСна тСстируСмая систСма.

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика», Ρ‚Π°ΠΊΠΆΠ΅ извСстноС ΠΊΠ°ΠΊ тСстированиС, основанноС Π½Π° спСцификации ΠΈΠ»ΠΈ тСстированиС повСдСния – Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° тСстирования, основанная Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с внСшними интСрфСйсами тСстируСмой систСмы.

Богласно ISTQB, тСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика – это:

  • тСстированиС, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅, Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π΅ знания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы;
  • тСст-Π΄ΠΈΠ·Π°ΠΉΠ½, основанный Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика – ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° написания ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСст-кСйсов Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ спСцификации ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы Π±Π΅Π· знания Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Β«Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ящик»? ВСстируСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для тСстировщика – ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ящик, содСрТания ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚. ЦСлью этой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ являСтся поиск ошибок Π² Ρ‚Π°ΠΊΠΈΡ… катСгориях:

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ВСстировщик ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ тСстированиС Π²Π΅Π±-сайта, Π½Π΅ зная особСнностСй Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдусмотрСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ поля Π²Π²ΠΎΠ΄Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° – спСцификация.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚ΠΈΠΏ тСстирования, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΅Π³ΠΎ Π²ΠΈΠ΄Ρ‹. ВСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ систСмы, Π° Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ – ΠΎΠ±Ρ‰ΠΈΠ΅ характСристики нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π° всСх уровнях тСстирования (ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΡ‡Π½ΠΎΠ³ΠΎ), для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сущСствуСт спСцификация. НапримСр, ΠΏΡ€ΠΈ осущСствлСнии систСмного ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ тСстирования, трСбования ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ спСцификация Π±ΡƒΠ΄ΡƒΡ‚ основой для написания тСст-кСйсов.

Π’Π΅Ρ…Π½ΠΈΠΊΠΈ тСст-Π΄ΠΈΠ·Π°ΠΉΠ½Π°, основанныС Π½Π° использовании Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  • классы эквивалСнтности;
  • Π°Π½Π°Π»ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;
  • Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ;
  • Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ измСнСния состояния;
  • тСстированиС всСх ΠΏΠ°Ρ€.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

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

НСдостатки:

  1. тСстируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΡƒΡ‚Π΅ΠΉ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;
  2. Π±Π΅Π· Ρ‡Π΅Ρ‚ΠΊΠΎΠΉ спСцификации (Π° это скорСС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…) достаточно Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эффСктивныС тСст-кСйсы;
  3. Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСсты ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ, Ссли ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика являСтся тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика, Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅.

White Box

Summary: Нам извСстны всС Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстируСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

Богласно ISTQB: тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика – это:

  • тСстированиС, основанноС Π½Π° Π°Π½Π°Π»ΠΈΠ·Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы;
  • тСст-Π΄ΠΈΠ·Π°ΠΉΠ½, основанный Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ Π±Π΅Π»ΠΎΠ³ΠΎ ящика – ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° написания ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСст-кСйсов Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства систСмы ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

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

ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° Π½Π΅ заводится.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях тСстирования: ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ систСмного, Π½ΠΎ, Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, примСняСтся ΠΈΠΌΠ΅Π½Π½ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΅Π³ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  1. тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π½Π½ΠΈΡ… этапах: Π½Π΅Ρ‚ нСобходимости ΠΆΠ΄Π°Ρ‚ΡŒ создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса;
  2. ΠΌΠΎΠΆΠ½ΠΎ провСсти Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСстированиС с ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ большого количСства ΠΏΡƒΡ‚Π΅ΠΉ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

НСдостатки:

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

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Black Box ΠΈ White Box

Grey Box

Summary: Нам извСстны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстируСмой систСмы.

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ВСстировщик ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π΅Π΅ выполнСния. Π’Π°ΠΊΠΎΠ΅ Π·Π½Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСст-кСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ навСрняка Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° сСрого ящика ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях тСстирования: ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ систСмного, Π½ΠΎ, Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, примСняСтся Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ взаимодСйствия Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ВСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ящика | Π–ΠΈΠ·Π½ΡŒ — это Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅! А тСстированиС

Π§Π΅Ρ€Π½Ρ‹ΠΉ ящик (black box testing)

ВСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика β€” это ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ систСма устроСна Π²Π½ΡƒΡ‚Ρ€ΠΈ. Π£ нас Π½Π΅Ρ‚ доступа ΠΊ ΠΊΠΎΠ΄Ρƒ ΠΈΠ»ΠΈ ΠΌΡ‹ Π½Π΅ ΡƒΠΌΠ΅Π΅ΠΌ Π΅Π³ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ориСнтируСмся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° внСшнСС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π’Π—.

Π­Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ автомобилист. Π—Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚? Ой, Ρ‚Π°ΠΌ слишком ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Π±ΡƒΠ΄Π΅ΠΌ Π²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ±ΠΎΡ€Π°ΠΌ ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°.

Π­Ρ‚ΠΎ основной Π²ΠΈΠ΄ тСстирования, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π»Π΅Π·Ρ‚ΡŒ Π² ΠΊΠΎΠ΄, стоит Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΈΡΠ°Ρ‚ΡŒ тСсты Π½Π° основС сцСнариСв использования ΠΈ Π·Π½Π°Π½ΠΈΠΉ ΠΏΡ€ΠΎ тСст-Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ классы эквивалСнтности.

Если я сСйчас ΠΎΡ‚ΠΊΡ€ΠΎΡŽ любой сайт:

И Π½Π°Ρ‡Π½Ρƒ Π΅Π³ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: «А Ρ‡Ρ‚ΠΎ, Ссли ΠΏΠ»Π°Ρ‚ΡŒΡŽΡˆΠΊΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ красноС ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ? А красноС с Π±Π΅Π»Ρ‹ΠΌ? А ΠΊΠ½ΠΈΠ³Ρƒ ΠΏΠΎ Π°Π²Ρ‚ΠΎΡ€Ρƒ? А Ссли спСцсимволы Π²Π±ΠΈΡ‚ΡŒ?Β», ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ β†’ это ΠΊΠ°ΠΊ Ρ€Π°Π· тСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика. Доступа ΠΊ ΠΊΠΎΠ΄Ρƒ Ρƒ мСня Π½Π΅Ρ‚, я просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π£ мСня Π»ΠΈΠ±ΠΎ Π΅ΡΡ‚ΡŒ Π’Π— (ΠΊΠ°ΠΊ Π² случаС Users, Π²ΠΎΡ‚ Ρ‚Π΅Ρ… Π·Π°Π΄Π°Π½ΠΈΠ΅), Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ Π½Π΅Ρ‚Ρƒ, ΠΊΠ°ΠΊ Π² случаС ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΡƒΠΌΠ°. Π‘ΠΎΡΡ‚Π°Π²Π»ΡΡŽ тСсты, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс, Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ black box.

ΠŸΠ»ΡŽΡΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ΄, Ρ‚ΠΎ Π½Π΅ Π²Π΅Ρ€ΠΈΡ‚Π΅ Π½ΠΈΡ‡Π΅ΠΌΡƒ Π½Π° слово. ВсС провСряСтС ΠΏΠΎ Π’Π—, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово. А Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ упустил Π² трСбованиях ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ условиС ΠΈ просто Π΅Π³ΠΎ Π½Π΅ сдСлал, ΠΈΠ»ΠΈ сдСлал, Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ. Если Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ сам ΠΊΠΎΠ΄, Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Но это Π½Π΅ совсСм Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½ΡƒΠΆΠ½ΠΎ.

Π‘Π΅Π»Ρ‹ΠΉ ящик (white box testing)

ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика β€” это ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ, ΠΈ ΠΌΡ‹ Π΅Π³ΠΎ тСстируСм. Π§ΠΈΡ‚Π°Π΅ΠΌ сам ΠΊΠΎΠ΄ (статичСскоС тСстированиС), запускаСм Π² Π΄Π΅Π±Π°Π³Π΅, пишСм автотСсты…

Если ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с автомобилистом, Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ Π½Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ, Π° ΠΏΡ€ΠΎΡˆΠ°Ρ€Π΅Π½Π½Ρ‹ΠΉ. Бломалось Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ? Нафиг ΠΏΡ€ΠΈΠ±ΠΎΡ€Ρ‹, сразу Π»Π΅Π·Π΅ΠΌ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚, Π³Π΄Π΅ всС устройство Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ Π½Π°ΠΈΠ·ΡƒΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ. РоСмся Ρ‚Π°ΠΌ, ΠΈΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ…

Π‘Π°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π±Π΅Π»Ρ‹ΠΉ ящик Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠ²Π°Ρ‚ΠΎ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с Π½ΠΈΠΌ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. Но ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ….

Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” Folks, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свои автотСсты, ΠΏΡ€ΠΎΠ³ΠΎΠ½ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ тСстированиСм самого ΠΊΠΎΠ΄Π°, Π±Π΅Π»ΠΎΠ³ΠΎ ящика. User interface Ρƒ folks Π½Π΅Ρ‚ ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ тСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика Ρ‚Π°ΠΌ нСдоступно.

ΠŸΠ»ΡŽΡΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ мСньшС тСстов. ΠœΡ‹ вСдь Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΈ Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ. Но ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ углубляСмся Π² ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ, Π° Π½Π΅ Π’Π—, ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π±Π°Π³ΠΈ (см ΠΏΠ»ΡŽΡΡ‹ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика)

Π‘Π΅Ρ€Ρ‹ΠΉ ящик (gray box testing)

ВСстированиС сСрого ящика β€” это совмСщСниС. ΠœΡ‹ смотрим Π² ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ устроСн. А ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ провСряСм, ΠΊΠ°ΠΊ этот ΠΊΠΎΠ΄ отобраТаСтся ΡƒΠΆΠ΅ Π² Π½Π΅ΠΌ, Π½ΠΎ ориСнтируСмся ΡƒΠΆΠ΅ большС Π½Π° Π’Π—.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ автомобилиста это самый распространСнный сцСнарий. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ курс, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ рассказываСтся, ΠΊΠ°ΠΊ устроСна машина Π²Π½ΡƒΡ‚Ρ€ΠΈ β†’ это Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, white box. Но ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΊΠ°Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π° своСй машинС ΠΈ Π² основном ориСнтируСмся Π½Π° ΠΏΡ€ΠΈΠ±ΠΎΡ€Ρ‹ β†’ user interface, black box. ΠŸΡ€ΠΈ этом ΠΌΡ‹ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅ΠΌ показания ΠΏΡ€ΠΈΠ±ΠΎΡ€ΠΎΠ² Π½Π° основС Π·Π½Π°Π½ΠΈΠΉ ΠΊΠΎΠ΄Π°.

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

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π²Ρ€ΠΎΠ΄Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ это всС устроСно, Π½ΠΎ частично. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ пСрСпровСряСм ΠΏΠΎ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ ящику, Π³Π΄Π΅-Ρ‚ΠΎ напишСм Ρ‡ΡƒΡ‚ΡŒ большС тСстов для пСрСстраховки… Π’ΠΎΠΎΠ±Ρ‰Π΅ самый ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования: Π²Ρ‹ ΠΈ Π² ΠΊΠΎΠ΄Π΅ Π±Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ, ΠΈ ΠΏΠΎ Π’Π— ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ!

Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ Π΄Π°Π»ΠΈ, хотя Π±Ρ‹ частичный ツ

Π₯отя Π΅ΡΡ‚ΡŒ ΠΈ другая вСрсия β€” Π·Π½Π°Π½ΠΈΠ΅ высокоуровнСвой структуры прилоТСния: ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π±Π°Π·, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Π±Π΅Π· доступа ΠΊ ΠΊΠΎΠ΄Ρƒ. Или Π·Π½Π°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π½ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π±Π΅Π· доступа ΠΊ собствСнно ΠΊΠΎΠ΄Ρƒ. НапримСр, ΠΏΠΎ псСвдокоду.

Но смысл ΠΎΠ΄ΠΈΠ½: ΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π° Π·Π½Π°Π΅ΠΌ, Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅Ρ‚.

Π‘ΠΌ Ρ‚Π°ΠΊΠΆΠ΅:
White/Black/Grey Box-тСстированиС — Ρ‚ΠΎΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° эту Ρ‚Π΅ΠΌΡƒ!



PS: Π‘Ρ‚Π°Ρ‚ΡŒΡ написана Π² ΠΏΠΎΠΌΠΎΡ‰ΡŒ студСнтам ΠΌΠΎΠ΅ΠΉ Π¨ΠΊΠΎΠ»Ρ‹ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… тСстировщиков.


Π’Π°ΠΊΠΆΠ΅ являСтся Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈΠ· ΠΌΠΎΠ΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ ΠΊΠ½ΠΈΠ³ΠΈ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… тСстировщиков, Π½ΠΎ Ρ‚Π°ΠΌ я Π΄ΠΎ Ρ‚Π΅ΠΌΡ‹ классификации Π΅Ρ‰Π΅ Π½Π΅ дошла, ΠΌΠΎΠΆΠ΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌ пополню ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‡ΠΈΠΊΠ°ΠΌΠΈ =)

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС WHITE Box? ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ‚ΠΈΠΏΡ‹ ΠΈ инструмСнты

  • На Π³Π»Π°Π²Π½ΡƒΡŽ
  • ВСстированиС

      • Назад
      • Π“ΠΈΠ±ΠΊΠΎΠ΅ тСстированиС
      • BugZilla
      • Cucumber
      • ВСстированиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
      • Jmeter
      • Jmeter Testing
      • JUnit
      • LoadRunner
      • Π ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС
      • МобильноС тСстированиС
      • Mantis
      • ΠŸΠΎΡ‡Ρ‚Π°Π»ΡŒΠΎΠ½
      • QTP
      • Назад
      • Π¦Π΅Π½Ρ‚Ρ€ качСства (ALM)
      • 000
      • Π¦Π΅Π½Ρ‚Ρ€ качСства (ALM)
      • 000 Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ тСстированиСм

      • TestLink
  • SAP

      • Назад
      • ABAP
      • 9000 3 APO

      • ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • MMO
      • HAN

      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
      • ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
      • Successfactors
      • SAP Tutorials
  • Web
  • Web
  • AngularJS
  • ASP.Net
  • C
  • C #
  • C ++
  • CodeIgniter
  • Π‘Π£Π‘Π”
  • JavaScript
  • Назад
  • Java
  • JSP
  • Kotlin
  • Linux
  • Linux
  • Kotlin
  • Linux
  • js

  • Perl
  • Назад
  • PHP
  • PL / SQL
  • PostgreSQL
  • Python
  • ReactJS
  • Ruby & Rails
  • Scala
  • SQL
  • 000

  • SQL
  • 000

    0003 SQL

    000

    0003 SQL

    000

  • UML
  • VB.Net
  • VBScript
  • Π’Π΅Π±-слуТбы
  • WPF
  • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Π΅!

      • Назад
      • БухгалтСрский ΡƒΡ‡Π΅Ρ‚
      • Алгоритмы
      • Android
      • Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½
      • Business Analyst
      • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-сайта
      • CCNA
      • ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ вычислСния
      • 0003 COBOL
      • 000 Compiler
          9000 ВстроСнный

        • 000 9000 Compiler
        • Ethical Hacking
        • Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΏΠΎ Excel
        • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Go
        • IoT
        • ITIL
        • Jenkins
        • MIS
        • Π‘Π΅Ρ‚ΠΈ
        • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма
        • 0003
        • Назад
        • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠžΠ±Π·ΠΎΡ€Ρ‹
        • Salesforce
        • SEO
        • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния
        • VB A
    • Big Data

        • Назад
        • AWS
        • BigData
        • Cassandra
        • Cognos
        • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
        • 0003

        • HBOps
        • 0003

        • HBOps
        • 0003

        • MicroStrategy

    .

    ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы

    White Box Testing — это стратСгия тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, которая провСряСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΅Π³ΠΎ внутрСнняя структура, Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ доступны для тСстировщиков. Π£ Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ тСстированиС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ящика ΠΈΠ»ΠΈ тСстированиС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ящика, ΠΈΠ»ΠΈ тСстированиС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ящика, ΠΈΠ»ΠΈ тСстированиС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ящика, ΠΈΠ»ΠΈ тСстированиС Π½Π° основС ΠΊΠΎΠ΄Π°, ΠΈΠ»ΠΈ структурноС тСстированиС.

    ΠŸΡ€ΠΈ тСстировании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика тСстировщик Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Ρ‹ для выполнСния ΠΏΡƒΡ‚Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ΄ ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹.Навыки программирования ΠΈ информация ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выглядит ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ снаруТи, вмСсто этого ΠΎΠ½ΠΎ большС углубляСтся Π² ядро ​​систСмы.

    ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

    Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°ΠΊ любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния тСстировщиков, ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π±Π΅Π»Ρ‹ΠΉ ΠΈΠ»ΠΈ стСклянный ящик. И ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ всю систСму.

    Π‘Π΅Π»Ρ‹ΠΉ ящик ВСстированиС согласно ISTQB

    ISTQB прСдставляСт ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΡƒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ комиссию ΠΏΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.Π­Ρ‚ΠΎ нСкоммСрчСская организация, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰Π°ΡΡΡ Π² Π‘Π΅Π»ΡŒΠ³ΠΈΠΈ, которая вносит свой Π²ΠΊΠ»Π°Π΄ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ стандарты тСстирования ΠΈ прСдоставляСт сСртификаты тСстирования. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΡΠ»ΡƒΡˆΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ ISTQB опрСдСляСт тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика?

    Π‘Π΅Π»Ρ‹ΠΉ ящик ВСстированиС:

    Π­Ρ‚ΠΎ мСтодология тСстирования, которая выполняСтся Π½Π° основС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

    Π‘Π΅Π»Ρ‹ΠΉ ящик ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСста:

    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π²Ρ‹Π±ΠΎΡ€ тСста ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° доступных дСталях Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ структуры Π΄ΠΈΠ·Π°ΠΉΠ½Π° тСстируСмого прилоТСния.

    Π‘Π΅Π»Ρ‹ΠΉ ящик Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ тСстирования:

    ВСстировщик ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΠΊΠΎΠ΄Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² соотвСтствии с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСтся ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅. ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

    ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ тСстированиС Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» — это Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

    ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ:

    Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ области Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ тСстирования:

    1.ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС:

    Π—Π΄Π΅ΡΡŒ наимСньшая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΊΠΎΠ΄Π° опрСдСляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

    2. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ тСстированиС:

    Π’ этом ΠΏΠΎΡ‚ΠΎΠΊΠ΅ тСстСр выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ модулями прилоТСния.

    3. ВСстированиС систСмы:

    Π­Ρ‚Π° Ρ„Π°Π·Π° — Ρ„Π°Π·Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π³Π΄Π΅ QA Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ исслСдуСт ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ подсистСмами.

    Основной ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡΡΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… модулях, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

    Π‘Π΅Π»Ρ‹ΠΉ ящик ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ тСстирования:

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΊΠ°ΠΊ Π² написании тСстовых случаСв, Ρ‚Π°ΠΊ ΠΈ Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.

    1. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти:

    Π—Π΄Π΅ΡΡŒ тСстировщики ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° поискС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка, ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°, ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти ΠΈ Ρ‚. Π”. Π’Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ Valgrind, Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти C ++, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ этот ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

    2. ΠžΡ…Π²Π°Ρ‚ ΠΊΠΎΠ΄Π°:

    ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ измСряСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ тСстами Π±Π΅Π»ΠΎΠ³ΠΎ ящика.Π­Ρ‚ΠΎΡ‚ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ тСстировщикам ΠΏΠΈΡΠ°Ρ‚ΡŒ кСйсы для областСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ покрытия ΠΊΠΎΠ΄Π° C ++, GCOV, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ этот ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

    Π£ этой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… уровня.

    i) ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ заявлСния:

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

    Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ количСство исполняСмых строк прилоТСния, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌΠΈ тСстами.

    ii) ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„ΠΈΠ»ΠΈΠ°Π»Π°:

    Π’Π΅Ρ‚Π²ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ использованиС прСдлоТСния IF Π² ΠΊΠΎΠ΄Π΅.

    ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ IF ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… отвСтвлСния: УспСх ΠΈ НСудача.

    Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ объСм ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ записи ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°. тСстовых случаСв.

    ii) ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ:

    ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ фокусируСтся Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ тСстов, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

    Π­Ρ‚ΠΎ комплСксный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΡ‚ΡŒ Π½Π΅ останСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Branch. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ слоТных ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ².

    Π‘Π΅Π»Ρ‹ΠΉ ящик ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° тСстирования:

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

    Π‘Π΅Π»Ρ‹ΠΉ ящик НСдостатки тСстирования:

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

    НС упуститС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с нашСй ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΈΠ· 100 Π»ΡƒΡ‡ΡˆΠΈΡ… вопросов Π½Π° собСсСдованиС ΠΏΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠΌΡƒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ .ВСстировщикам с Π»ΡŽΠ±Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΎΠΏΡ‹Ρ‚Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ любоС тСстовоС ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ.

    .

    ПолноС руководство с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈ инструмСнтами

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика»?

    Если ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, «тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика» (Ρ‚Π°ΠΊΠΆΠ΅ извСстноС ΠΊΠ°ΠΊ тСстированиС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ, стСклянного ящика ΠΈΠ»ΠΈ структурноС тСстированиС) — это ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ структуру ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    ВСстированиС Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ структуры ΠΊΠΎΠ΄Π°. Если Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ структуру ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ провСсти тСсты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² соотвСтствии со спСцификациСй.И всС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

    Мой ΠΎΠΏΡ‹Ρ‚

    ΠŸΡ€ΠΎΡˆΠ»ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π΄Π΅ΡΡΡ‚ΡŒ Π»Π΅Ρ‚ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ я занимаюсь тСстированиСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ тСстировщики ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ наибольший энтузиазм Π²ΠΎ всСй индустрии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

    Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ тСстировщиков всСгда Π΅ΡΡ‚ΡŒ Ρ‡Π΅ΠΌΡƒ ΠΏΠΎΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. Π‘ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, процСсс ΠΈΠ»ΠΈ тСхнология, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ тСстировщик ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

    Но ΠΊΠ°ΠΊ говорится «ВсСгда Π΅ΡΡ‚ΡŒ тСмная сторона» .

    ВСстировщики Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΠ° тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ слоТным ΠΈ простым для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π”Π°, «тСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика».

    ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅

    ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика — это ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ спСцификации Π² ΠΊΠΎΠ΄Π΅:

    1. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π°

    2. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ сСгмСнта: Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

    3. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²ΠΈ ΠΈΠ»ΠΈ тСстированиС ΡƒΠ·Π»Π°: ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ ΠΊΠΎΠ΄Π° ΠΈΠ· всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π±Ρ‹Π»ΠΎ.

    4. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ слоТных условий: Для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… условий ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ условиС с нСсколькими путями ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ для достиТСния этого условия.

    5. ВСстированиС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ нСзависимый ΠΏΡƒΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ бСрСтся для тСстирования.

    6. ВСстированиС ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… (DFT): Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ отслСТиваСтС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ посрСдством ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ вычислСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ опрСдСляя Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ΄. DFT ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ зависимости, Π½ΠΎ Π² основном это происходит Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… манипуляции.ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, каТдая пСрСмСнная Π΄Π°Π½Π½Ρ‹Ρ… отслСТиваСтся, ΠΈ Π΅Π΅ использованиС провСряСтся. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ошибки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½ΠΎ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

    7. ВСстированиС ΠΏΡƒΡ‚ΠΈ: ВСстированиС ΠΏΡƒΡ‚ΠΈ — это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ прохоТдСния ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ трудоСмкая Π·Π°Π΄Π°Ρ‡Π°.

    8. ВСстированиС Ρ†ΠΈΠΊΠ»ΠΎΠ²: Π­Ρ‚ΠΈ стратСгии относятся ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ², составных Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ нСзависимыС ΠΈ зависимыС Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ значСния ΠΊΠΎΠ΄Π°.

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ WBT?

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ:

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

    Π’Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ошибок:

    • ЛогичСская ошибка ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ Π²ΠΊΡ€Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π½Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, условия ΠΈΠ»ΠΈ элСмСнты управлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ входят Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ фактичСская рСализация
    • ВипографичСскиС ошибки ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса
    Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π»ΠΈ для этого тСстирования ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ программирования?

    Нам Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСстовыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚.Π΅. ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄ для тСстирования. Для этого Ρ‚ΠΈΠΏΠ° тСстирования трСбуСтся Π·Π½Π°Π½ΠΈΠ΅ языков программирования ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ.

    ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

    НСвозмоТно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ тСстированиС для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСм Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

    Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ WBT нСэффСктивСн. Π’Ρ‹Π±ΠΎΡ€ Π²Π°ΠΆΠ½Ρ‹Ρ… логичСских ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… для тСстирования практичСски Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ эффСктивСн.

    Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ тСстированиСм Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» ΠΈ Β«Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика»

    ΠŸΡ€ΠΎΡ‰Π΅ говоря:

    ΠŸΡ€ΠΈ тСстировании Β«Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика» ΠΌΡ‹ тСстируСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Π² Β«Π±Π΅Π»ΠΎΠΌ ящикС» ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈ тСстируСм Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ΄.

    ΠŸΡ€ΠΈ тСстировании Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика ΠΌΡ‹ выполняСм тСстированиС, Π½Π΅ видя Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ систСмный ΠΊΠΎΠ΄, Π½ΠΎ Π² WBT ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈ тСстируСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΊΠΎΠ΄.

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

    Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ => ПолноС руководство ΠΏΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика

    Π¨Π°Π³ΠΈ ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ WBT

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

    Π¨Π°Π³ β„– 2 — Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ тСсты ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΈΡ….

    Когда ΠΌΡ‹ обсуТдаСм ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ тСстирования, Β«ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅Β» считаСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. Π—Π΄Π΅ΡΡŒ я объясню, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ максимальноС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π² контСкстС тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

    Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ => Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈ слСдствий — ΠΌΠ΅Ρ‚ΠΎΠ΄ написания динамичСских тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² для максимального ΠΎΡ…Π²Π°Ρ‚Π°

    Π’ΠΈΠΏΡ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика

    БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

    Π‘ΠΌ. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅ для справки.

    БСгодня ΠΌΡ‹ сосрСдоточимся Π² основном Π½Π° Ρ‚ΠΈΠΏΠ°Ρ… тСстирования исполнСния Β«Π’Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика».

    3 основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° тСстирования Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика»:

    1. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ заявлСний
    2. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ
    3. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚Π΅ΠΉ

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

    Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с этими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

    # 1) ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

    Π’ языкС программирования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ — это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ строка ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ инструкция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ соотвСтствСнно. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ становится исполняСмым ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ компилируСтся ΠΈ прСобразуСтся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ выполняСт дСйствиС, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° находится Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

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

    # 2) ΠžΡ…Π²Π°Ρ‚ Π²Π΅Ρ‚Π²Π΅ΠΉ:

    Β«Π’Π΅Ρ‚Π²ΡŒΒ» Π² языкС программирования ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Β«ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ IFΒ». ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ IF ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ: T rue ΠΈ False .

    Π˜Ρ‚Π°ΠΊ, Π² Π·ΠΎΠ½Π΅ покрытия Π²Π΅Ρ‚Π²Π΅ΠΉ (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ) ΠΌΡ‹ провСряСм, выполняСтся Π»ΠΈ каТдая Π²Π΅Ρ‚ΠΊΠ° хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

    Π’ случаС Β«ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° IFΒ» Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π²Π° условия тСстирования:

    • Одно для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ истинного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈ
    • Π”Ρ€ΡƒΠ³ΠΎΠ΅ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°.

    Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, тСорСтичСски, ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ — это ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

    # 3) ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ

    ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ провСряСт всС ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ комплСксный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ всС ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Ρ‹ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½ΠΎΠ΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для тСстирования слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

    Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ всС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

    Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ => Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ тСстирования

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика

    Рассмотрим простой псСвдокод Π½ΠΈΠΆΠ΅:

     INPUT A & B
    Π‘ = А + Π’
    Π•Π‘Π›Π˜ C> 100
    ΠŸΠ•Π§ΠΠ’Π¬ Β«Π‘Π”Π•Π›ΠΠΠžΒ» 

    Для покрытия Statement — Π½Π°ΠΌ понадобится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ тСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС строки ΠΊΠΎΠ΄Π°.

    Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚:

    Если я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ TestCase_01 (A = 40 ΠΈ B = 70), , Ρ‚ΠΎΠ³Π΄Π° всС строки ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос:

    1. Π­Ρ‚ΠΎΠ³ΠΎ достаточно?
    2. Π§Ρ‚ΠΎ, Ссли я ΡΡ‡ΠΈΡ‚Π°ΡŽ свой тСстовый случай A = 33 ΠΈ B = 45?

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Statement Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ сторону псСвдокода, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстового ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° НЕ Π±ΡƒΠ΄Π΅Ρ‚ достаточно для Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Как тСстировщик, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ случаи.

    Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для максимального покрытия Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Β« Branch Coverage Β» , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ условия Β«FALSEΒ».

    Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΠ³Π΄Π° условиС Π½Π΅ выполняСтся.

    Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ псСвдокод становится:

     INPUT A ΠΈ B
    
    Π‘ = А + Π’
    Π•Π‘Π›Π˜ C> 100
    ΠŸΠ•Π§ΠΠ’Π¬ Β«Π‘Π”Π•Π›ΠΠΠžΒ»
    ELSE
    
    ΠŸΠ•Π§ΠΠ’Π¬ Β«Π•Π“Πž Π’ ΠžΠ–Π˜Π”ΠΠΠ˜Π˜Β» 

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ покрытия ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° нСдостаточно для тСстирования всСго псСвдокода, Π½Π°ΠΌ потрСбуСтся ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Branch для обСспСчСния максимального покрытия .

    Π˜Ρ‚Π°ΠΊ, для покрытия Π²Π΅Ρ‚Π²Π΅ΠΉ Π½Π°ΠΌ потрСбуСтся Π΄Π²Π° тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ тСстированиС этого псСвдокода.

    TestCase_01 : A = 33, B = 45

    TestCase_02 : A = 25, B = 30

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ каТдая строка ΠΊΠΎΠ΄Π° выполняСтся хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

    Π’ΠΎΡ‚ Π²Ρ‹Π²ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сдСланы Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚:

    • ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ обСспСчиваСт большСС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Statement.
    • ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½ΠΎΠ΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Statement.
    • 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ само ΠΏΠΎ сСбС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².
    • Но 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ выписки Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„ΠΈΠ»ΠΈΠ°Π»Π°.

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ:

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

    Рассмотрим этот псСвдокод:

     INPUT A ΠΈ B
    Π‘ = А + Π’
    Π•Π‘Π›Π˜ C> 100
    ΠŸΠ•Π§ΠΠ’Π¬ Β«Π‘Π”Π•Π›ΠΠΠžΒ»
    
    ΠšΠžΠΠ•Π¦ Π•Π‘Π›Π˜
    Π•Π‘Π›Π˜ A> 50
    ΠŸΠ•Π§ΠΠ’Π¬ Β«Π•Π“Πž Π’ Π ΠΠ‘Π‘ΠœΠžΠ’Π Π•ΠΠ˜Π˜Β»
    END IF 

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ максимальноС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, Π½Π°ΠΌ потрСбуСтся 4 тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

    Как? ΠŸΡ€ΠΎΡ‰Π΅ говоря — Π΅ΡΡ‚ΡŒ 2 утвСрТдСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, поэтому для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ утвСрТдСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π°ΠΌ понадобится Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ для тСстирования. Один для истинного, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ — для Π»ΠΎΠΆΠ½ΠΎΠ³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для Π΄Π²ΡƒΡ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π°ΠΌ потрСбуСтся 2 тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ истинной стороны ΠΈ 2 тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π»ΠΎΠΆΠ½ΠΎΠΉ стороны, Ρ‡Ρ‚ΠΎ составляСт Π² ΠΎΠ±Ρ‰Π΅ΠΉ слоТности 4 тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ это, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½ΠΈΠΆΠ΅ Π±Π»ΠΎΠΊ-схСму псСвдокода, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ нас Π΅ΡΡ‚ΡŒ:

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, Π½Π°ΠΌ понадобятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ тСстовыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

    TestCase_01: A = 50, B = 60

    TestCase_02 : A = 55, B = 40

    TestCase_03: A = 40, B = 65

    TestCase_04: A = 30, B = 30

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ :

    ΠšΡ€Π°ΡΠ½Π°Ρ линия — TestCase_01 = (A = 50, B = 60)

    Биняя линия = TestCase_02 = (A = 55, B = 40)

    ΠžΡ€Π°Π½ΠΆΠ΅Π²Π°Ρ линия = TestCase_03 = (A = 40, B = 65)

    ЗСлСная линия = TestCase_04 = (A = 30, B = 30)

    ******************
    = >> Π‘Π²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ своС объявлСниС здСсь
    *****************

    Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика

    НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список основных инструмСнтов тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

    # 1) Veracode

    Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ тСстирования Π±Π΅Π»ΠΎΠ³ΠΎ ящика Veracode ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ быстро ΠΈ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ нСдостатки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΏΡ€ΠΈ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚Π°Ρ…. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько языков ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ .NET, C ++, JAVA ΠΈ Ρ‚. Π”., А Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, Π²Π΅Π±-ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρƒ Veracode Π΅ΡΡ‚ΡŒ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… прСимущСств. Для получСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± инструмСнтах тСстирования Veracode White box, поТалуйста, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка Π½Π° Π²Π΅Π±-сайт: Veracode

    # 2) EclEmma

    ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ EclEmma Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для тСстовых ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ² ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСдС Eclipse. Он считаСтся бСсплатным инструмСнтом для покрытия ΠΊΠΎΠ΄Π° Java ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ EclEmma ΠΈΠ»ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ Π½Π΅ΠΉ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка Π½Π° Π²Π΅Π±-сайт: EclEmma

    # 3) RCUNIT

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

    Бсылка Π½Π° Π²Π΅Π±-сайт: RCUNIT

    # 4) cfix

    cfix — ΠΎΠ΄Π½Π° ΠΈΠ· срСд ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования для C / C ++, СдинствСнная Ρ†Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ — ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π°Π±ΠΎΡ€ΠΎΠ² тСстов максимально простой ΠΈ Π»Π΅Π³ΠΊΠΎΠΉ. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, cfix ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ спСциализируСтся Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра NT ΠΈ Win32. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ cfix, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅

    Бсылка Π½Π° Π²Π΅Π±-сайт: cfix

    # 5) Googletest

    Googletest — это срСда тСстирования C ++ ΠΎΡ‚ Google.ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ тСстов, тСсты Π½Π° ΡΠΌΠ΅Ρ€Ρ‚ΡŒ, тСсты с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π½Π΅Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ сбои, созданиС ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎ тСстировании XML ΠΈ Ρ‚. Π”. — это нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ GoogleTest, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Linux, Windows, Symbian, Mac OS X — это нСсколько ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использовался GoogleTest. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка для скачивания: Googletest

    # 6) EMMA

    Emma — это простой Π² использовании бСсплатный инструмСнт для покрытия ΠΊΠΎΠ΄Π° JAVA. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ прСимущСств.Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± Π­ΠΌΠΌΠ΅, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка для скачивания: EMMA

    # 7) NUnit

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

    Бсылка для скачивания: NUnit

    # 8) CppUnit

    CppUnit — это Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования, написанный Π½Π° C ++ ΠΈ считаСтся ΠΏΠΎΡ€Ρ‚ΠΎΠΌ JUnit. ВСстовый Π²Ρ‹Π²ΠΎΠ΄ для CppUnit ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML ΠΈΠ»ΠΈ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Он создаСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты со своим собствСнным классом ΠΈ запускаСт тСсты Π² Π½Π°Π±ΠΎΡ€Π°Ρ… тСстов. Он ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ LGPL. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ CppUnit, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: CppUnit

    # 9) JUnit

    JUnit — это тихая простая срСда ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ тСстирования Π½Π° языкС программирования Java. Он Π² основном ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· тСстированиС, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ тСстами. Он находится ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Eclipse Public License. Π§Ρ‚ΠΎΠ±Ρ‹ бСсплатно Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ JUnit, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка для скачивания: JUnit

    # 10) JsUnit

    JsUnit считаСтся ΠΏΠΎΡ€Ρ‚ΠΎΠΌ JUnit для javascript.И это срСда ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ клиСнтского Javascript. Он находится ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GNU Public License 2.0, GNU Lesser Public License 2.1 ΠΈ Mozilla Public License 1.1. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ JsUnit, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅.

    Бсылка для скачивания: JsUnit

    Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ пСрСчислили Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ БтатичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° здСсь .

    НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простыС ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

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

    ΠŸΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° тСстированиС Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика нСдостаточно для максимального ΠΎΡ…Π²Π°Ρ‚Π° тСстированиСм. Нам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сочСтаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² тСстирования Β«Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика» ΠΈ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ максимальноС количСство Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ².

    Если всС сдСлано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, тСстированиС Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика», бСзусловно, повлияСт Π½Π° качСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. УчастиС Π² этом тСстировании Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для тСстировщиков, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅Β» ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ ΠΊΠΎΠ΄Π΅. πŸ™‚

    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Π½Π°ΠΌ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ вопросы ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсуТдали Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

    .

    White Box Testing — ΠžΡΠ½ΠΎΠ²Ρ‹ Π’Π•Π‘Π’Π˜Π ΠžΠ’ΠΠΠ˜Π― ΠŸΠ ΠžΠ“Π ΠΠœΠœΠΠžΠ“Πž ΠžΠ‘Π•Π‘ΠŸΠ•Π§Π•ΠΠ˜Π―

    WHITE BOX TESTING (Ρ‚Π°ΠΊΠΆΠ΅ извСстный ΠΊΠ°ΠΊ Clear Box Testing, Open Box Testing, Glass Box Testing, Transparent Box Testing, Code-Based Testing ΠΈΠ»ΠΈ Structural Testing) — это ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ внутрСнняя структура / Π΄ΠΈΠ·Π°ΠΉΠ½ / рСализация тСстируСмого элСмСнта извСстны тСстировщику.

    ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ISTQB

    • тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика: ВСстированиС, основанноС Π½Π° Π°Π½Π°Π»ΠΈΠ·Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы.
    • ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСстов ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика: ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° получСния ΠΈ / ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° тСстовых случаСв Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ систСмы.

    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

    Π’ΠΎ врСмя тСстирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» тСстСр Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡƒΡ‚Π΅ΠΉ прохоТдСния ΠΊΠΎΠ΄Π° ΠΈ опрСдСляСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹. Π’Π°ΠΆΠ½Ρ‹ Π½ΠΎΡƒ-Ρ…Π°Ρƒ Π² области программирования ΠΈ знания ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ВСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π»ΠΎΠ³ΠΎ ящика — это тСстированиС, выходящСС Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ Π² ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΉΡˆΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ систСмы.Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Π·Π²Π°Π½ Ρ‚Π°ΠΊ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² Π³Π»Π°Π·Π°Ρ… тСстировщика ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π±Π΅Π»Ρ‹ΠΉ / ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ящик; Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ясно Π²ΠΈΠ΄Π½ΠΎ.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€

    ВСстировщик, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ поля Π½Π° Π²Π΅Π±-страницС, опрСдСляСт всС допустимыС (Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ нСдопустимыС) И нСдопустимыС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ провСряСт Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° соотвСтствиС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСтся ΠΏΡƒΡ‚Π΅ΠΌ изучСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠΊΠΎΠ΄.

    White Box Testing ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ машина Π½Π΅ двиТСтся.

    Π£Ρ€ΠΎΠ²Π½ΠΈ

    ΠœΠ΅Ρ‚ΠΎΠ΄

    White Box Testing ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ уровням тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния:

    Однако Π² основном это примСняСтся ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌΡƒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

    • ВСстированиС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ стадии. НС Π½ΡƒΠΆΠ½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° станСт доступСн графичСский интСрфСйс.
    • ВСстированиС Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ покрытия Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡƒΡ‚Π΅ΠΉ.

    НСдостатки

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

    ВСстированиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика отличаСтся ΠΎΡ‚ тСстирования Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ «Различия ΠΌΠ΅ΠΆΠ΄Ρƒ тСстированиСм Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика» ΠΈ Β«Π‘Π΅Π»Ρ‹ΠΌ ящиком».

    (Π—Π½Π°Ρ‡ΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π±Ρ‹Π» сдСлан Π΄ΠΎΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Π΄ΠΈΡ†ΠΈΠ½Ρ‹ Π‘Π°Π΄ΡˆΠ° МСа с сайта www.freeicons.io )

    .

    По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ индустрия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ Π²ΠΎΠ΄ΠΎΠΏΠ°Π΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Π³ΠΈΠ±ΠΊΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π²Ρ‹ Π”ΠžΠ›Π–ΠΠ« Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ AGILE TESTING .

    .

    ПослСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ 17 сСнтября 2020 Π³., STF

    .

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

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