JavaRush /Java блогу /Random-KY /Кофе-брейк №87. Эмне үчүн бирдикти тестирлөө иштеп чыгууч...

Кофе-брейк №87. Эмне үчүн бирдикти тестирлөө иштеп чыгуучулар үчүн маанилүү? Java тилинде массивди көчүрүүнүн 5 жолу

Группада жарыяланган

Эмне үчүн бирдикти тестирлөө иштеп чыгуучулар үчүн маанилүү?

Булак: SearchSoftwareQuality Келгиле, бирдикти тестирлөө эмне үчүн маанилүү жана баалуу экенин жана ал мүчүлүштүктөрдү оңдоону кантип жеңилдеткенин талкуулайлы. Бирдикти тестирлөө программалык камсыздоонун сапатын жакшыртуу үчүн күчтүү курал болуп саналат. Бирдиктин тесттери тиркеменин программалык камсыздоонун спецификацияларына шайкеш келээрин жана максаттуу иш алып барарын негизги текшерүүнү камсыз кылат. Кофе-брейк №87.  Эмне үчүн бирдикти тестирлөө иштеп чыгуучулар үчүн маанилүү?  Java тorнде массивди көчүрүүнүн 5 жолу - 1Жакшы жасалганда, бирдик тесттери:
  • кемчorктердин санын азайтуу жана аларды өнүктүрүүнүн жашоо циклинин алгачкы этаптарында аныктоо;
  • codeдун окулушун жакшыртуу;
  • codeду кайра колдонууга уруксат берүү;
  • жайылтуу ылдамдыгын жогорулатуу.
Келгиле, бирдикти тестирлөө эмне үчүн маанилүү экенин, тесттин бул түрү кантип пайда болгонун жана аны ишке ашырууга кандай тоскоолдуктар бар экенин карап көрөлү.

Unit Testing тарыхы

Эрте этапта аныкталган ката убакытты жана күчтү үнөмдөйт. Компьютердик тарыхтын алгачкы 50 жылында бирдикти текшерүү жана мүчүлүштүктөрдү оңдоо негизинен бир эле нерсе болгон. Бирок 1990-жылдарга карата code ушунчалык татаал болуп калгандыктан, системаны өзүнчө иштетүү үчүн майда бөлүктөргө бөлүү мүмкүн эмес болчу. 1997-жылы Кент Бек аттуу программист codeдун кичинекей бөлүктөрүн сыноо үчүн JUnit, иштеп чыгуу чөйрөсүндөгү плагинди жараткан. Баштапкы codeду баалаган тест codeу бирдик тесттери деп аталат. Бирдикти сыноонун бул түрү көп жылдар бою негизги нерсе болуп калды. Бек JUnitти жараткандан кийин, Мартин Фаулер "Рефакторинг" китебин жазып, анда codeду обочолонгон жана сыналышы мүмкүн кылуу үчүн трансформациялоо жолдорун сунуштаган. Кодду рефакторинг менен бирдикти тестирлөөнүн айкалышы тестке негизделген өнүгүүгө алып келди, мында бирдик тесттерин түзүү программалоо процесси үчүн абдан маанилүү. Анда code түзүлө электе эле сыналышы керек. Ошентип, программалоо процесси бирдик сыноолору аткарылмайынча бүтпөйт. Долбоор андан кийин система деңгээлинде же адам деңгээлинде изилдөө стадиясына өтүшү мүмкүн.

Бирдикти тестирлөө мисалы

Бул мисал бирдикти текшерүүнүн маанилүүлүгүн көрсөтүп турат. Бул жерде JUnit температураны Фаренгейттен Цельсийге айландырган жөнөкөй функцияны баалайт. Айландыруу формуласы: C = (F-32) * 5/9. Бир нече саптарды, анын ичинде функция кол тамгасын жана тармал кашааларды китепкана функциясы катары codeдо ишке ашырууга болот. Бирок, бул критерийлер экени функциядан түшүнүксүз. Бул параметрлер жогору же ылдый тегеректөө, реалдуу сандар же жогорку жана төмөнкү чектерди камтышы мүмкүн. Келгиле, Test::More модулун колдонуп, Perlде температураны өзгөртүү функциясына мисал бирдик тесттерин түзөлү. Биринчи сап программистке калган codeдон эмнени күтөөрүн айткан комментарий.
# 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 алкагы an objectиге багытталган системаларга жана тесттик an objectтерге таянат, бирок түшүнүк окшош.

Изоляцияланган бирдик сыноолору

Бирдик тесттеринин артыкчылыктарынын бири - алар функцияны, классты же ыкманы бөлүп алып, codeдун ошол бөлүгүн гана сынайт. Жакшыраак жеке компоненттер системанын туруктуулугун камсыз кылат. Ушундай жол менен сиз ишенимдүү code аласыз. Бирдиктин тесттери мүчүлүштүктөрдү оңдоо процессинин мүнөзүн да өзгөртөт. Мүчүлүштүктөрдү оңдоого аракет кылуу үчүн, программисттер жөн эле ката жазып, андан соң аны мурунку күтүүлөрдү бузбастан өтүп кетиши үчүн кайталашат. Бул процесс орнотуу, кайра түзүү, тыныгуу жана сыноо аркылуу салттуу мүчүлүштүктөрдү оңдоонун кол циклин жок кылат. Кодду бирдикти сыноого ылайыктуу кылуу үчүн өзгөртүү үчүн программисттер иштөө ыкмасын өзгөртүшү керек. Бирдик тесттерисиз жазылган codeдун ар кандай бөлүктөрү, жок эле дегенде, жеке модулдар катары текшерилбеген деп эсептелинет.

Adapting Unit Tests

Эски программалык камсыздоо - бул көптөн бери иштеп келе жаткан программалык камсыздоо жана, кыязы, бирдик тесттерисиз жазылган. Эски codeдун компания үчүн мааниси бар. Ал көп жылдар бою туруктуу иштейт. Бирдик тесттери жок курулган кээ бир программалар күнүнө миллион долларлык транзакцияларды иштетет. Бирок бирдик тесттери жок code убакыттын өтүшү менен чоң тополоңго айланат, анткени ага көптөгөн жылдар бою codeду тейлөөчү программисттер тийген. Рефакторинг программисттерге системаны сынап көрүү үчүн акырындык менен өзгөртүү киргизүүгө мүмкүндүк берет. Бирок, бул өзгөртүүлөр убакытты талап кылат. Бир нече жыл мурун мен кесиптешим Боб Ресельман менен эски тиркемелер үчүн бирдик тесттерин колдонуу маселесин талкууладым. Ресельман ансыз курулган тиркемелерде бирдикти тестирлөө өтө кымбат жана ал тургай келесоолук деп ырастады. Анын ордуна, ал уюмга бирдик тесттери менен жаңы иштеп чыгууну баштоону жана эски тиркемелерди жалгыз калтырууну сунуштады. Бул COBOL, отчет генераторлору жана башка тиркемелер үчүн болушу мүмкүн, бирок мен заманбап тилдерде жазылган тиркемелерде - C++, C#, Java жана Ruby - бирдик тесттерин артка кайтаруу оңой деп ырастайм. Аларды бүтүндөй тиркеме үчүн жазгандын ордуна, жөн гана учурдагы өзгөртүүгө жана рефакторго бирдик тесттерин кошуңуз.

Ылдамдык, сапат жана сыноого жөндөмдүүлүгү жогорулады

Долбоордун менеджерлери пландоо сапаттын, аткарылган иштин көлөмүнүн, ресурстардын жана убакыттын ортосундагы соодалашууну камтыйт дешет. Бир аймакка бир нерсе кошуу үчүн, башкасынан бир нерсени алып салуу керек. Натыйжалуу бирдик сыноолор бул эрежени бузушат. Мына ошондуктан бирдикти текшерүү уюмдар үчүн маанилүү жана баалуу. Жакшы бирдик тесттери сапатты жакшыртуучу сыналуучу codeду чыгарат. Бул codeдун кемчorктери азыраак болот, демек, долбоорду тезирээк бүтүрүү үчүн мүчүлүштүктөрдү оңдоолор азыраак болот. Программа мүчүлүштүктөргө туш болгондо, бирдик тесттери мүчүлүштүктөрдү оңдоону, оңдоону жана codeду жазууну тездетет. Жана бул бир эле учурда codeдун сапатын жана ылдамдыгын жакшыртуу менен кемчorктин кайталануу ыктымалдыгы кыйла азаят. Программалык камсыздоону иштеп чыгууда сыйкырдуу ок жок болсо да, эффективдүү бирдик тесттери иштеп чыгууну, тестирлөөнү жана ал тургай кээ бир функционалдык талаптарды инженердик жактан тездете алат.

Java тorнде массивди көчүрүүнүн 5 жолу

Булак: Dev.to Демек, сизде А жана В эки массив бар жана сиз элементтерди Адан Вге көчүрүшүңүз керек. Ооба, Javaда муну жасоонун ар кандай жолдору бар жана мен аларды азыр көрсөтөм.

Биринчи ыкма: ForLoop

Бул жерде бизге жакшы эски for цикли жардамга келет :
int[] A = {1,2,4,4};
int[] B = new int[];

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

Экинчи ыкма: .clone()

Массивди клондоо ыкмасы да каалаган натыйжага жетүүгө жардам берет:
int[] A = {1,2,4,4};
int[] B = A.clone();//the clone method copies the content of A into B;

Үчүнчү ыкма: System.arraycopy()

Кийинки жол - Java.lang пакетинде жайгашкан System.arraycopy() ыкмасын колдонуу . Аны колдонууга өтүүдөн мурун, анын кол тамгасын талкуулайлы:
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
);
Колдонмо:
int[] A = {1,2,4,4};
int[] B = new int[];

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

Төртүнчү ыкма: Arrays.copyOf()

Биз талкуулай турган кийинки көчүрүү варианты java.utils топтомундагы Arrays классы . Анын кол тамгасына көңүл буруңуз:
public static int[] copyOf(
    int[] original, // :source array in this case A
    int newLength // :the length of the contents to be copied
);
Колдонмо:
int[] A = {1,2,4,4};
int[] B = Arrays.copyOf(A, 3);

Бешинчи ыкма: Arrays.copyOfRange()

Ошентип, бул биз бул макалада карай турган акыркы вариант болот. Ал ошондой эле java.utils пакетинде бар Arrays классынан . Анын кол тамгасын дагы бир жолу карап көрөлү:
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
);
Колдонмо:
int[] A = {1,2,3,4,5,6,7};
int[] B = Arrays.copyOfRange(A, 0, A.length);
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION