عناوین
طراحی نرمافزار بدون رعایت اصول مهندسی نرمافزار همانند ساخت خانه بدون نقشه استاندارد و مهندسی شده است! متاسفانه در بسیاری از شرکتهای تولید کننده نرمافزار جهت تولید محصولات نرمافزاری اصول مهندسی را رعایت نمیکنند ویا تعدادی از مراحل مخصوصا مرحله تست را از چرخه تولید نرمافزار خارج میکنند. این امر باعث کاهش قیمت تولیدی نرمافزار میشود اما هزینه پشتیبانی و نگهداری آن را چندین برابر میکند. چراکه بسیاری از ایرادهای برنامه در مرحله تست برطرف نمیشوند.
مهندس نرمافزار پیش از اعمال روشها در خصوص موارد تست، بایستی اصول اساسی که تست نرمافزار را هدایت میکند، درک کند. مجموعهای از این اصول عبارتند از:
۱. تست با توجه به نیازمندیهای کاربر: همانطور که میدانید شناسایی نیازمندیهای کاربر اولین گام چرخه تولید نرمافزار میباشد. این نیازها طی یک کار تیمی و روشهای متفاوت با مشارکت مشتریان یا کاربران و توسعهدهندگان شناسایی میشوند. سپس نیازهای عمومی، ضروری، اولویت بالا و حداقل نیازها مشخص میگردد. در این پست به همین توضیح خلاصه بسنده کنیم که این بخش حیطه وسیعی از مطالعه و تحقیق نیازدارد. پس از شناخت نیازمندیها، تستها بایستی تاحد خواستههای مشتری قابل ردیابی باشند.
۲. برنامهریزی قبل از اجرا: پس از شناخت نیازمندیها و مشخص کردن آنها، برای هر بخش نوشتن برنامه تست (test plan) ضروری است. همه تستها را میتوان پیش از تولید هرگونه کد، برنامهریزی و طراحی کرد.
۳. قانون پارتو: این قانون بدین معنا است که در هرچیزی، میزان اندکی (۲۰ درصد) دارای اهمیت حیاتی و بسیاری (۸۰ درصد) کم اهمیت و یا دارای اهمیت ناچیز است. مدیران پروژهها میدانند که ۲۰ درصد کار (اولین ۱۰ درصد و آخرین ۱۰ درصد) ۸۰ درصد زمان و منابع را مصرف میکند بنابراین با تمرکز برآن ۲۰ درصد، ۸۰ درصد نتایج را میتوان تولید کرد. تست هم از این قاعده مستثنی نیست! یعنی ۸۰ درصد خطاهای کشف نشده در ۲۰ درصد کد است. یا به عبارتی ۲۰ درصد نواقص باعث ۸۰ درصد مشکلات میشوند. این اصل به عنوان یک یادآوری روزانه میتواند درخدمت ما باشد و به ما بگوید که زمان و انرژی خود را بر آنچه که واقعا مهم است، متمرکز کنیم.
۴.شروع تست از اجزای کوچک: تست باید از اجزای کوچک شروع شده و به ابعاد بزرگتر گسترش یابد. اولین تستها بر روی هر یک از مولفهها انجام میشوند. با پیشرفت تست، خطاهای مجموعهای از مولفههای مجتمع و سپس کل برنامه یافت میشود.
۵. تست کامل (exhaustive) ممکن نیست: تعداد مسیرهای ممکن برای تست برنامه زیاد است. لذا اجرای هر ترکیبی از مسیرها امکانپذیر نیست. ولی این امکان وجود دارد که برنامه را در حد کفایت پوشش دهیم. غیرممکن است که بتوان یک برنامه را به طور کامل تست کرد.
رعایت اصول تست نرمافزار باعث افزایش زمان تولید و بهرهمندی از متخصصین مرتبط در آن زمینه و افزایش هزینه تولید نرمافزار میشود اما با در نظر گرفتن کاهش چشمگیر هزینههای پشتیبانی و توسعه، نرمافزار تولید شده بسیار مقرون به صرفهتر خواهد بود! تست نرمافزار یکی از فازهای اصلی و گران در چرخه حیات نرمافزار محسوب میشود. رعایت اصول تست باعث کاهش هزینهها میگردد.
۶. انجام تست توسط شخص ثالث بیطرف: برای موثر بودن بایستی تست توسط شخص ثالث بیطرف انجام شود. منظور از موثربودن این است که خطاها را با احتمال بیشتری پیدا کنیم. به دلایلی که در بخشهای بعدی ذکر میکنیم، مهندس نرمافزاری که سیستم را برنامه نویسی کرده است، بهترین کسی نیست که باید همه تستها را انجام دهد. بنابراین برنامهنویس بایستی از تستهای مختلف برنامه خود اجتناب کند.
۷. تستهای اولیه و متناوب: تست در همان ابتدای کار آغاز شده و در طول چرخه حیات نرمافزار ادامه یافته و به صورت متناوب تکرار میشود. تستهای اولیه کمک میکنند تا در مراحل اولیه از فرآیند توسعه نرمافزار، خطاها تشخیص داده شده و تصحیح آنها به سادگی انجام شود. این تستها باعث کاهش هزینه میگردند. این نکته قابل ذکر است که تکرار تست و تناوب آن در طول تولید برنامه بایستی گسترش پیدا کند.
۸. کوهی از خطاها: در پروژههای تست، خطاها توزیع نمیشوند! در جایی از برنامه که خطا کشف میشود این احتمال که خطاهای بیشتری را بتوان پیدا کرد بیشتر است. احتمال اینکه اشکالات بیشتری در قسمتی از برنامه کشف شود متناسب با تعداد اشکالات کشف شده قبلی در آن بخش از برنامه است. به عبارت دیگر هر چه در ماژولی از برنامه خطاهای بیشتری پیدا کنید، احتمال وجود خطاهای دیگر در آن ماژول بیشتر است.
۹. ازبین رفتن ردپا: در طول زمان ردپای تست از بین میرود. به عبارتی برنامه پس از مدتی در برابر تستهای تکراری مقاوم خواهد شد. اگر test caseها را فقط تکرار میکنید، آنها نمیتوانند خطاهای جدید را کشف کنند. خطاها با بهروزرسانی بخشهایی از برنامه و در توابع تست نشده کشف میشوند. به منظور جلوگیری از این اثر، test caseها بایستی در طول زمان بهروزرسانی کنید.
۱۰. وابستگی تست به محتوا: هیچ دو سیستمی یکسان نیستند که شما بتوانید یک تست را به یک شیوه برای هردوی آنها اجرا کنید. تعریف معیارهای ورودی، خروجی و… بایستی برای هر برنامه با توجه به محتوای تست تعریف شود. به طور مثال تست وبسایتها بسیار متفاوت از تست سیستمهای بانکی میباشد.
کیفیت هدف اصلی تمامی افراد، شرکتها و به صورت کلی سازمانهایی است که در جهت تولید و توسعه نرمافزار قدم میگذارند. در واقع کیفیت نرمافزار یک اصل رقابتی در زمینه تولید یک محصول است، اینکه چگونه یک محصول با کیفیتتر تولید کنیم؟ یکی از شاخههای اصلی و تاثیر گذار درکیفیت، تست نرمافزار است.
پنج اصل آخر عبارتاند از:
۱. نتیجه گیری اشتباه: تست نمیتواند نشان دهد که اشکالی وجود ندارد، بلکه تنها قادر است نشان دهد که اشکال وجود دارد! حتی اگر هیچ خطایی کشف نکرده باشید دلیل بر این نمیشود که برنامه بدون اشکال میباشد. تست نمیتواند ثابت کند که برنامه عاری از خطا میباشد. برنامهای که هیچ خطایی در آن کشف نشده دلیل براین نیست که کامل و بینقص است. تشخیص خطا و اثبات و برطرف نمودن آن نمیتواند تضمین کند که سیستم قابل استفاده و مطابق انتظارات کاربران میباشد. یکپارچهسازی اولیه برنامه از خواستههای کاربران و شبیهسازی از سیستم میتواند مانع از نارضایتی مشتریان باشد.
۲. تست شرایط خاص: به غیر از حالتهای معمولی، شرایط خاص را تست کنید. همانطور که میدانید تست کامل غیرممکن است بنابراین تسترها بایستی تلاش کنند که در نقاط بحرانی و خطرات خاص تمرکز کرده و خطاهای احتمالی را کشف کنند.
۳. هدف از تست نرمافزار یافتن خطا است، نه اطمینان از درستی کارکرد نرمافزار
۴. آزمایش موارد قابل انتظار در برنامه نیمی از ماجراست. نیم دیگر آزمایش مواردی است که انتظار میرود برنامه آن را انجام ندهد.
۵. با فرض اینکه هیچ نقصی در برنامه نخواهید یافت تست را آغاز نکنید.
لازمه یک محصول موفق و باکیفیت، رعایت اصول استاندارد و تعریف شده مربوط به آن است. بنابراین میتوان به صورت کلی اینطور برداشت کرد که رعایت اصول در بخش تست باعث تولید نرمافزاری با استاندارد و کیفیت مطلوب میگردد.