În Epiverse-TRACE, dezvoltăm o suită de pachete R care abordează sarcinile previzibile în răspunsul la focarul infecțios al bolii. Unul dintre principiile de proiectare a software -ului de ghidare la care am lucrat este interoperabilitate de instrumente, atât între software -ul EPIVERSE, dar și integrarea cu ecosistemul mai larg al pachetelor R din epidemiologie.
Acest principiu provine din nevoile celor care răspund, cuantificarea și înțelegerea focarelor, pentru a crea conducte epidemiologice. Aceste conducte combină o serie de sarcini, în care ieșirea unei sarcini este introdusă în următoarea, formând un lanț de analiză (grafic aciclic direcționat al sarcinilor de calcul). Prin construirea interoperabilității în pachetele noastre R încercăm să reducem frecarea conectării diferitelor blocuri din conductă. Cele trei principii de interoperabilitate din strategia noastră sunt: 1) consistență2) compozibilitateși 3) Modularitate.
Pentru a asigura interoperabilitatea între pachetele R-TRACE EPIVERSE este dezvoltată și menținută, folosim Testarea integrării. Această postare explică utilizarea noastră de testare a integrării cu un studiu de caz, analizând proiectarea complementară și interoperabilitatea pachetelor {simulist} și {curatepi} r.
În comparație cu utilizat frecvent Testarea unitățiicare pare să izoleze și să testeze anumite părți ale unui pachet software, de exemplu, o funcție; Testarea integrării este testarea mai multor componente ale software -ului, atât în interiorul, cât și între pachete. Prin urmare, testarea integrării poate fi utilizată pentru a asigura menținerea interoperabilității în timp ce se dezvoltă una sau mai multe componente în conducte. Integrarea continuă oferă o modalitate de a rula aceste teste înainte de a contopi, elibera sau implementa cod.
Cum configuram testarea integrării în EPIVERSE
Colecția de pachete Epiverse-TRACE are un meta-pachet, {Epiverse}, analog cu meta-pachetul Tidyverse (încărcat cu library(tidyverse)
) În mod implicit, {Epiverse} are dependențe de toate pachetele Epiverse-TRACE lansate și stabile, de aceea este o casă bună pentru testarea integrării. Acest lucru evită încărcarea pachetelor individuale EPIVERSE cu preluarea dependențelor potențial suplimentare pur și simplu pentru a testa interoperabilitatea.
La fel ca în cazul testării unității în pachetele individuale Epiverse, folosim cadrul {Testthat} pentru testarea integrării (deși testarea integrării poate fi obținută folosind alte cadre de testare).
Studiu de caz al funcționalității interoperabile folosind {simulist} și {curetepi}
Scopul {simulist} este de a simula datele de focar, cum ar fi listele de linie sau datele de urmărire a contactelor. În mod implicit, generează date complete și precise, dar poate crește și aceste date pentru a imita date empirice prin funcționalitatea post-procesare. O astfel de funcție post-procesare este simulist::messy_linelist()
care introduce o serie de nereguli, lipsă și constrângeri de tip la datele de liste de linii simulate. Complementar în acest sens, pachetul {CleanePi} are un set de funcții de curățare care standardizate date epidemiologice tabulare standardizate, înregistrând setul de operațiuni de curățare derulate prin compilarea unui raport și anexarea la datele curățate.
Exemplu de test de integrare
Testele de integrare pot fi gândite ca teste de unități compuse. Datele listei de linii sunt generate folosind simulist::sim_linelist()
. În fiecare bloc de testare, se face o copie dezordonată a listei de linii simulist::messy_linelist()
cu argumente stabilite pentru a viza în mod specific aspecte particulare ale dezordinei; Apoi, se aplică o operațiune de curățare de la {CleanePi} care vizează elementul dezordonat al datelor; În cele din urmă, lista de linii curățate este comparată cu datele simulate originale complete și precise. Cu alte cuvinte, datele ideale sunt perfect recuperate atunci când sunt încurcate și curățate?
Un exemplu de test de integrare este prezentat mai jos:
set.seed(1) ll <- simulist::sim_linelist() test_that("convert_to_numeric corrects prop_int_as_word", { # create messy data with 50% of integers converted to words messy_ll <- simulist::messy_linelist( linelist = ll, prop_missing = 0, prop_spelling_mistakes = 0, inconsistent_sex = FALSE, numeric_as_char = FALSE, date_as_char = FALSE, prop_int_as_word = 0.5, prop_duplicate_row = 0 ) # convert columns with numbers as words into numbers as numeric clean_ll <- cleanepi::convert_to_numeric( data = messy_ll, target_columns = c("id", "age") ) # the below is not TRUE because # 1. `clean_ll` has an attribute used to store the report from the performed # cleaning operation # 2. the converted "id" and "age" columns are numeric not integer expect_false(identical(ll, clean_ll)) # check whether report is created as expected report <- attr(clean_ll, "report") expect_identical(names(report), "converted_into_numeric") expect_identical(report$converted_into_numeric, "id, age") # convert the 2 converted numeric columns into integer clean_ll(, c("id", "age")) <- apply( clean_ll(, c("id", "age")), MARGIN = 2, FUN = as.integer ) # remove report to check identical line listattr(clean_ll, "report") <- NULL expect_identical(ll, clean_ll) })
Concluzie
Atunci când dezvoltați mai multe instrumente software care sunt concepute în mod explicit pentru a lucra împreună, este esențial ca acestea să fie testate de rutină pentru a se asigura că interoperabilitatea este maximizată și menținută. Aceste teste pot fi implementări ale unui standard de date sau în cazul EPIVERSE-TRACE un set mai informal de principii de proiectare. Am prezentat teste de integrare cu compatibilitatea pachetelor {simulist} și {curatepi} r, dar există și alte teste de integrare disponibile în meta-pachetul {Epiverse}. Sperăm că, prin desfășurarea regulată a acestor așteptări ale conductelor de funcționare, să includă pe cei la fel de simpli ca doi pași, cum ar fi studiul de caz arată în acest post, că întreținătorii și colaboratorii vor fi conștienți de orice rupere a interoperabilității.
Dacă ați lucrat la o suită de instrumente, pachete R sau altfel și ați găsit metode sau cadre utile pentru testele de integrare, vă rugăm să partajați în comentarii.
Mulțumiri
Mulțumim lui Karim Mané, Hugo Gruson și Chris Hartgerink pentru feedback util atunci când elaborează această postare.
Reutilizați
Citare
Citarea Bibtex:
@online{w._lambert2025, author = {W. Lambert, Joshua}, title = {Integration Testing in {Epiverse-TRACE}}, date = {2025-04-14}, url = {https://epiverse-trace.github.io/posts/integration-testing/}, langid = {en} }
Pentru atribuire, vă rugăm să citați această lucrare ca:
W. Lambert, Iosua. 2025. „Testarea integrării în EPIVERSE-TRACE.” 14 aprilie 2025. Https://epiverse-trace.github.io/posts/integration-testing/.