کاملترین معرفی انواع روشهای تست نرم افزار | تست برنامه نویسی

"نرم افزار خوب نرم افزاری است که مشتری را خوشحال کند و زمانی مشتری خوشحال خواهد شد که تمام نیازمندیهای که در نظر دارد برآورده شود"

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. کیفیت نرم افزار چیست (Software Quality)
  2. تست نرم افزار چیست؟
  3. اهمیت تست نرم افزار در چیست؟
  4. اصول تست نرم افزار شامل چه چیزهایی است؟
  5. اهداف تست نرم افزار شامل چه چیزهایی می شود؟
  6. اشکال زدایی نرم افزار چگونه انجام می شود؟
  7. تفاوت تست نرم افزار با اشکال زدایی نرم افزار در چیست؟
  8. چرخه تست نرم افزار چیست؟
  9. دسته بندی تست های نرم افزار
  10. اعتبار سنجی نرم افزار و بازبینی نرم افزار چیست؟
  11. تست نرم افزار در کدام مرحله فرآیند یا چرخه توسعه نرم افزار قرار دارد؟
  12. استانداردهای تست نرم افزار شامل چه چیزهایی است؟
  13. تست نرم افزار چیست؟
    1. Black Box Testing چیست؟
    2. مزایای تست Blackbox چیست؟
  14. Equivalence partitioning (دسته بندی مشابهات ) چیست؟
  15. Boundary Value Analysis (تحلیل مقادیر مرزی) چیست؟
  16. اعمال تحلیل مقادیر مرزی چیست؟
  17. Comparison Testing (تست مقایسه ای ) چیست؟
  18. White Box Testing چیست؟
    1. مزایای تست جعبه سفید چیست؟
    2. معایب تست جعبه سفید چیست؟
  19. Basis Path Testing چیست؟
  20. گراف جریان چیست؟
  21. پیچیدگی دورانی چیست؟
  22. Condition / Branch Testing چیست؟
Programming is creative process done by programmers to instruct a computer on how to do.  [1]

برنامه نویسی کمپیوتر یکی از مهمترین بخش های کمپیوتر است که باعث بیشترین رشد این علم شده است . به عبارت دیگر میتوان گفت که اگر این علم را بدون برنامه نویسی می بود تا این حد رشد نمیکرد و به این حد نمیرسید. برنامه نویسی کمپیوتر یکی از مشکل ترین بخش های این علم است که هر روز با ایجاد روشهای مختلف به آسانی رسیده است .

یکی از بخش های برنامه نویسی منحصر به فرد برنامه نویسی یافتن خطاها در آن میباشد که باعث پیشرفت روز افزون آن شده است. اولین کسی که شروع به برنامه نویسی کرد یک خانم اهل انگلیس بود به نام "آدا لوولاس" که با "چالز بایج" بر روی دستگاهی به نام موتور آنالیتیکی کار میکردند. آنها از سال 1834 با هم همکاری را آغاز کردند. او به عنوان اولین برنامه نویس جهان معروف است و وزارت دفاع امریکا به افتخار او اولین برنامه که ساخت را با نام او نامگذاری کرد. کار او در اولین کمپیوتر الکترونیکی که یک قرن بعد از او ساخته شد استفاده شد . او در سن 37 سالگی به علت سرطان درگذشت.[2]

در این تحقیقی که پیش رو داریم سعی بر آن شده است که انواع روش های یافتن خطاها در برنامه نویسی مورد بررسی قرار بگیرد. این خطاها باعث میشود که یک برنامه به شکست و یا با یافتن آنها همان برنامه به هدف نهایی خود برسد. خطاهای برنامه نویس انواع مختلف دارد که میتوان آنها را از دو منظر پیدا کرد یکی از داخل کدها که در آن برنامه نویس نقش آفرینی میکند و یکی هم از زوایه خارجی که بیشتر در پیدا کردن این نوع خطاها مشتری یا کاربران برنامه نقش ایفا میکنند.

Software testing is an investigation conducted to provide stakeholders with information about the quality of the product or service under test. [3]

تست برنامه به این معنا است که برنامه را قبل از اینکه وارد بازار کار شود مورد استفاده قرار بگیرد و بررسی شود که برنامه ای که ساخته شده است آیا میتواند هدفی که برای آن تعیین شده است را دنبال کند یا نه؟ در این تحقیق حالت کلی برنامه مورد نظر است که همه برنامه هایی که برای دستگاه های مختلف را شامل میشود که این سخت افزار ها شامل برنامه های کمپیوتری اعم از سیستم عامل ها، برنامه های کاربردی، برنامه های کمکی، بازی ها و برنامه های دیگری کمپیوتر میباشد.

برنامه هایی برای موبایل ها ساخته میشود که به مانند برنامه های کامپیوتری دارای بخش های مختلف است. برنامه هایی که خارج از کمپیوتر کار میکنند مانند سایت ها و برنامه هایی که در فضای مجازی اینترنت کار میکنند و دیگر برنامه هایی که در سخت افزار های مشخص کار میکنند.این برنامه ها را به حالت های مختلف میتوان مورد تست قرار داد. به حالت ساختاری یعنی بررسی متد ها و کلاس هایی که در آن به کار برده شده است. به حالت کاربردی که هدف مورد نظر برنامه نویس و کاربر را مورد بررسی قرار میدهد.

به حالت کلی در اینجا بحث بر سر " بررسی جعبه سفید(White Box Testing) و جعبه سیاه(Black Box Testing) در تست برنامه ها و فرق آنها با دیگر روش های تست کردن" مورد بحث قرار می گیرد.روش هایی که در اینجا به بحث میگیریم اساسی ترین روشها برای تست برنامه ها میباشد که همه شمول است. و تست کننده ها بیشتر از این روش ها استفاده میکنند.

این روش ها در سازمان ISO دارای شناسه میباشند و این سازمان برای آن استاندارد هایی هم قایل شده است. استاندارد هایی که سازمان ISO برای تست در نظر گرفته است باعث شده است که تست کردن منطقی تر و دارای مفهوم (Concept) مشخص شود و خطاها به صورت آسان تر و هدفمند تر پیدا شوند. این مقاله به زبان فارسی نوشته شده است به این دلیل که خیلی از برنامه نویسان کشورمان توانایی درک متون انگلیسی را ندارند.

بنابراین این مقاله منبع خوبی برای آنها نیز میباشد. درک متون انگلیسی و یا زبان های دیگر در وهله اول مشکل است و دوم اینکه وقت زیادی را میگیرد. چون زبان مادری ما فارسی دری است.این مطلبی که برایتان گذاشتم تنها چکیده مونوگراف خودم هست که در سال 2014 از آن دفاع کرده ام. اگر خوشتان آمد بقیه اش را هم به صورت قسمت بندی نشر میکنم. قبل از قبل تشکر

  • قانون پارتو: %80 خطاهاي کشف نشده در 20 % کد است

همانطوری که قول داده بودم ادامه پایان نامه تحصیلی خود را برای شما گذاشتم. البته فقط نصف فصل اول است که به بررسی مفاهیم عمومی تست پروگرام ها پرداخته شده است. زمانی که این بحث را می نوشتم به این فکر میکردم که کارشناسی ام را هم در مورد تست برنامه نویسی بگیرم. اگه قسمت بود این کار را میکنم.زندگی رویایی است که فقط باید در قالب زنده بودن و تست روزگار باید ثبت شود.!

کیفیت نرم افزار چیست (Software Quality)

توسعه نرم افزارهای کاربردی هر روز زیاد میشود و اهمیت بکارگیری روش ها و اصول انجینری نرم افزار در مراحل توسعه ، مدیریت و پشتیبانی آنها بیشتر می شود . کیفیت نرم افزار(Software Quality) اهمیت زیادی برای تولید نرم افزار های با کیفیت دارد که ضمن بالا بردن کارایی در تولید نرم افزار ها ، به ایجاد نرم افزار های قدرتمند منجر می شود .کیفیت نرم افزار به سلسله مراحلی گفته میشود که برای بهتر شدن کارایی نرم افزار انجام میشود.

کیفیت نرم افزار یکی از مهم ترین اولویت های خریداران و کاربران نرم افزار میباشد. کیفیت نرم افزار شامل بخش های متنوعی میباشد که هر کدام میتواند بر بهبود توسعه نرم افزار اثر مستقیم بگذارد. تست نرم افزار هم یکی از بخش های کیفیت نرم افزار است که ما در این بحث به آن می پردازیم.کیفیت نرم افزار در سیستمی که قرار است توسعه یابد به دوش رئیس پروژه است که او با تعامل ، با دیگر اعضای گروه توسعه به این مهم دست مییابد.

تست نرم افزار چیست؟

منظور از تست نرم افزار یعنی اینکه نرم افزاری که تولید کرده ایم آیا کارایی ای که از آن توقع داشتیم را میتواند پوره کند یا نه؟ توسعه نرم افزار به مانند دیگر محصولاتی که توسط افراد و یا کارخانه های تولیدی ایجاد میشود است. یعنی مراحل مشخصی دارد که طبق آن میتوان یک نرم افزار ایده آل را تولید کرد. محصولاتی که به صورت فزیکی تولید میشوند را میتوان به سادگی مورد آزمایش قرار داد و از کیفیت و بهره وری آن اطلاع حاصل کرد . اما نرم افزار ها به این دلیل که قابل لمس (فزیکی) نیستند. بنابراین تست آنها هم مشکل و طاقت فرسا میباشد.

محصولات فزیکی برای شرایطی ایجاد میشوند که قابل پیش بینی هستند اما نرم افزار ها را نمیتوان در یک شرایط مشخص نگه داشت یعنی آنها قابلیت تغییر دارند برای اینکه ما یک نرم افزار را تست کنیم باید آن را در شرایط مختلف مورد آزمایش قرار بدهیم. در صورتی که ما همه شرایط خاص را بر روی نرم افزار آزمایش نکرده ایم نمیتوانیم بگوییم که نرم افزار ما درست کار میکند و یا اینکه عاری از خطا میباشد.

از وقتی که تعداد نرم افزارها رو به افزایش رفته است اهمیت تست نرم افزار هم رو به رشد است و از طرف دیگر به همان مراتب تست نرم افزار هم سخت و مشکل شده است که این برمیگردد به ایجاد روش های مختلف که توسط سازمان استاندارد جهانی تعریف میشود که کیفیت نرم افزار را تایید کند. دایکسترا دانشمند بزرگ و فقید علوم کامپیوتر در یک جمله ارزشمند در باب تست نرم افزار می گویید: تست فقط میتواند خطاها را نمایش دهد، نه عدم وجود آنها را ...

اهمیت تست نرم افزار در چیست؟

تست در کل اهمیت خاصی در تولید هر محصول دارد خواه آن محصول فزیکی باشد و یا اینکه غیر فزیکی. در نرم افزار ها هم این امر جاری است. تست نرم افزار یکی از مراحل اصلی توسعه نرم افزار میباشد. تست نرم افزار کیفیت نرم افزار را تایید میکند که برای مشتریان و توسعه دهنده های آن اهمیت زیادی دارد.در یک شرکت توسعه نرم افزار به طور معمول 30 تا 40 درصد کل فعالیت پروژه صرف تست نرم افزار میشود. برای نرم افزار هایی که در زندگی انسانی حیاتی است مانند پرواز طیاره ها و راکتور هسته ای حدود 3 تا 5 برابر هزینه بیشتر از تمام مراحل تولید نرم افزار صرف تست میشود.

اصول تست نرم افزار شامل چه چیزهایی است؟

روش ها و متد های زیادی برای اجرا کردن یک تست وجود دارد که به کسی که آن تست را انجام میدهد مربوط میشود زیرا این متد ها بستگی به نوع پیاده سازی توسط شخص دارد. در اینجا یکی از اصول مهم و مطرح برای تست نرم افزار را به معرفی میگیریم که توسط دیویس مطرح شده است.اصول تست دیویس:

  • تمام تست ها باید تا رسیدن به نیازمندیهای مورد نظر مشتری، قابل بررسی و پیگیری باشد.
  • تست ها باید قبل از اینکه آن را اجرا کنیم ، برنامه ریزی شوند.
  • به کارگیری اصل پارتو در مورد تست نرم افزار (%80 خطاهاي کشف نشده در 20 % کد است)
  • تست باید از جزء شروع شده و کم کم به طرف تست هایی در سطح وسیع برسد.
  • تست های جامع و فراگیر ممکن نیست
  • برای اینکه تست بیشترین تاثیر را داشته باشد، باید توسط یک شخص ثالث مستقل صورت گیرد.

اهداف تست نرم افزار شامل چه چیزهایی می شود؟

تست نرم افزار یکی از بخش های مهم پروژه می باشد و با آن میتوان که درست بودن آن را قبل از اینکه مورد استفاده توسط کاربران آن قرار بگیرد را امتحان کرد.این کار 3 هدف دارد. اگر هر سه هدف به صورت درست پیاده سازی شود نرم افزار ما بدون نقص میباشد :

  • افزایش کیفیت نرم افزار
  • بررسی سیستم از لحاظ پاسخگویی به نیازها و قابلیت اطمینان
  • شناسایی ضعف ها خطاها و اشتباه های نرم افزار

اشکال زدایی نرم افزار چگونه انجام می شود؟

Debugging یا اشکال زدایی یکی از کارهایی است که در عین برنامه نویسی توسط برنامه نویس انجام میشود. برنامه نویسان در هنگام کار با زبان های برنامه نویسی مشکلاتی دارند. اشکال زدایی کارش پیدا کردن اشکالات است که در عین برنامه نویسی رخ میدهد. این کار توسط خود برنامه نویس انجام میشود بنابراین باید در برنامه نویسی با آن زبان خاص آگاهی داشته باشد.

تفاوت تست نرم افزار با اشکال زدایی نرم افزار در چیست؟

در روش های انجینری نرم افزار قدیمی به تست نرم افزار توجه نمی‌شد به این دلیل که مردم فرق بین تست نرم افزار و اشکال زدایی را درک نکرده بودند.در اوایل که من شروع به برنامه نویسی کرده بودم خیلی از کدهایی که نوشته می کردم دچار مشکل میشد و کاری که من توقع آن را داشتم را انجام نمیداد ولی زمانی که اشکال های آن را رفع میکردم کدی که نوشته بودم کار میداد. کمی بعدتر که توانستم دو کلاس جداگانه ایجاد کنم در موقع یکجا سازی آنها به مشکل برخورد میکردم که مشکل از کدهای نوشته شده در کلاس ها نبود بلکه مشکل در طریقه یک جا سازی آن دو کلاس بود.

به رفع این گونه خطاها تست نرم افزار میگویند که در نتیجه آن دو یا چندین کلاس را با هم یکجا میسازیم.هر دو آنها هدفشان بالا بردن کیفیت نرم افزار است. اشکال زدایی خطاهایی که در وقت برنامه نویسی ایجاد میشود را رفع میکند. این اشکال زدایی توسط برنامه نویس انجام میشود و تست نرم افزار خطاهای کاربردی نرم افزار را پیدا . و آن را حل میکند این خطاها ممکن است که سیستمی و یا از نظر دیداری (Interface) باشد.

اشکال های پیدا شده توسط اشکال زدایی بر این نکته توجه دارد که منطقی که مدنظر بوده است برآورده نشده و یا در کدهایی که نوشته شده است اشکالاتی بوده است که باعث ایجاد خطا میشود.خطاهای سیستمی(کاربری) که توسط تست نرم افزار شناسایی میشود. مشکل برای نرم افزار و کاربران آن است. به همین علت نرم افزار باید طوری توسعه یابد که این مشکلات پیش نیاید. نرم افزارهایی که دارای اشکال (Bug) است به خاطر کم تجربگی و مهارت برنامه نویس به وجود می آید در اینجا برنامه نویس موظف است که سطح مهارت خود را بالا ببرد.

اگر کسی که تست را انجام میدهد خود برنامه نویس باشد ممکن است که بسیاری از اشکالات هیچ وقت کشف نشوند. که این کار مساوی با شکست نرم افزار خواهد بود . بنابراین ، توصیه میشود که تیم تست کننده از گروه توسعه مجزا باشد.نرم افزار هایی وجود دارد که با گذشت چندین سال هم به علت اینکه تست کننده آن خود برنامه نویس بوده است هنوز هم دارای اشکال میباشد. این اشکال ها به مرور زمان باعث کم کیفیت شدن نرم افزار میشود.

تفاوت اشکال زدایی و تست برنامه

ببخشید که در این مدت نتوانستم که ادامه مونوگرافم را براتون بزارم. این ادامه فصل اول هست که در این پست گذاشتم. زندگی رویایی است که فقط باید در قالب زنده بودن و تست روزگار باید ثبت شود.!

چرخه تست نرم افزار چیست؟

چرخه تست نرم افزار توسط شرکت های توسعه نرم افزاری با رویکرد آن شرکت به سیستم داخلی خود و نحوه برنامه نویسی آن نرم افزار میباشد. اما میتوان چرخه تست نرم افزار را به حالت زیر بیان کرد:

  1. تحلیل نیازها: فرآیند تست باید در مرحله تحلیل نیازها چرخه توسعه نرم افزار انجام بپذیرد.
  2. تحلیل طراحی : در طی مرحله طراحی ، تست کنند گان با طراحان همکاری میکنند تا مشخص شود که کدام قسمت از طراحی قابل تست است و در هنگام تست از کدام پارامتر ها باید استفاده شود.
  3. طراحی تست: در این مرحله استراتژی تست مشخص میشود. در این مرحله تست کننده یک چارچوب از تست را برای نرم افزار ایجاد میکند.
  4. اجرای تست: تست کنند گان نرم افزار را اجرا کرده و مورد برررسی و تست قرار میدهند و هر گونه خطا را به تیم توسعه دهنده به وسیله Document که از هنگام تست ایجاد کرده اند به برنامه نویس گزارش میدهند.
  5. گزارش تست: بعد از اینکه فرآیند تست تکمیل شد تست کنند گان نتایج به دست آمده را در قالب یک گزارش (Document)تهیه میکنند و مشخص می شود که آیا نرم افزار قابل استفاده است یا خیر.[9]

دسته بندی تست های نرم افزار

تست نرم افزار به دو صورت ساكن‌ و پویا انجام میشود در روش تست پویا برنامه را اجرا کرده و سپس نتایج آن مورد بررسی قرار میگیرد و تست ساکن‌ تحلیل کدهای نرم افزار است بدون اینکه برنامه اجرا شود.تست ساکن‌ به مجموعه فعالیت هایی گفته میشود که طی آن نرم افزار به شکل ساختاری آن بررسی میکنیم یعنی کدها و دیاگرام هایی که برای آن ساخته شده است را مورد بازبینی قرار میدهیم.

اما تست پویا به هیچ دانش قبلی نیاز ندارد تست ساکن‌ حتما باید توسط یک متخصص انجام پذیرد خوبی تست ساکن این است که یک ریپورت به کسی که نرم افزار را ایجاد کرده است داده میشود. و همیچنان این که این تست در طی توسعه نرم افزار انجام میشود نه بعد از اینکه برنامه نویس برنامه را تمام کرده باشد . این کار برنامه نویس را به هدفش نزدیک تر میکند.

اعتبار سنجی نرم افزار و بازبینی نرم افزار چیست؟

اعتبار سنجی نرم افزار و باز بینی نرم افزار در انجینری نرم‌افزار به فعالیتی گفته می‌شود که در طول ایجاد نرم افزار و یا بعد از اتمام کار نرم افزار انجام میشود تا اینکه مشخص شود که برنامه کیفیت دلخواه را دارد یا نه؟بازبینی نرم افزار: آیا محصول که قرار بر ساخت آن است به صورت صحیح ساخته میشود؟

Verification : Are you building it right?

در بازبینی نرم افزار این موضوع را بررسی میکنیم که محصولی که ایجاد کرده ایم مطابق با اهداف ما هست.به طور مثال یک قسمت از نرم افزار باید یک عملیه را انجام دهد ولی برخلاف آن عمل میکند که باعث ایجاد اختلال در کل سیستم میشود. در بازبینی نرم افزار تست کننده با انجام تست این مشکل را باید رفع کند.اعتبار سنجی نرم افزار: آیا محصول صحیحی ساخته میشود؟

Validation: Are you building the right thing?

در اعتبار سنجی نظر برنامه نویس و تست کننده این است که نرم افزار ایجاد شده آیا خواسته های مشتری را میتواند پوره کند یا نه ؟ اعتبارسنجی همیشه در مقایسه با نیازها انجام میشود.به طور مثال کاربر یک درخواستی از ما کرده است که باید در نرم افزار باشد ولیکن این قابلیت به نحوی دیگر نمایش میدهد. بنابراین پروگرام نویس موظف است که قابلیت را ایجاد کند.[10]

تست نرم افزار در کدام مرحله فرآیند یا چرخه توسعه نرم افزار قرار دارد؟

در شکل زیر یکی از بخش های مهم توسعه نرم افزار را به تست نرم افزار تخصیص داده است. این نشان میدهد که تست نرم افزار از اجزای جدا نشدنی توسعه نرم افزار است . این به این معنی نیست که در طی توسعه نرم افزار فقط در مرحله چهارم آن تست انجام میشود . در تمام مراحل تست انجام میشود اما به مقدار کم در این مرحله بیشترین فوکس بر روی تست میاشد. بنابراین اهمیت زیاد در توسعه نرم افزار دارد. تست نرم افزار قبل از مرحله نگهداری یا خدمات بعد از تولید میباشد . در این مرحله برنامه نویسی کامل شده است و برنامه قابلیت این را دارد که فعالیتی را انجام دهد.

مرحله اصلی شروع تست نرم افزار

استانداردهای تست نرم افزار شامل چه چیزهایی است؟

تست نرم افزار به مانند همه علوم کمپیوتر دارای استانداردهای میباشد. این استانداردها باعث بهتر شدن پروسه تست میشود. [17]

ISO/IEC 9126: This standard deals with the following aspects to determine the quality of a software application:

1. Quality model

2. External metrics

3. Internal metrics

4. Quality in use metrics.

This standard presents some set of quality attributes for any Software such as:

1. Functionality

2. Reliability

3. Usability

4. Efficiency

5. Maintainability

6. Portability

IEEE 829: A standard for the format of documents used in different stages of software testing.

IEEE 1061: A methodology for establishing quality requirements, identifying, implementing, nalyzing, and validating the process and product of software quality metrics is defined.

BS 7925-1: A vocabulary of terms used in software testing.

BS 7925-2: A standard for software component testing.

IEEE 1008: A standard for unit testing.

IEEE 1012: A standard for Software Verification and Validation.
  • خلاصه فصل اول

در این فصل سعی بر این بود که تعریف درستی از تست نرم افزار و همچنین اهمیت آن را بازگو کنیم. تست نرم افزار یکی از بخش های جدا نشدنی توسعه نرم افزار است . در صورتی که تست نرم افزار را انجام ندهیم و یا به آن اهمیت داده نشود ممکن است که نرم افزاری که تولید میکنیم از کیفیت و قابلیت قابل ملاحظه ای برخوردار نباشد و یا اینکه نرم افزار ما با شکست مواجه شود که باعث میشود خساراتی زیادی را به بار بیاورد که این خسارات مالی و معنوی است. خسارات مالی که در نتیجه شکست به بار می آید بر دوش شرکت نرم افزار سازی است.خسارات معنوی بیشتر اوقات تاثیر مستقیم بر برنامه نویس است.سازمان جهانی ISO و IEEE نیز استانداردهای برای کیفیت نرم افزار و تست نرم افزار ایجاد کرده اند که توسط آن نرم افزارهای با استفاده از آنها کیفیت و ماندگاری نرم افزار بیشتر و بهتر می شود.

  • قانون پارتو: %80 خطاهاي کشف نشده در 20 % کد است

در قسمت های قبلی به اصول اولیه در تست برنامه نویسی پرداختیم و فهمیدم که میتوانیم چه نوع برنامه هایی را تا کدام زمان تست کنیم! از این به بعد در این مقالات به بحث اصلی خودمان میرویم و روشهایی که بیشترین استفاده در عملیه تست را دارد بیان میکنیم. به امید موفقیت همه برنامه هایتان ! زندگی رویایی است که فقط در قالب زنده بودن و تست روزگار باید ثبت شود.!

تست نرم افزار چیست؟

تست نرم افزار همانطور که در فصل قبلی گفته شد یکی از مهم ترین بخش های توسعه نرم افزار است . تست نرم افزار کیفیت و اعتبار یک نرم افزار را بررسی میکند و میتواند درستی کار نرم افزار را قبل از اینکه وارد بازار شود را بررسی کند. این کار باعث میشود که تیم توسعه دهنده را از کاری که کرده اند اطمینان دهد. برای تست نرم افزار روش های مختلفی وجود دارد . هر روش دارای مزیت ها و کمبودی های میباشد که با استفاده از چند روش میتوان کمبودی های آن را تصریح کرد.

بیشتر نرم افزارهایی که تولید میشوند از دو روش کلی استفاده میکنند. ( White Box Testing ) و( Black Box Testing ) دو روشی است که مورد استفاده بیشتری در توسعه نرم افزار دارند. تست جعبه سفید(White Box Testing) کسانی که تست برنامه را برعهده دارند بیشترین وقت خود را صرف میکنند به این دلیل که در این روش تمرکز بر کدهای برنامه است. آنها تمام کدها و متد های موجود در برنامه را مورد بررسی قرار میدهند به همین دلیل وقت و هزینه زیادی را در بر میگیرد.

تست جعبه سیاه (Black Box Testing) در این روش کسانی که تست برنامه را برعهده دارند کاری به کدهای برنامه ندارند آنها فقط خروجی های برنامه را مورد بررسی قرار میدهند یعنی اینکه در این روش نیازی نیست کسی که تست کننده است از علم تست چیزی بداند. در حقیقت آنها کاربران برنامه میباشند که با برنامه کار میکنند و مشکلاتی که در حین کار با برنامه پیدا میکنند را به صورت یک گزارش به تیم توسعه دهنده ارائه میکنند.

شکل 2: حالت عمومی Black Box

Black Box Testing چیست؟

روش تست جعبه سیاه یا Black Box Testing یکی از مهم ترین روشهای تست نرم افزار میباشد. در این تست که بر مبناء این است که تست کننده از کدهای داخلی برنامه اطلاعی ندارد و همچنین اینکه برنامه ای که به او داده میشود قرار است بدون آگاهی از اهداف اصلی آن و فقط هدف هایی که توسط تیم توسعه برای شخص تست کننده داده شده است مراحل تست را انجام میدهد . تست جعبه سیاه توسط تیم مجزا از تیم توسعه انجام میشود که این تیم معمولا شامل کاربران نهایی برنامه و اشخاصی که به برنامه ارتباط دارند انجام میشود. 80 درصد از کسانی که این تست را انجام میدهند از برنامه نویسی کمپیوتر اطلاع کافی ندارند.

مزایای تست Blackbox چیست؟

  1. به صورت سریع میتوان مشکلات را در نرم افزار پیدا کرد
  2. ارزان است. یعنی وقت کمتری را در بر میگیرد تا مراحل تست انجام شود
  3. نیازی نیست که مهارت کافی در زمینه برنامه نویسی و کدهای برنامه داشته باشیم که بیشترین افراد تست کننده این روش از برنامه نویسی اطلاعی ندارند.
  4. افراد مختلفی میتوانند این تست را انجام دهند. بنابراین نیازی نیست که فرد مورد نظر را جستجو کنیم
  5. در این روش کدهای برنامه ای تست میشود که مورد استفاده قرار گرفته اند. به کدهایی که استفاده نشده اند و یا اینکه استفاده شده اند اما در برنامه نقش خاصی را ندارند کاری نداریم. یعنی ورودی های ما تنها بر روی کدهایی تست میشود که قرار است برنامه را اجرا کنند و به کدهایی که در نرم افزار است و در پشت وظیفه دارند ارتباط نمیگیرد. [7]

Equivalence partitioning (دسته بندی مشابهات ) چیست؟

همانطور که ار نامش پیدا است . موارد مشابه را در نرم افزار یک جا کرده و یکی از آنها را تست میکند. یعنی محدوده های مشخصی را انتخاب و یکی از موارد مشابه را به نیابت از دیگران مورد تست قرار میدهد.این تست اهداف زیر را مورد بررسی قرار میدهد.

  1. مهم ترین هدف این روش کاهش تعداد موارد تست به کمترین مقدار است که باعث میشود وقت و هزینه کمتری در اجرای تست مصرف شود.
  2. انتخاب گزینه های تست درست تا همه قسمت های نرم افزار را شامل شود . این موارد تست در برگیرنده های راه های ورودی و خروجی برنامه باید باشد.

Boundary Value Analysis (تحلیل مقادیر مرزی) چیست؟

یکی دیگر از روش های تست جعبه سیاه است . این روش تمرکز اصلیش بر روی حدود مرزی نرم افزار است . به اسن دلیل که ورودی هایی که در نرم افزار داده میشود. زمانی که از مرز یکی از قسمت ها عبور میکنند ممکن است که دچار مشکل شود و بیشترین خطاها نرم افزار هم در این قسمت قابل مشاهده است.به طور مثال: زمانیکه یک برنامه نویس محدوده 1 تا 30 (مثال روزهای یک ماه ) را به عنوان ورودی دارد، که نشان دهنده روزها در یک ماه است در برنامه خودش خطی برای چک کردن این محدوده دارد که به این صورت است:

If(month > 0 && month >31)

اما در یک خطای معمول برنامه نویسی ممکن است محدوده اشتباهی بررسی شود.

If(month >= 0 && month >31)

برای بررسی محدوده های پیچیده تر در یک برنامه به سادگی نمیتوان مکانهای خطا را یافت. به این دلیل که نمیتوان در بین چندین کران ، کرانی که دارای مشکل است را پیدا کرد.

اعمال تحلیل مقادیر مرزی چیست؟

برای آغاز تحلیل مقادیر مرزی استراتژی ای تستی که شما باید اول مشخص کنید، کران های رابط (interface) یک اجزاء نرم افزاری است. این کار با استفاده از روش های تقسیم بندی مشابهات صورت میگیرد.روش های تحلیل مقادیر مرزی و دسته بندی مشابهات ناچاراً به هم مرتبط هستند.تحلیل مقادیر مرزی میتواند 6 تا مورد کاربرد داشته باشد برای کران پایین n,n-1,n+1 و برای کران بالا نیز مقادیر n,n-1,n+1.یک مجموعه بیشتری از کرانها باید برای آغاز موارد تست لحاظ شوند یک استراتژی تست استوار باید کرانهای طبیعی نوع داده های مورد استفاده در برنامه را نیز در نظر بگیرد. یعنی اگر شما با مقادیر علامتدار کار میکنید محدوده اطراف 0 را نیز باید در نظر بگیرید.( 1+ ، 0 ، 1-)

Comparison Testing (تست مقایسه ای ) چیست؟

در شرایط خاصی (مثل کنترل هواپیمای بدون سرنشین) قابلیت اطمینان نرم افزار اهمیت مطلق دارد. به این دلیل که با جان انسان ها ارتباط مستقیم دارد. در چنین کاربردهایی، بیشتر اوقات از نرم افزارها و سخت افزارهای اضافی برای به حداقل رساندن خطا استفاده میکنند. در کنار اینکه نرم افزار اضافی در حال تولید است به صورت مجزا نرم افزار اصلی هم در حال توسعه است و هر کدام از آنها به صورت مجزا مورد تست قرار میگیرند و ورودی ها و خروجی های آنها مورد بررسی قرار میگیرند .

این کار تا زمانی ادامه میابد که خطاها نزدیک به صفر شود و کیفیت نرم افزار تایید شود. هنگامی که یک مشخصه به چند صورت پیاده سازی شده باشد. موارد آزمونی که با استفاده از روش های جعبه سیاه دیگر طراحی شدند برای همه نسخه های نرم افزار به عنوان ورودی در نظر گرفته میشوند. اگر خروجی ها یکسان باشند، فرض میشود که همه پیاده سازی ها درست بوده اند. اگر خروجی ها تفاوت باشند ، همه برنامه ها بررسی میشوند تا تعیین شود که آیا نقصی در یک یا چند نسخه منجر به این اختلاف شده است یا خیر، در اکثر موارد، مقایسه خروجی را میتوان توسط یک ابزار خودکار انجام داد.

تست جعبه سیاه (Black Box Testing ) یک روش کلی است و بنابراین نمی توان بر صحت آن اطمینان داشت به این دلیل که همیشه در این روش مسیرها و داده هایی باقی می ماند که از چشم تست کننده آن به دور است. برای اینکه از انجام تست اطمینان حاصل کنیم نیاز است که مشکلی را که پیدا کرده ایم را دوباره توسط White Box Testing مورد بررسی قرار دهیم تا این مشکل به صورت کامل حل شود. تست جعبه سیاه (Black Box Testing ) برای این استفاده میشود که تست کننده قبل از این که شروع به استفاده از White Box Testing کند یک پیش فرض از برنامه داشته باشد و بداند که کدام متد ها در این برنامه وجود دارد و کدام متد ها نیاز است که به این برنامه افزوده شود.

  • قانون پارتو: %80 خطاهاي کشف نشده در 20 % کد است

بعد از مدت مدیدی به ادامه مبحث تست برنامه نویسی میپردازیم. در بخش قبلی روی تست جعبه سیاه حرف زدیم و فهمیدیم که این یک تست اجمالی است و به صورت کامل نمیتواند صحت و سوق یک برنامه را دریافت کند. در این بخش روی تست جعبه سفید و یا همان تست باز حرفهایی میزنیم. این بخش به علت زیاد بودن در دو بخش جداگانه روی صحنه می آید. ! راستش برام ایرانی نوشتن کمی مشکل است برای همین اگر کلماتی را که نفهمیدن را برایم بگویید که معادل فارسیش را برایتان پیدا کنم.به امید موفقیت همه برنامه هایتان ! ! زندگی رویایی است که در قالب زنده بودن و تست روزگار باید ثبت شود.!

شکل 3: حالت کلی تست جعبه سفید

White Box Testing چیست؟

این روش تست با نگاهی دقیق به نرم افزار نوعی تست را ایجاد کرده است که بر مبناء شرطها و حلقه های داخلی کدهای نرم افزار میباشد. به White Box Testing تست ساختاری نرم افزار و یا تست شیشه ای نرم افزار(Glass Box Testing) نیز میگویند. تست جعبه سفید شامل ایجاد تست هایی است که بعضی از استانداردهای پوشش کد را برآورده میکنند. یعنی کدهای برنامه را کامل مورد بررسی قرار میدهد برای مثال تست کننده میتواند تست هایی را طراحی کند که باعث شود همه عبارات برنامه حداقل یک بار اجرا شوند.

این تست به تیم نرم افزاری و تست کننده اجازه میدهد که قسمتهایی که از سیستم را ارزیابی کنند که کمتر تست شده اند و اطمینان حاصل شود که نقاط عملکرد خیلی مهم تست شده اند . روش تست جعبه سفید به صورت مستیم ارتباط میگیرد به داخل نرم افزار یعنی با کدها و چگونگی پیاده سازی آنها و همچنان هدف هایی که برنامه نویس در ذهن خود داشته است که این نرم افزار یا بخش خاصی از آن به هدف مشخص برسد. بنابراین تست جعبه سفید کسانی میتوانند انجام بدهند که در زمینه برنامه نویسی و کمپیوتر ساینس متخصص باشند. این نوع تست به این دلیل که افراد متخصص را برای تست نیاز دارد دارای هزینه های زیاد و همچنان مدت زمان زیادی است.

مزایای تست جعبه سفید چیست؟

  • به این دلیل که دانستن ساختار داخلی کد لازمه تست میباشد. فهمیدن اینکه چه نوع داده های ورودی و خروجی برای تست کاراکتر نرم افزار مناسب است، آسانتر میشود.
  • به بهتر کردن کد کمک میکند.
  • به دلیل اینکه تست کننده میتواند بر روی کد هم دسترسی داشته باشد. خطوط اضافی کدها که در نتیجه اشکال زدایی ها ایجاد میشود و یا اینکه برنامه نویس این کدها را طبق سلیقه خود مینویسد ولی کاربردی ندارد را نیز حذف کرده میتواند . این خطوط ممکن است که منجر به خطاهای پنهان تبدیل شوند.

معایب تست جعبه سفید چیست؟

  • تست جعبه سفید برا این مبنا استوار است که باید تست کننده از کارکردهای داخلی برنامه آگاهی داشته باشد و همچنان کد نویسی نرم افزار را نیز یاد داشته باشد به همین دلیل کسی که این تست را انجام میدهد باید یک متخصص نرم افزار باشد به همین دلیل هزینه و وقت زیادی را بر نرم افزار تحمیل میکند.
  • بررسی و پیگردی در تمام خطوط کدها تقریبا غیر ممکن است و به همین دلیل ممکن است که این تست باعث خراب کردن نرم افزار هم بشود.

White Box Testing دارای سه روش مهم است که عبارت اند از:

    1. تست مسیر مبنا(Basis Path Testing)
    2. تست شرطی (Condition / Branch Testing)
    3. تست حلقه ها ( Loop Testing)

Basis Path Testing چیست؟

تست مسیر مبنا یکی از روشهای تست جعبه سفید است، که برای بار اول توسط "تام مک کلیپ" پیشنهاد شد. هدف این روش این است که تمام مسیر های منطقی (logic) را بررسی کنیم . این مسیر های منطقی توسط این گراف ها قابل شناسایی هست independent path, flow graph, cyclomatic complexity, graph matrix, link weight .با شناسایی این مسیرها و بازبینی آنها میتوان مسیرهای که ورودی ها در آن رفت و آمد میکند را بررسی کرد و اگر در این ارتباط ها کدام مشکلی وجود داشته باشد به راحتی قابل شناسایی و حل میباشد.

گراف جریان چیست؟

گراف جریان در حقیقت گراف نرم افزار است که در آن مسیر داده های دریافت شده را و همچنین مسیری که داده در نرم افزار به جریان است و مسیر برگشت خروجی ها را هم به نمایش میگذارد. گراف جریان، جریان کنترل منطقی را با استفاده از مسیر ها به نمایش میگذارد. که این مسیرها در حقیقت همان مسیر حرکت ورودی ها تا به خروجی ها هست.

شکل 4: حالت های مختلف گراف جریان

هر دایره نشان دهنده یک یا چند PDL بدون انشعاب یا دستورات برنامه مبنا می باشد. به مثال زیر توجه کنید:

شکل 5: جریان یک عملیه در نرم افزار


 شکل 6:  گراف جریان مثال شکل 6


در شکل 6 یک داده ورودی به نرم افزار دادیم که این داده ورودی میتواند در مسیری که خودش بخواهد حرکت کند .مسیرهای زیادی برای حل مشکل دارد که هر کدام از این مسیرها همانطور که در شکل 7 دیده میشود دارای زمان بندی و ناحیه فعالیت جداگانه میباشد. در شکل 7 به هر کدام از دایره ها گروه گفته میشود گروه همان عملیه ای است که توسط یک متد یا کلاس انجام میشود. یال ها نشان دهنده مدت زمان انتقال از یک کارکرد به کارکرد دیگر است . ناحیه هم نشان دهنده مسیر ورودی ها میباشد.

شکل 7 منطق ترکیبی


شکل صفحه قبل این را نشان میدهد که در صورتی که یکی از راه ها برای فعالیت ورودی بسته باشد میتواند مسیر دیگری را انتخاب کند . خواه این مسیر درست باشد و یا نه . تست کننده توسط گراف میتواند مسیر درست را برای ورودی ها و خروجی ها تعیین کند که نرم افزار به صورت بهتری فعالیت کند.

پیچیدگی دورانی چیست؟

پیچیدگی دورانی، معیاری از نرم افزار است که اندازه مقداری از پیچیدگی منطقی و عادی نرم افزار را مشخص میکند. این پیچیدگی دورانی با مسیرهایی که در شکل 7 بود مشخص میشود. این مسیرها توسط یال ها اندازه گیری میشود. اندازه آنها بر حسب زمان است یعنی چه مدت طول میکشد که یک داده ورودی بعد از طی فعالیت خود داخل نرم افزار به خروجی تبدیل شودیک مسیر مستقل ، مسیری که فقط یک مرز دارد را مسیر مستقل میگوییند به مانند مسیر اولی که در شکل بالا وجود دارد. مسیرهای مورد استفاده در مثال بالا:

  • مسیر اول : 1 , 11
  • مسیر دوم : 1 , 2 , 3 , 6 , 7 , 9 , 10 , 1 , 11
  • مسیر سوم : 1 , 2 , 3 , 6 , 8 , 9 , 10 , 1 , 11
  • مسیر چهارم :1 , 2 , 3 , 4 , 5, 10 , 1, 11

این مسیرها نشان دهنده این است که داده ها میتوانند مسیرهای مختلفی را دنبال کنند. یعنی ورودی ها بسته به شرایطی که از طرف متد برایش تعیین میشود و یا مقدار و نوع خودش مسیرش را تعیین میکند.پیچیدگی دورانی به یکی از سه شکل زیر محاسبه میشود:

  1. تعداد نواحی گراف جریان متناظر با پیچیدگی دورانی میباشد.
  2. پیچیدگی دورانی ، V(G) برای گراف جریان ، G ، به این صورت تعریف میشود: V(G) =E-N+2 که E تعداد یال های گراف جریان ، و N تعداد گره های گراف جریان میباشد.
  3. دورانی ، V(G) برای گراف جریان ، G ، به این صورت نیز تعریف میشود: V (G) = P+1 که P تعداد گزاره های موجود در گراف جریان G می باشد. [10]

Condition / Branch Testing چیست؟

در این تست مسیرهای مختلفی که برای یک ورودی داده میشود تست میشود که تست آن بر مبنا true و false میباشد. در این تست همه حالت های ممکنه آن مورد بازبینی قرار میگیرد یعنی مسیرهای درست و اشتباه هر دویشان مورد بررسی قرار میگیرد.به عنوان مثال در برنامه زیر تمام گزاره های شرطی را در جدول 1 قرار میدهیم و ابزارهای تست را مشخص میکنیم.

Int fat (int a , int b . int c , int d , int e)

{

Float e;

If (a==0)

{

Return 0;

}

Int x=0;

If ((a==b)or(c==d)and(a<2))

{

X=1;

}

E=1/x;

}

Return e;

}
جدول 2: گزاره های شرطی


توصیه میشود که ورودی ها را تا جای ممکن مقدارهای ساده و مشابه به هم انتخاب کنید تا محاسبات سادتر باشد. در جدول 2 مشاهده میشود که سه حالت خطای Division by zero کشف میشود که باید در برنامه تصحیح شود. این خطاها باعث از بین رفتن نرم افزار میشود.

  • قانون پارتو: %80 خطاهاي کشف نشده در 20 % کد است



سید علی دانیال
سید علی دانیال

بنده سید علی دانیال فارق التحصیل از دانشکده کمپیوتر ساینس دانشگاه بلخ هستم و برای فعلا در کالج تربیه معلم مسلکی ولایت بلخ مشغول تدریس هستم. تخصص خودم در زمینه برنامه نویسی گرفته ام.

نظرات