Proves unitàries

Les proves unitàries o proves de components són un tipus de proves de programari que consisteixen a realitzar proves sobre els components o unitats més petits del codi font d'una aplicació o d'un sistema (entès com a unitat la part provable més petita d'una aplicació). Generalment, en programació estructurada és un mètode o rutina, en programació procedimental és una funció o procediment, i en programació orientada a objectes acostuma a ser un mètode o una classe. Són proves que depenen de la tecnologia emprada, i típicament, les duen a terme els mateixos equips de desenvolupament.

Idealment, cada cas de prova és independent dels altres: substituts com stubs, objectes simulats,[1] o un arnès de proves es poden utilitzar per ajudar a provar un mòdul de forma aïllada.

La finalitat de les proves unitàries és comprovar el correcte funcionament d'un mòdul de codi, per tal de garantir que cadascun dels mòduls funcionen correctament per separat. A posteriori, mitjançant les proves d'integració es podrà comprovar el funcionament del sistema en conjunt.

 Beneficis de les proves unitàries

Facilitat per trobar errors: 

Al treballar el sistema amb les proves unitàries treballem en un context més acotat, per tant, la localització d'errors és molt més senzilla que si treballem en un context global del programa. Aquest fet, ens proporciona que el rendiment d'errors localitzats per temps invertit sigui major. Podem trobar errors en el codi realitzat pel desenvolupador o errors en l'especificació del mòdul a provar. 

Es permet detectar de forma efectiva la injecció de defectes durant fases posteriors del disseny o manteniment del sistema.

Reestructuració del codi:

Si disposem de proves unitàries per a tots els mètodes i funcions del sistema, cada cop que el programador vulgui realitzar un canvi sobre aquests, podrem detectar si els nous canvis produeixen fallades. En aquest cas, els programadors podran refactoritzar el codi modificant l'estructura interna d'aquest sense alterar el seu comportament.

Simplifica el procés d'integració dels mòduls:

El mètode de realitzar proves en primer lloc sobre els mòduls per separat, simplifica i facilita les proves d'integració dels mòduls del sistema. D'aquesta forma reduïm la probabilitat de trobar errors en el procés d'integració.

Documentació del codi:

Les proves unitàries proporcionen informació del codi, com la seva funcionalitat i la seva especificació. Aquest fet facilita la comprensió per als programadors sobre el funcionament de la unitat.

Les proves unitàries poden proporcionar informació sobre les característiques que són fonamentals per al correcte funcionament del codi, i a més a més ens pot informar sobre els usos inadequats que es poden donar sobre el codi.

En definitiva si realitzem les proves unitàries abans d'implementar el codi, aquestes actuen com un document de disseny que especifiquen la forma i el comportament d'una solució desitjada, però no els detalls d'implementació del qual s'encarregarà el programador. Per tant, la implementació realitzada pel programador no passarà les proves si no s'implementa una solució d'acord amb el'disseny de les proves.

Separació de la interfície i la implementació

Generalment una classe sol tenir associada una o més classes, per tant, alhora de realitzar proves sobre una classe podem estar provant altres classes associades. Per exemple, pot haver-hi classes que estan relacionades amb una base de dades. Si volem realitzar proves unitàries haurem d'aïllar aquesta relació.

Per aquest motiu els programadors hauran de crear una interfície abstracta entorn de les consultes a la base de dades, per tal d'implementar aquesta interfície amb el seu propi mock object.

Aquests objectes són utilitzats per a resoldre el problema dels objectes interdependents, és a dir, imita el comportament de l'objecte real d'una forma controlada retornant resultats determinats i d'implementació directa.

D'aquesta manera aconseguim una menor dependència entre les classes per poder realitzar les proves unitàries de major qualitat i aïllament sobre la classe.

 Disseny de proves unitàries

Per tal de realitzar les provés unitàries sobre un mòdul necessitarem:

  • L'especificació dels mètodes del mòdul a treballar.
  • codi font del mètodes.

Algunes pautes per a realitzar un bon disseny de les proves unitàries:

  • Automatitzar l'execució de les proves unitàries.
  • Disponibilitat de realitzar les proves unitàries, per tal de poder executar-les davant una possible modificació del codi d'un mètode.
  • La prova unitària ha de poder cobrir la major quantitat de codi del mètode a revisar. Quan més baixa sigui la cobertura més codi es quedarà sense ser revisat.
  • L'execució d'una prova no ha d'afectar l'execució d'una altra. Al finalitzar l'execució d'una prova l'entorn ha de quedar com estava anteriorment.
  • Les relacions que puguin existir entre diferents mòduls han de ser simulades per evitar dependències entre mòduls i garantir una major qualitat de la prova unitària. “mocks objects”.
  • Important conèixer abans de dissenyar les proves unitàries quin serà l'objectiu de la prova.

 Desavantatges i limitacions de les proves unitàries

  • Les proves unitàries són molt eficaces per a detectar defectes en el codi però no la seva absència. Són més eficaces si es combinen amb altres tipus de proves de programari.
  • A vegades no és trivial anticipar tots els casos possibles d'entrada.
  • No permeten determinar problemes d'integració.
  • No descobriran tots els possibles defectes del codi.

 Exemple de prova unitària amb "JUnit"

JUnit es tracta d'un conjunt de biblioteques que són utilitzades en programació per realitzar proves unitàries d'aplicacions Java.

Disposem d'una classe anomenada “MajorNumero”, la qual disposa d'un mètode anomenat “obtenirMajor”, el qual pren un array de nombres enters com a argument i retorna el major valor trobat a l'array.

package elements;
public class MajorNumero {
 /* Retorna l'element major d'una seqüència d'enters
 @param Un vector d'enters
 @return l'enter de major valor del vector */

 public static int obtenirMajor(int llista[]){
 int max=llista[0];
 int i;
 for(i=0;i<llista.length-1;i++){
 if(llista[i] >max) max = llista[i];
 }
 return max;
 }

}

A continuació, s'han de decidir i dissenyar quins tipus de proves unitàries es poden realitzar sobre aquest mètode:

  • Cas normal: vector amb valors qualsevol:  [3, 7, 9, 8] -> 9
  • Quan el nombre major es troba al principi o al final de la llista [9, 7, 8] -> 9 ◦ [8, 7, 9] -> 9
  • Quan el nombre major està duplicat al vector [9, 7, 9, 8] -> 9
  • Quan només hi ha un element al vector [7] -> 7
  • Quan tots els nombres són negatius [-4, -6, -7, -22]-> -4

Codi de les proves unitàries realitzades sobre el mètode "obtenirMajor":

“assertEquals (valor_esperat, valor_real)”

package elements;
import junit.framework.TestCase;
public class MajorNumeroTest extends TestCase{
 public void testSimple(){
 assertEquals(9,MajorNumero.MajorNumero(new int[] {3,7,9,8}));
 }
 public void testOrden(){
 assertEquals(9, MajorNumero.MajorNumero(new int[] {9, 7, 8}));
 assertEquals(9, MajorNumero.MajorNumero(new int[] {7, 9, 8}));
 assertEquals(9, MajorNumero.MajorNumero(new int[] {7, 8, 9}));
 }
 public void testDuplicats() { 
 assertEquals(9, MajorNumero.MajorNumero(new int[] {9, 7, 9, 8}));
 }
 public void testNomesUn() {
 assertEquals(7, MajorNumero.MajorNumero(new int[] {7}));
 }
 public void testTotsNegatius() { 
 assertEquals(-4, MajorNumero.MajorNumero(new int[] {-4, -6, -7, -22}));
 }
}

 Frameworks per al desenvolupament de proves unitàries

  • JUnit:
  • TestNG: Creat per suplir algunes deficiències en JUnit.
  • JTiger: Basat en anotacions com el TestNG.
  • SimpleTest: Entorn de proves per aplicacions realitzades en PHP.
  • PHPUnit: Sistema per la realització de proves unitàries en PHP.
  • CPPUnit: Versió del framework per realitzar proves unitàries en C/C++.
  • NUnit: Versió del software per realitzar proves unitàries en .NET.
  • FoxUnit: Entorn de OpenSource de proves unitàries per Microsoft VisualFoxPro.
  • MOQ: Entorn per la creació din'amica d'objectes simuladors(mocks) «MOQ». 
  • QUnit: Llibreries per proves unitàries en JavaScript. Creat per la fundació JQuery, ha estat reescrita per ser independent de la llibreria JQuery.
  • libunittest: Llibreria portable per proves unitàries en C++ que utilitza el nou estàndard c++11.
  • CUnit: Entorn per escriure, administrar i executar test unitaris en C.

 

Referències

  1. Fowler, Martin. «Mocks aren't Stubs», 02-01-2007. [Consulta: 1r abril 2008].

Bibliografia

Read other articles:

International Resource PanelTanggal pendirian2007TipePanel ilmiah independenTokoh pentingJanez Potočnik, Izabella Teixeira (ketua bersama)Organisasi indukProgram Lingkungan Perserikatan Bangsa-Bangsa International Resource Panel adalah sebuah panel pakar ilmiah yang bertujuan membantu negara-negara menggunakan sumber daya alam secara dengan prinsip keberlanjutan (sustainability) tanpa mengorbankan kebutuhan manusia dan pertumbuhan ekonomi. Pranala luar www.resourcepanel.org www.unep.org

 

Perkebunan teh di Goalpara, Sukabumi utara pada tahun 1923 Parahyangan (Sunda: ᮕᮛᮠᮡᮍᮔ᮪, Parahyangan) bisa disebut juga sebagai Priangan atau Preanger (Belanda: Preangercode: nl is deprecated ) adalah wilayah geobudaya dan pegunungan yang berpusat di provinsi Jawa Barat di Pulau Jawa, Indonesia.[1] Di sebelah barat, wilayah ini berbatasan dengan provinsi Banten, sebelah utara berbatasan dengan wilayah DKI Jakarta dan wilayah pesisir utara Jawa Barat, sebelah timur ber...

 

Lomba Cipta Lagu Remaja 1977Kompilasi karya Various ArtistDirilis1977GenrePopLabelPramborsProduserPrambors RasisoniaSeries - -'-'String Module Error: Match not found LCLR 1977 (1977) LCLR 1978 (1978)'LCLR 1978'1978 LCLR 1977 adalah Album kompilasi yang dirilis pada tahun 1977. Yang menampilkan lagu-lagu hasil Lomba Cipta Lagu Remaja Prambors Rasisonia. Album ini melejitkan nama Chrisye setelah menyanyikan lagu Lilin Lilin Kecil Karya James F. Sundah. Daftar lagu LILIN-LILIN KECIL (James F...

موسيقى فارسية تقليديةمعلومات عامةالبلد إيران أصول الأسلوب Middle Eastern classical music (en) — موسيقى إيرانية تعديل - تعديل مصدري - تعديل ويكي بيانات موسيقى فارسية تقليدية تشير الموسيقى الفارسية التقليدية (بالفارسية: موسیقی سنتی فارسی) أو الموسيقى الإيرانية التقليدية، التي تُعرف أيضًا...

 

Untuk orang lain yang juga bernama William Wallace, lihat William Wallace (disambiguasi).Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: William Wallace – berita · surat kabar · buku · cendekiawan · JSTOR Sir William WallaceLahir1272Elderslie or Eller...

 

American politician Abram ComingoMember of the U.S. House of Representativesfrom MissouriIn officeMarch 4, 1871 – March 3, 1875Preceded byRobert T. Van HornSucceeded byBenjamin Joseph FranklinConstituency6th district (1871–1873)8th district (1873–1875) Personal detailsBorn(1820-01-09)January 9, 1820Mercer County, Kentucky, U.S.DiedNovember 10, 1889(1889-11-10) (aged 69)Resting placeElmwood Cemetery, Kansas City, MissouriPolitical partyDemocratic Abram Comingo (...

World-wide database about Disney comics I.N.D.U.C.K.S.Type of siteComics databaseAvailable inDanish, Dutch, English, Finnish, French, German, Greek, Italian, Norwegian, Polish, Portuguese, Russian, Spanish and SwedishOwnerCollectiveCreated byHarry FluksURLInducks.orgCommercialnoRegistrationOptionalLaunched1994 The International Network of Disney Universe Comic Knowers and Sources[1] (I.N.D.U.C.K.S.) or Inducks is a freely available database aiming to index all Disney Univers...

 

بنديجو (بالإنجليزية: Bendigo)‏[1]    تاريخ التأسيس 1851  تقسيم إداري البلد أستراليا  [2][3] التقسيم الأعلى فيكتوريا  خصائص جغرافية إحداثيات 36°45′00″S 144°16′00″E / 36.75°S 144.26666666667°E / -36.75; 144.26666666667   المساحة 146 كيلومتر مربع الارتفاع 221 متر  السكان ا...

 

Chemical compound ChlorodehydromethylandrostenediolClinical dataOther namesCDMA; Halodrol; Halodrol-50Routes ofadministrationOral[1]Identifiers IUPAC name (3S,8R,9S,10R,13S,14S,17S)-4-Chloro-10,13,17-trimethyl-3,6,7,8,9,11,12,14,15,16-decahydrocyclopenta[a]phenanthrene-3,17-diol CAS Number1338221-84-3PubChem CID29976098ChemSpider29976098UNIIK6PH0FVE0KChemical and physical dataFormulaC20H29ClO2Molar mass336.90 g·mol−13D model (JSmol)Interactive image SMILES C[C@]12CC[C@H]3[C@H]...

American lawyer and diplomat (born 1948) For other people named John Bolton, see John Bolton (disambiguation). John BoltonBolton in 201826th United States National Security AdvisorIn officeApril 9, 2018 – September 10, 2019PresidentDonald TrumpDeputyNadia SchadlowRicky L. WaddellMira RicardelCharles KuppermanPreceded byH. R. McMasterSucceeded byRobert C. O'Brien25th United States Ambassador to the United NationsIn officeAugust 2, 2005 – December 31, 2006PresidentGeorge W...

 

DC Comics supervillain Comics character AmazoAmazo, as it appeared on the cover of Justice League of America #112 (July 1974). Art by Nick CardyPublication informationFirst appearanceThe Brave and the Bold #30 (June 1960)Created byGardner FoxMike SekowskyIn-story informationAlter egoArmen IkarusSpeciesAndroidSentient virusTeam affiliationsInjustice LeagueSecret Society of Super VillainsCabalNotable aliasesProfessor Ivo's Amazing Android (As Ikarus): Doctor Armen Ikarus Patient ZeroAbilities P...

 

Amusement park in Seguin, Texas ZDT's Amusement ParkPreviously known as ZDT's Amusement CenterLocationSeguin, Texas, United StatesCoordinates29°34′48″N 97°58′1.2″W / 29.58000°N 97.967000°W / 29.58000; -97.967000StatusOperatingOpenedMarch 2007OwnerDanny DonhauserOperating seasonAll yearArea10 acres (4.0 ha)AttractionsTotal13Roller coasters1Water rides3Websitewww.zdtamusement.com ZDT's Amusement Park is a 10-acre (4.0 ha) family amusement park locat...

Questa voce sull'argomento politici paraguaiani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Bernardino Caballero 9º Presidente del ParaguayDurata mandato4 settembre 1880 –25 novembre 1886 Vice presidenteJuan Antonio Jara PredecessoreCándido Bareiro SuccessorePatricio Escobar Dati generaliPartito politicoPartido Colorado (Paraguay) Bernardino Caballero de Añasco y Melgarejo (Ybycuí, 20 maggio 1839 – Asunción, 26 feb...

 

Pour les articles homonymes, voir DWT. Au fur et à mesure que du poids est ajouté à un navire, il submerge. Le TPL maximal est la quantité de poids qu'un navire peut transporter sans le mettre dans une position dangereusement basse dans l'eau. Le port en lourd (en anglais : deadweight tonnage ou DWT) d'un navire représente le chargement maximal qu'il peut emporter ; il est égal au déplacement en charge (poids total du navire chargé au maximum - tirant d'eau milieu aux marqu...

 

Nubian queen Takahatenamun in hieroglyphs [1] King’s Wife and King's Sister of Taharqa Taharqa followed by Queen Takahatamun at Gebel Barkal. Gebel Barkal, Temple of Mut: Taharqa, followed by the sistrum shaking queen Takahatamun making offerings to Amun and Mut. Takahatenamun (Takahatamun, Takhahatamani) was a Nubian queen dated to the Twenty-fifth Dynasty of Egypt.[2] Family Takahat(en)amun was the daughter of King Piye and the sister-wife of King Taharqa. She held several...

此條目需要补充更多来源。 (2021年7月4日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:美国众议院 — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 美國眾議院 United States House of Representatives第118届美国国会众议院徽章 众议院旗...

 

This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help improve this article by introducing more precise citations. (January 2013) (Learn how and when to remove this message) 6167th Air Base GroupActive1950–1953CountryUnited StatesBranchUnited States Air ForceRolePsychological WarfareMilitary unit The 6167th Air Base Group is an inactive United States Air Force unit. Its last duty assignmen...

 

Area in Vermont, United StatesNortheast KingdomAreaPanoramic view of Willoughby Notch and Mount PisgahCountryUnited StatesStateVermontArea • Total2,030 sq mi (5,250 km2)Population (2010) • Total64,764 • Density32/sq mi (12/km2) The Northeast Kingdom (also, locally, The Kingdom[1][2] and abbreviated NEK) is the northeast corner of the U.S. state of Vermont, approximately comprising Essex, Orleans, and Caledonia count...

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Agon Hamza – new...

 

Dataran Rendah Indo-Gangga Dataran Rendah Indo-Gangga, juga dikenal sebagai Indus-Ganga dan Dataran Rendah Sungai India Utara, adalah sebuah dataran rendah seluas 255 juta hektar (630 juta acre) yang berada di bagian paling utara dan timur India, wilayah-wilayah paling padat di Pakistan, dan Bangladesh secara keseluruhan.[1] Wilayah tersebut dinamai dari kata Indus dan Ganga. Divisi Sebuah bagian dari Dataran Rendah Indo-Gangga Beberapa geografer membagi Dataran Rendah Indo-Gangga dal...