Skip to content

MATF-Software-Verification/2026_Analysis_click

Repository files navigation

Analiza projekta: Click - Command Line Interface Creation Kit

Autor: Jelena Lazović
Broj indeksa: 1045/2024
Kurs: Verifikacija Softvera


O projektu

Analizirani projekat: Click

Click (Command Line Interface Creation Kit) je Python biblioteka otvorenog koda za kreiranje interfejsa komandne linije. Razvijena od strane Pallets tima, ista organizacija koja održava Flask web framework.

Osnovne informacije:


Korišćeni alati

Projekat koristi 6 različitih alata za sveobuhvatnu analizu kvaliteta koda:

# Alat Kategorija Opis
1 Pytest Testiranje Jedinični testovi
2 Pylint Statička analiza Kvalitet koda
3 MyPy Type checking Type safety
4 Bandit Security Sigurnosne ranjivosti
5 Radon Kompleksnost Ciklomatska kompleksnost
6 Black Formatiranje Code style

Rezultati analize

1. Pytest - Jedinični testovi

Napisano testova: 28 novih testova

Distribucija:

  • test_decorators_advanced.py: 4 testa
  • test_utils_advanced.py: 11 testova
  • test_termui_advanced.py: 8 testova
  • test_types_advanced.py: 7 testova

Pokriveni scenariji:

  • Nested command groups (3+ nivoa)
  • Context propagacija između komandi
  • Unicode handling (Ћирилица, 你好, مرحبا, emoji)
  • File operacije
  • Terminal UI (prompts, confirmations, progress bars)
  • Type validation (File, Path, Bool, Tuple, Choice)

Status: Svi testovi prolaze (100% pass rate)

Komanda:

pytest unit_tests/ -v

2. Coverage - Pokrivenost koda

Rezultati:

Baseline:  81% (postojeći Click testovi)
Final:     81% (Click + naši testovi)
Change:    +0%

Analiza: Click već poseduje izuzetno kvalitetne testove sa 81% pokrivenosti, što je iznad industrijskog standarda (60-70%). Naši testovi validiraju funkcionalnost iz korisničke perspektive, ali testiraju iste putanje koje Click već pokriva.

Zaključak: Odsustvo povećanja pokrivenosti nije nedostatak analize, već pokazatelj visokog kvaliteta postojećih Click testova.

Komanda:

pytest click/tests/ unit_tests/ \
  --cov=click/src/click \
  --cov-report=html:reports/coverage

3. Pylint - Statička analiza

Rezultati:

Pylint Score: 8.87/10

Problemi po kategoriji:

Kategorija Broj Procenat
Convention 253 51.3%
Refactor 126 25.6%
Warning 112 22.7%
Error 2 0.4%
Ukupno 493 100%

Najčešći problemi:

  1. missing-function-docstring (76) - Funkcije bez docstring-a
  2. useless-import-alias (62) - Import aliasi (namerni re-export pattern)
  3. import-outside-toplevel (59) - Lazy loading pattern
  4. too-many-arguments (29) - CLI priroda framework-a
  5. redefined-builtin (28) - Prirodna imena za CLI parametre

Analiza: Odličan kvalitet koda. Većina problema su stilske prirode ili false positives specifični za framework kod.

Komanda:

pylint click/src/click/ --reports=y

4. MyPy - Type checking

Rezultati:

Type Precision: 90.86%
Imprecision:    9.14%
Type Errors:    0
Lines Analyzed: 11,120 LOC

Analiza po modulima (najbolji/najgori):

Najbolji (100% precision):

  • formatting.py, _textwrap.py, _winconsole.py, __init__.py

Za poboljšanje (najviša imprecision):

  • _termui_impl.py (17.61%) - Platform-specific kod
  • decorators.py (16.70%) - Generic decorators
  • _compat.py (14.47%) - Compatibility layer

Analiza: Click demonstrira odličnu type safety sa 90.86% type precision. Većina nepreciznosti je u platform-specific i compatibility kodu što je očekivano.

Komanda:

mypy click/src/click/ --html-report reports/mypy

5. Bandit - Security scanning

Rezultati:

Security Issues: 36
  High:   0
  Medium: 0
  Low:    36

Najčešći problemi:

Issue Type Count Severity
assert_used (B101) 13 Low
try_except_pass (B110) 10 Low
subprocess_without_shell (B603) 8 Low
blacklist subprocess (B404) 4 Low

Analiza: Click nema kritične security probleme. Svi detektovani problemi su low severity i predstavljaju false positives ili prihvatljive obrasce u framework kodu.

Komanda:

bandit -r click/src/click/ -f txt

6. Radon - Code complexity

Rezultati:

Average Complexity: A (3.32)

Distribucija kompleksnosti:

Grade Range Count Procenat
A 1-5 484 85.7%
B 6-10 64 11.3%
C 11-20 15 2.7%
D 21-30 5 0.9%
E 31-40 1 0.2%
F >40 1 0.2%

Najkompleksnije funkcije:

  1. Option.__init__ - F (47) - Konstruktor sa mnogo parametara
  2. Option.get_help_extra - E (34) - Help formatiranje
  3. Context.__init__ - D (28) - Inicijalizacija konteksta

Dodatne metrike:

  • Comment ratio: 26% (odlično)

Analiza: Izuzetno niska prosečna kompleksnost sa 85.7% funkcija grade A.

Komanda:

radon cc click/src/click/ -a -s
radon mi click/src/click/ -s

7. Black - Code formatting

Rezultati:

Files Checked:      17
Properly Formatted: 15 (88.2%)
Need Reformatting:  2 (11.8%)

Fajlovi za reformatiranje:

  • testing.py - Union type annotations
  • core.py - Assert statements i type annotations

Analiza: Click je 88.2% Black-compliant. Samo 2 fajla imaju minorne formatting razlike koje su kozmetičke prirode.

Komanda:

black --check --diff click/src/click/

Sveobuhvatni zaključak

Pozitivni aspekti

  1. Visok kvalitet postojećeg koda

    • 81% test coverage (iznad standarda)
    • 8.87/10 Pylint score
    • 90.86% type precision
    • 3.32 prosečna kompleksnost
  2. Bezbednost

    • 0 high/medium security issues
    • Sve subprocess operacije bezbedne (shell=False)
    • Nema hardcoded credentials
  3. Održivost

    • 85.7% funkcija sa niskom kompleksnošću
    • 26% comment ratio
    • Dobra dokumentacija

Identifikovani problemi

  1. Minor formatting inconsistencies - 2/17 fajlova (Black)
  2. Nedostajuća dokumentacija - 76 funkcija bez docstring-a
  3. Visoka kompleksnost - 7 funkcija (1.2%) sa D+ grade

Vrednost analize

Iako naši testovi nisu povećali numerički coverage, analiza je pružila:

  • Validaciju kvaliteta postojećeg koda
  • Potvrdu bezbednosti i održivosti
  • Demonstraciju multi-tool pristupa verifikaciji
  • Razumevanje da coverage nije jedina metrika kvaliteta

Struktura projekta

Svaki alat ima svoj direktorijum sa skriptom za pokretanje i rezultatima:

2026_Analysis_click/
├── README.md
├── ProjectAnalysisReport.md
├── click/                    # Analizirani projekat (git submodul)
├── unit_tests/               # Jedinični testovi
├── screenshots/              # Screenshot-ovi rezultata
├── pytest/
│   ├── run_pytest.sh         # Skripta za pokretanje
│   └── results/              # Rezultati
├── coverage/
│   ├── run_coverage.sh
│   └── results/
├── pylint/
│   ├── run_pylint.sh
│   └── results/
├── mypy/
│   ├── run_mypy.sh
│   └── results/
├── bandit/
│   ├── run_bandit.sh
│   └── results/
├── radon/
│   ├── run_radon.sh
│   └── results/
└── black/
    ├── run_black.sh
    └── results/

Pokretanje analiza

# Pojedinačno - svaki alat iz svog direktorijuma
./pytest/run_pytest.sh
./coverage/run_coverage.sh
./pylint/run_pylint.sh
./mypy/run_mypy.sh
./bandit/run_bandit.sh
./radon/run_radon.sh
./black/run_black.sh

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages