Skip to main content

Applicativo per semplici calcoli sulla popolazione di 10 paesi del mondo

Project description

DATI UTILI


Indirizzo repository gitlab: https://gitlab.com/theunusual/2020_assignment1_countries

Studenti:

  • 807019 Patrick Militello
  • 816099 Alessandro Bosco
  • 862037 Raffaello Passarelli

INTRODUZIONE


Il progetto in esame è basato sul rendere il processo di sviluppo software più efficace ed efficiente tramite l'utilizzo di una pipeline CI/CD su Gitlab. La pipeline utilizzata, che consente di automatizzare l'intero processo di sviluppo, è costituita da 7 fasi (implementata come job):

  • Build: risoluzione di dipendenze e compilazione del codice.
  • Verify: esegue analisi dinamiche o statiche di vario genere del codice.
  • Unit-test: esegue gli unit-test, ovvero i test sui singoli moduli.
  • Integration-test: esegue gli integration-test, ovvero i test sull'interazione tra i differenti moduli.
  • Package: in sviluppo
  • Release: in sviluppo
  • Deploy: in sviluppo

Il codice della pipeline è contenuto nel file .gitlab-ci.yml e prevede come primo comando il caricamento dell'immagine docker di default per i container dei job (python:3.8.6). La variabile globale settata è PIP_CACHE_DIR ("$CI_PROJECT_DIR/.cache/pip") che contiene la cartella utilizzata per scopi di cache.

APPLICATIVO UTILIZZATO


L'applicativo utilizzato è diviso in tre differenti moduli:

  • Uno script python principale, che costituisce il corpo fondamentale del programma (countries.py);
  • Uno script python contenente le funzioni accessorie (funzioni_country.py);
  • Un database locale (TestDB).

Il semplice funzionamento dello script principale riguarda il popolamento del database locale, con eventuale creazione in caso non esista, sulla base dei dati presenti nel file country.csv: essi riguardano 10 paesi del mondo e la relativa popolazione espressa in milioni. Il database viene dunque interrogato e vengono mostrati a video i dati inseriti nella tabella. Infine, vengono svolte alcune semplici operazioni sui dati estratti sulla base delle funzioni accessorie sviluppate, come il calcolo della somma totale della popolazione dei 10 paesi e del paese con popolazione massima.

CACHE


GitLab CI / CD fornisce un meccanismo di memorizzazione nella cache che ci permette di risparmiare tempo durante l'esecuzione dei jobs riutilizzando lo stesso contenuto di un job precedente. E' stato particolarmente utile in quanto il nostro applicativo python dipende da diverse librerie. E' stata pertanto definita la cache a livello globale che viene ereditata da ogni job. Le librerie Python sono state installate in un ambiente virtuale sotto venv /, la cache di pip sotto .cache / pip / ed entrambi sono stati memorizzati nella cache per-branch.

FASE DI BUILD


DIRE CHE ESSENDO L'APPLICATIVO IN PYTHON SI E' UTILIZZATA L'IMMAGINE DI PYTHON E COS'E' UN'IMMAGINE Per la fase di build è stato redatto il file requirements.txt, contente il nome e la versione delle librerie Python necessarie per l'esecuzione dell'applicativo. Dalla pipeline sono dunque state installate tutte le librerie e relative dipendenze contenute nel file tramite il comando - pip install -r requirements.txt.

FASE DI VERIFY


La fase di Verify è stata suddivisa in due differenti analisi del codice:

  • Analisi sintattica, tramite la libreria Python Prospector.
  • Analisi della sicurezza, tramite la libreria Python Bandit.

Prospector è un tool per l'analisi del codice Python che permette di evidenziare errori, potenziali problemi e violazioni di standard convenzionali. Il comando utilizzato è - prospector --no-autodetect countries.py: il comando no-autodetect permette di evitare che Prospector ricerchi automaticamente l'installazione di librerie strettamente correlate a quelle presenti, ma difatto non utilizzate. Nel nostro caso, era stata rilevata la mancata installazione della libreria Django, non utilizzata ma strettamente legata alla libreria sqlite3, impiegata per la gestione del database.

Bandit è un tool per la rilevazione di problemi di sicurezza comuni nel codice Python: esso scansiona il file e genera un rapporto contenente i risultati dell'analisi di sicurezza. Il comando utilizzato è -bandit -r countries.py.

FASE DI UNIT-TEST


Per la fase di unit-test è stato creato uno script Python (test_countries.py) per testare le funzioni accessorie contenute nel file relativo. A tal fine, è stata utilizzata la libreria unittest che supporta l'automazione dei test tramite fixtures (impianti di test), test suites e test runner. E' stata creata una classe che implementa i test delle tre funzioni: il semplice funzionamento dei test consiste nell'utilizzo di assert al fine di verificare che l'output restituito dalle funzioni implementate sia uguale al risultato atteso. Per l'esecuzione dei test è stato utilizzato il framework pytest, che semplifica la scrittura di piccoli test e supporta anche test funzionali complessi per applicazioni e librerie. Il comando utilizzato è - pytest -k 'test_unit' --junitxml=report_unit_test.xml, dove l'utilizzo del comando -k 'string' permette di eseguire solamente i test il cui nome inizia per string. junitxml è invece un modulo di Python che permette di generare automaticamente report in formato XML a partire dai risultati di test suit sritte in Python. Successivamente, questo file è stato caricato come artefatto di Gitlab, ovvero una lista di file e cartelle create da un job una volta concluso e resi disponibili per il download locale.

FASE DI INTEGRATION-TEST


La fase di integration-test estende quella di unit-test: sono infatti stati aggiunti al medesimo script (test_countries.py) tre test sull'interazione tra lo script principale e il database: dato uno stato noto del database, è stato effettuato un cambiamento (insert o delete) e una lettura (select) per verificare che il risultato atteso sia a esso conforme. Le librerie e i moduli utilizzati sono i medesimi della unit-test. Il comando utilizzato è - pytest -k 'test_integration' --junitxml=report_integration_test.xml, per eseguire unicamente i test il cui nome inizia per "test_integration" e per salvare il risultato in un file XML, successivamente caricato come artefatto.

FASE DI PACKAGE


IN SVILUPPO

FASE DI RELEASE


IN SVILUPPO

FASE DI DEPLOY


IN SVILUPPO

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

country_Militello_Bosco_Passarelli-0.1.0.tar.gz (4.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file country_Militello_Bosco_Passarelli-0.1.0.tar.gz.

File metadata

  • Download URL: country_Militello_Bosco_Passarelli-0.1.0.tar.gz
  • Upload date:
  • Size: 4.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1.post20200604 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.6

File hashes

Hashes for country_Militello_Bosco_Passarelli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f1e8e5524a6377d32d682ea1a4bbe50a52085aead1ee598d2a0fbb0edf3e9900
MD5 4ccf14d886afd6ec125ab5ab5a7ce724
BLAKE2b-256 0e8d58d1964263763b262f9e4d2ad8554fa8b1ab3b0f305629c3b49d22bc6c45

See more details on using hashes here.

File details

Details for the file country_Militello_Bosco_Passarelli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: country_Militello_Bosco_Passarelli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1.post20200604 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.6

File hashes

Hashes for country_Militello_Bosco_Passarelli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4893341ff011da84635ab14e5490da39da361a9d11b80d942016c207777a6a80
MD5 929e3b5c8ade849e078bd69d0d53eb3d
BLAKE2b-256 e963edbfcbd79048e67ad2b5f56ca1dca6075655ae337f0d8ff2b9e43483651c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page