توی چرخه توسعه نرم افزار صرفا این که به اپلیکیشن کار میکنه و باگ شهودی نداره کافی نیست .
در چرخه تولید نرم افزار هیچوقت نمیشه گفت یک ابزار و یا یک کد هیچ باگ و مشکلی نداره و ما با انجام تست های مختلف در چرخه تولید سعی میکنیم میزان باگ و مشکلات امنیتی رو به حد اقل برسونیم .
حتی در صورت به حد اقل رسوندن این باگ ها نیازه که این فرایند به صورت دوره ای و کامل توی چرخه تولید باشه چون روزانه مخصوصا با پیشرفت هوش مصنوعی باگ های جدید و اسیب پذیری های امنیتی جدید پیدا میشه و نیازه همشون برطرف بشن .
به همین دلیل، TEST یکی از مهمترین بخشهای چرخه توسعه نرمافزار است. هدف از تست فقط پیدا کردن باگ نیست؛ بلکه افزایش اطمینان از کیفیت، پایداری، امنیت و قابلیت نگهداری نرمافزار است.
توی محصولات نرم افزاری از انواع مختلف تست میشه استفاده کرد که به چند نمونش اشاره میکنم :
Unit Test
Integration Test
End-to-End (E2E) Test
API Test
Performance و Load Test
Security Testing (SAST و DAST)
Fuzz Testing
Contract Testing
Static Code Analysis
Dependency Vulnerability Scanning
. . .و
هر کدوم از این موارد جنبه های مختلف از کیفیت نرم افزار را برسی میکنند و در کنار هم تصویر کامل تری از وضعیت پروژه رو نشون میدن
تعداد تست هایی که میشه انجام داد خیلی بیشتر از اونی هست که بشه توی یه پست به همشون اشاره کرد بخاطر همین میخوام سه تا از تست ها و ابزار هایی که بنظر من با کمترین هزینه و به سادگی میتونن توی فرایند چرخه تولید نرم افزار شما باشن و بیشترین بازدهی رو بدن اشاره کنم .
یک نوع تست هست که کوچک ترین بخش کد رو به صورت مستقل برسی میکنه
به عنوان مثال شما یک کلاس دارین که برای ورود به حساب کاربری استفاده میکنین ازش ُ و برای همین کلاس انتظار دارین یک سری خروجی قابل پیشبینی داشته باشین و خروجیتون غیر از چیزی که انتظار دارین نباشه و برای همین خروجی و همین کلاس یک تست مینویسین . این تست باعث میشه تا از این که منطق هر بخش از کدتون درست هست مطمعن بشین و تو فرایند توسعه و ادیت کد منطق کدتون به مشکل نخوره .
ابزاری که نیاز دارین تا تست هاتون رو اجرا کنین نسبت به زبان برنامه نویسی که استفاده میکنین میتونه متفاوت باشه
این تست چیارو پوشش میده :
Functional Testing (در سطح واحد)
تا حدی Regression Testing (با اجرای مجدد تستها بعد از هر تغییر)
یک ابزار تحلیل کد هست که کد رو بدون این که اجرا کنه برسی میکنه و خیلی کمک میکنه بهتون که مشکلات کد رو پیدا کنین و خیلی تمیز کد بزنین
این ابزار شامل تست های زیر میشه :
Static Code Analysis
Code Quality
Code Smell Detection
Duplicate Code Detection
SAST (Static Application Security Testing)
Test Coverage Reporting (با استفاده از خروجی Unit Test)
البته نسخه community تست های امنیتی رو کامل انجام نمیده و اگر بخواین ریسپانس کامل تری تو این حوزه بگیرین باید ابزار رو خریداری کنین
استفاده از این ابزار باعث افزایش کیفیت، خوانایی، قابلیت نگهداری و شناسایی برخی مشکلات امنیتی و باگهای احتمالی میشه
یه ابزاریه که برای بررسی امنیت کتابخانهها و وابستگیهای پروژه استفاده میشه
شما اگر کدتون رو هم خیلی تمیز و خوب نوشته باشین بازم برای نوشتن کدتون از کتابخونه های مختلف استفاده کردین که ممکنه نسخه ای که استفاده میکنین دارای CVE باشه و یا اگر الان از همه نسخه های امن استفاده میکنین امکان داره بعدا روی همین نسخه ای که دارین یه CVE جدید پیدا بشه بخاطر همین همیشه باید به صورت دوره ای توی فرایند تست برنامتون باشه
کارکردش اینطوریه که لیست کتابخونه هایی که شما دارین رو اسکن میکنه و بعدش یه دیتابیس از همه CVE های موجود دانلود میکنه و لیست کتابخونه هارو با دیتابیسی که داره چک میکنه و اگر دارای CVE باشه توی خروجی کتابخونه ای که اسیب پذیری داره با سطح اسیب پذیری رو بهتون میگه و ورژنی که این اسیب پذیری برطرف شده رو هم بهتون میگه تا بتونین به نسخه امن کتابخونه بروزرسانی کنین
هیچ ابزاری نمیدونه بیزینس کد تو چیه و هدفت از این نرم افزار چیه و اصلا کاربر نهاییت از نرم افزار تو دقیقا چه انتظاری داره .
کنار همه تستها و ابزارهای خودکار، هنوز هم تست انسانی (Manual Testing) و حضور تیم QA (Quality Assurance) یکی از بخشهای مهم فرآیند توسعه نرمافزاره.
تو تست دستی، یه تستر یا کارشناس QA نرمافزار رو دقیقاً مثل یه کاربر واقعی بررسی میکنه؛ سناریوهای مختلف را اجرا میکنه، رفتار سیستمو میبینه و مشکلاتی رو پیدا میکنه که معمولاً ابزارهای خودکار قادر به تشخیص اونا نیستن.
برای مثال، مواردی مانند:
تجربه کاربری (UX)
مشکلات رابط کاربری (UI)
خطاهای متنی یا نگارشی
سناریوهای پیچیده و غیرقابل پیشبینی کاربران
بررسی تطابق نرمافزار با نیازمندیهای کسبوکار (Business Requirements)
هیچ ابزاری نمیتونه تشخیص بده که :
آیا کاربر واقعاً تجربه خوبی از استفاده از سیستم دارد؟
آیا فرآیند ثبت سفارش برای کاربر گیجکننده است؟
آیا متن پیامهای خطا مناسب هستند؟
آیا نیاز واقعی مشتری بهدرستی پیادهسازی شده است؟
به همین دلیل در پروژه های حرفه ای از هر دو نوع تست برای گرفتن بیشترین بازدهی استفاده میشود
پیاده سازی این تست ها بستگی به پروژتون داره و بهتره که به صورت اتوماتیک توی فرایند توسعه قرار بگیرن مثل CI/CD و این که درباره پیده سازیش و نحوه استفاه از این ابزار ها کاملا بستگی به پروژتون میتونه متفاوت باشه
امیدوارم مطالب براتون مفید بوده باشه :)