JavaRush /Java Blog /Random-TL /Coffee break #87. Bakit mahalaga ang unit testing para sa...

Coffee break #87. Bakit mahalaga ang unit testing para sa mga developer? 5 Mga Paraan para Magkopya ng Array sa Java

Nai-publish sa grupo

Bakit mahalaga ang unit testing para sa mga developer?

Source: SearchSoftwareQuality Talakayin natin kung bakit mahalaga at mahalaga ang unit testing, at kung paano nito pinapadali ang pag-debug. Ang unit testing ay isang makapangyarihang tool para sa pagpapabuti ng kalidad ng software. Ang mga unit test ay nagbibigay ng pangunahing pag-verify na ang isang application ay sumusunod sa mga detalye ng software at kumikilos ayon sa nilalayon. Кофе-брейк #87. Почему модульное тестирование важно для разработчиков? 5 способов скопировать массив в Java - 1Kapag nagawa nang maayos, mga pagsubok sa unit:
  • bawasan ang bilang ng mga depekto at kilalanin ang mga ito sa maagang yugto ng ikot ng buhay ng pag-unlad;
  • pagbutihin ang pagiging madaling mabasa ng code;
  • payagan ang muling paggamit ng code;
  • dagdagan ang bilis ng pag-deploy.
Tingnan natin kung bakit mahalaga ang unit testing, paano nagmula ang ganitong uri ng pagsubok, at kung ano ang mga hadlang sa pagpapatupad nito.

Kasaysayan ng Unit Testing

Ang isang error na nakita sa isang maagang yugto ay nakakatipid ng oras at pagsisikap. Para sa unang 50 taon ng kasaysayan ng computer, ang pagsubok sa unit at pag-debug ay mahalagang pareho. Ngunit noong 1990s, ang code ay naging napakakumplikado na kadalasang imposibleng hatiin ang system sa maliliit na bahagi upang patakbuhin ang mga ito nang hiwalay. Noong 1997, isang programmer na nagngangalang Kent Beck ang lumikha ng JUnit, isang development environment plugin para sa pagsubok ng maliliit na piraso ng code. Ang test code na sumusuri sa source code ay tinatawag na unit tests. Ang ganitong uri ng pagsubok sa yunit ay naging isang staple sa loob ng maraming taon. Matapos gawin ni Beck ang JUnit, sumulat si Martin Fowler ng isang libro, Refactoring, kung saan iminungkahi niya ang mga paraan upang baguhin ang code upang gawin itong mas hiwalay at masusubok. Ang kumbinasyon ng code refactoring at unit testing ay humantong sa test-driven na development, kung saan ang paglikha ng mga unit test ay mahalaga sa proseso ng programming. Sa loob nito, dapat na masusubok ang code bago pa man ito malikha. Kaya, ang proseso ng programming ay hindi nakumpleto hanggang sa ang mga pagsubok sa yunit ay tumatakbo. Ang proyekto ay maaaring lumipat sa yugto ng pananaliksik sa mga sistema o antas ng tao.

Halimbawa ng Unit Testing

Ang halimbawang ito ay nagpapakita ng kahalagahan ng unit testing. Dito sinusuri ng JUnit ang isang simpleng function na nagko-convert ng temperatura mula Fahrenheit patungong Celsius. Formula ng conversion: C = (F-32) * 5/9. Ilang linya lang, kasama ang function signature at curly braces, ay maaaring ipatupad sa code bilang function ng library. Gayunpaman, hindi malinaw mula sa pag-andar na ang mga ito ay pamantayan. Maaaring kabilang sa mga opsyong ito ang pag-round up o down, real number, o upper at lower limit. Gumawa tayo ng mga halimbawang unit test para sa function na conversion ng temperatura na ito sa Perl gamit ang Test::More module. Ang unang linya ay isang komento na nagsasabi sa programmer kung ano ang aasahan mula sa natitirang 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ы тестирования, но концепция аналогична.

Изолированные модульные тесты

Одно из преимуществ модульных тестов заключается в том, что они изолируют функцию, класс or метод и тестируют только этот фрагмент codeа. Более качественные отдельные компоненты обеспечивают общую отказоустойчивость системы. Таким образом, получается надежный code. Модульные тесты также меняют характер процесса отладки. Whatбы попытаться исправить ошибку, программисты просто пишут неудачный тест, а затем повторяют его, чтобы он прошел, не нарушая предыдущие ожидания. Этот процесс исключает ручной цикл традиционной отладки с помощью настройки, повторного создания, приостановки и проверки. Для изменения codeа, чтобы сделать его пригодным для модульного тестирования, программисты должны изменить процесс своей работы. Любые фрагменты codeа, написанные без модульных тестов, скорее всего, будут считаться непроверенными, по крайней мере, How отдельные модули.

Адаптация модульных тестов

Устаревшее (Legacy) программное обеспечение — это софт, который работает в течение длительного времени и, скорее всего, написан без модульных тестов. Legacy-code имеет ценность для компании. Он стабильно работает долгие годы. Некоторые программы, созданные без использования модульных тестов, обрабатывают транзакции на миллион долларов в день. Но code, в котором нет модульных тестов, со временем превращается в большой комок грязи, поскольку в течение многих лет к нему прикасались многие программисты, занимающиеся обслуживанием codeа. Рефакторинг позволяет программистам постепенно вносить в систему изменения, чтобы сделать ее тестируемой. Однако эти изменения требуют времени. Несколько лет назад я обсуждал со своим коллегой Бобом Реселманом вопрос об использовании модульных тестов для устаревших приложений. Реселман утверждал, что внедрять модульное тестирование в applications, созданные без них, слишком дорого и даже глупо. Вместо этого он рекомендовал организации начать новую разработку с модульных тестов и оставить устаревшие applications в покое. Возможно, это верно для COBOL, генераторов программ отчетов и других приложений, но я утверждаю, что в applications, написанные на современных языках — C ++, C #, Java и Ruby — добавлять модульные тесты задним числом довольно просто. Вместо того, чтобы писать их для всего applications, просто добавьте модульные тесты к текущему изменению и выполняйте рефакторинг по мере продвижения.

Повышение скорости, качества и тестируемости

Руководители проектов говорят, что планирование предполагает компромисс между качеством, объемом выполненной работы, ресурсами и временем. Whatбы добавить что-то к одной области, вы должны отнять что-то от другой. Эффективные модульные тесты нарушают это правило. Вот почему модульное тестирование важно и ценно для организаций. Хорошие модульные тесты создают тестируемый code, который улучшает качество. В этом codeе будет меньше дефектов, а значит, меньше исправлений ошибок для более быстрого завершения проекта. Когда в программном обеспечении возникают ошибки, модульные тесты ускоряют отладку, исправление и написание codeа. И это происходит таким образом, что вероятность повторения дефекта значительно снижается — одновременно улучшается качество и speed codeа. Хотя в разработке программного обеспечения нет волшебной палочки, эффективные модульные тесты могут ускорить разработку, тестирование и даже часть разработки функциональных требований.

5 способов скопировать массив в Java

Источник: Dev.to Итак, у вас есть два массива A и B и вам нужно скопировать элементы из A в B. What ж, есть разные способы сделать это на 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()

Следующий способ — использование метода System.arraycopy(), который есть в пакете java.lang. Прежде чем мы перейдем к его применению, давайте обсудим его подпись:
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()

Следующий вариант копирования, который мы обсудим, относится к классу Arrays из пакета java.utils. Обратите внимание на его подпись:
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()

Итак, это будет последний вариант, на который мы обратим внимание в этой публикации. Он тоже из класса Arrays, присутствующего в пакете java.utils. Еще раз посмотрим его подпись:
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);
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION