تست نرم افزار چرا انقدر مهمه و بهش پرداخته میشه؟!

تست نرم افزار چرا انقدر مهمه و بهش پرداخته میشه؟!واژه های TDD, BDD, Unit Testing, Integration Testing,... زیاد میشنویم. اینها چیزهایی جدیدی نیستن و از خیلی سالها در اختیار برنامه نویسان بوده و ازش استفاده میکردن اما به مرور به اهمیت اون پی بردن(بیشتر کشور خودمون منظورمه).چرا اینهمه اصرار برای تست وجود داره؟آیا واقعا تست نوشتن باعث بهتر شدن برنامه و ما میشه!؟آیا تست نوشتن هزینه است و هیچ فایده ای ندارد؟!و کلی سوالاتی که همه ما یا باهاش آشناییم یا وقتی پیشنهاد به کارفرما دادیم باهاش مواجهه شدیم.-اجازه بدین با چند نمونه از اتفاقاتی که همه تجربه کرده ایم شروع کنیم (با روضه شروع کنم و دلاتونو آماده کنم). نرم افزار مون لانچ شده و داره کار میکنه سیستم توی فشار خوب کار نمیکنه، دستور از بالا میاد که ند تغییر کوچیک یا اصلاح انجام بدین تا سربار سیستم بیاد پایین. سریع دست به کار شدیم و نیم ساعت انجام داده و سریعا تلفن رو برداشته و به مدیر خود با خوشحالی گزارش میدهیم که کار انجام شد و لانچ شد و قطعا انتظار اینو داریم مدیر هم تشکر کرده یا از داشتن همچین نیروی فرض و چابکی خوشحال بشه. اما اتفاقی که میوفته اینه که فاجعه پیش میاد و مهمترین وظیفه (بیزینس) سیستم از کار میوفته و همه چی برعکس میشه و کلی تماس و حجمه و ... به ما وارد میشه و بماند برای ادامه که توبیخ و شاید اخراج منجر بشه.نسخه جدید سامانه رو بعد از مدت ها تلاش و فشار کاری و فورس بودن توی تاریخ مقرر بالاخره آخر وقت لانچ کرده و خوشحال از اینکه از فشاری کاری خارج شدی و میتونی چند روز مرخصی بگیری و بری استراحت درست و حسابی و مسافرت داشته باشی، اما تا پاتو از شرکت میزاری بیرون از نفر بالاسریت تا مدیر شرکت باهات تماس میگیرن که این چرا بدون تست کردن برنامه، کار رو بالا گذاشتی و دوباره کلی توبیخ و اتمام حجت و ...و قس علی هذااما بعد از این همه اتفاقات و جلسه ای که بابت این قبیل اتفاقات گرفته میشه جز اینکه دنبال مقصر گشتن و یکی رو نشونه گرفتن و همه خوشحال از اینکه قربانی برای معرفی به هر مقام بالایی جور شد. غافل از اینکه نباید اینطور مواقع دنبال مقصر گشت و همه چیز رو سر اون خراب کرد، باید دنبال علت تکرار این اتفاقات افتاد.موارد بالا چندتا از اتفاقات اخیر برای من بوده . همه فکر کنم کمو بیش تجربه داشتن. ولی چ خوب بود روشی بود که میشد توی چند دقیقه کل سیستم رو تست کنیم و مطمئن لانچ کنیم.اما همه این اتفاقات باعث شد تا من که چند سالی بود کم و بیش مطالعه های در مورد تست داشتم و هیچ وقت نتونستم بصورت جدی ازش استفاده کنم و اعضای تیم و مدیران تیم رو راضی کنم که ازش استفاده کنیم، یه مدتی هست که دارم خارج از ساعت کارم برای کیفیت کاری که دارم انجام میدم شروع کنم به تست نوشتن. بعد از این همه مدت تصمیم گرفتم که در این ضمینه شروع کنم به آموزش تست هایی که عملی خودم کار میکنم. هم سمت فرانت و هم بک اند(دوستانی هم که بتونن کمک کنن و از تجربیاتشون بگن هم خوشحال میشم).میخواستم اصطلاحات و انواع تست رو بنویسم که ترجیح دادم از این مقاله که آقا بهروز زحمتش رو کشیدن استفاده کنیم: نگاهی به انواع تست نرم افزارTest Automationچرا تست نرم‌افزار مهم است(جدی بشم یکم!)بیایید با در نظر گرفتن چرا تست لازم است، تست ضروری است زیرا همه ما اشتباه می کنیم. برخی از این اشتباهات مهم نیستند ، اما برخی گران هستند و ممکن است تهدید کننده زندگی باشند. ما باید همه چیزهایی را که تولید می کنیم آزمایش کنیم زیرا همه چیز میتواند اشتباه شود. انسانها می توانند هر زمان اشتباه كنند.خطاهای انسانی می توانند در هر مرحله از چرخه عمر توسعه نرم افزار باعث نقص یا خرابی شوند . بسته به عواقب خطا ، نتایج به صورت بی اهمیت یا فاجعه بار طبقه بندی می شوند.نیاز به تست دقیق و مستندات مرتبط با آنها در چرخه عمر توسعه نرم افزار به دلایل زیر ایجاد می شود:برای شناسایی باگ های نرم افزاراستفاده به عنوان مستندات نرم افزار(live documents)برای کاهش مشکلات و نواقص سیستمکیفیت کلی سیستم و کدها را افزایش می دهد( ولی واقعا تست ما رو وادار میکنه که کد تمیز بنویسیم و طراحی نرم افزارمون خوب بشه)همچنین می تواند یک الزام برای انجام تست نرم افزار برای مطابقت با الزامات قانونی یا استانداردهای خاص صنعت باشد. این استانداردها و قوانین می توانند مشخص کنند که چه نوع تکنیکی را باید برای توسعه محصول استفاده کنیم. به عنوان مثال ، صنایع موتور ، اویونیک ، پزشکی و داروسازی و غیره ، همگی دارای استانداردهای لازم برای آزمایش محصول هستند. نکات زیر اهمیت تست یک محصول نرم افزاری قابل اعتماد و آسان را نشان می دهد:آزمایش مهم است زیرا قبل از تحویل به مشتری ، نقایص / اشکالات را کشف می کند ، که کیفیت نرم افزار را تضمین می کند.این نرم افزار را قابل اعتماد تر و آسان تر می کند.نرم افزار کاملاً تست شده عملکرد نرم افزار قابل اعتماد و با کارایی بالا را تضمین می کند.به عنوان مثال ، فرض کنید شما از یک برنامه بانکی برای انتقال مبلغ به حساب دوست خود استفاده می کنید. بنابراین ، شما معامله را آغاز می کنید ، یک پیام معامله موفقیت آمیز دریافت می کنید ، و مبلغ نیز از حساب شما کسر می شود. با این حال ، دوست شما تأیید می کند که حساب وی هنوز اعتبار دریافت نکرده است. به همین ترتیب ، حساب شما نشان دهنده معامله معکوس نیز نیست. این مطمئناً شما را ناراحت کرده و شما را به عنوان مشتری ناخوشایند می کند.این سؤال پیش می آید که چرا این اتفاق افتاد؟ این به دلیل تست نادرست برنامه بانکی قبل از انتشار است. تست دقیق وب سایت برای کلیه عملیات احتمالی کاربر منجر به شناسایی زود هنگام این مشکل می شود. بنابراین، می توان قبل از انتشار آن برای یک تجربه روانتر، آن را برطرف کرد.سهم تست در موفقیتدر مثال بالا می توانیم مشاهده کنیم که به دلیل وجود نقص، سیستم نتوانسته عملیات مورد نیاز را انجام بده و شرایط مشتری را برآورده کنه. تکنیک های مناسب تست استفاده شده در هر سطح از آزمون نرم افزار، کاهش مطلق در فراوانی چنین خرابی های نرم افزاری را تضمین می کند.تحویل یک محصول نرم افزاری با کیفیت مطلوب که دارای ویژگی های منحصر به فرد و خلاقانه است ، همواره در اولویت صنعت نرم افزار در سراسر جهان بوده است. اما ، بدون ارزیابی مؤلفه های نرم افزار در شرایط مختلف مورد انتظار و غیر منتظره، تیم نمی تواند این جنبه ها را تضمین کند. بنابراین ، تست برای هر مؤلفه نرم افزاری بزرگ و کوچک انجام می شود.برای درک اهمیت تست نرم افزار، به نکات زیر توجه می کنیم: تست نرم افزار ضروری است، شاید نیاز به شروع دوباره نرم افزار نباشید: گاهی اوقات، ما یک محصول نرم افزاری کاملاً توسعه یافته را در برابر نیاز کاربر تست می کنیم و می بینیم که برخی عملکردهای اساسی وجود ندارد. این ممکن است به دلیل اشتباه در جمع آوری نیاز یا مرحله کدگذاری اتفاق بیفتد. سپس برای رفع این قبیل خطاها، شاید لازم باشد که توسعه را از ابتدا شروع کنیم. رفع چنین اشتباهاتی بسیار خسته کننده، وقت گیر و گران می باشد. بنابراین، همیشه امتحان کردن نرم افزار در مرحله توسعه آن مطلوب است. ارزیابی سهولت استفاده از نرم افزار: سهولت استفاده یک مفهوم ساده است. مشخص می کند که کاربران در نظر گرفته شده به راحتی می توانند از محصول نهایی استفاده کنند. آزمایش نرم افزار ساخت محصول نرم افزاری را به گونه ای تضمین می کند که انتظارات کاربر را در رابطه با رعایت خواسته ها به روشی راحت ، رضایت بخش و ساده تر برآورده کند.تأیید کلیه جنبه های نرم افزار: می توانید تمام جنبه های نرم افزار را در تست نرم افزار مانند بررسی عملکردهای اساسی و همچنین تست یک سیستم برای شرایط غیر منتظره تأیید کنید. شرایط غیر منتظره می تواند از نوع نادرست داده یا ناشی از حمله دزدی دریایی باشد. بنابراین ، آزمایش اطمینان می دهد که سیستم می تواند خیلی خوب این شرایط را اداره کند. بنابراین، اگر خطایی را از قبل پیدا کنیم، فرصت اصلاح آنها را داریم.تست های نرم افزاری به سرعت بخشیدن به توسعه کمک می کند: تست های نرم افزاری به توسعه دهندگان کمک می کند تا خطاها و سناریوها را برای تولید پیدا کنند، که به نوبه خود به آنها کمک می کند تا سریع آن را برطرف کنند. علاوه بر این ، تست کنندگان نرم افزار می توانند به طور موازی با تیم توسعه همکاری کنند، بنابراین از جزئیات، طراحی، مناطق خطر و غیره را درک می کنند. این تبادل دانش بین تست کنندگان و توسعه دهندگان باعث تسریع در کل فرآیند توسعه می شود.نتیجهاهمیت تست نرم افزار امری ضروری است. زیرا باعث بهتر شدن کد نویسی (Clean Code) و به مراتب طراحی درست سیستم (Clean Architecture) میشود، همچنین باعث تولید محصول با کیفیت تر و مطمئن تر و مشتریانی راضی تر داشته باشیم.در ادامه ما شروع به کد نویسی برای تست نوشتن خواهیم کرد که به شرح زیر استTest On AngularTest On C#