تعریف ذهنی (حوزه فعالیت نرم افزار)
کنترل کیفیت QC ( داشته هایی که داریم، بهترین عمل و کیفیت و استاندارد را داشته باشند )
تضمین کیفیت QA ( تمامی فرآیند ها و اقدامات و الزامات انجام شود تا نتیجه مطلوبی بگیریم )
نتیجه : اگر تضمین کیفیت QA را به درستی انجام دهیم، کنترل کیفیت QC ارتقاء پیدا خواهد کرد.
هدف اصلی این تخصص پیدا کردن باگ های مختلف و تست نویسی و ارائه گزارش به توسعه دهندگان و برنامه نویسی ها و مستند سازی با زاویه دید متفاوت نسبت به برنامه نویسان است تا تضمین شود نرم افزار با کیفیت بالایی برای مصرف کننده تولید شده است.
چه کسی می تواند این شغل را داشته باشد
متخصص این شغل باید در رشته مهندسی کامپیوتر یا مهندسی نرم افزار کامپیوتر تحصیل کرده باشد، چرا که این تخصص نیازمند ذهنیت تماما نرم افزاری است که برگرفته از آموزش های و پاس کردن برخی دروس مختلف در دوره های کارشناسی یا کارشناسی ارشد در رشته تحصیلی در دانشگاه است، یک متخصص آی تی و فناوری و اطلاعات با ذهنیت شبکه ای نمی تواند در این شغل موفقیت باشد.
تیپ رفتاری شخصیتی برای این شغل افراد درون گرا می باشد، قطعا یک فرد درون گرا دارای حواس و درک، شهود، تحلیل، تمرکز می تواند تمامی ابعاد مسائل را بررسی و راه حل های مختلف را ارائه دهد و خروجی بگیرد، در واقع اصلا افراد برونگرا نمی تواند در این شغل موفق باشند چرا که این شغل نیاز به تحلیل و بررسی و تمرکز فکری بسیار بالایی همانند برنامه نویسی دارد.
به عنوان متخصص باید حداقل یک پروژه برنامه نویسی صفر تا 100 انجام داده باشید.
فرضیه
فرض بگیرید شما یک متخصص تست و کنترل و تضمین کیفیت نرم افزار ساخته شده هستید و به شما مسئولیت بررسی نقص و باگ های و ساختار را می دهند چه عملی را باید انجام دهید!
اولین سوالی که باید جوابش پیدا کنید این سوال است :
چی داریم، چی ساختیم، با کی ساختیم، چطوری ساختیم کجا ساختیم ، این شد همون QC
مرحله بعد مستندسازی را شروع می کنید و هر اقدامی که انجام می دهید به صورت گزارشی در مستند یادداشت می کنید و قرار بار و بارها برگردید و مجددا مستند را بررسی کنید و مشکلات و فرضیات و چالش ها و حلیات آن را به صورت گزارشی بنویسید این میشه همون راهبرد عملیاتی که قرار وارد جریان تضمین کیفیت QA بشیم.
داخل فایل مستند که دارید تنظیم می کنید این قسمت ها را باید تحلیل کنید
چی نیاز داری تا بهتر تست کنی ؟
چه تحقیق و روشی باید انجام دهید و چه برنامه ریزی داری ؟
طراحی و مدل ها و ساختارت چی هست ؟
گزارش ها و خروجی ها و نتیجه ها چطوری می خوای بگیری ؟
چطوری تست کردی و نتیجه چی شدن؟
کلیات تست و مدل تست ها بیان می کنی؟
فرض بگیرید مالک محصول یا توسعه دهنده ارشد یک پروژه را شروع کرده و این پروژه نرم افزار تحت وب است و با بررسی لازم نتیجه بر این شده که یک MVP محصول اولیه قابل ارائه به مشتری یا سرمایه گذار توسعه دهد، یک سری اسپرینت ها و بک لاک ها و زمان بندی و اولویت ها و فلوچارت ها در متد اسکرام یا چابک با روش کانبان طراحی کرده و شروع به توسعه با تیم برنامه نویسی می کند، حالا کار شما به عنوان تست کننده نرم افزار چگونه خواهد بود؟
ممکنه برنامه نویس ارشد یا مالک محصول تصمیم بگیرد توسعه نرم افزار را خارج معماری استاندارد انجام دهند مانند معماری توسعه MVC تا سرعت و هزینه زمانی را کاهش دهد در این زمان QC مطرح نیست و فقط QA مطرح است و اولین خروجی آزمایشی در یک سرور تست و دمو به شما داده می شود تا مراحل آزمایش را بررسی کنید.
شیوه اجرای تست
مستند سازی شروع می کنید و تمامی مستندات برنامه نویسان یا مطالب جمع آوری شده در ارائه ها و فعالیت های هر فرد به صورت بخش بندی در مستند می نویسید.( چطور شد که اینطوری شد و یک نرم افزار ساخته شد )
اصولا مراحل تست اولیه را خود برنامه نویسان انجام می دهند در هر سیستمی ممکنه مثلا Gitlab CI / CD ادغام و تحوبل باشد و بهتر است هر تغییری مستند شود و به اعضا داده شود.
در برخی مواقع ممکنه از شما بخواهند، همزمان با فرآیند توسعه تست را شروع کنید، ولی غالبا سعی کنید مراحل تست را با الگوی خودتون انجام دهید تا دقت و عملکرد شما بالاتر رود، هدف اصلی شما پیدا کردن باگ های مختلف و ارائه گزارش به توسعه دهندگان و برنامه نویسی ها و مستند سازی آنهاست یعنی به طور کلی از زاویه دید دیگر به کمک برنامه نویسان خواهید آمد تا کیفیت خروجی تضمین شود.
مدیر محصول یا اسکرام یا برنامه نویس ارشد می تواند متد و روش خودشون در مدیریت پروژه داشته باشند و در حالت کلی برای شروع هر پروژه این عبارات مطرح خواهد شد .
چگونه پروژه باید تقسیم و تجزیه شود و پیشنهاد ها و نظرات؟
در هر مرحله چه اقدامات اولویت بندی و باید انجام شود؟
خروجی هر مرحله چی چیزی باید باشد؟
چه زمانبندی و محدودیت هایی باید در نظر گرفته شود؟
چه افرادی در تیم و پروژه حضور دارند کی چکار خواهد کرد؟
پروژه چطور و با چه نرم افزار و ابزاری مدیریت می شود؟
پس تمامی بک لاگ ها و نوبت دهی اسپرینت ها ( لیست اولویت های نوشته شده ) را باید بدونی که بعد بتونی انواع تست ها را به عنوان کارشناس تست و تضمین و کنترل کیفیت انجام دهید.
در روش تفکرAgile یا چابک، محصول خیلی مهمتر و خروجی MVP و بازخوردها و در نهایت مستندات مطرح است، در واقع اگر یک نرم افزار یا یک سایت یا یک پروژه صفر تا 100 انجام داده باشید به طور پیش فرض شما لیست اولویت ها را نوشته و انجام داده اید. که تقریبا میشه گفت اسکرام انجام دادید Scrum.
اگر دوست داشتید مدرک معتبر اسکرام بگیرید قیمتش 150 دلار و 80 سوال در سایت https://www.scrum.org
یکی از مزیت های اسکرام و چابک این است که کارهای مهمتر زودتر انجام میشوند و مدت زمان باقی مانده بر اساس نمودار هشدار Burndown نمایش داده میشوند.
چگونه تست ها را انجام دهیم
بعد از ارائه نمونه دمو و اولیه MVP کار شما آغاز می شود و در حین توسعه نیز شما باید برخی از انواع تست ها را بنویسید و نتیجه بگیرید، تمامی اطلاعات و فرآیند ها را مستند کنید و یعنی بعد از اتمام توسعه اسپرینت ها تمامی موارد باید تست و آزمایش شوند.
روش های موجود در تست توسعه
فرض کنید یک محصول نرم افزاری فروشگاه آنلاین با زبان php، توسعه داده شده است، و شما به عنوان کارشناس قرار کنترل کیفیت پروژه بررسی کنید، ما پنج قسمت برای تست و بازبینی این پروژه خواهیم داشت:
نکته : اگر در هر مرحله اسپرینت ها یا توسعه، تست ها انجام شود، سرعت عملیات بهتر خواهد بود و فقط تست نهایی باقی می ماند، به طور طبیعی برنامه نویسان روش تست نوسی TDD (Test Driven Development) را انجام می دهند یعنی بعد از اتمام کد توابع را بررسی و تست test unit کرده و خروجی را بازبینی می کنند و در صورت نیاز ریفکتور خواهند کرد.
قسمت اول : صفحه دیداری کاربر User interface – Front end
قسمت دوم : مسیرهای دسترسی کاربر و تجربه کاربری User experiences– Front end
قسمت سوم : زیرساخت سورس کد Back-end
قسمت چهارم : دیتابیس Back-end
قسمت پنجم : زیرساخت سیستم عامل و سخت افزار و مانیتورینگ
تمامی سورس های موجود و نوشته شده را باید بررسی کنید و آنها را به قسمت های کوچک تقسیم و هر قسمت را مشخص می کنید برای چه کاری ایجاد شده و مستندات آن را تهیه نمایید در صورت نیاز به ریفکتور به برنامه نویس اطلاع دهید، تا سورس کد را به استاندارد بهینه تر تغییر دهد.
با کمک برنامه نویس تست های مختلف توابع و تست های سطح بالا با داده های سنگینتر را آزمایش نمایید.
تست های فشار سیستمی و پهنای باند با کارشناسان شبکه انجام خواهید داد که اعمال پهنای باند فیک و واقعی بر روی سایت، و مانیتور کردن زیرساخت سیستم عامل و سورس کدها، در صورتی که سورسی یا تابعی بیش از میزان استاندارد از منابع سخت افزاری استفاده بکند نیاز به ریفکتور و بهینه سازی می باشد.
اولین تست بعد از توسعه اسپرینت ها تست واحد Unit testing که خود برنامه نویس انجام خواهد داد، گزارش تست و نحوه اجرای و نتیجه را باید در مستند بنویسید، برنامه نویس ها و هم تیمی ها بدانند در کدام تابع چه تستی نوشته شده و موفقیت و یا ریفکتور شده است، و تست هایی که خطا داشته هست را نیز نوشته می شود تا اگر هم تیمی یا برنامه نویسی یا متد و روش تست دیگر اعمال شد و موفق بود جایگزین تست هایی شود که خطا داشته اند.
شما به عنوان مهندس یا متخصص QA تمامی حالات مختلف یک کاربر و نحوه استفاده کاربر از پلتفرم ها را بررسی می کنید و هرگونه باگ مشاهده کردید به برنامه نویسان اطلاع خواهید داد.
تست یکپارچه سازی Integration testing
برنامه نویس یک ماژول یا پلاگین یا یک قسمت به سایت یا پروژه اضافه کرده است که قبل از ادغام باید تست هاش بررسی کند و نتایج مستند شود.
تست سیستم System testing
تست کامل پنج قسمت از تست های کارایی ، گرافیکی، نصبی و شبکه ای و زیرساختی، اعتبارسنجی، دسترسی پذیری، قابلیت اطمینان، امنیت داده و اطلاعات، حمله و نفوذ، تجربه کاربری، بازخورد و بهینه سازی.
تست پذیرش Acceptance testing
تجریه مشتری CX Customer Experience بررسی می کنیم چقدر نیاز های مشتری رفع می شود و کدام قسمت ها بدون استفاده و گزارش خطاهای احتمالی و بررسی آنها.
Smoke test (کنترل ورود کاربران)
functional test ( بررسی توابع و نمایش و بازخورد )
Sanity test ( آیا تست ما درست است ادامه دهیم )
A/B test ( تست خروجی متفاوت و بازه زمانی متفاوت)
Regression test ( اضافه کردن ماژول یا کتابخانه جدید و تست کد و تابعه قبلی)
Load / Stress / Stability test ( تست بار و فشار و پایداری و پهنای باند زیرساخت و سیستم عامل)
تست آلفا : تست آشنایان و کارمندان سازمان و نظرخواهی و پیشنهاد
تست بتا: نسخه آزمایشی ، dynamic test و White-box text (API و خط به خط ) و black-box test
تست گاما : امنیت و عملکرد زیرساختی
تست با روش ابداعی خودتون
مقالات زیادی وجود دارد که شما می توانی با استفاده از آنها یک شیوه منحصر به فرد برای انجام تست و امنیت و نفوذ طراحی کنید
سوالاتی در مورد نقص ها و باگ ها می توانیم مطرح کنیم
آیا همه متغیرهای برنامه قبل از اینکه مقدار آنها مورد استفاده قرار گیرد، مقداردهی اولیه شدهاند ؟
آیا همه ثابتها نامگذاری شدهاند؟
حد بالایی آرایهها باید مساوی با اندازه آرایه یا اندازه آرایه منهای یک باشد؟
در صورتی که رشتههای کاراکتری مورد استفاده قرار گیرد، یک جداکننده صریح تخصیص داده میشود؟
برای هر عبارت شرطی، آیا شرط درست است؟
آیا پایان هر حلقه مشخص شده است؟
آیا عبارات ترکیبی به درستی با براکت احاطه شدهاند؟
آیا در هر عبارت، همه حالتهای ممکن مد نظر قرار گرفتهاند؟
آیا در هر case statement که باید بعد از هر case یک break قرار گیرد،break قرار گرفته است؟
آیا همه متغیرهای ورودی مورد استفاده قرار گرفتهاند؟
آیا به همه متغیرهای خروجی قبل از اینکه در خروجی نمایش داده شوند، مقداری تخصیص داده شده است؟
آیا ورودیهای غیرمنتظره میتوانند منجر به خرابی شوند؟
آیا همه فراخوانی تابع و متد دارای تعداد صحیحی از پارامترها میباشند؟
آیا انواع پارامترهای واقعی با انواع پارامترهای رسمی مطابقت دارند؟
آیا ترتیب قرارگیری پارامترها صحیح میباشد؟
در صورتی که ساختار لینک تغییر کند، آیا همه لینکها مجددا به درستی تخصیص داده میشوند؟
در صورتی که از ذخیرهسازی پویا استفاده شود، آیا فضا به درستی تخصیص داده میشود؟
آیا آزادسازی فضای تخصیص داده شده بعد از این که دیگر نیازی به آن نیست به درستی صورت میگیرد؟
آیا همه شرایط وقوع خطای ممکن مد نظر قرار گرفتهاند؟
کلی نرم افزار تست وجود دارد که می توانید از آنها بهره بگیرید