Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Code Coverage β€” Ρ…ΠΎΡ‡Ρƒ Π²Π΅Ρ€ΠΈΡ‚ΡŒ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ обязан Π·Π½Π°Ρ‚ΡŒ свои инструмСнты! Π—Π½Π°Π½ΠΈΠ΅ инструмСнтов ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°! НС ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· R#!

Подобного Ρ€ΠΎΠ΄Π° Ρ„Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΎΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… людСй: Ρ„Π°Π½Π°Ρ‚ΠΈΠΊΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ‚ΡƒΠ»Π·. Π‘Π»Ρ‹ΡˆΠΈΡ‚ ΠΈΡ… ΠΈ ΠΌΠΎΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ хочСтся ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Ρ‡Π΅ΠΌ-Ρ‚ΠΎ новСньким.

ΠŸΡ€Π°Π²Π΄Π°, инструкция ΠΊ инструмСнту ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ содСрТит Ρ€Π°Π·Π΄Π΅Π» Β«ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡΒ», Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ситуации ΠΊΠΎΠ³Π΄Π° НЕ стоит ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΌΠΎΠ³ Π±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Ρ‚ΠΎΠ½Π½Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ экспСримСнты.

БСгодня я ΠΏΠΎΡˆΠ²Ρ‹Ρ€ΡΡŽ ΠΊΠ°ΠΌΠ½ΠΈ Π² ΠΎΠ³ΠΎΡ€ΠΎΠ΄ Code Coverage (CC). Достаточно полСзная ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠ°Ρ‚ нСсколько скудно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Π±Π»Π΅ΠΉ.

Β«Π•ΡΡ‚ΡŒ лоТь, Π΅ΡΡ‚ΡŒ наглая лоТь
Π΅ΡΡ‚ΡŒ статистика».

Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ SonarQube это Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, Π½Π΅Π΄Π°Ρ€ΠΎΠΌ Ρƒ SonarQube с дСсяток CC ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ. Π― Π±ΡƒΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π±ΠΈΠ²Π°Ρ‚ΡŒ статистику ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ CC ΠΎΡ‚ DevExpress, Ρ‚Π°ΠΌ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° лишь ΠΎΠ΄Π½Π°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 1. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ тСст Π½Π΅ Ρ‚ΠΎΠ³ΠΎ. ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΊΡƒΡ‡Π΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ тСстами Π½Π° 83%, Ρ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно для Π°Π²Ρ‚ΠΎ-Π±ΠΈΠ»Π΄Π°. ВСхничСски ΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ ΠΎ Ρ‡Π΅ΠΌ, большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Π° тСстами, Π½ΠΎ основной сцСнарий тСстами Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚. ВСстами ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π½Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ваТная.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 2. ЗамСряСм Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, вмСсто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ.

ВСстируСмый ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ содСрТит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° null Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ β€” 100%. Иногда люди Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚: Code Coverage β€” это ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° покрытия ΠΊΠΎΠ΄Π°, Π½Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° закрытия Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ; Ссли Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π½Π΅ достаСт Π»ΠΎΠ³ΠΈΠΊΠΈ (ΠΌΠ΅Ρ‚ΠΎΠ΄ нСдостаточно слоТСн для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ своСй Π·Π°Π΄Π°Ρ‡ΠΈ) β€” CC это Π½Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.

100% покрытия Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ работоспособности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Доводя Π΄ΠΎ абсурда: пустой ΠΌΠ΅Ρ‚ΠΎΠ΄ элСмСнтарно покрываСтся Π½Π° 100%. НСпустой ΠΌΠ΅Ρ‚ΠΎΠ΄ покрываСтся Π½Π° 100% тСстами Π±Π΅Π· Assert-ΠΎΠ².

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 3. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΌ. НСмного ΠΈΠ½ΠΎΠ΅ проявлСниС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Как Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ΄ΠΈΠ½ тСст ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ 100% ΠΊΠΎΠ΄Π°. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ наш ΠΌΠ΅Ρ‚ΠΎΠ΄, избавившись ΠΎΡ‚ LINQ (для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ).

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ лишь 73% покрытия. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ измСнилась, ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° ΡƒΠΏΠ°Π»Π°. Мало Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ 100% покрытия Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ работоспособности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, эти 100% ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Π’Ρ‹Π²ΠΎΠ΄: LINQ β€” Π³**Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ CC ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π²Ρ‹ΡˆΠ΅Π½Ρ‹, ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.

БлСдствиС: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ инструмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ всСй ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ, Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ вСрная.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 4. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° отвСтствСнности.

ΠœΠ΅Ρ‚ΠΎΠ΄ покрываСтся Π½Π° 100% ΠΎΠ΄Π½ΠΈΠΌ тСстом. ΠŸΡ€ΠΈ этом ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ OuterLib Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π»Π΅ΠΆΠΈΡ‚ Π½Π° совСсти Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ Π΅Ρ‘ Π΄ΠΎΠ±Π°Π²ΠΈΠ». Или ΠΎΠ±Π½ΠΎΠ²ΠΈΠ». Π“ΠΎΠ΄Π° Ρ‚Ρ€ΠΈ Π½Π°Π·Π°Π΄, Π΄ΠΎ ввСдСния CC. Π”ΠΎ ΡƒΠ²ΠΎΠ»ΡŒΠ½Π΅Π½ΠΈΡ.
ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡΡ снова ΠΊΠΎΠ½ΡΡ‚Π°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΊΡ‚: ΠΌΠ°Π»ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ 100% покрытия Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ работоспособности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, эти 100% ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

Помимо чисто ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² CC

ΠŸΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΡ 0, всСм извСстная. 100% покрытия. НСт 100% покрытия β€” Π½Π΅Ρ‚ одобрСния Π±ΠΈΠ»Π΄Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ покрытия ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто, Π° Π²ΠΎΡ‚ послСдниС… ОсобСнно, ΠΊΠΎΠ³Π΄Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° гСнСрируСтся. Или нСдостиТима (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ создана для Васи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‘ ΡŽΠ·Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π° дня). Или просто тСорСтичСски достиТима, Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ\Π²Ρ‹ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ нСдСль (Ρ‚Π°ΠΊΠΎΠ΅ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ). ΠšΠΎΡ€ΠΎΡ‡Π΅, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΈΠ· Ρ‚Π΅Ρ… ΠΊΡ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ CC Π² CI) ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° 60\70\80 ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ покрытия.

ΠŸΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΡ 1, спорная. ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. На ΠΌΠΎΠ΅ΠΉ памяти схоТая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° особо ярко ΠΏΡ€ΠΎΡΠ²ΠΈΠ»Π°ΡΡŒ Π² Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Mirand-Ρ‹ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΈΠ· PVS. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ довольно ΡΠΌΠΎΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹, Π½ΠΎ Ρ‡Π°ΡΡ‚ΡŒ споров касалась ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: Ρ‡Π°ΡΡ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… диагностик ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π½Π° (Π·Π°Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅) ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, Π½ΠΎ Π½Π΅ Π½Π° ядро.

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: Π½ΡƒΠΆΠ΅Π½ Π»ΠΈ CodeCoverage для ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°? Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ внимания ΠΊ Π½Π΅ΠΌΡƒ привСтствуСтся. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ влияСт Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½, Ρ‚Π°ΠΊ стоит Π»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Π΅ΠΌΡƒ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° CC ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ?

ΠŸΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΡ 2. Π’Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ 1. Π’ ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°: Β«ΠΎΠΏΠ»Π°Ρ‚Π°Β» ΠΈ Β«ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ²ΠΎΡ€ΠΊΠ°Β». Β«ΠžΠΏΠ»Π°Ρ‚Π°Β» ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ я Π²ΠΏΠΎΠ»Π½Π΅ согласСн с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Β«80% покрытия», Β«ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ²ΠΎΡ€ΠΊΠΎΠΉΒ» ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 1.5 анонимуса. Π’ Π³ΠΎΠ΄. И ΠΎΠ½Π° Π½Π΅ мСнялась ΡƒΠΆΠ΅ Π΄Π²Π° Π³ΠΎΠ΄Π°. Вопрос: для Ρ‡Π΅Π³ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ тСсты ΠΊ ΠΏΠΎΠ»ΡƒΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ? Π›ΠΈΡˆΡŒ для получСния 80% Π±Π΅ΠΉΠ΄ΠΆΠ° одобрСния автосборки?

ΠŸΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΡ 3, нСвозмоТная. ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° ΠΊΠ°ΠΊ Π°Ρ‡ΠΈΠ²ΠΊΠ°. Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ провСряСт Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΎ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ Π±Π°ΠΉΠΊΠΈ ΠΏΡ€ΠΎ ΠΎΠΏΠ»Π°Ρ‚Ρƒ Π·Π° Π»ΠΈΠ½ΠΈΠΈ ΠΊΠΎΠ΄Π°? МнС доводилось ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π²ΠΎΡ€ΠΈΠ»ΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄Π° для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ покрытия.

ΠŸΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΡ 4. ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° Β«Π·Π° бСсплатно». Когда руководство скидываСт Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Β«ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ Π½Π° 80%Β», ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π±Π΅Π·Ρ€ΠΎΠΏΠΎΡ‚Π½ΠΎ ΡΠΎΠ³Π»Π°ΡˆΠ°ΡŽΡ‚ΡΡ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ этом β€” ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ. Или ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ. Или Π΄Π΅Π΄Π»Π°ΠΉΠ½ Π½Π° носу. Или имССтся Π·Π΄ΠΎΡ€ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°ΠΊΠ°Ρ€ΠΎΠ½Π½Ρ‹ΠΉ лСгаси монстр Π±Π΅Π· Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ тСста.

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ! Если ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΈ Π·Π°ΠΌΠ΅Ρ€ΡΡ‚ΡŒ β€” врСмя Π½Π° тСсты ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ возрасти (хотя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΡΡ‚ΡŒ). Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ успСла ΡΠ΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² срок, Π½ΠΎ Π·Π°Ρ‚ΠΎ достигла 80% покрытия β€” Π²ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ руководством ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. Вопрос Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π° Π²ΠΈΠ½Ρ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ стоит, ΠΈΠ±ΠΎ Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€.

Под ΠΊΠΎΠ½Π΅Ρ†. Π•Ρ‰Π΅ Ρ€Π°Π· Π·Π°ΠΌΠ΅Ρ‡Ρƒ: Π‘Π‘ β€” ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° полСзная, Ρ…ΠΎΡ‚ΡŒ ΠΈ с ΡΡŽΡ€ΠΏΡ€ΠΈΠ·Π°ΠΌΠΈ. Она Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ ΠΊΠΎΠ΄Π°, Ссли Π½Π΅Ρ‚ слСпого стрСмлСния ΠΊ Ρ†ΠΈΡ„Ρ€Π°ΠΌ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ….

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ тСстирования: ΠΏΠΎΡ‡Π΅ΠΌΡƒ 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° это ΠΏΠ»ΠΎΡ…ΠΎ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

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

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π½Π° основС выступлСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Positive Technologies Ивана Π¦Ρ‹Π³Π°Π½ΠΎΠ²Π° Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Moscow Python Conf (слайды, Π²ΠΈΠ΄Π΅ΠΎ).

Π—Π°Ρ‡Π΅ΠΌ ΠΌΡ‹ пишСм тСсты

Π˜Π‘-экспСрты Positive Technologies проводят Π±ΠΎΠ»Π΅Π΅ 200 Π°ΡƒΠ΄ΠΈΡ‚ΠΎΠ² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ бСзопасности Π² Π³ΠΎΠ΄, Π½ΠΎ ΠΌΡ‹ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго продуктовая компания. Один ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² β€” систСма контроля защищСнности ΠΈ соотвСтствия стандартам MaxPatrol.

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π±ΠΎΠ»ΡŒΡˆΠΈΡ… подсистСм:

НуТно Π»ΠΈ 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅

Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” ΠΌΠ½ΠΎΠ³ΠΈΠ΅ спСциалисты ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° покрытия тСстами Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ качСствС тСстирования. На самом Π΄Π΅Π»Π΅ это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ. Π”Π°, это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π°Ρ‡ΠΈΠ²ΠΊΠ° (Β«Ρƒ нас 100% coverage!Β»), Π½ΠΎ это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ протСстирован. Π‘Ρ‚ΠΎΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ лишь ΠΎ стопроцСнтном ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ΄Π° тСстами, ΠΈ Π½ΠΈ ΠΎ Ρ‡Π΅ΠΌ большС.

Для Python Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ стандартом ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ покрытия являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° coverage.py. Она позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами, Ρƒ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ для pytest. Π’ основном, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Π½Π΅ всСгда.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ тСстами Π½Π° 100%. И Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΠΉ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ coverage.py Π½Π΅Ρ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Но Π½Π° Π±ΠΎΠ»Π΅Π΅ слоТной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ тСст Π΄Π°Π΅Ρ‚ 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, ΠΏΡ€ΠΈ этом функция остаСтся Π½Π΅ протСстированной. ΠœΡ‹ Π½Π΅ провСряСм ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° СдинствСнный β€˜if’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обСрнСтся Π² False.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π£ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ исполнСния ΠΊΠΎΠ΄Π°. Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² этом Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΈΠ· Ρ‚Ρ€Π΅Ρ‚Π΅ΠΉ Π² ΠΏΡΡ‚ΡƒΡŽ строку ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° всСх запусках тСстов ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ ΠΈΠ· Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строки сразу Π² ΠΏΡΡ‚ΡƒΡŽ, Π° всСгда ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π² Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡƒΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ β€œif” Π½Π° всСх тСстовых Π΄Π°Π½Π½Ρ‹Ρ… оборачивался Π² True.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Как считаСтся ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅

БущСствуСт простая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для расчСта покрытия ΠΊΠΎΠ΄Π° тСстами:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Coverage.py Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΉ схСмС β€” сначала Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Π΅Ρ€Π΅Ρ‚ всС исходники ΠΈ прогоняСт Ρ‡Π΅Ρ€Π΅Π· собствСнный Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для получСния списка инструкций. Π­Ρ‚ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ всС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ «интСрСсныС» с Π΅Π³ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ„Π°ΠΊΡ‚Ρ‹, Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ code-object ΠΈ сохраняСт Π½ΠΎΠΌΠ΅Ρ€Π° строк. ΠŸΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΎΠ½ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ опрСдСлСния классов, «сворачиваСт» многострочныС выраТСния ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ строками ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

ΠžΠΏΡΡ‚ΡŒ бСрСтся исходный ΠΊΠΎΠ΄ ΠΈ анализируСтся классом AstArcAnalyzer для получСния ΠΏΠ°Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” ΠΈΠ· ΠΊΠ°ΠΊΠΎΠΉ строки Π² ΠΊΠ°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄. AstArcAnalyzer ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ AST-Π΄Π΅Ρ€Π΅Π²ΠΎ исходников с ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π½ΠΎΠ΄Ρ‹, ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π½ΠΎΠ΄ отрабатываСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.
Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… строках β€” для этого Π² coverage.py ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция settrace. Она позволяСт Π½Π°ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ трассировки, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ наступлСнии Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… событий.

НапримСр, ΠΏΡ€ΠΈ наступлСнии события β€œcall” ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция ΠΈΠ»ΠΈ ΠΌΡ‹ вошли Π² гСнСратор… Π’ этом случаС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сохраняСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ контСкста, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ контСкста, учитывая особСнности Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π΅ нас событиС β€” событиС β€œline”. Π’ этом случаС запоминаСтся выполняСмая строка ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ строками. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ return ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· контСкста β€” Ρ‚ΡƒΡ‚ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ yield Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ наступлСниС события β€œreturn”.

ПослС этого строится ΠΎΡ‚Ρ‡Π΅Ρ‚. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ β€” ΠΏΠΎ этим Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ΄Π° тСстами.

ВсС эти слоТности с ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠΌ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°, AST-Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ слоТного ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚. Казалось Π±Ρ‹, Π²ΠΎΡ‚ ΠΎΠ½Π° сСрСбряная пуля, всС просто ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ. Но Π½Π° самом Π΄Π΅Π»Π΅ всС Π½Π΅ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Π²Ρ‹Π·ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с условиСм ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ всСгда. И ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это условиС всСгда ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π»ΠΎΡΡŒ Π² false.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈ ΠΏΡ€ΠΈ использовании lambda β€” Π²Π½ΡƒΡ‚Ρ€ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ coverage.py Π½Π΅ заглядываСт ΠΈ Π½Π΅ скаТСт Π½Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΎ. НС смоТСт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈ с list, dict, set-comprehensions.

ВсС эти случаи ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅. Как ΠΌΡ‹ выяснили Π²Ρ‹ΡˆΠ΅, coverage.py ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ парсСр ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список инструкций. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ являСтся ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ инструкций, Π° Π½Π΅ строк ΠΊΠΎΠ΄Π°.

Π”Π΅Π»Π°Π΅ΠΌ ΠΌΠΈΡ€ Π»ΡƒΡ‡ΡˆΠ΅

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ срабатывало условиС β€œor c”. Ни ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΆΠΈΠΌ coverage.py Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² этом случаС?

МоТно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ трассировки, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Ρ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ, фактичСски, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ coverage.py. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство событий: call, line, return, exception. МалСнькиС частички ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ast.NodeTransformer. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² Β«Π½Π΅Ρ‡Ρ‚ΠΎΒ» ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π½ΠΎΠ΄Ρƒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ AST ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ΄Ρƒ Π² β€œΠ½Π΅Ρ‡Ρ‚ΠΎβ€, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΏΡ€ΠΈ этом Π»ΠΎΠ³ΠΈΠΊΡƒ исполнСния. Π”Π° ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС Π½ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

Но ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π§Ρ‚ΠΎ Ссли, Π²ΠΎ врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ, ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ модуля, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π²Ρ‹Π·ΠΎΠ² своСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трассировки, ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ code-object ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. ИмСнно эта идСя Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpTrace.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ OpTrace

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Import.Hookβ€” здСсь всС довольно просто. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Finder, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пропускаСт нСинтСрСсныС Π½Π°ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, создав для Π½ΡƒΠΆΠ½Ρ‹Ρ… Loader. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, этот класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ модуля, строки Π΅Π³ΠΎ исходного ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π² качСствС ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ модуля.

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всС это Ρ‚Π°ΠΊ. БоздаСтся wrapper, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Β«ΠΏΡ€ΠΎΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡΒ» Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” пСрвая Π½ΡƒΠΆΠ½Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ посСщСнный (visitor). Π—Π°Π΄Π°Ρ‡Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” просто ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠΊΠΎΠ΄ сущСствуСт Π² исходникС (marker).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π’ Python Π΅ΡΡ‚ΡŒ ряд инструмСнтов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, это ΠΌΠΎΠ΄ΡƒΠ»ΡŒ dis ΠΈ Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π² красивом Π²ΠΈΠ΄Π΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

ПодобноС прСдставлСниС ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. БущСствуСт ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” get_instructions. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ code-object ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список инструкций.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

На этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ строится Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° обходится вСсь Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ сущСствованиС ΠΎΠΏΠΊΠΎΠ΄Π° вызываСтся ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡˆΠ΅Π½Π½Π°Ρ Ρ€Π°Π½Π΅Π΅ функция marker.

Π‘ трассировкой Π΄Π΅Π»ΠΎ обстоит нСсколько слоТнСС. НСльзя просто Ρ‚Π°ΠΊ Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ² ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π½ΡƒΠΆΠ½Ρ‹Ρ… Π½Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π£ CodeObject Π΅ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ consts β€” это доступныС Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ константы. Π’ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ β€œΠ·Π°ΠΌΠΊΠ½ΡƒΡ‚ΡŒβ€ Π² Π½Π΅Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π·Π²Π°Π² эту лямбду ΠΈΠ· констант Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΌΡ‹ смоТСм Ρ‚Ρ€Π°ΡΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ². Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ лишь ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ для Π²Ρ‹Π·ΠΎΠ²Π° константы.

Π’Π°ΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠΊΠΎΠ΄ β€” Π½ΡƒΠΆΠ½ΠΎ Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ β€” ΠΈ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ смСщСниС Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠΊΠΎΠ΄Π°Ρ…. ПослС оборачивания Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π‘ΠΎΠ»Π΄ΠΎΠΌ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ подсвСчСн ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ трассируСмый Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄. ПослС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты. Π’Π°ΠΊ ΠΌΡ‹ выясним, какая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ, Π° какая Π½Π΅Ρ‚. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, Π° Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π½Π΅ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΎΠΏΠΊΠΎΠ΄Π°ΠΌΠΈ? Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π° 50 000 строк ΠΈΡ… пСрСчислСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ нСсколько страниц.

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Допустим, Ρ‡Ρ‚ΠΎ строки Ρƒ нас всСгда Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² строкС для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠΊΠΎΠ΄Π°. Рассмотрим нСслоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΎΠΏΠΊΠΎΠ΄ΠΎΠΌ LOAD_FAST. Π•Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π² извСстной Π½Π°ΠΌ строкС Π½Π°ΠΉΡ‚ΠΈ Π΅Π΅ имя.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

ΠŸΠΎΠΊΡ€Ρ‹Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 70 Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ вмСняСмый ΠΎΡ‚Ρ‡Π΅Ρ‚. Но ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠΊΠΎΠ΄Ρ‹ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Новый ΠΎΡ‚Ρ‡Π΅Ρ‚ выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. НапримСр, ΠΌΡ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ сработал LOAD_FAST для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ c.

OpTrace: минусы ΠΈ ΠΏΠ»ΡŽΡΡ‹

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ имССтся ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

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

Одной ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ этого исслСдования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π»Π° дСмонстрация Ρ„Π°ΠΊΡ‚Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ сущСствуСт ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Coverage.py Ρ…ΠΎΡ€ΠΎΡˆ, Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ β€” слСпо Π²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌ нСльзя. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ всСгда Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€œΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈβ€.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ тСзис β€” coverage Π² 100% расслабляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Π Π°Π· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ нСльзя ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ β€” это просто Π°Ρ‡ΠΈΠ²ΠΊΠ°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

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

Code Coverage

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Code Coverage?

Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Code Coverage?

НачнСм с Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠ»Π°Π³ΠΈΠ½Π° для сборки ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² ΠΎΠ΄Π½Ρƒ ΠΊΡƒΡ‡Ρƒ. Π― Π»ΠΈΡ‡Π½ΠΎ для сСбя Π²Ρ‹Π±Ρ€Π°Π» JaCoCo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π°ΠΊΠΈ собираСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ΄Π°. Но Π΅ΡΡ‚ΡŒ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹.

Π‘Π°ΠΉΡ‚ JaCoCo ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΠΌ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½, Π½ΠΎ ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΌΡ‹ Π½Π΅Ρ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ, вСдь ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Build System Maven. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Maven Repository ΠΈ ΠΈΡ‰Π΅ΠΌ JaCoCo Plugin. Π‘Π΅Ρ€Π΅ΠΌ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ, ΠΈ вставляСм Π² наш pom.xml Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.

Но Ρ‡Π΅Ρ€Π΅Π· dependencies я Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ, вСдь Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ, Π±ΠΎΠ»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½.

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ CodeCov Setup Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ язык Java ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Using JaCoCo ΠΏΠ»Π°Π³ΠΈΠ½, ΠΈ ставим ΠΏΠΎ инструкции.

По Ρ‚ΠΎΠΉ ΠΆΠ΅ ссылкС Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Using Maven. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅. Cobertura Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· CI тСстов, Π½ΠΎ ΡƒΠ²Ρ‹ ΠΈ Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π²ΠΎΡ…. ВсС Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ JDK 7 (А Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ 10 Π΅ΡΡ‚ΡŒ) Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ остановимся Π½Π° 1 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² нашСм pom.xml Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΠ³ΠΎ:

И Π² Maven Projects Π² спискС ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² появится JaCoCo Plugin:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π˜Ρ‚Π°ΠΊ, исходя ΠΈΠ· Using JaCoCo, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² наш Ρ„Π°ΠΉΠ»:

ВсС Π²Ρ€ΠΎΠ΄Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, ΠΈ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΡˆΡ‚Ρ€ΠΈΡ…ΠΈ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π°Π²Π°ΠΉΡ‚Π΅ скомпилируСм наш ΠΊΠΎΠ΄, ΠΈ запустим всС тСсты, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ сдСлаСм это Ρ‡Π΅Ρ€Π΅Π· Lifecycle Maven:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас Π² ΠΏΠ»Π°Π³ΠΈΠ½Π΅ JaCoCo стоит Ρ„Π°Π·Π° выполнСния test, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» появится ΠΎΡ‚Ρ‡Π΅Ρ‚ послС выполнСния Ρ†ΠΈΠΊΠ»Π° тСстов Maven Π² ΠΏΠ°ΠΏΠΊΠ΅ target:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ прСкрасно, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ лишь убСдится Ρ‡Ρ‚ΠΎ это «Π²ΡΠ΅ прСкрасно» Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… источниках. Настала ΠΏΠΎΡ€Π° ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Π² ΠΊΡƒΡ‡Ρƒ. Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ push Π½Π° GitHub, ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΎΡ‚ΠΊΡ€Ρ‹Π² Travis CI ΠΈ Codecov для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° происходящСго.

ПослС push ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ сборка ΡƒΡΠΏΠ΅ΡˆΠ½Π°Ρ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

И Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ JaCoCo ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ΄Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ? Π”Π°, Π΄Π°, ΠΌΡ‹ Π·Π°Π±Ρ‹Π» ΠΏΡ€ΠΎ Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊ. Π― Ρ…ΠΎΡ‚Π΅Π» вынСсти Ρ‚Π΅ΠΌΡƒ «Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅» open-source project’ΠΎΠ² Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π½ΠΎ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ всС ΠΆΠ΅ ΠΎΡΡ‚Π°Π²Π»ΡŽ здСсь.

Π˜Ρ‚Π°ΠΊ, пошаговая инструкция Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½Π΅ заблудится:

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ;

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Badge ΠΈ Π²ΠΈΠ΄ΠΈΠΌ ссылки Π½Π° ваш Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊ Π² нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ… прСдставлСния:

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ это стандартныС Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊΠΈ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ваш README.md:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами

Π˜Ρ… ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ°Π½ΠΈΠΈ Π½Π° Π½ΠΈΡ… вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π° страницу с ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠΌ ΠΎ CC;

Π’Ρ‚ΠΎΡ€Ρ‹Π΅ это Π³Ρ€Π°Ρ„Ρ‹, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΡˆΡ‚ΡƒΠΊΠΈ:

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

О ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°Ρ… тСстирования: code coverage для тСстировщиков

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ‚Π΅ΡΡ‚Π°ΠΌΠΈΠšΠ°ΠΊ извСстно ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ Β«ΠŸΡƒΡ‚Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ для ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… автостопом ΠΏΠΎ Π³Π°Π»Π°ΠΊΡ‚ΠΈΠΊΠ΅Β», ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π³Π»Π°Π²Π½Ρ‹ΠΉ вопрос ΠΆΠΈΠ·Π½ΠΈ, всСлСнной ΠΈ всСго Ρ‚Π°ΠΊΠΎΠ³ΠΎ β€” 42. ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ покрытия ΠΊΠΎΠ΄Π° ΠΏΠΎ линиям Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² β€” 81, Π΄Π°Π΅Ρ‚ Π»ΠΈ эта Ρ†ΠΈΡ„Ρ€Π° ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π³Π»Π°Π²Π½Ρ‹ΠΉ вопрос тСстирования Β«cколько тСстов достаточно для опрСдСлСния качСства ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Β»?

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Π°ΠΉΡ‚ΠΈ-сфСрС ΠΈ тСстировании я Π²ΠΈΠ΄Π΅Π»Π° ΠΌΠ°Π»ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π³Π΄Π΅ тСстировщики Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ code coverage Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅. Бвязано это Π½Π° ΠΌΠΎΠΉ взгляд с двумя Π²Π΅Ρ‰Π°ΠΌΠΈ:

1. Π’Π΅ΠΌ, Ρ‡Ρ‚ΠΎ тСстируСм ΠΌΡ‹ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго трСбования;
2. Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΌΡΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ свой взгляд Π½Π° эти 2 ΠΏΡƒΠ½ΠΊΡ‚Π°.

ВрСбования vs ΠΊΠΎΠ΄

ВСстировщик тСстируСт трСбования. Π”Π°ΠΆΠ΅ Ссли ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅Ρ‚, Π΅ΡΡ‚ΡŒ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° вСсти сСбя систСма. Π­Ρ‚ΠΎ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π²Π°ΠΆΠ½ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅.
Но.
НС Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΈΡ… ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, смСло ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ систСма Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ ΠΈ Π±Π°Π³ΠΎΠ² Π½Π΅Ρ‚.

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

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

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ?

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

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΠ»ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ случаи:
1. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ с сСрвСром Π‘Π” Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно;
2. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ с сСрвСром Π‘Π” установлСно, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса Π²Ρ‹Π·Π²Π°Π»ΠΎ ΠΎΡ€Π°ΠΊΠ»ΠΎΠ²ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ;
3. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ с сСрвСром Π‘Π” Π±Ρ‹Π»ΠΎ установлСно, запрос Π½Π°Ρ‡Π°Π» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈ завис β€” Ρ‚ΡƒΡ‚ Π±Ρ‹Π» Π±Π°Π³. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΆΠ΄Π°Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΌΠΈΠ½ΡƒΡ‚ 5, ΠΏΠΎΡ‚ΠΎΠΌ Π² Π»ΠΎΠ³ΠΈ Π»Π΅Ρ‚Π΅Π» эксСпшн ΠΈ большС ΠΎΠ½ΠΎ эти Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ ΠΏΡ‹Ρ‚Π°Π»ΠΎΡΡŒ.

ΠŸΠ°Ρ€Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π΅ стоило внимания ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ трСбования Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈ 1-ΠΌ кСйсом, Π½ΠΎ Π±Π°Π³ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ послС Π°Π½Π°Π»ΠΈΠ·Π° покрытия ΠΊΠΎΠ΄Π°. МоТно ΠΏΠΎΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΎ пользС code coverage, Π° ΠΎ пользС взаимодСйствия Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ кСйсы Π½Π° Ρ€Π΅Π²ΡŒΡŽ), Π½Π° самом Π΄Π΅Π»Π΅ я всСгда Ρ‚Π°ΠΊ дСлаю Π½ΠΎ Π½Π΅ ΠΎ всСм догадаСшься ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, часто Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π²Π΅Ρ‰Π°ΠΌ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°ΡŽΡ‚ Π½Π΅ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°.

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

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

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡƒΡΡ‚ΡŒ тСстировщик тСстируСт трСбования, Π½ΠΎ Ссли ΠΎΠ½ смотрит Π΅Ρ‰Π΅ ΠΈ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² трСбованиях Π½Π΅ описано ΠΈ Ρ…ΠΈΡ‚Ρ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ тСст-Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ‚ΠΎΠΆΠ΅ Π½Π΅ всСгда Π½Π°ΠΉΠ΄ΡƒΡ‚.

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ = 80. А качСство?

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ качСство. ΠžΡ†Π΅Π½ΠΊΠ° покрытия ΠΊΠΎΠ΄Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ связана с качСством ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Π½ΠΎ связана опосрСдованно.
На ΠΎΠ΄Π½ΠΎΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚Π½ΠΎΠΌ совСщании я заявила, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρƒ нас ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ 82% ΠΏΠΎ линиям ΠΈ 51% ΠΏΠΎ условиям, послС Ρ‡Π΅Π³ΠΎ руководством ΠΌΠ½Π΅ Π±Ρ‹Π» Π·Π°Π΄Π°Π½ вопрос: «А Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚? Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ?Β» Π—Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ вопрос, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: сколько Π½Π°Π΄ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ?

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

К вопросу ΠΎΠ± «это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΒ»: качСствСнная ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π΅ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π²Π΅Π΄Π΅Ρ‚ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΠΊ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎΠΌΡƒ использованию code coverege. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π»ΠΈ, Π° Π½Π΅ сколько. Если это java-ΠΊΠΎΠ΄ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ toString(), equals() ΠΈΠ»ΠΈ Π²Π΅Ρ‚Π²ΠΈ с exception, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТно воспроизвСсти ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ, Π½Ρƒ Ρ‚Π°ΠΊ ΠΈ Π»Π°Π΄Π½ΠΎ, ΠΏΡƒΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ 80% покрытия Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Β«Π›ΠΈΡˆΠ½ΠΈΠΉΒ» ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ инструмСнты ΡƒΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ.
Если сомнСния Π² Π±Π΅Π»Ρ‹Ρ… пятнах всС-Ρ‚Π°ΠΊΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ тСстами ΠΈ ΡŽΠ½ΠΈΡ‚ β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ навСрняка ΡƒΡ‡Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Ρ‡Ρ‚ΠΎ труднодоступно для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… тСстов.

Однако Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Β«Π½ΠΎΒ». Π§Ρ‚ΠΎ, Ссли ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½ΠΈΠ·ΠΊΠΎΠ΅? 20%, 30%? Π“Π΄Π΅-Ρ‚ΠΎ я Ρ‡ΠΈΡ‚Π°Π»Π° Π·Π°Π±Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ 50% ΠΈ мСньшС (ΠΏΠΎ линиям ΠΈ условиям, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ помнится) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ тСстового покрытия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ отсутствии тСстирования Π²ΠΎΠΎΠ±Ρ‰Π΅. Π’.Π΅. Ρ‚Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π³ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π³ΠΎΠ², с Ρ‚Π΅ΠΌ ΠΆΠ΅ успСхом Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π΅Π³ΠΎ ΠΈ Π½Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π”Ρ€ΡƒΠ³ΠΎΠ΅ объяснСниС β€” ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ маловСроятно.

А Ρƒ нас Π½Π΅Ρ‚ автотСстов

А ΠΎΠ½ΠΈ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π”Π°ΠΆΠ΅ Ссли вас ΡƒΠ²Π΅Ρ€ΡΡŽΡ‚ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ Π² курсС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΡŽΠ½ΠΈΡ‚ тСстов. Π•ΡΡ‚ΡŒ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, Ρ‚.Π΅. ставитС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ инструмСнтированный Π±ΠΈΠ»Π΄, ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° Π½Π΅ΠΌ тСсты, Π° ΠΎΠ½ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅.

А смысл?

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

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎ порядку, ΠΊΡƒΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ рСсурсы, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ code coverage:

ΠŸΡƒΠ½ΠΊΡ‚Ρ‹ 1 ΠΈ 2 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, ΠΌΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Π·Π½Π°ΠΊΠΎΠΌΡ‹-ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ-Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с общСизвСстными Ρ‚ΡƒΠ»Π°ΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ смогут ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ собствСнный Π±ΠΈΠ»Π΄. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, дСлаСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΈΠ»ΠΈ автоматичСски, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ CI (Ρƒ мСня это Π΄Π΅Π»Π°Π» jenkins, ΠΎΠ½ ΠΆΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΎΡ‚Ρ‡Π΅Ρ‚).
Π‘Π°ΠΌΠΎΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎΠ΅ β€” это Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚. Основная Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ‚ΡƒΡ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π°Π΄ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π»ΠΈΠ±ΠΎ ΡΠ°Π΄ΠΈΡ‚ΡŒΡΡ рядом с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ объяснял, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ этот кусок, ΠΈ ΠΊΠ°ΠΊ это воспроизвСсти. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ тСст-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ 1 ΠΈΠ»ΠΈ 2 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΎΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ β€” Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈ Π΅Π΅ руководитСлям. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π³Π΄Π΅ трСбования слабо Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Π»ΠΈΠ±ΠΎ Π±Π°Π³ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π½Π΅ΠΎΠ±ΡŠΡΡΠ½ΠΈΠΌΡ‹ΠΌ для тСстСров ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ хотя Π±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡƒΠ΄Π° ΠΊΠΎΠΏΠ°Ρ‚ΡŒ.
Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° катСгория β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ hight-level black box тСстированиС. Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго тСстированиС Ρ‡Π΅Ρ€Π΅Π· UI ΠΈΠ»ΠΈ внСшний API систСм, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТится ΠΊΡƒΡ‡Π° Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎ своим Π·Π°ΠΊΠΎΠ½Π°ΠΌ, Ρ‚.Π΅. ΠΈΠ·Π²Π½Π΅ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ Π΅ΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Анализ покрытия Π² Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… создаст Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π±ΠΎΠ»Π΅Π΅ Β«Π½ΠΈΠ·ΠΊΠΈΠΌΒ» уровням тСстирования: ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΌ, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Π·Π°Π³Π»ΡƒΡˆΠΊΠ°Ρ… ΠΈ Ρ‚.ΠΏ.
Π₯ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² Ρ†ΠΈΡ„Ρ€Π°Ρ…: Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° вливаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° тСсты Π΅Ρ‰Π΅ Π½Π΅ подоспСли; Ссли ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ покрытия Π±Ρ‹Π» высоким, ΠΏΠΎΡ‚ΠΎΠΌ стал ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒΡΡ, Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ уровня Ρ‚Π°ΠΊ ΠΈ Π½Π΅ достиг β€” Π³Π΄Π΅-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π±Π΅Π»ΠΎΠ΅ пятно Π½Π΅Π΄ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… Π΄ΠΎ тСстирования Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΈ Ρ‚.Π΄.

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, это всС, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π»Π° ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° сСгодня.

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

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

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