Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ
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 ΡΠΈΡΡΠ΅ΠΌ, Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΊΡΡΠ° Π»ΠΎΠ³ΠΈΠΊΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ Π·Π°ΠΊΠΎΠ½Π°ΠΌ, Ρ.Π΅. ΠΈΠ·Π²Π½Π΅ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π΅ Π·Π°ΡΡΠΎΠ½ΡΡΡ ΠΈΠ»ΠΈ Π΅ΠΉ ΡΠΏΡΠ°Π²Π»ΡΡΡ, Π° Π·Π½Π°ΡΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΡΡΡΠΈΡ Π² ΡΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Β«Π½ΠΈΠ·ΠΊΠΈΠΌΒ» ΡΡΠΎΠ²Π½ΡΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ, ΠΏΠΎΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΡΠΌ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π·Π°Π³Π»ΡΡΠΊΠ°Ρ
ΠΈ Ρ.ΠΏ.
Π₯ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠΈΡΡΠ°Ρ
: Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°Ρ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄, Π° ΡΠ΅ΡΡΡ Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΡΠΏΠ΅Π»ΠΈ; Π΅ΡΠ»ΠΈ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠΊΡΡΡΠΈΡ Π±ΡΠ» Π²ΡΡΠΎΠΊΠΈΠΌ, ΠΏΠΎΡΠΎΠΌ ΡΡΠ°Π» ΡΠ½ΠΈΠΆΠ°ΡΡΡΡ, Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³ β Π³Π΄Π΅-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ
ΠΎΡΠΎΡΠ΅Π΅ Π±Π΅Π»ΠΎΠ΅ ΠΏΡΡΠ½ΠΎ Π½Π΅Π΄ΠΎΡΠ΅Π΄ΡΠΈΡ
Π΄ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΈ Ρ.Π΄.
ΠΠΎΠΆΠ°Π»ΡΠΉ, ΡΡΠΎ Π²ΡΠ΅, ΡΡΠΎ Ρ Ρ ΠΎΡΠ΅Π»Π° ΡΠΊΠ°Π·Π°ΡΡ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ.