JavaRush /Java блогы /Random-KK /Кофе-брейк №87. Неліктен бірлікті тестілеу әзірлеушілер ү...

Кофе-брейк №87. Неліктен бірлікті тестілеу әзірлеушілер үшін маңызды? Java тілінде массивті көшірудің 5 тәсілі

Топта жарияланған

Неліктен бірлікті тестілеу әзірлеушілер үшін маңызды?

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

Бірліктерді сынау тарихы

Ерте кезеңде анықталған қате уақыт пен күш-жігерді үнемдейді. Компьютерлік тарихтың алғашқы 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іге бағытталған жүйелер мен сынақ нысандарына сүйенеді, бірақ тұжырымдама ұқсас.

Оқшауланған бірлік сынақтары

Бірлік сынақтарының артықшылықтарының бірі олар функцияны, сыныпты немесе әдісті оқшаулап, тек сол code бөлігін тексереді. Жақсырақ жеке компоненттер жүйенің жалпы тұрақтылығын қамтамасыз етеді. Осылайша сіз сенімді code аласыз. Бірлік сынақтары сонымен қатар жөндеу процесінің сипатын өзгертеді. Қатені түзетуге тырысу үшін бағдарламашылар жай ғана сәтсіз сынақ жазады, содан кейін оны алдыңғы күтулерді бұзбай өту үшін қайталайды. Бұл процесс орнату, қайта жасау, кідірту және сынақ арқылы дәстүрлі жөндеудің қолмен циклін болдырмайды. Кодты бірлік сынағы үшін қолайлы ету үшін өзгерту үшін бағдарламашылар жұмыс істеу тәсілін өзгертуі керек. Бірлік сынақтарынсыз жазылған кез келген code бөліктері кем дегенде жеке модульдер ретінде тексерілмеген болып саналады.

Бірлік сынақтарын бейімдеу

Бұрынғы бағдарламалық құрал – бұл ұзақ уақыт бойы жұмыс істеп тұрған және, ең алдымен, бірлік сынақтарынсыз жазылған бағдарламалық құрал. Бұрынғы codeтың компания үшін мәні бар. Ол көптеген жылдар бойы тұрақты жұмыс істейді. Бірлік сынақтарынсыз жасалған кейбір бағдарламалар күніне миллион долларлық транзакцияларды өңдейді. Бірақ бірлік сынақтары жоқ code уақыт өте келе үлкен ластануға айналады, өйткені оған көптеген жылдар бойы codeты техникалық қызмет көрсетуші бағдарламашылар әсер етті. Рефакторинг бағдарламашыларға жүйені сынақтан өткізу үшін біртіндеп өзгертулер енгізуге мүмкіндік береді. Дегенмен, бұл өзгерістер уақытты қажет етеді. Бірнеше жыл бұрын мен әріптесім Боб Ресельманмен бұрынғы қолданбалар үшін бірлік сынақтарын пайдалану мәселесін талқыладым. Ресельман онсыз құрастырылған қосымшаларда бірлік тестілеуді жүзеге асыру тым қымбат және тіпті ақымақ екенін айтты. Оның орнына ол ұйымға бірлік сынақтары арқылы жаңа әзірлеуді бастауды және бұрынғы қолданбаларды жалғыз қалдыруды ұсынды. Бұл COBOL, есеп генераторлары және басқа қолданбаларға қатысты болуы мүмкін, бірақ мен қазіргі заманғы тілдерде жазылған қолданбаларда (C++, C#, Java және Ruby) бірлік сынақтарын ретроактивті түрде қосу өте оңай деп айтқым келеді. Оларды бүкіл қолданба үшін жазудың орнына, барған сайын ағымдағы өзгертуге және рефакторға бірлік сынақтарын қосыңыз.

Жылдамдық, сапа және сынақтан өту мүмкіндігі артады

Жоба менеджерлерінің айтуынша, жоспарлау сапа, орындалған жұмыс көлемі, ресурстар мен уақыт арасындағы келіссөздерді қамтиды. Бір аймаққа бірдеңе қосу үшін екіншісінен бір нәрсені алып тастау керек. Тиімді бірлік сынақтары бұл ережені бұзады. Сондықтан бірлікті тестілеу ұйымдар үшін маңызды және құнды. Жақсы бірлік сынақтары сапаны жақсартатын сыналатын codeты жасайды. Бұл codeта ақаулар аз болады, яғни жобаны тезірек аяқтау үшін қателерді түзету азырақ болады. Бағдарламалық құрал қателерге тап болған кезде, бірлік сынақтары отладтауды, түзетуді және codeты жазуды жылдамдатады. Және бұл codeтың сапасы мен жылдамдығын жақсарта отырып, ақаудың қайталану ықтималдығы айтарлықтай төмендейтіндей болады. Бағдарламалық жасақтаманы әзірлеуде сиқырлы оқ жоқ болса да, тиімді бірлік сынақтары әзірлеуді, тестілеуді және тіпті кейбір функционалдық талаптарды инженерияда жылдамdateы мүмкін.

Java тілінде массивті көшірудің 5 тәсілі

Дереккөз: Dev.to Сонымен, сізде екі A және B массивтері бар және элементтерді A-дан B-ге көшіру керек. 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 бумасындағы Массивтер класы болып табылады . Оның қолтаңбасына назар аударыңыз:
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