Mənbə: SearchSoftwareQuality Gəlin vahid testinin nə üçün vacib və dəyərli olduğunu və onun sazlamağı necə asanlaşdırdığını müzakirə edək. Vahid testi proqram təminatının keyfiyyətini yaxşılaşdırmaq üçün güclü vasitədir. Vahid testləri tətbiqin proqram təminatının spesifikasiyasına uyğunluğunun və nəzərdə tutulduğu kimi davranmasının əsas yoxlanışını təmin edir. Yaxşı edildikdə, vahid testləri:
qüsurların sayını azaltmaq və inkişafın həyat dövrünün erkən mərhələlərində onları müəyyən etmək;
kodun oxunuşunu yaxşılaşdırmaq;
kodun təkrar istifadəsinə icazə verin;
yerləşdirmə sürətini artırın.
Gəlin vahid testin niyə vacib olduğuna, bu növ testin necə yarandığına və onun həyata keçirilməsinə maneələrin nə olduğuna baxaq.
Vahid Testinin Tarixi
Erkən mərhələdə aşkar edilən səhv vaxta və səyə qənaət edir. Kompüter tarixinin ilk 50 ilində vahidlərin yoxlanılması və sazlanması mahiyyətcə eyni şey idi. Lakin 1990-cı illərə qədər kod o qədər mürəkkəbləşdi ki, sistemi ayrı-ayrılıqda idarə etmək üçün kiçik hissələrə bölmək çox vaxt mümkün deyildi. 1997-ci ildə Kent Beck adlı proqramçı kiçik kod hissələrini sınamaq üçün inkişaf mühiti plaginini JUnit yaratdı. Mənbə kodunu qiymətləndirən test kodu vahid testlər adlanır. Bu tip vahid testi uzun illərdir ki, bir ştapel halına gəlir. Bek JUnit-i yaratdıqdan sonra Martin Fowler "Refaktorinq" kitabını yazdı və bu kitabda kodu daha təcrid olunmuş və sınaqdan keçirilə bilən hala gətirmək üçün çevrilmə yollarını təklif etdi. Kodun refaktorinqi və vahid testinin birləşməsi test əsaslı inkişafa gətirib çıxardı, burada vahid testlərinin yaradılması proqramlaşdırma prosesi üçün vacibdir. Orada kod yaradılmazdan əvvəl sınaqdan keçirilməlidir. Beləliklə, vahid testləri işə salınana qədər proqramlaşdırma prosesi tamamlanmır. Layihə daha sonra sistem səviyyəsində və ya insan səviyyəsində tədqiqat mərhələsinə keçə bilər.
Vahid sınaq nümunəsi
Bu nümunə vahid testinin vacibliyini nümayiş etdirir. Burada JUnit temperaturu Fahrenheitdən Selsiyə çevirən sadə funksiyanı qiymətləndirir. Dönüşüm düsturu: C = (F-32) * 5/9. Funksiya imzası və əyri mötərizələr daxil olmaqla sadəcə bir neçə sətir kitabxana funksiyası kimi kodda həyata keçirilə bilər. Lakin funksiyadan bunların meyar olduğu aydın deyil. Bu seçimlərə yuxarı və ya aşağı yuvarlaqlaşdırma, real ədədlər və ya yuxarı və aşağı hədlər daxil ola bilər. Test::More modulundan istifadə edərək Perl-də bu temperaturun çevrilməsi funksiyası üçün nümunə vahid testləri yaradaq. Birinci sətir proqramçıya qalan koddan nə gözlədiyini bildirən şərhdir.
# 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 çərçivəsi obyekt yönümlü sistemlərə və sınaq obyektlərinə əsaslanır, lakin konsepsiya oxşardır.
İzolyasiya edilmiş vahid testləri
Vahid testlərinin üstünlüklərindən biri funksiyanı, sinfi və ya metodu təcrid etmək və yalnız həmin kod parçasını sınaqdan keçirməkdir. Daha yaxşı fərdi komponentlər sistemin ümumi dayanıqlığını təmin edir. Bu yolla etibarlı kod əldə edirsiniz. Vahid testləri həmçinin sazlama prosesinin xarakterini dəyişir. Bir səhvi düzəltməyə çalışmaq üçün proqramçılar sadəcə uğursuz bir test yazır və sonra onu təkrarlayırlar ki, əvvəlki gözləntiləri pozmadan keçsin. Bu proses quraşdırma, yenidən yaratmaq, fasilə və sınaq vasitəsilə ənənəvi sazlamanın əl dövrəsini aradan qaldırır. Kodu bölmənin sınağı üçün uyğunlaşdırmaq üçün dəyişdirmək üçün proqramçılar iş üsullarını dəyişdirməlidirlər. Vahid testləri olmadan yazılmış hər hansı kod parçası, ən azı fərdi modullar kimi sınaqdan keçirilməmiş hesab ediləcək.
Uyğunlaşma Vahid Testləri
Köhnə proqram təminatı uzun müddətdir işləyən və çox güman ki, vahid testləri olmadan yazılmış proqramdır. Köhnə kodun şirkət üçün dəyəri var. Uzun illər stabil işləyir. Vahid testləri olmadan qurulan bəzi proqramlar gündə milyon dollarlıq əməliyyatları emal edir. Lakin vahid testləri olmayan kod, illər ərzində bir çox kod baxım proqramçıları tərəfindən toxunduğu üçün zamanla böyük bir kir topuna çevrilir. Refaktorinq proqramçılara onu sınaqdan keçirmək üçün sistemdə tədricən dəyişikliklər etməyə imkan verir. Ancaq bu dəyişikliklər vaxt tələb edir. Bir neçə il əvvəl mən həmkarım Bob Reselman ilə köhnə tətbiqlər üçün vahid testlərindən istifadə məsələsini müzakirə etdim. Reselman, onsuz qurulmuş tətbiqlərdə vahid testinin həyata keçirilməsinin çox bahalı və hətta axmaq olduğunu müdafiə etdi. Bunun əvəzinə o, təşkilata vahid testləri ilə yeni inkişafa başlamağı və köhnə tətbiqləri tək buraxmağı tövsiyə etdi. Bu COBOL, hesabat generatorları və digər proqramlar üçün doğru ola bilər, lakin mən iddia edərdim ki, müasir dillərdə yazılmış proqramlarda - C++, C#, Java və Ruby - geriyə aktiv olaraq vahid testləri əlavə etmək olduqca asandır. Onları bütün tətbiq üçün yazmaq əvəzinə, sadəcə olaraq cari dəyişikliyə və refaktora vahid testləri əlavə edin.
Artan sürət, keyfiyyət və sınaqdan keçmə qabiliyyəti
Layihə menecerləri deyirlər ki, planlaşdırma keyfiyyət, tamamlanan işin miqdarı, resurslar və vaxt arasında mübadilələri nəzərdə tutur. Bir sahəyə bir şey əlavə etmək üçün digərindən nəyisə götürməlisiniz. Effektiv vahid testləri bu qaydanı pozur. Buna görə də vahid testi təşkilatlar üçün vacib və dəyərlidir. Yaxşı vahid testləri keyfiyyəti yaxşılaşdıran test edilə bilən kod istehsal edir. Bu kodun daha az qüsurları olacaq, bu da layihəni daha sürətli başa çatdırmaq üçün daha az səhv düzəlişləri deməkdir. Proqram təminatı səhvlərlə qarşılaşdıqda, vahid testləri sazlama, düzəltmə və kod yazmağı sürətləndirir. Və bu elə bir şəkildə baş verir ki, kodun keyfiyyəti və sürəti eyni vaxtda yaxşılaşdırılarkən qüsurun təkrar baş vermə ehtimalı əhəmiyyətli dərəcədə azalır. Proqram təminatının hazırlanmasında sehrli güllə olmasa da, effektiv vahid testləri inkişafı, sınaqları və hətta bəzi funksional tələblər mühəndisliyini sürətləndirə bilər.
Java-da massivi kopyalamağın 5 yolu
Mənbə: Dev.to Beləliklə, sizdə iki A və B massiv var və elementləri A-dan B-yə köçürməlisiniz. Yaxşı, Java-da bunu etməyin müxtəlif yolları var və mən onları indi sizə göstərəcəyəm.
Birinci üsul: ForLoop
Köhnə for loopun köməyimizə gəldiyi yer budur :
int[]A={1,2,4,4};int[]B=newint[];for(int i =0; i <A.length; i++){B[i]=A[i];}
İkinci üsul: .clone()
Massiv klonlama metodu da istədiyiniz nəticəni əldə etməyə kömək edə bilər:
int[]A={1,2,4,4};int[]B=A.clone();//the clone method copies the content of A into B;
Üçüncü üsul: System.arraycopy()
Növbəti yol java.lang paketində olan System.arraycopy() metodundan istifadə etməkdir . İstifadəsinə keçməzdən əvvəl onun imzasını müzakirə edək:
publicstaticvoidarraycopy(Object src,//:source array, in this case Aint srcPos,//:the start index for copy, typically 0Object dest,//:destination object in this case B.int destPos,//:the index to place the copied elementsint length //:the length of the contents to be copied);
Müzakirə edəcəyimiz növbəti nüsxə seçimi java.utils paketindən Arrays sinfidir . Onun imzasına diqqət yetirin:
publicstaticint[]copyOf(int[] original,// :source array in this case Aint newLength // :the length of the contents to be copied);
Ərizə:
int[]A={1,2,4,4};int[]B=Arrays.copyOf(A,3);
Beşinci üsul: Arrays.copyOfRange()
Beləliklə, bu, bu yazıda baxacağımız son seçim olacaq. O, həmçinin java.utils paketində mövcud olan Arrays sinfindəndir . Onun imzasına bir daha baxaq:
publicstaticint[] copyOfRange(int[] original,// :source array in this case Aint from,//:the start index for copy, typically 0intto// the end index exclusive);
GO TO FULL VERSION