مفاهیم تست
برای اینکه تست قدرتمند و جامعی داشته باشیم نیازمند فراگیری مفاهیم تست هستیم. در پستهای اول بر روی مفاهیم تست که شامل تعاریف، سطوح، استراتژی ها و… تمرکز کرده و سپس به پیاده سازی تست و ابزارهای مربوطه میپردازیم.
تست نرمافزار چیست؟
سازمانها یا شرکتهایی که نرم افزارها را توسعه میدهند، محصولی به نام نرم افزار تولید میکنند. ولی چه عامل یا عواملی باعث میشوند که یک نرم افزار از نرم افزار مشابه دیگر متمایز و برجسته شود؟ عوامل متعددی را میتوان نام برد که باعث این برتری و تمایز شود اما یکی از این عوامل میتواند کیفیت محصول نهایی باشد که به بازار عرضه خواهد شد. اما برای رسیدن به این نقطه تمایز و برتری باید چگونه عمل کرد و اندیشید؟ یک پاسخ به این سوال میتواند تست نرم افزار و نحوه انجام آن باشد.
حتی تست را میتوان یکی از زیرمجموعههای مبحث کیفیت نرم افزار با نام “تضمین کیفیت” درنظر گرفت. در واقع تست نرم افزار به دنبال خطایابی و عیب یابی محصول، قبل از تحویل به مشتری است. اینکه هم توسعهدهندگان و هم کاربران نهایی برروی یک نرم افزار کارآمد و قابل بکارگیری که پاسخگوی نیازمندیهای تعریف شده باشد، هم نظر باشند.
تست را می توان به صورتهای زیر معنا کرد:
– تلاشهایی در جهت عیب یابی و رفع آن، نه تلاش در جهت اثبات کامل صحت نرم افزار، زیرا این قضیه با ماهیت تست تفاوت دارد.
– تست نرمافزار یا آزمایش نرمافزار، تحقیق برروی کیفیت یک محصول یا سرویس نرمافزاری و ارایه اطلاعات ناشی از آن به مشتریها است. این تحقیق جستجوی نرمافزار مزبور برای یافتن خطاها را نیز دربرمیگیرد ولی به آن محدود نمیشود.
– تستها یک سری از سوال و جوابهایی هستند که نرمافزار را با آن امتحان میکنیم در حالی که از برنامه انتظار داریم با توجه به ورودیهایی که با استفاده از سوالات وارد میکنیم، جوابهای صحیحی را به عنوان خروجی به دست دهد.
– تست نرمافزار حیطه وسیعی از فعالیتهای مربوط به تولید برنامههای کامپیوتری را دربرمیگیرد که از تست کردن کد برنامه توسط برنامهنویس گرفته تا نشان دادن عملکرد درست یک سیستم اطلاعاتی بزرگ به مشتری و ارزیابی نرمافزار در حین رانش یک شبکه مرکزی کاربردی را دربرمیگیرد.
– تست نرم افزار شامل فرآیند اجراهای متعدد برنامه با هدف یافتن باگهای نرم افزاری است اما محدود به آن نمیباشد، تضمین اینکه تا چه حد نیازمندیهای موجود را برآورده میکند و آیا با انتظارات مشتری سازگار است یا خیر نیز توسط فرآیند تست مشخص میشود.
– تست ها به دفعات تکرار خواهند شد تا مشکلات هر چه بیشتر نمایان شوند. استاندارد تست نرم افزار فرآیندهایی را در جهت آشکارسازی و برطرف کردن عیوب سیستم دنبال خواهد کرد.
– تست نرمافزاراز وظایف توسعه دهندگان نرمافزار است و نه از وظایف تحویل گیرندگان آن.
– دایکسترا (Edsgar W.Dijkstra) در تعریف تست می گوید: تست فقط میتواند وجود خطاها را نشان دهد نه عدم وجود آنها را !
– تست نرم افزار به طور رسمی جزی از بازبینی و اعتبارسنجی نرم افزار میباشد، که این دو واژه به صورت زیر تعریف و با هم مقایسه میشوند.
وارسی: آیا محصول را به درستی میسازیم؟
اعتبارسنجی: آیا محصول درستی را میسازیم؟
وارسی بررسی میکند که آیا نرم افزار از مشخصاتش پیروی میکند یا خیر. اعتبارسنجی باید تضمین کند که نرم افزار انتظارات مشتری را برآورده میسازد یا نه. توجه کنید که آنچه در مشخصات میآید ممکن است دقیقا خواستههای مشتری را برآورده نسازد.
در واقع هدف فرآیند تست در یک جمله ” ایجاد اعتماد نسبت به سیستم ” است. اما چطور میتوان نسبت به سیستم ایجاد اعتماد نمود؟ عوامل مختلفی در این امر دخیل هستند اما نقش تست پررنگتر می باشد. به همین دلیل تست دو هدف اصلی را دنبال میکند:
۱- تست اعتبارسنجی: موفقیت آن در درست کارکردن سیستم است.
۲- تست نقص: موفقیت آن در نمایان سازی خطاهایی است که موجب کارکرد نادرست سیستم می شود.
چه کسی تست میکند؟
در صنعت IT، شرکتهای بزرگ، تیمی برای بررسی نرم افزارهای تولیدی در چارچوب الزامات و فعالیتهای شرکت دارند که این تیم، تیم تست میباشد.
در اغلب موارد تستر در یکی از بخشهای زیر قرار میگیرد:
– بخش تست نرم افزار
– بخش توسعه نرم افزار
شرکتها طراحیهای متفاوت و وظایف و نقشهای متفاوتی برای اشخاصی که تست نرم افزار انجام میدهند، قائل میشوند. این نقشها عبارتند از : تستر نرم افزار، تضمین کیفیت نرم افزار( QA) ، تحلیلگر و …
چه زمانی تست شروع میشود؟
در طول چرخه عمر توسعه نرم افزار (Software Development Life Cycle) که به آن SDLC گفته میشود، تست آغاز شده و تا استقرار نرم افزار به طول میانجامد.
با این حال تمامی این تستها بستگی به مدل توسعهای دارد که شرکتها انجام میدهند. به طور مثال در مدل آبشاری، تست در مرحله تولید نرم افزار انجام میشود اما در مدل افزایشی، تست در پایان هر افزایش یا تغییر، تکرار میشود و در پایان تولید نرم افزار هم دوباره تست انجام میشود.
در هر مرحله از SDLC ، تجزیه و تحلیل و تاییدیههای مورد نیاز نیز برای تست در نظر گرفته میشود. بررسی طراحی در مرحله طراحی محصول نیز به قصد بهبود طراحی در حوزه تست نیز در نظر گرفته میشود. انجام تست توسط یک توسعه دهنده پس از اتمام کد نیز به عنوان تست واحد (Unit Test) طبقه بندی میشود.
انجام تست در طول SDLC مزایای زیر را در بر دارد:
۱- کاهش زمان تولید
۲- کاهش هزینه ها
۳- کاهش زمان دوباره کاریها
۴- کاهش خطاهای نرم افزاری
۵- افزایش بازدهی
۶- افزایش کیفیت نرم افزار
۷- تحویل به موقع پروژه به کارفرما
۸- افزایش رضایت مشتری
چه زمانی تست پایان مییابد؟
بر خلاف آنکه میدانیم چه زمانی تست را آغاز کنیم، تعیین زمان پایان تست بسیار دشوار است. تست فرآیندی بی پایان میباشد و تعیین زمانی برای توقف آن بسیار دشوار است و نمیتوان با اطمینان گفت که نرم افزار تولیدی ۱۰۰% تست شده است.
مواردی که نبایستی برای تست درنظر گرفته شود:
۱- تعیین مهلت تست
۲- اطمینان از کامل بودن تست
۳- پس از اتمام تست فانکشنال و تست پوشش کد، نبایستی نتیجه را به نقطه خاصی سوق دهیم.
۴- اگر در سطح خاصی نرخ خطا کمتر بوده و بدون باگ باشد این سطح از اولویت بالاتری شناخته شود.
محصولات نرم افزاری برای کشف و رفع باگها وهمچنین تعیین کیفیت نیاز به تست دارند. روند تست نرم افزار گاهی میتواند به اندازه توسعه نرم افزار انرژی برده و بااهمیت باشد. تست نرم افزار شامل فرآیند اجراهای متعدد برنامه با هدف یافتن باگهای نرم افزاری است اما محدود به آن نمی باشد، تضمین اینکه تاچه حد نیازمندیهای موجود را برآورده میکند و آیا با انتظارات مشتری سازگار است یا خیر نیز توسط فرآیند تست مشخص میشود.
ممنونم خانم رضا. مطالب بسیار خوب و کاملی بود. با توجه به اینکه در ایران منبع مناسبی جهت تست نرم افزار وجود ندارد، شروع این بلاگ را به فال نیک می گیریم.
مرسی آقای ایمانی توجه شما من رو دلگرم می کنه که این راه رو ادامه بدم و به همکاری دوستان امیدوار باشم
با تشکر از خانوم رضا بابت مطالب مفیدی که ارائه دادن
آفرین، یک سایت برای تست که فارسی هم هست. کار قشنگیه، امیدوارم به همین خوبی ادامه بدی و ما هم استفاده کنیم از مطالب خوبت.
۲ تا نیمچه نکته بگم:
۱- تست در آنور آبها خیلی کار خوب و پردرآمدی هست و خیلی شرکتها دنبال تستر خوب میگردن که حقوقشون هم اصلا از اکثر برنامه نویسها پایین تر نیست.
۲- بد نیست که چند نمونه تست رو همراه با کد بزاری اینجا در آینده که روشنتر بشه منظور چی هست، مخصوصا تفاوت تستهایی مثل Unit Test، Functional Test و User Acceptance Test
تشویق و پیشنهادت خیلی خوشحالم کرد. با اینکه زمینه تست داخل کشور بسیار ناچیز شمرده شده و بسیاری از مواقع دیده نمی شه، توجه و پیگیری شما امیدوارم میکنه که این مسیر رو ادامه بدم. مرسی از دو نکته ای که گفتی. از مفاهیم تست شروع کردم که ان شاالله به نکته هایی که گفتی برسم واز نظر اطلاعات بشه گفت سایت جامعی هست. در این مسیر همین که کنارم باشین و با این نکات منو کمک کنین برام کافیه
فکر کنم وارسی و اعتبارسنجی جاهاشون اشتباه شده است.
Validation: Are we building the right system?
Verification: Are we building the system right?
ممنون از دقتتون درستش کردم
کار زیبایی رو شروع کردین.
امیدوارم که به قدرت ادامه بدین.
با افتخار در سایتم شما رو لینک کردم
بی زحمت مطالبی درباره انواع تست ها نیز منتشر کنین.
با تشکر
در مورد انواع تست مطالب متعددی منتشر شده است
با تشکر از شما به خاطر مطالب خوبی که گذاشتید اگر ممکن است در مورد معرفی تکنیک های موارد آزمون در سطح نرم افزار هم مطالبی را بگذارید
با سلام و خسته نباشید
و ممنون از اطلاعاتی که در دسترس قرار دادید .من میخواستم بدونم که بعد از اینکه تست رو انجام دادیم و در قالب یه فایل با کلی جدول آماده کردیم ، سند مربوط به تست که باید آماده بشه رو با چه فیلد هایی تهیه کنیم .
در پناه خدا .
سپاس.
http://www.tutorialspoint.com/software_testing/software_testing_overview.htm
The following aspects are to be considered for stopping the testing process:
Testing Deadlines
Completion of test case execution
Completion of functional and code coverage to a certain point
Bug rate falls below a certain level and no high-priority bugs are identified
Management decision
خیلی ممنون از زحمتی که کشیدید. مطالب فارسی مربوط به برنامه نویسی کم پیدا میشه. واقعا ممنون از زحمتتون
سلام
انواع بازبینی رو میشه لطفا ذکر کنید
تشکر
( راستش موضوع سمینارم آزمون نرم افزار است )
خیلی ممنون.
تشکر بابت وقتی که برای جمع آوری و ارائه این مطالب گذاشتین.
با سلام ،
اگه امکانش باشه برای مطالب سایتتون گزینه چاپ مطلب رو هم اضافه کنید
شما اطلاعاتی درباره ی سربار هزینه های تست دارید به بنده کمک کنید ممنون از لطفتون