مقدمه
در این مقاله می خواهیم یک طبقه بندی از مفاهیم تست نرم افزار ببینیم سپس ابزارهای تست نرم افزار موبایل را نام ببریم. هدف از این مقاله دریافت یک دید کلی از فرایند تست و مشاهده ابزارها و روش هاست که با اینها می توانیم برنامه ریزی و اقدام به تست نرم افزار کنیم.
مراحل تست
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.
-Calabash: نرم افزار تست اتوماتیک. تست functional و acceptance test .
-xamarin test cloud: با این شرکت می توان یک تست اتوماتیک بر روی تعداد زیادی گوشی همزمان انجام داد. commertial است
-Testdriod: تست اتوماتیک نرم افزار موبایل بر روی گوشی های واقعی اندروید و iOS
-prefecto mobile: تست اتوماتیک و functional برنامه. استفاده از مدل continuous quality این نرم افزار commercial است
-SOASTA touch test: تست اتوماتیک نرم افزار موبایل به صورت functional.
-Testin: این نرم افزار به ما این امکان را می دهد که نرم افزارهای خود را بر روی بیشتر از 300 گوشی تست کنیم. حالت cload آن امکانات بیشتری مانند automated compatibility و performance testing دارد
-Ubertesters: این برنامه کمک می کند که روند تسعه نرم افزار سازمان یافته تر بر اساس پروسه QA باشد.
-crashlytics: این یک نرم افزار آزاد برای iOS و اندروید است.
-Ranorex: این یک نرم افزار تست موبایل است که یک تست را رکورد می کنیم و آن را بر روی device های زیادی اجرا می کنیم.
-Experitest: نرم افزار تست اتوماتیک و تست functional. با این نرم افزار می توانیم یک تست رکورد کنیم و آن را به دفعات زیادی روی یک دیوایس اجرا کنیم. می توانیم با زبان های python و C# یک تست را بنویسیم و بر روی گوشی های مختلف اجرا کنیم.
-Android Lint: یک ابزار است که به eclipse اضافه می شود و کدهای پروژه را به منظور یافتن ارور چک می کند و همچنین از نظر امنتتی و کارایی تلاش نرم افزار را بهبود می بخشد.
-FindBugs: یک نرم افزار تست کد استاتیک است که می توان از آن برای اصلاح برنامه های جاوا استفاده کرد.
-Maveryx: یک نرم افزار تست برای تست functional , تست اتوماتیک, تست GUI در نرم افزارهای اندروید است.
-clang static analyzer: یک ابزار اپن سورس برای iPhone است که تست static انجام می دهد و نرم افزار را آنالیز می کند.
-Analyze code for Xcode : یک افزونه برای Xcode است که در زمان compile کد را آنالیز می کند و ارور ها و باگها را گزارش می دهد.
-Monkeytalk: یک نرم افزار آزاد است که تست اتوماتیک و functional با متد های زیادی مثل smoke test انجام میدهد.
Caliper : یک نرم افزار اپن سورس ساخته شده توسط گوگل است که نتایج javamicrobenchmarks را بر روی اپلیکیشن ما نشان می دهد. این در واقع یک تست کارایی با benchmark های موجود است.
-EMMA: این برنامه یک ابزار مناسب برای اندازه گیری code coverage مربوط به یک برنامه جاوا است..
-Robotium: یک فریم ورک تست اتوماتیک است که بدون نیاز به دانش زیادی در مورد اپلیکیشن مورد تست می توان آن را مورد تست قرار داد. نوع تست آن balck-box است بعنی نیازی به این نیست که کد برنامه را داشت.
-Robolectric: یک فریم ورک unit test است که کلاس ها را دنبال می کند و قبلیت این را دارد که بدنه متد ها را دوباره بنویسد. متد های اندروید را دوباره تعریف می کند به گونه ای که به صورت default مقادیر Null یا 0 برگردانند.
-Monkeyrunner: به IDE اضافه می شود و به ما اجازه می دهد و تست functional بگیریم. به سورس کد برنامه احتیاجی ندارد. هم بر روی دیوایس و هم بر روی emulator اجرا می شود و می توان با python برنامه نوشت.
-Apthwack: یک API آزاد برای تست نرم افزار است. برنامه را آپلود می کنیم و تست می کنیم. ارور ها را به ما می گوید ،بر روی تعداد زیادی دیوایس تست می کند، مصرف منابع را به ما گزارش می دهد.
-HP: یک راه حل تست شرکت hp با قابلیت های زیر است.
تست موبایل
مانیتورینگ نرم افزار موبایل
امنیت نرم افزار موبایل
شبیه سازی شبکه با کارایی بالا
-mobilelabs : یک راه حل جامع برای تست نرم افزار موبایل در کلود.
منابع
Android application testing guid-Diego torres Milano (لینک)
نوشته شده توسط امیر جمشیدی
در این مقاله می خواهیم یک طبقه بندی از مفاهیم تست نرم افزار ببینیم سپس ابزارهای تست نرم افزار موبایل را نام ببریم. هدف از این مقاله دریافت یک دید کلی از فرایند تست و مشاهده ابزارها و روش هاست که با اینها می توانیم برنامه ریزی و اقدام به تست نرم افزار کنیم.
مراحل تست
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/
کد PHP:
http://calaba.sh/
کد PHP:
xamarin.com/test-cloud
کد PHP:
http://testdroid.com/
کد PHP:
http://www.perfectomobile.com/
کد PHP:
http://www.soasta.com/products/touchtest/
کد PHP:
http://www.itestin.com/
کد PHP:
http://ubertesters.com/
کد PHP:
http://crashlytics.com/
کد PHP:
http://www.ranorex.com/mobile-automation-testing.html
کد PHP:
http://experitest.com/
کد PHP:
http://developer.android.com/tools/help/lint.html
کد PHP:
https://code.google.com/p/findbugs-for-android/
کد PHP:
http://www.maveryx.com/
کد PHP:
http://clang-analyzer.llvm.org/
کد PHP:
http://matthewmorey.com/automatic-static-analysis
کد 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/
تست موبایل
مانیتورینگ نرم افزار موبایل
امنیت نرم افزار موبایل
شبیه سازی شبکه با کارایی بالا
-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