JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 87. Bölüm synagy näme üçin döredijiler ...

Kofe arakesmesi # 87. Bölüm synagy näme üçin döredijiler üçin möhüm? Java-da bir massiw göçürmegiň 5 usuly

Toparda çap edildi

Bölüm synagy näme üçin döredijiler üçin möhüm?

Çeşme: SearchSoftwareQuality Bölüm synagynyň näme üçin möhüm we gymmatlydygyny we düzedişleri nädip aňsatlaşdyrýandygyny ara alyp maslahatlaşalyň. Bölüm synagy programma üpjünçiliginiň hilini ýokarlandyrmak üçin güýçli guraldyr. Bölüm synaglary, programmanyň programma üpjünçiliginiň aýratynlyklaryna laýyk gelýändigini we niýetlenilişi ýaly özüni alyp barşyny düýpli tassyklaýar. Kofe arakesmesi # 87.  Bölüm synagy näme üçin döredijiler üçin möhüm?  Java-da bir massiw göçürmegiň 5 usuly - 1Gowy ýerine ýetirilende birlik synaglary:
  • kemçilikleriň sanyny azaltmak we ösüş ömrüniň irki döwürlerinde kesgitlemek;
  • kod okalmagyny gowulandyrmak;
  • kody gaýtadan ulanmaga rugsat bermek;
  • ýerleşdiriş tizligini ýokarlandyrmak.
Bölüm synagynyň näme üçin möhümdigine, synagyň bu görnüşiniň nädip dörändigine we ony durmuşa geçirmekdäki päsgelçilikleriň nämedigine seredeliň.

Bölüm synagynyň taryhy

Irki döwürde ýüze çykarylan säwlik wagt we güýji tygşytlaýar. Kompýuter taryhynyň ilkinji 50 ýylynda birligi barlamak we düzetmek aslynda şol bir zatdy. 1990öne 1990-njy ýyllarda kod şeýle bir çylşyrymlaşdy welin, ulgamy izolýasiýa işletmek üçin ulgamy ownuk böleklere bölmek köplenç mümkin däldi. 1997-nji ýylda Kent Bek atly programmist kiçi kod böleklerini barlamak üçin ösüş gurşawy JUnit-i döretdi. Çeşme kody bahalandyrýan synag kody birlik synaglary diýilýär. Bölüm synagynyň bu görnüşi köp ýyllaryň dowamynda esasy zada öwrüldi. Bek “JUnit” -i döredeninden soň, Martin Fowler “Refactoring” atly kitap ýazdy we bu koduň has izolirlenmegi we synagdan geçirilmegi üçin kodlary üýtgetmegiň usullaryny teklip etdi. Kod refaktorynyň we birlik synagynyň utgaşmasy, programmirleme prosesi üçin birlik synaglarynyň döredilmegi zerur bolan synag synagly ösüşe sebäp boldy. Onda kod döredilmänkä synagdan geçirilmeli. Şeýlelik bilen, bölüm synaglary gutarýança programmirleme prosesi gutarmaýar. Soňra taslama ulgamlarda ýa-da adam derejesinde gözleg tapgyryna geçip biler.

Bölüm synagynyň mysaly

Bu mysal birlik synagynyň ähmiýetini görkezýär. Bu ýerde JUnit, Fahrenheit-den Selsiýa öwürýän ýönekeý bir funksiýa baha berýär. Öwürmek formulasy: C = (F-32) * 5/9. Kitaphananyň funksiýasy hökmünde kodda funksiýa goly we egri ýaýlar ýaly birnäçe setir ýerine ýetirilip bilner. Şeýle-de bolsa, bu ölçegler funksiýadan belli däl. Bu opsiýalar tegelek ýa-da aşak, hakyky sanlary ýa-da ýokarky we aşaky çäkleri öz içine alyp biler. Test :: Has köp modul ulanyp, Perldäki bu temperatura öwrüliş funksiýasy üçin mysal birlik synaglaryny döredeliň. Birinji setir, galan koddan nämä garaşmalydygyny aýdýan teswirçidir.
# is (input, expected result, comment)
is( FtoC(32),0,'Freezing point is F32, C 0');
is( FtoC(212),100,'Boiling point is F212, C 100');
is( FtoC(59038),32767, 'Upper limit of C is 32767');
is( FtoC(59039),undefined, 'One past upper limit is error');
JUnit çarçuwasy obýekte gönükdirilen ulgamlara we synag obýektlerine daýanýar, ýöne düşünje meňzeýär.

Izolýasiýa bölümi synaglary

Bölüm synaglarynyň artykmaçlyklaryndan biri, bir funksiýany, synpy ýa-da usuly izolirlemek we diňe şol kod bölegini barlamakdyr. Has gowy aýratyn komponentler ulgamyň durnuklylygyny üpjün edýär. Şeýlelik bilen ygtybarly kod alarsyňyz. Bölüm synaglary hem düzediş prosesiniň häsiýetini üýtgedýär. Bir näsazlygy düzetjek bolmak üçin programmistler şowsuz synag ýazýarlar we soňraky garaşyşlary bozman geçer ýaly gaýtalaýarlar. Bu amal, gurnamak, döretmek, duruzmak we synag arkaly adaty düzedişleriň el siklini ýok edýär. Bölüm synagy üçin amatly bolmagy üçin kody üýtgetmek üçin programmistler iş usullaryny üýtgetmeli. Bölüm synaglary bolmazdan ýazylan islendik kod bölekleri, iň bolmanda aýratyn modul hökmünde synag edilmedik hasap ediler.

Bölüm synaglaryny uýgunlaşdyrmak

Miras programma üpjünçiligi, uzak wagtlap işleýän we birlik synaglary bolmazdan ýazylan programma üpjünçiligi. Miras kody kompaniýa üçin gymmatlydyr. Köp ýyllap durnukly işleýär. Bölüm synaglary bolmazdan gurlan käbir programmalar günde million dollarlyk amallary gaýtadan işleýär. Unitöne birlik synaglary bolmadyk kod, köp ýyllaryň dowamynda köp sanly tehniki hyzmat ediji tarapyndan täsir edilendigi sebäpli wagtyň geçmegi bilen uly hapa öwrülýär. Refactoring programmaçylara synagdan geçmek üçin ulgama kem-kemden üýtgeşmeler girizmäge mümkinçilik berýär. Şeýle-de bolsa, bu üýtgeşmeler wagt talap edýär. Birnäçe ýyl ozal kärdeşim Bob Reselman bilen miras goýmalary üçin birlik synaglaryny ulanmak meselesini ara alyp maslahatlaşdym. Reselman, onsuz gurlan programmalarda birlik synagyny geçirmegiň gaty gymmat we hatda samsykdygyny öňe sürdi. Muňa derek, gurama täze ösüşi birlik synaglary bilen başlamagy we miras goýmalaryny ýeke goýmagy maslahat berdi. Bu COBOL, hasabat generatorlary we beýleki programmalar üçin dogry bolup biler, ýöne häzirki zaman dillerinde ýazylan programmalarda - C ++, C #, Java we Ruby - birlik synaglaryny yza çekmek aňsatdygyny öňe sürerin. Olary tutuş programma üçin ýazmagyň ýerine, häzirki üýtgeşmä we gidişiňize birlik synaglaryny goşuň.

Tizligi, hilini we synagdan geçirijiligini ýokarlandyrmak

Taslamanyň ýolbaşçylary meýilnamalaşdyrmagyň hiliň, tamamlanan işiň mukdary, çeşmeler we wagtyň arasyndaky söwdany öz içine alýandygyny aýdýarlar. Bir sebite bir zat goşmak üçin başga bir zatdan daşlaşmaly. Netijeli birlik synaglary bu düzgüni bozýar. Şonuň üçin birlik synagy guramalar üçin möhüm we gymmatlydyr. Gowy birlik synaglary hilini ýokarlandyrýan synag koduny öndürýär. Bu kodda kemçilikler az bolar, bu taslamany has çalt tamamlamak üçin az düzedişleri aňladýar. Programma üpjünçiligi näsazlyklar bilen ýüzbe-ýüz bolanda, bölüm synaglary düzedişleri, düzedişleri we ýazuw koduny çaltlaşdyrýar. Bu şeýle bir ýagdaýda bolup geçýär, şol bir wagtyň özünde koduň hilini we tizligini ýokarlandyrmak bilen bir hatarda kemçiligiň ýüze çykma ähtimallygy ep-esli azalýar. Programma üpjünçiligini döretmekde jadyly ok ýok bolsa-da, täsirli bölüm synaglary ösüşi, synagy we hatda käbir funksional talaplar in engineeringenerçiligini çaltlaşdyryp biler.

Java-da bir massiw göçürmegiň 5 usuly

Çeşme: Dev.to Şeýlelik bilen sizde A we B iki massiw bar we elementleri A-dan B-a göçürmeli bolarsyňyz, muny Java-da etmegiň dürli ýollary bar we men size häzir görkezerin.

Birinji usul: ForLoop

Ynha, aýlaw üçin gowy köne kömege gelýär :
int[] A = {1,2,4,4};
int[] B = new int[];

 for (int i = 0; i < A.length; i++){
      B[i] = A[i];
}

Ikinji usul: .clone ()

Massiw klonlaşdyryş usuly hem islenýän netijä ýetmäge kömek edip biler:
int[] A = {1,2,4,4};
int[] B = A.clone();//the clone method copies the content of A into B;

Üçünji usul: System.arraycopy ()

Indiki ýol, java.lang bukjasyndaky System.arraycopy () usulyny ulanmakdyr . Ulanyşyna geçmezden ozal, onuň goluny ara alyp maslahatlaşalyň:
public static void arraycopy(
    Object src, //:source array, in this case A
    int srcPos, //:the start index for copy, typically 0
    Object dest, //:destination object in this case B.
    int destPos, //:the index to place the copied elements
    int length //:the length of the contents to be copied
);
Arza:
int[] A = {1,2,4,4};
int[] B = new int[];

System.arraycopy(A, 0, B, 0, A.length);

Dördünji usul: Arrays.copyOf ()

Geljekki göçürme opsiýamyz java.utils paketinden “Arrays” synpydyr . Goluna üns beriň:
public static int[] copyOf(
    int[] original, // :source array in this case A
    int newLength // :the length of the contents to be copied
);
Arza:
int[] A = {1,2,4,4};
int[] B = Arrays.copyOf(A, 3);

Bäş usul: Arrays.copyOfRange ()

Şeýlelikde, bu ýazgyda seredjek iň soňky wariantymyz bolar. Şeýle hem java.utils paketindäki “Arrays” synpyndan . Geliň, ýene-de goluna seredeliň:
public static int[] copyOfRange​(
    int[] original, // :source array in this case A
    int from,  //:the start index for copy, typically 0
    int to // the end index exclusive
);
Arza:
int[] A = {1,2,3,4,5,6,7};
int[] B = Arrays.copyOfRange(A, 0, A.length);
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION