JavaRush /وبلاگ جاوا /Random-FA /قهوه استراحت شماره 87. چرا تست واحد برای توسعه دهندگان مه...

قهوه استراحت شماره 87. چرا تست واحد برای توسعه دهندگان مهم است؟ 5 روش برای کپی کردن یک آرایه در جاوا

در گروه منتشر شد

چرا تست واحد برای توسعه دهندگان مهم است؟

منبع: SearchSoftwareQuality بیایید بحث کنیم که چرا تست واحد مهم و ارزشمند است و چگونه اشکال‌زدایی را آسان‌تر می‌کند. تست واحد یک ابزار قدرتمند برای بهبود کیفیت نرم افزار است. تست‌های واحد تأیید اساسی می‌کنند که یک برنامه کاربردی با مشخصات نرم‌افزار مطابقت دارد و همانطور که در نظر گرفته شده است رفتار می‌کند. کافه استراحت شماره 87.  چرا تست واحد برای توسعه دهندگان مهم است؟  5 روش برای کپی کردن یک آرایه در جاوا - 1وقتی به خوبی انجام شد، تست های واحد:
  • کاهش تعداد عیوب و شناسایی آنها در مراحل اولیه چرخه عمر توسعه؛
  • بهبود خوانایی کد؛
  • اجازه استفاده مجدد از کد
  • افزایش سرعت استقرار
بیایید بررسی کنیم که چرا تست واحد مهم است، چگونه این نوع آزمایش ایجاد شد، و چه موانعی برای اجرای آن وجود دارد.

تاریخچه تست واحد

خطای شناسایی شده در مراحل اولیه باعث صرفه جویی در زمان و تلاش می شود. برای 50 سال اول تاریخ کامپیوتر، تست واحد و اشکال زدایی اساساً یکسان بود. اما در دهه 1990، کد آنقدر پیچیده شده بود که اغلب غیرممکن بود که سیستم را به قطعات کوچک تقسیم کنیم تا آنها را به صورت مجزا اجرا کنند. در سال 1997، برنامه نویسی به نام کنت بک JUnit را ایجاد کرد، یک پلاگین محیط توسعه برای آزمایش قطعات کوچک کد. کد آزمایشی که کد منبع را ارزیابی می کند، تست های واحد نامیده می شود. این نوع تست واحد برای چندین سال به یک اصل تبدیل شده است. پس از اینکه بک JUnit را ایجاد کرد، مارتین فاولر کتابی به نام Refactoring نوشت که در آن راه‌هایی برای تبدیل کد به منظور جداسازی و آزمایش‌پذیرتر کردن کد پیشنهاد کرد. ترکیبی از refactoring کد و تست واحد منجر به توسعه آزمایش محور شده است، جایی که ایجاد تست های واحد برای فرآیند برنامه نویسی ضروری است. در آن، کد باید حتی قبل از ایجاد آن قابل آزمایش باشد. بنابراین، تا زمانی که تست های واحد اجرا نشود، فرآیند برنامه نویسی کامل نمی شود. سپس پروژه می تواند به مرحله تحقیق در سطح سیستم یا در سطح انسانی حرکت کند.

نمونه تست واحد

این مثال اهمیت تست واحد را نشان می دهد. در اینجا JUnit یک تابع ساده را ارزیابی می کند که دما را از فارنهایت به سلسیوس تبدیل می کند. فرمول تبدیل: C = (F-32) * 5/9. فقط چند خط، از جمله امضای تابع و پرانتزهای فرفری، می توانند در کد به عنوان یک تابع کتابخانه پیاده سازی شوند. با این حال، از عملکرد مشخص نیست که اینها معیار هستند. این گزینه ها ممکن است شامل گرد کردن به بالا یا پایین، اعداد واقعی، یا حد بالا و پایین باشد. بیایید نمونه آزمایش های واحد را برای این تابع تبدیل دما در پرل با استفاده از ماژول Test::More ایجاد کنیم. خط اول یک نظر است که به برنامه نویس می گوید که از کد باقی مانده چه انتظاری داشته باشد.
# 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 بر سیستم های شی گرا و اشیاء آزمایشی متکی است، اما مفهوم مشابه است.

تست های واحد ایزوله

یکی از مزایای تست های واحد این است که یک تابع، کلاس یا متد را ایزوله می کنند و فقط آن قطعه کد را آزمایش می کنند. اجزای فردی بهتر انعطاف پذیری کلی سیستم را فراهم می کنند. به این ترتیب کد قابل اعتمادی دریافت می کنید. تست های واحد نیز ماهیت فرآیند اشکال زدایی را تغییر می دهد. برای رفع یک باگ، برنامه نویسان به سادگی یک تست شکست خورده را می نویسند و سپس آن را تکرار می کنند تا بدون نقض انتظارات قبلی، موفق شود. این فرآیند چرخه دستی اشکال زدایی سنتی را از طریق راه اندازی، ایجاد مجدد، مکث و آزمایش حذف می کند. برای تغییر کد به منظور مناسب ساختن آن برای تست واحد، برنامه نویسان باید روش کار خود را تغییر دهند. هر قطعه کدی که بدون آزمون واحد نوشته شود احتمالاً آزمایش نشده در نظر گرفته می شود، حداقل به عنوان ماژول های جداگانه.

تطبیق آزمون های واحد

نرم افزار Legacy نرم افزاری است که برای مدت طولانی در حال اجرا بوده و به احتمال زیاد بدون تست واحد نوشته شده است. کد میراث برای شرکت ارزش دارد. برای چندین سال به طور پایدار کار می کند. برخی از برنامه هایی که بدون تست واحد ساخته شده اند، تراکنش های میلیون دلاری را در روز پردازش می کنند. اما کدهایی که تست واحد ندارند به مرور زمان به یک توپ بزرگ از خاک تبدیل می‌شوند، زیرا در طول سال‌ها توسط بسیاری از برنامه‌نویسان تعمیر و نگهداری کد لمس شده است. Refactoring به برنامه نویسان اجازه می دهد تا به تدریج تغییراتی در یک سیستم ایجاد کنند تا آن را قابل آزمایش کنند. با این حال، این تغییرات زمان می برد. چندین سال پیش، من با همکارم باب رسلمن در مورد استفاده از تست های واحد برای برنامه های کاربردی قدیمی بحث کردم. Reselman استدلال کرد که اجرای تست واحد در برنامه های کاربردی ساخته شده بدون آن بسیار گران و حتی احمقانه است. در عوض، او توصیه کرد که سازمان توسعه جدید را با تست های واحد آغاز کند و برنامه های کاربردی قدیمی را به حال خود رها کند. این ممکن است برای COBOL، مولدهای گزارش و سایر برنامه‌ها صادق باشد، اما من استدلال می‌کنم که در برنامه‌هایی که به زبان‌های مدرن نوشته شده‌اند - C++، C#، جاوا و Ruby - اضافه کردن آزمایش‌های واحد به صورت عطف به گذشته بسیار آسان است. به‌جای نوشتن آن‌ها برای کل برنامه، فقط تست‌های واحد را به تغییر فعلی اضافه کنید و در حین حرکت مجدداً تغییر دهید.

افزایش سرعت، کیفیت و تست پذیری

مدیران پروژه می گویند که برنامه ریزی شامل معاوضه هایی بین کیفیت، میزان کار انجام شده، منابع و زمان است. برای اضافه کردن چیزی به یک منطقه، باید چیزی را از منطقه دیگر حذف کنید. تست های واحد موثر این قانون را زیر پا می گذارند. به همین دلیل است که تست واحد برای سازمان ها مهم و ارزشمند است. تست های واحد خوب کد قابل آزمایش تولید می کنند که کیفیت را بهبود می بخشد. این کد ایرادات کمتری خواهد داشت، به این معنی که رفع اشکال کمتری برای تکمیل پروژه سریعتر. هنگامی که نرم افزار با اشکال مواجه می شود، تست های واحد سرعت اشکال زدایی، رفع اشکال و نوشتن کد را افزایش می دهد. و این به گونه ای اتفاق می افتد که احتمال بروز مجدد نقص به طور قابل توجهی کاهش می یابد و به طور همزمان کیفیت و سرعت کد بهبود می یابد. در حالی که هیچ گلوله جادویی در توسعه نرم افزار وجود ندارد، تست های واحد موثر می توانند توسعه، آزمایش و حتی برخی از مهندسی مورد نیاز عملکردی را سرعت بخشند.

5 روش برای کپی کردن یک آرایه در جاوا

منبع: Dev.to بنابراین شما دو آرایه A و B دارید و باید عناصر را از A به B کپی کنید. خب، روش های مختلفی برای انجام این کار در جاوا وجود دارد و من اکنون آنها را به شما نشان خواهم داد.

روش اول: 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);
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION