اطلاعیه

بستن
No announcement yet.

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

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

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

    مقدمه

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

    مراحل تست

    Unit test
    Integration test
    Functional or acceptance test
    Performance test
    System test

    Unit test : در این نوع تست ما قسمت های کوچک برنامه را تست می کنیم ، مثلا توابع یا کلاسها در زبان های object oriented .در این تست با کل برنامه کاری نداریم و هدف اطمینان از کارکرد قسمت های کوچک برنامه است. این نوع تست در سطع کد است و یک ابزار مناسب برای آن JUnit است. این ابزار تست اتوماتیک انجام می دهد.
    Integration test : این تست به این درد می خورد که مطمئن شویم کامپوننت های مختلف برنامه با هم درست کار می کنند.
    Functional test یا Acceptance test: برای این است که مطمئن شویم که آیا نرم افزار کامل هست و به درستی کار می کند. این یک تست سطح بالا محسوب می شود. یک ابزار برای این تست Fitnesse می باشد.
    Performance test : در این نوع تست کارایی کامپوننت های برنامه مورد بررسی قرار می گیرد.
    System test : در این نوع تست تمام سیستم تست می شود، خود نرم افزار و سخت افزار و ارتباطات بین کامپوننت ها مورد توجه قرار می گیرد خود تست سیستم موارد زیر را در بر می گیرد:

    GUI test
    Smoke test
    Performance test
    Installation test




    انواع تست

    تست Installation
    تست Compatibility
    تست smoke و sanity
    تست Regression
    تست Acceptance
    تست Alpha
    تست Beta
    تست functional و Non-functional
    تست مخرب
    تست usability
    تست security
    تست Development
    تست A/B
    تست Concurrent
    تست Conformance

    تست Installation :این نوع تست به ما این اطمینان خاطر را می دهد که برنامه به درستی در سیستم های مشتریان درست نصب خواهد شد.
    تست compatibility :در این نوع تست ما باید بررسی کنیم که برنامه با محیطی که قرار است در آن اجرا شود و همچنین برنامه های دیگری که کنار آن وجود دارند سازگار باشد. مثلا ممکن است که یک برنامه نویس برنامه اش را برای از یک نسخه خاص سیستم عامل به بعد بنویسد بنابراین به دلیل نداشتن backward compatibility این نرم افزار برای همه کاربران قابل استفاده نیست.
    تست smoke و sanity :
    تست sanity به ما می گوید که آیا منطقی است که به انجام تست ادامه بدهیم یا خیر. یعنی قبل از این که تستی را شروع کنیم ممکن است با این تست بتوانیم بفهمیم که برنامه از نظر منطقی درست پیاده سازی نشده بنابراین آن را به توسعه دهندگان ارجا می دهیم به جا آنکه بیشتر بر روی تست وقت بگزاریم.
    تست smoke :در این تست شامل حداقل تلاش برای اجرای نرم افزار است. این تست از این نظر مفید است که ما متوجه شویم که آیا هیچ مشکل حداقلی برای اجرای نرم افزار داریم یا نه یعنی بعد از این تست ما می فهمیم که این نرم افزار حداقل کار می کند. در واقع می توان تست verification هم نام گزاری شود.
    تست regression :این تست بر روی یافتن باگ بعد از یک تغییر اساسی در کد پروژه تمرکز دارد. به عنوان مثال وقتی که یک فیچر به پروژه اضافه می شود با این تست باگ های احتمالی را مشاهده می کنیم. جایی که یک کد عمده یا یک کتابخانه به پروژه اضافه می شود معمولا باگهای زیادی مشاهده می شود، شاید به دلیل conflict با کد قبلی یا هر دلیل دیگری، در این قسمت باید این تست مربوطه را انجام داد. معمولا قدم اول تست regression این است که تست کیس های قبلی را دوباره تکرار کنیم ببینیم که این تغییر کد موجب ظهور باگ های قبلی نشده باشد. عمق تست به ریسک فیچر اضافه شده بستگی دارد. این نوع تست در شرکت های تجاری بیشتر مورد توجه قرار می گیرد.
    تست acceptance :این نوع تست می تواند دو مفهوم داشته باشد. اولی همان تست smoke که مطمئن می شویم که آیا برنامه با حداقل منابع کار کند بنابراین احتمالا در اکثر شرایط نیز کار می کند. دومین مفهوم مربوط به سمت مشتری می شود که مثلا آنها هم یک آزمایشگاه داشته باشند و بر روی سخت افزار خودشان برنامه را تست کنند که به این تست user acceptance test یا UAT نیز گفته می شود. این نوع تست می تواند در بین فازهای پروژه هم معنا پیدا کند به این صورت که در صورت موفقیت در این تست برنامه به فاز بعدی می رود.
    تست alpha :این نوع تست یک شبیه سازی از بازار واقعی است که مثلا به دست یک تیم تست جداگانه داده شود یا به کاربران احتمالی برنامه داده شود.
    تست beta :این تست بعد از تست alpha است که در واقع یک تست UAT خارجی هم محسوب می شود. این ورژن از نرم افزار با نام ورژن بتا شناسایی می شود که به یک تیم تست خارج از تیم برنامه نویسی ارسال می شود که به آن ها beta testers می گویند. برنامه به یک تعداد کمی از کاربران داده می شود تا زمانی که مطمئن شوند که باگ های زیادی ندارد.
    تست Functional و Non-functional :تست functional برای ما کارکرد (function) خاصی را تست می کند، در واقع سناریوهای پیاده سازی شده را تست می کند مثلا برنامه قرار است که بتواند یک عکس را نمایش بدهد، این تست این مساله را بررسی می کند که آیا برناه می تواند عکس نمایش دهد؟. در مقابل تست Non-functional مربوط به آن قسمت برنامه است که به کاربر ارتباط مستقیم ندارد مثلا کارایی سیستم یا قابلیت گسترش برنامه، رفتار برنامه در یک شرایط خاص یا امنیت برنامه. این نوع تست نقطه شکست برنامه را میابد. تست Non-functional کیفیت برنامه را تست می کند.
    تست مخرب (Destructive) :این نوع تست تلاش می کند که برنامه یا یک زیربرنامه موفق به عملیات نشود. این نوع تست بررسی می کند که برنامه با دادن ورودی های ناجور یا غیرقابل پیش بینی و مختلف چگونه رفتار می کند و نتیجه این تست موجب میشود که روتین هایی برای مدیریت ارور و اعتبارسنجی ورودی نوشته شود در نتیجه موجب قدرتمند شدن برنامه می شود.
    تست usability :این نوع تست بررسی می کند که آیا کارکردن با رابط کاربری برنامه راحت است یا نه.
    تست امنیت (security) :تست متدهای مختلف امنیت در برنامه است. این یک تست مهم است مخصوصا در برنامه هایی که حریم خصوصی افراد در آن تعریف می شود برای مقابه با نفوذ هکرها.
    تست توسعه (Development) :این نوع تست استراتژی های های مقابله با باگ را مطرح می کند که با پیروی از آنها ریسک توسعه برنامه، هزینه و زمان آن به حداقل برسد.
    تست A/B :این نوع تست در واقع مقایسه دو خروجی است. پروسه تست اینگونه است که وقتی که یک متغیر تغییر می کند تست را اجرا می کنیم و با دوباره تغییر دادن آن دوباره تست می کنیم و با مقایسه خروجی ها متوجه درستی عملکرد برنامه می شویم.
    تست Concurrent :این نوع تست تمرکز بر روی کارایی برنامه در شرایطی که ما تست را به صورت مداوم انجام می دهیم دارد. این نوع تست در مقابل تست فشار یا استرس است که در یک مدت زمان کوتاه ما فشار زیادی به برنام میاوریم.
    تست conformance یا تست typing :این نوع تست بررسی می کند که برنامه بر اساس استانداردهای تعریف شده کار می کند یا نه. مثلا در تست کامپایلرها این تست برای این انجام می شود که بدانیم آیا کامپایلر مورد نظر بر اساس استانداردهای لازم آن زبان خاص درست کار می کند.

    رویکردهای تست

    تست static و dynamic
    تست white-box
    تست black-box
    تست grey-box

    تست static : یک نوع تست است که در آن در واقع از نرم افزار استفاده نمی شود. در این تست وارد جزییات نمی شویم و مثلا در آن منطق برنامه ،الگوریتم و داکیومنت های آن بررسی می شوند. مثلا در این نوع تست کد را می خوانیم و به دنبال ارور می گردیم. معمولا خود توسعه دهنده این کار را انجام می دهد.
    تست dynamic : این نوع تست رفتار نرم افزار را به ورودی هایی که به مرور زمان تغییر می کنند را نشان می دهد یعنی تستی که در آن برنامه اجرا می شود و با ابزاری دیگر به آن ورودی های مختلف داده می شود و رفتار یا خروجی آن را می بیند و تحلیل می کند.
    تست white-box : در این تست کارکرد ساختارهای داخلی برنامه بررسی می شود، منطقا به کد احتیاج هست تا مثلا متد های مختلف بررسی شوند. تکنیک هایی که در این نوع تست استفاده میشود:
    تست API
    code coverage
    متدهای Fault injection
    متدهای mutaion test

    تست black-box : در این نوع تست به اجزای داخلی نرم افزار کاری نداریم و به آن به عنوان یک جعبه سیاه نگاه می کنیم و رفتار برنامه را با دادن ورودی بررسی می کنیم. انواع تست black-box از قرار زیر است:
    equivalence partitining
    Boundary value analysis
    All-pairs testing
    ...

    تست grey-box : در این نوع تست ما در مورد ساختار داخلی نرم افزار و الگوریتم آن اطلاعاتی داریم و از آن برای طراحی تست خود استفاده می کنیم. در حالی که در تست هایی که طراحی می کنیم هیچ دسترسی به ساختار داخلی نرم افزار نداریم و مانند Black-box به آن نگاه می کنیم.

    : Continuous integration این یک روش برای توسعه نرم افزار است با این رویکرد که زمان integrate کردن به حداقل برسد و کیفیت نرم افزار بالا برود. روش انجام کار این است که به صورت مداوم در حین توسعه نرم افزار عمل یکپارچه سازی و تست انجام شود. یکی از ابزارهای این روش Hudson است.
    Code coverage : یک شاخص است که با استفاده از آن میتوان گفت که یک تست چند درصد از کد برنامه را تست کرده است، در واقع می تواند یک معیار باشد برای تست نرم افزار.
    ابزارهای تست نرم افزار موبایل
    ابزار های تست موبایل ممکن است که به کد برنامه احتیاج داشته باشند یا تنها لازم باشد که فایل محصول را به آن بدهیم و تست را انجام دهد.

    ابزارهای تست کد

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

    Monkey : این ابزار برای ما به صورت رندم دکمه های مختلف را می زند، یعنی event های مختلف را call می کند، این کمک میکند تا برنامه در صورت وجود مشکل کرش کند. این برای stress test برنامه مناسبی است.
    Fitnesse : این یک فریم ورک است که به افراد پروژه امکان همکاری بیشتر کسانی که در یک پروژه در حال همکاری هستند ولی ابزارهای تست هم دارد. برای مدل تست acceptance test و Integrated test استفاده می شود.
    Hamcrest : یک لایبراری تست است که به کد هم احتیاج دارد. با استفاده از متد هایی که دارد می تواند Unit تست انجام دهد، در صورتی که احتیاج باشد برنامه را به صورت ایزوله تست کند می تواند با امکانی به اسم parser test کامپوننت های برنامه را به صورت ایزوله تست کند حتی اگر آنها به یک API ، JSON یا XML هایی خارج از برنامه احتیاج داشته باشند. هم چنین می توان با آن Memory leak برنامه را تشخیص داد.

    ابزارهای تست محصول

    Appium : نرم افزار تست اتوماتیک. تست functional.
    کد PHP:
    http://appium.io/ 
    -Calabash: نرم افزار تست اتوماتیک. تست functional و acceptance test .
    کد PHP:
    http://calaba.sh/ 
    -xamarin test cloud: با این شرکت می توان یک تست اتوماتیک بر روی تعداد زیادی گوشی همزمان انجام داد. commertial است
    کد PHP:
    xamarin.com/test-cloud 
    -Testdriod: تست اتوماتیک نرم افزار موبایل بر روی گوشی های واقعی اندروید و iOS
    کد PHP:
    http://testdroid.com/ 
    -prefecto mobile: تست اتوماتیک و functional برنامه. استفاده از مدل continuous quality این نرم افزار commercial است
    کد PHP:
    http://www.perfectomobile.com/ 
    -SOASTA touch test: تست اتوماتیک نرم افزار موبایل به صورت functional.
    کد PHP:
    http://www.soasta.com/products/touchtest/ 
    -Testin: این نرم افزار به ما این امکان را می دهد که نرم افزارهای خود را بر روی بیشتر از 300 گوشی تست کنیم. حالت cload آن امکانات بیشتری مانند automated compatibility و performance testing دارد
    کد PHP:
    http://www.itestin.com/ 
    -Ubertesters: این برنامه کمک می کند که روند تسعه نرم افزار سازمان یافته تر بر اساس پروسه QA باشد.
    کد PHP:
    http://ubertesters.com/ 
    -crashlytics: این یک نرم افزار آزاد برای iOS و اندروید است.
    کد PHP:
    http://crashlytics.com/ 
    -Ranorex: این یک نرم افزار تست موبایل است که یک تست را رکورد می کنیم و آن را بر روی device های زیادی اجرا می کنیم.
    کد PHP:
    http://www.ranorex.com/mobile-automation-testing.html 
    -Experitest: نرم افزار تست اتوماتیک و تست functional. با این نرم افزار می توانیم یک تست رکورد کنیم و آن را به دفعات زیادی روی یک دیوایس اجرا کنیم. می توانیم با زبان های python و C# یک تست را بنویسیم و بر روی گوشی های مختلف اجرا کنیم.
    کد PHP:
    http://experitest.com/ 
    -Android Lint: یک ابزار است که به eclipse اضافه می شود و کدهای پروژه را به منظور یافتن ارور چک می کند و همچنین از نظر امنتتی و کارایی تلاش نرم افزار را بهبود می بخشد.
    کد PHP:
    http://developer.android.com/tools/help/lint.html 
    -FindBugs: یک نرم افزار تست کد استاتیک است که می توان از آن برای اصلاح برنامه های جاوا استفاده کرد.
    کد PHP:
    https://code.google.com/p/findbugs-for-android/ 
    -Maveryx: یک نرم افزار تست برای تست functional , تست اتوماتیک, تست GUI در نرم افزارهای اندروید است.
    کد PHP:
    http://www.maveryx.com/ 
    -clang static analyzer: یک ابزار اپن سورس برای iPhone است که تست static انجام می دهد و نرم افزار را آنالیز می کند.
    کد PHP:
    http://clang-analyzer.llvm.org/ 
    -Analyze code for Xcode : یک افزونه برای Xcode است که در زمان compile کد را آنالیز می کند و ارور ها و باگها را گزارش می دهد.
    کد PHP:
    http://matthewmorey.com/automatic-static-analysis 
    -Monkeytalk: یک نرم افزار آزاد است که تست اتوماتیک و functional با متد های زیادی مثل smoke test انجام میدهد.
    کد PHP:
    https://www.cloudmonkeymobile.com/monkeytalk 

    Caliper : یک نرم افزار اپن سورس ساخته شده توسط گوگل است که نتایج javamicrobenchmarks را بر روی اپلیکیشن ما نشان می دهد. این در واقع یک تست کارایی با benchmark های موجود است.
    -EMMA: این برنامه یک ابزار مناسب برای اندازه گیری code coverage مربوط به یک برنامه جاوا است..
    -Robotium: یک فریم ورک تست اتوماتیک است که بدون نیاز به دانش زیادی در مورد اپلیکیشن مورد تست می توان آن را مورد تست قرار داد. نوع تست آن balck-box است بعنی نیازی به این نیست که کد برنامه را داشت.
    -Robolectric: یک فریم ورک unit test است که کلاس ها را دنبال می کند و قبلیت این را دارد که بدنه متد ها را دوباره بنویسد. متد های اندروید را دوباره تعریف می کند به گونه ای که به صورت default مقادیر Null یا 0 برگردانند.
    -Monkeyrunner: به IDE اضافه می شود و به ما اجازه می دهد و تست functional بگیریم. به سورس کد برنامه احتیاجی ندارد. هم بر روی دیوایس و هم بر روی emulator اجرا می شود و می توان با python برنامه نوشت.
    -Apthwack: یک API آزاد برای تست نرم افزار است. برنامه را آپلود می کنیم و تست می کنیم. ارور ها را به ما می گوید ،بر روی تعداد زیادی دیوایس تست می کند، مصرف منابع را به ما گزارش می دهد.
    کد PHP:
    https://appthwack.com/ 
    -HP: یک راه حل تست شرکت hp با قابلیت های زیر است.
    تست موبایل
    مانیتورینگ نرم افزار موبایل
    امنیت نرم افزار موبایل
    شبیه سازی شبکه با کارایی بالا
    -mobilelabs : یک راه حل جامع برای تست نرم افزار موبایل در کلود.
    کد PHP:
    http://mobilelabsinc.com/ 


    منابع

    Android application testing guid-Diego torres Milano (لینک)
    کد PHP:

    http
    ://appium.io
    http://calaba.sh
    http://testdroid.com
    http://www.perfectomobile.com
    http://www.soasta.com/products/touchtest
    http://www.itestin.com
    http://ubertesters.com
    http://www.ranorex.com/mobile-automation-testing.html
    http://crashlytics.com
    http://experitest.com
    http://developer.android.com/tools/help/lint.html
    http://www.maveryx.com
    http://clang-analyzer.llvm.org
    http://matthewmorey.com/automatic-static-analysis
    https://www.cloudmonkeymobile.com/monkeytalk
    https://appthwack.com
    http://mobilelabsinc.com 
    نوشته شده توسط امیر جمشیدی
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-11-2020, 05:39 PM.

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی

ایمیل مدیریت

Habili@linux-zone.org

در حال انجام ...
X