• تست نرم‌افزار

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

    در سال‌های اخير آمارهای شگفت آوری از سوی موسسه (NIST(National Institute of Standards and
    تست نرم افزارTechnologyدرباره شكست سيستم‌های نرم افزاری ارائه شده است. در كشور ايالات متحده، اين شكستها ساليانه حدود 59.5 ميليارد دلار به اقتصاد اين كشور صدمه می‌زند. طبق بررسي‌های انجام شده با بكارگيری تست در تمام فازهای توليد نرم افزار 22.2 ميليارد دلار از اين خسارت را می‌توان كاهش داد. طبق آمارهای ارائه شده از سوی موسسه (IDC(International Data Corporation، چهل درصد از بودجه نرم افزارها صرف تست آن می‌گردد.در کشور ما نیز، با توجه به رشد فناوری اطلاعات و ارتباطات در طی چند سال گذشته و توليد بومی بسياری از نرم افزارهای مورد نیاز، نياز به اين فرايند بيش از پيش احساس شده و در صورت عدم توجه به آن، كاهش كيفيت سيستم‌های ارائه شده، عدم رضايت مشتری و در نهايت از دست دادن بازار را به همراه خواهد داشت.

    1.ریسک نرم افزار

    امروزه بسیاری از کارها در زندگی شخصی، صنعت، امور نظامی و غیره به نرم افزارها سپرده شده است. گاهی یک اشتباه کوچک نرم‌افزاری می‌تواند سبب خسارات جبران ناپذیری شود. برای تشریح موضوع به چند نمونه اشاره می‌گردد.

    • در سال 1994 خطای محاسبات اعشاری در پردازنده پنتیوم شرکت اینتل، علاوه بر کاهش فروش آن، اعتبار شرکت را تا مدتی خدشه‌دار کرد.
    • در سال 1998 مدارگرد مریخ به دلیل یک خطا در محاسبات نرم افزاری، در جهت اشتباهی وارد اتمسفر مریخ شده و منفجر گردید. 327 میلیون دلار صرف این پروژه شده بود.
    • در سال 1996 ماهواره بر آریان پنج، 38 ثانیه بعد از پرتاب در ارتفاع 3700 متری زمین منفجر شد. علت اصلی این حادثه در اثر سرریز در واحد ممیز شناور اندازه‌گیری شتاب افقی این ماهواره بر بود. 7 میلیارد دلار و 10 سال زمان برای ساخت این ماهواره بر هزینه شده بود. همچنین باری که این ماهواره بر حمل می‌کرد، 500 میلیون دلار ارزش داشت.

    تست نرم افزار

    تنها 26% از پروژه های نرم افزاری دنیا با موفقیت اجرا می‌شوند. معیار های موفقیت پروژه عبارتند‌از:

    • اتمام به موقع
    • با بودجه تعیین شده
    • با تمام قابلیت‌ها و عملکردهای مورد نظر
    • بدون خطا (با خطای جزئی)

    بسیاری از پروژه‌های تولید نرم افزار با شکست مواجه می‌شوند، هزینه بالایی صرف پروژه‌های شکست خورده می‌گردد.

    • در آمریکا، بیش از 81 میلیارد دلار صرف پروژه‌های شکست خورده می‌شود
    • در انگلیس، بیش از 33 میلیارد دلار صرف پروژه‌های شکست خورده می‌شود.

    2.شیوه های تضمین کیفیت نرم افزار

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

    1.روش‌های پیشگری از خطا از طریق حذف ریشه خطا

    • آموزش
    • بازبینی در ابتدای چرخه حیات (Inspection)

    2.روش‌های کاهش خطا از طریق تشخیص دلیل خطا

    • تست
    • بازبینی (در انتهای چرخه حیات)

    3.روش‌های حبس خطا از طریق موضعی کردن خطا

    • تحمل خطا (fault tolerance)

    3.تعریف کیفیت نرم افزار

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

    1.کیفیت از دیدگاه کاربر

    • برآورده شدن نیازهای کاربری

    2.کیفیت از دیدگاه ساخت

    • تبعیت از استاندارد

    3.کیفیت از دیدگاه محصول

    • ویژگی‌های کیفی محصول

    4.دلایل کاهش کیفیت نرم‌افزار

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

    1.خطاهای انسانی

    • سوء برداشت
    • سوء درک

    2.اشکال در نرم افزار

    • اشکال در طرحی (Defect)
    • اشکال در پیاده سازی (Bug)

    3.شکست سیستم

    • بروز اشکال در محیط عملیاتی

    5.هزینه رفع خطا در چرخه حیات نرم افزار

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

    تست نرم افزار

    6.نسل‌های مختلف تست نرم افزار

    با گذشت زمان و پیشرفت صنعت نرم افزار، تست نرم افزار نیز تحولات بسیاری داشته است، بر همین اساس تست نرم افزار را می‌توان در سه نسل دسته‌بندی کرد.

    1.نسل اول (دهه هفتاد میلادی)

    • تست=رفع خطا (debug)

    1.نسل دوم (دهه هشتاد میلادی)

    • تست یک فعالیتی است که در انتهای چرخه حیات نرم افزار و به منظور شناسایی خطا انجام می‌شود

    1.نسل سوم (قرن بیست و یکم)

    • تست یک فرایندی است موازی با فرایند تولید (شامل چهار فاز) که به منظور سنجش و بهبود کیفیت نرم افزار استفاده می‌شود.

    تست نرم افزار

    7.استانداردها و متدولوژی‌های تست نرم افزار

    1.استانداردهای تست نرم افزار

    • ISO-9126 : استاندارد ارزیابی محصولات نرم افزاری

    تست نرم افزار

    • IEEE-829: استانداردی برای فرایند، مستندسازی و تکنیک های تست نرم افزار

    تست نرم افزار

    • BS7925-1: واژه نامه تست نرم افزار

    2.متدولوژی‌های تست نرم افزار

    • STEP

    متدولوژی STEP كه حروف اختصاری Systematic Test and Evaluation Process است، یك متدولوژی برای تست سیستماتیك و مبتنی بر استانداردهای IEEE می‌باشد.

    • (TDD(Test-driven development

    تست نرم افزار

    8. سطوح تست نرم افزار و انواع آن طبق استاندارد IEEE

    تست نرم‌افزار



    9.فازهای تست نرم افزار طبق استاندارد IEEE

    1.فاز برنامه ریزی تست: در این فاز تصمیم گیریهای كلیدی بر روی فرایند تست نرم افزار صورت می‌گیرد كه اهم آنها عبارتند از:

    • استراتژی تست
    • ریسک‌های نرم افزار
    • زمانبندی و مسئولیت‌ها

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

    • تهیه test-case ها
    • تهیه test-procedure ها

    3.فاز پیاده سازی تست: در این فاز محیط مورد نیاز برای اجرای تست راه اندازی می‌گردد.

    • آماده سازی محیط تست
    • تهیه test-script ها

    4.فاز اجرای تست: در این فاز موارد تست طبق روالهای مربوطه مورد اجرا قرار می‌گیرد.

    • اجرای دستی/خودکاری تست
    • تهیه گزارش خطاها
    • تهیه چکیده اجرایی تست

    تست نرم‌افزار

    10.مراحل تست در قراردهای پیمانی

    1.تست در محیط سازنده نرم افزار

    • اثبات صحت عملکرد یک سیستم یا زیرسیستم نرم افزاری توسط تولید کننده آن

    2.تست در محیط آزمایشگاهی

    • تست یکپارچه سازی زیرسیستم های مختلف یک سیستم نرم افزاری
    • تست های غیرعملکردی (کارایی و امنیت) زیرسیستم های نرم افزاری

    3.تست در سایت مشتری

    • جهت اطمینان از نصب و پیکربندی صحیح و عملکرد سیستم در محیط نهایی
    • تست پذیرش نهایی (Final Acceptance Test)
    • تست کل سیستم توسط کاربر نهایی و در محیط عملیاتی

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

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

    1.ابزارهای مدیریت تست و تضمین کیفیت

    • TestLink, HP Quality Center, IBM Quality Manager

    2.ابزارهای مکانیزه کردن تست‌های عملکردی

    • SOATest, Ranorex, QTP, Selenium

    3.ابزارهای تست کارایی (تست‌های بار و فشار)

    • WPT (Web Performance Tester), LoadTester, Jmeter

    4.ابزارهای تست برنامه نویسی

    • Jtest, dotTest, C++Test

    5.ابزارهای تحلیل کیفیت کدنویسی (تحلیل ایستا)

    • Jtest, dotTest, C++Test, Sonar, Checkmarx

    6.ابزارهای پروفایلر (تحلیل پویا)

    • Yourkit Java Profiler, Yourkit dotNet Profiler, Jprofiler, Insure++Test

    7.ابزارهای مانیتورینگ کارایی نرم افزار و زیرساخت آن

    • AppDynamics, DynaTrace

    تست نرم‌افزار



    نویسنده : تیم تست شرکت مهندس پیشگان


    مراجع

    [1]-Software Quality Engineering; Testing, Quality Assurance, and Quantifiable Improvement, Jeff Tian, IEEE

    [2]-Software Testing 3.0: The Continuing Evolution of Software Testing

    [3]-Art of Software Testing

    [4]-Testing through Software Life Cycle

    [5]-Happy About Global Software Test Automation, By Hung Q. Nguyen, Michael Hackett, Brent K. Whitlock

  • تست نفوذ

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

    تست نفوذ

    در مواقعی یک خبرنامه در مورد آسیب یک شرکت بزرگ توسط یک حمله سایبری منتشر می‌شود. اغلب مهاجمان از آخرین و بزرگترین zero-day ها (آسیب پذیریهای وصله نشده توسط ناشران نرم افزاری) استفاده نمی‌کنند. شرکت‌های بزرگ با بودجه‌های قابل ملاحظه امنیتی، قربانی آسیب‌پذیری‌های تزریق SQL در وب سایت‌هایشان، حملات مبتنی بر مهندسی اجتماعی علیه کارکنان، کلمات عبور ضعیف در سرویس‌های اینترنتی و غیره هستند. به عبارت دیگر، شرکت‌ها در حال از دست دادن داده‌های خصوصی و افشای اطلاعات شخصی مشتریان خود از طریق حفره‌های امنیتی قابل اصلاح می‌باشند. در تست نفوذ، این مسائل را قبل از اینکه یک حمله انجام شود، پیدا کرده و توصیه می‌شود چگونه آنها را تعمیر و از آسیب‌پذیری‌های آینده جلوگیری نمود.
    دامنه تست‌های نفوذ شما از مشتری به مشتری متفاوت خواهد بود. بعضی از مشتریان وضعیت امنیتی عالی دارند، در حالی که برخی دیگر آسیب‌پذیری‌هایی دارند که به مهاجمین اجازه می‌دهد در محیطشان رخنه کرده و دسترسی به سیستم های داخلی را به دست آورند.
    شما همچنین می‌توانید ارزیابی یک یا چند برنامه کاربردی وب سفارشی را انجام دهید. شما ممکن است حملات مبتنی بر مهندسی اجتماعی و سمت مشتری را برای دسترسی به شبکه داخلی مشتری اجرا کنید. بعضی از تست‌های نفوذ نیازمند آن هستند که مانند کارمند داخلی عمل کنید - یک کارمند مخرب یا مهاجم که قبلا در محیط رخنه کرده است - همانطور که یک تست نفوذ داخلی انجام می‌دهید. برخی از مشتریان، یک تست نفوذ خارجی را درخواست می‌کنند که در آن یک حمله از طریق اینترنت شبیه‌سازی گردد. برخی دیگر ممکن است ارزیابی امنیت شبکه‌های بی‌سیم در دفتر کاری خود را تقاضا نمایند. در بعضی موارد ممکن است حتی کنترل‌های امنیتی فیزیکی مشتری را بررسی کنید.

    مراحل تست نفوذ

    تست نفوذ با مرحله پیشبرد مشارکت (pre-engagement) آغاز می‌شود که شامل گفتگو با مشتری در مورد اهداف تست نفوذ، نگاشت دامنه (وسعت و پارامترهای تست) و غیره است. وقتی تستر نفوذ و مشتری در مورد دامنه، فرمت گزارش و سایر موضوعات به توافق رسیدند، تست واقعی آغاز می‌شود.


    تست نرم افزار

    مراحل تست نفوذ


    در مرحله جمع‌آوری اطلاعات، تستر نفوذ اطلاعات موجود در مورد کلاینت را جستجو می‌کند و راه‌های بالقوه اتصال به سیستم‌های آن را شناسایی می‌کند. در مرحله مدل سازی تهدید (threat modeling) اگر یافته ها اجازه دهد مهاجم به سیستم وارد شود، تستر از این اطلاعات برای تعیین ارزش هر یافته و تأثیر آن بر مشتری استفاده می‌کند. این ارزیابی به تستر نفوذ اجازه می‌دهد تا برنامه عملیاتی و روش‌های حمله را توسعه دهد.
    پیش از این تستر نفوذ می‌تواند حمله به سیستم‌ها را شروع کند و تحلیل آسیب‌پذیری را انجام دهد. در این مرحله، تستر نفوذ تلاش می‌کند آسیب‌پذیری‌های موجود قابل استفاده در مرحله بهره‌برداری در سیستم‌ها را کشف کند. یک بهره برداری موفق ممکن است به مرحله پس از بهره برداری (post-exploitation) منجر شود. در این حالت نتیجه‌ بهره‌برداری برای یافتن اطلاعات اضافی، اطلاعات حساس، دسترسی به سیستم‌های دیگر و غیره استفاده می‌شود.در نهایت در مرحله گزارش، تستر نفوذ یافته‌ها را برای مدیران و کارشناسان فنی خلاصه می‌کند.

    1. پیشبرد مشارکت

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

    • دامنه

    چه آدرس‌های IP یا هاست در دامنه مد نظر قرار دارند و کدام‌ها در دامنه نیستند؟ کدام نوع از اقدامات انجام شده، مجوز لازم از سوی مشتری را دارد؟ آیا شما مجاز به بهره‌برداری هستید و به طور بالقوه سرویس را کاهش می‌دهید یا باید ارزیابی را محدود کنید تا فقط آسیب‌پذیری‌های احتمالی را شناسایی کنید؟ آیا مشتری متوجه است که حتی یک اسکن ساده پورت می‌تواند سرور یا روتر را down کند؟ آیا شما مجاز به انجام یک حمله مبتنی بر مهندسی اجتماعی هستید؟

    • پنجره تست

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

    • اطلاعات تماس

    اگر چیزی جدی پیدا کنید باید با چه کسی تماس بگیرید؟ آیا مشتری انتظار دارد که 24 ساعته در شبانه روز با کسی تماس بگیرید؟ آیا آنها ترجیح می‌دهند که از رمزگذاری برای ارسال ایمیل استفاده کنید؟

    • کارت کسب مجوز در تست نفوذ

    اطمینان حاصل کنید که مجوز انجام تست نفوذ را دارید. اگر یک هدف متعلق به شرکت نیست (به عنوان مثال، به این علت که آن توسط یک شخص ثالث میزبانی شده است)، اطمینان حاصل کنید که مشتری تأیید رسمی از شخص ثالث برای انجام تست نفوذ را داراست. صرف نظر از این، اطمینان حاصل کنید که قرارداد شما حاوی بیانیه‌ای است که مسئولیت شما را در موارد غیر منتظره مشخص می‌کند و اجازه کتبی برای انجام تست را دریافت کنید.

    2. جمع‌آوری اطلاعات

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


    تست نفوذ

    جمع آوری اطلاعات

    3. مدل‌ سازی تهدید

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

    4. تحلیل آسیب‌پذیری

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


    تست نفوذ

    تحلیل آسیب پذیری

    5. بهره‌برداری (exploitation)

    در اینجا بهره‌برداری‌ها را در مقابل آسیب‌پذیری‌هایی که (گاهی با استفاده از یک ابزار مانندMetasploit ) کشف کرده‌ایم، در تلاش برای دسترسی به سیستم‌های مشتری اجرا می‌کنیم. همانطور که می‌بینید، بعضی از آسیب‌پذیری‌ها، مانند ورود به سیستم با گذرواژه‌های پیش فرض، به راحتی قابل استفاده هستند.

    6. مرحله پس از بهره برداری (post-exploitation)

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

    7. گزارش نویسی

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

    تست نفوذ

    گزارش نویسی در تست نفوذ


    نوشتن یک گزارش خوب تست نفوذ، یک هنر است که نیازمند تمرین برای کسب مهارت است. شما باید یافته‌های خود را به وضوح به همه، از کارمندان IT متعهد برای رفع آسیب‌پذیری‌ها تا مدیران بالارتبه انتقال دهید که در مورد تغییرات با ممیزی‌های خارجی اظهار نظر کنند. به عنوان مثال، اگر یک شخص غیرفنی عبارت زیر را بخواند "من از MSOS-067 برای گرفتن یک shell استفاده کردم"، ممکن است تصور کند منظور شما از shell یک خرچنگ است! (در حالیکه منظور، گرفتن یک امکان ارتباطی برای نفوذ به سیستم می باشد). گزارش تست نفوذ باید شامل خلاصه اجرایی و گزارش فنی باشد، همانطور که در بخش‌های زیر بحث شده است.

    8. خلاصه اجرایی

    خلاصه اجرائی اهداف آزمون را توصیف می‌کند و سطح بالایی از بررسی اجمالی یافته‌ها را ارائه می‌دهد. مخاطب مورد نظر، مدیران مسئول برنامه امنیتی هستند. خلاصه اجرائی باید شامل موارد زیر باشد:

    • پیش زمینه

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

    • وضعیت کلی

    یک مرور کلی از اثربخشی تست، مسائلی که در این مورد یافت شده است (مانند بهره‌برداری از آسیب‌پذیری مایکروسافتMSOS-067 ) و مسائل عمومی که موجب آسیب‌پذیری می‌شود، مانند عدم مدیریت وصله (patch).

    • مشخصات ریسک

    رتبه کلی وضعیت امنیت سازمان در مقایسه با سازمان‌های مشابه. لازم است یک توصیفی از رتبه بندی نیز ارائه شود.

    تست نفوذ

    مشخصات ریسک

    • یافته های عمومی

    خلاصه‌ کلی از مسائل شناسایی شده، همراه با آمار و شاخص هایی برروی میزان اثربخشی اقدامات متقابل.

    • خلاصه پیشنهادی

    یک بررسی اجمالی سطح بالا از وظایف، جهت مقابله با مسائل کشف شده در تست نفوذ.

    • نقشه راه استراتژیک

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

    تست نفوذ

    نقشه راه استراتژیک

    9. گزارش فنی

    این قسمت از گزارش، جزئیات فنی تست را ارائه می‌دهد که باید شامل موارد زیر باشد:

    • مقدمه

    فهرستی از جزئیات مانند محدوده، مخاطبین و غیره می‌باشد.

    • جمع‌آوری اطلاعات

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

    • ارزیابی آسیب‌پذیری (vulnerability assessment)

    جزئیات یافته‌های مرحله تحلیل آسیب‌پذیری تست است.

    • تأیید بهره‌وری/آسیب‌پذیری

    جزئیات یافته‌های مرحله بهره‌برداری از تست است.

    • پس از بهره‌برداری

    جزئیات یافته‌های مرحله پس از بهره‌برداری تست می باشد.

    • خطر/در معرض قرار گرفتن

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

    • نتیجه

    مرور نهایی تست نفوذ.

    تست نفوذ برنامه کاربردی تحت وب

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

    استفاده از پروکسی Burp

    ما می توانیم از یک پروکسی برای ضبط درخواست و پاسخ بین مرورگر و برنامه وب استفاده کنیم تا بتوانیم دقیقا همان چیزی را که ازسمت سرور فرستاده می شود ببینیم. کالی-لینوکس همراه با نسخه رایگان Burp Suite ، یک بستر آزمایشی برای برنامه های وب است که دارای ویژگی پروکسی است. Burp شامل سایر اجزای مفید مانند Burp Spider می‌باشد که می‌تواند در محتویات و قابلیت‌های برنامه crawl کند و Burp Repeater که به شما اجازه می‌دهد تا درخواست ها را تغییر داده و مجددا به سمت سرور ارسال کنید. در حال حاضر، ما روی تب پروکسی Burp تمرکز می‌کنیم.
    برای راه‌اندازی Burp Suite در کالی-لینوکس، به قسمت برنامه های کاربردی در سمت چپ بالای GUI بروید و سپس برروی Kali Linux < Fuzzers Web Application < burpsuiteکلیک کنید، همانطور که در تصویر نشان داده شده است.

    تست نفوذ

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

    همانطوری که در تصویر زیر نشان داده شده است، روی تب Proxy کلیک کنید. به طور پیش فرض، دکمه Intercept is on باید انتخاب شود تا Burp Suite درخواست خروجی از پیکربندی مرورگر وب (browser) را متوقف کند و آن را برای استفاده از Burp به عنوان یک پروکسی برای ترافیک وب نگه دارد. این تنظیم به ما اجازه می دهد تا قبل از فرستادن درخواست های وب به سمت سرور، جزئیات آن را مشاهده و حتی تغییر دهیم.

    تست نفوذ

    رابط کاربری پروکسی Burp

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

    1. مرورگر Iceweasel را باز کنید، به Edit Advanced < Preferences < بروید و تب Network را انتخاب کنید.
    2. در سمت راست تنظیمات اتصال را کلیک کنید.
    3. در پنجره تنظیمات اتصال که در تصویر زیر نشان داده شده است، پیکربندی دستی پروکسی را انتخاب کرده و آدرس IP 127.0.0.1 و پورت 8080 را وارد کنید. اینکار به Iceweasel می‌گوید که ترافیک پروکسی را از طریق localhost در پورت 8080 ارسال کند، که البته پورت پیش فرض برای پروکسی Burp است.



    تست نفوذ

    تنظیم پروکسی در Iceweasel


    برای اطمینان از اینکه lceweasel تمامی ترافیک را از Burp Suite پروکسی می‌کند، به آدرس زیر بروید: http: / / 192.168.20.12 / bookservice.
    همانطور که در تصویر زیر نشان داده شده است، اتصال در مرورگر برقرار شده و درخواست HTTP GET برای صفحه اصلی سایت کتابفروشی توسط پروکسی Burp گرفته می‌شود.



    تست نفوذ ضبط شدن درخواست HTTP GET


    ما می توانیم جزئیات درخواست HTTP GET ارسال شده به سرور در صفحه وب کتابفروشی را بخوانیم. همانطور که بعدا خواهیم دید، می توانیم قبل از فرستادن درخواست به سرور، تغییرات لازم را اعمال کنیم. اما در حال حاضر، با کلیک کردن بر روی دکمه Forward، درخواست را به جلو می‌بریم. با بازگشت به صفحه‌ی مرورگر، می‌بینیم که سرور، صفحه اصلی سایت کتابفروشی را برایمان ارسال کرده است، همانطور که در تصویر زیر نشان داده شده است.


    تست نفوذ سایت کتابفروشی

    حال سعی کنید یک حساب کاربری ایجاد کنید. برروی ورودی در سمت چپ بالای صفحه کلیک کرده و سپس از طریق پروکسی درخواست را به سرور منتقل کنید. برای دسترسی به صفحه ثبت نام، با کلیک کاربر جدید و ارسال درخواست به سرور، همین کار را انجام دهید. روی دکمه login در سمت چپ بالای صفحه کلیک کنید و سپس از طریق پروکسی، درخواست را به سرور منتقل کنید. برای دسترسی به صفحه ثبت نام، با کلیک کاربر جدید و ارسال درخواست به سرور، همین کار را انجام دهید. برای دسترسی به صفحه ثبت نام، با کلیک برروی New User و ارسال درخواست به سرور، کار قبل را تکرار کنید.

    تست نفوذ

    ثبت نام یک حساب جدید


    یک نام کاربری، رمز عبور و آدرس ایمیل وارد کنید. سپس درخواست را با کلیک برروی Go ارسال کنید. درخواست باید در Burp Proxy ضبط شود، همانطور که در تصویر زیر نشان داده شده است.



    تست نفوذ درخواست ضبط شده در Burp


    همانطور که در تصویر زیر می‌بینید، علاوه بر بررسی درخواست خام، می توانید برروی تب Params در بالای پنجره درخواست در Burp Suite کلیک کنید تا پارامترهای درخواست را در فرمت قابل خواندن نمایش دهد.

    تست نفوذ پارامترهای درخواست


    به عنوان مثال، صفحه نمایش نشان می‌دهد که کاربر حاوی مقدار georgia، رمز عبور حاوی password و ایمیل حاوی georgia[at]bulbsecuritydotcom است. شما می توانید این فیلدها را مستقیما در پروکسی تغییر دهید. برای مثال، اگر گذرواژه جورجیا را قبل از ارسال درخواست به سرور به password تغییر دهید، سرور رمز عبور جورجیا را برابر password ست می‌کند، زیرا سرور هرگز درخواست اولیه از مرورگر که درخواست گذرواژه برابر با password بوده را ندیده است. پروکسی به شما اجازه می دهد جزئیات هر درخواست سرور را مشاهده کنید. اگر در هر لحظه نیازی به ترافیک پروکسی نداشته باشید، روی دکمه Intercep is on کلیک کنید تا Intercept غیرفعال شود و ترافیک را بدون تعامل با کاربر به سرور منتقل کند. اگر می خواهید یک درخواست خاص را دریافت کنید، دکمه را دوباره روشن کنید.

    تزریق پرس و جو (SQL-Injection)

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

    تزریق SQL در تست نفوذ

    چه اتفاقی می‌افتد اگر یک مهاجم نام کاربری را برابر'' یا' '1 '=' 1 و رمز عبور کاربر' ' یا' 1 '=' 1' قرار دهد؟ عبارت SQL این گونه می‌شود:

    تزریق SQL در تست نفوذ

    از آنجا که'' یا' '1 '=' 1 همیشه درست خواهد بود، این دستور SELECT ، نام کاربری اول موجود در جدول کاربران را بدون در نظر گرفتن نام کاربری و رمز عبور باز می‌گرداند.
    برنامه ما از یک پایگاه داده SQL برای ذخیره سوابق کتاب موجود در فروشگاه استفاده می‌کند و هنگامی که ما یک کتاب را بر روی صفحه اصلی انتخاب می‌کنیم، جزئیات آن از پایگاه داده MS SQL گرفته می‌شود. برای مثال، اگر برروی پیوند Details برای اولین کتاب در سایت کلیک شود، URL درخواست شده اینگونه خواهد بود:

    تزریق SQL در تست نفوذ

    جزئیات کتاب بر اساس نتایج حاصل از پرس و جوی پایگاه داده برای رکورد با ID 1 پر شده است.

    تست آسیب پذیری تزریق SQL

    یک تست معمولی برای بررسی آسیب پذیری‌های تزریق SQL، استفاده از یک علامت نقل قول برای بستن پرس و جوی SQL است. اگر یک آسیب پذیری تزریق SQL وجود داشته باشد، اضافه کردن آن علامت نقل قول باید برنامه را به یک خطای SQL ببرد، زیرا پرس و جو به عنوان بخشی از کد مربوطه بسته می‌شود و نقل قول اضافی تنها باعث می شود که گرامر SQL نادرست باشد. این خطا به ما می گوید که می توانیم پرس و جوهای SQL را با استفاده از پارامتر id به پایگاه داده سایت تزریق کنیم.
    بیایید اینکار را با فرستادن پرس و جویی با پارامتر id 1' امتحان کنیم، همانطوریکه در اینجا نشان داده شده است.

    تزریق SQL در تست نفوذ

    همچنانکه انتظار می رود، برنامه یک صفحه خطا نشان می‌دهد، مبنی بر اینکه گرامر SQL ما نادرست است. این مطلب در تصویر زیر نشان داده شده است.



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

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

    بهره برداری از آسیب پذیری تزریق SQL

    اکنون که می‌دانیم یک آسیب پذیری تزریق SQL در این سایت وجود دارد، ما می‌توانیم از آن برای اجرای درخواست‌های اضافی در پایگاه داده بهره برداری کنیم که البته برنامه نویس هرگز آنها را در نظر نگرفته است.
    برای مثال می توانید نام اولین پایگاه داده را با استفاده از پرس و جوی زیر پیدا کنید:

    تزریق SQL در تست نفوذ

    پرس و جو یک پیام خطا نمایش می دهد:
    Conversion Jailed when converting the nvarchar value 'BookApp' to data type int که به ما می گوید نام اولین پایگاه داده BookApp است، همانطور که تصویر زیر نشان داده شده است :



    تزریق SQL در تست نفوذ

    پیام خطا نام پایگاه داده را نشان می‌دهد

    استفاده از SQlMap

    ما می توانیم از ابزارهایی استفاده کنیم که به طور خودکار می تواند پرس و جوهای SQL را برای انجام کارهای مختلف در سایت با استفاده از تزریق SQL ایجاد کند. تنها چیزی که نیاز داریم یک نقطه تزریق است؛ این ابزار مابقی کار را انجام می‌دهد. به عنوان مثال، فهرست زیر نشان می‌دهد که چگونه با دادن یک آدرس تزریقی بالقوه به ابزاری در Kali SQLMap، آزمون SQLMap برای آسیب پذیری تزریق SQL انجام می‌شود و درخواست‌های تزریق را انجام می‌دهد.

    تزریق SQL در تست نفوذ
    تزریق SQL در تست نفوذ

    dumpکردن پایگاه داده با SQLMap URL را برای آزمون با آپشن -u مشخص کنید (1). آپشن --dump (2) محتویات پایگاه داده را کپی برداری (dump) می‌کند - در این مورد، منظور جزئیات کتاب‌ها است. همچنین می توانیم از SQLMap استفاده کنیم تا سعی کنیم دسترسی به فرمان shell را در سیستم پایه‌ای بدست آوریم. پایگاه داده های MS SQL حاوی یک رویه ذخیره شده به نام xp_cmdshell است که به ما دسترسی command-shell می دهد، اما اغلب غیر فعال است. خوشبختانه SQLMap سعی می‌کند دوباره آن را فعال کند. فهرست زیر نشان می دهد که چگونه می‌توان یک command-shell را بر روی سیستم مقصد سایت موردنظر با استفاده از SQLMap دریافت کرد.

    تزریق SQL در تست نفوذ

    دسترسی xp_cmdshell از طریق تزریق SQL


    همانطور که در فهرست فوق مشاهده می‌کنید، ما یک shell را به عنوان سیستم می‌گیریم بدون اینکه نیازی به اعتبارسنجی پایگاه داده داشته باشیم. لازم به ذکر است که پایگاه داده MS SQL به هیچ وجه به پورت گوش نمی‌دهد. بنابراین ما نمی توانیم به طور مستقیم به آن دسترسی داشته باشیم.
    یک مسئله تزریق SQL در وب سایت میزبان، به ما دسترسی کامل به سیستم را می‌دهد.

    شرکت مهندس پیشگان آزمون افزار یاس، ابزارهای پیشرفته زیر را در حوزه تست نفوذ ارائه می دهد:


    نویسنده : شرکت مهندس پیشگان آزمون افزار یاس


    مراجع

    [1]-Georgia Weidman, Penetration Testing A Hands-On Introduction to Hacking, 2014

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

    مخاطبین:

    دوره های مربوط به مفاهیم و ابزارهای فرایند تست، تست کارکردی و تست کارایی عمدتا برای تسترها (شامل نقشهای مدیر تست، طراح و تحلیلگر تست، متخصص ابزار تست و تستر) می باشد؛ هرچند تولیدکنندگان (developers) هم می توانند از آنها بهره ببرند. دوره های مربوط به مفاهیم و ابزارهای تست امنیت برای تسترهای امنیت درنظر گرفته شده است که به طور خاص برروی تشخیص مشکلات امنیتی سیستم فعالیت می نمایند. دوره های مربوط به مفاهیم و ابزارهای تست واحد ویکپارچه سازی، مرور سورس کد و پروفایلینگ به طور خاص متعلق به تولیدکنندگان و برنامه نویس ها می باشد. این دوره ها وابسته به بستر تولید بوده (یعنی ++Java، .Net، C و PHP) و طبیعتا برای هر بستر به طور جداگانه برگزار می گردد.دوره آموزشی مفاهیم و ابزارهای مانیتورینگ و پایش کارایی نرم افزار برای هر سه تیم تولید، عملیات و زیرساخت قابل استفاده است.

    آموزش تست نرم افزار

    عناوین دوره های آموزش تست نرم افزار :

    فرایند تست

    مفاهیم و تکنیکهای تست کارکردی

    مفاهیم و تکنیکهای تست کارایی (تست های بار، فشار و پایداری)

    مفاهیم و تکنیکهای تست امنیت (تست های نفوذ)

    مفاهیم و تکنیکهای تست واحد و یکپارچه سازی

    مفاهیم و تکنیکهای تحلیل ایستای کد (مرور سورس کد)

    مفاهیم و تکنیکهای تحلیل پویای برنامه (پروفایلینگ)

    مفاهیم و تکنیکهای پایش کارایی نرم‌افزار (مانیتورینگ اپلیکیشن)

    برنامه نویسی بهینه

    برنامه نویسی امن

    مدیریت پیکربندی و تغییرات

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

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

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

    ابزار تست امنیت

    ابزار مانیتورینگ و پایش کارایی نرم افزار (APM)

    ابزار تست واحد و یکپارچه سازی برای سیستم های تحت Java

    ابزار تست واحد و یکپارچه سازی برای سیستم های تحت Net.

    ابزار تست واحد و یکپارچه سازی برای سیستم های تحت C و ++C

    ابزار تست واحد و یکپارچه سازی برای سیستم های تحت PHP

    ابزار مرور سورس کد برای سیستم های تحت Java

    ابزار مرور سورس کد برای سیستم های تحت Net.

    ابزار مرور سورس کد برای سیستم های تحت C و ++C

    ابزار مرور سورس کد برای سیستم های تحت PHP

    ابزار پروفایلینگ برای سیستم های تحت Java

    ابزار پروفایلینگ برای سیستم های تحت Net.

    ابزار پروفایلینگ برای سیستم های تحت C و ++C

    ابزار پروفایلینگ برای سیستم های تحت PHP

    ابزار مدیریت پیکربندی و تغییرات

    ابزار مانیتورینگ برنامه کاربردی

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

    1. فرایند تست
      1. مفاهیم پایه ای تست
      2. شیوه تحلیل ریسک
      3. شیوه برنامه ریزی تست
      4. نحوه تحلیل و طراحی تست
      5. نحوه راه اندازی محیط تست
      6. مباحث درگیر در اجرای تست
    2. مفاهیم و تکنیکهای تست کارکردی
      1. تکنیکهای مبتنی بر گراف یا فلوچارت همچون line and branch coverage
      2. تکنیکهای مبتنی بر منطق همچون logic and predicate coverage
      3. تکنیکهای مبتنی بر افراز فضای حالات همچون each choice, pair-wise, k-wise
      4. نحوه استخراج test-case از روی use-case
      5. تکنیکهای مبتنی بر state machine
      6. سایر تکنیکها (exploratory testing, ad-hoc testing, etc)
    3. مفاهیم و تکنیکهای تست کارایی (تست های بار، فشار و پایداری)
      1. تحلیل ریسكهای كارایی
      2. برنامه ریزی تست كارایی
      3. شناسایی سناریوهای تست كارایی
      4. راه اندازی محیط مناسب برای تست كارایی
      5. بررسی داده های مورد نیاز برای تست كارایی
      6. مشخص كردن معیارهای سنجش كارایی
      7. شناسایی شاخصهای كارایی سرورها و شبكه
      8. تحلیل root-cause مسائل كارایی
      9. انواع تست كارایی شامل تست پایداری، بار و فشار(Stability، Load & Stress)
      10. بررسی تاثیر انتخاب تكنولوژی تولید روی كارایی سیستم تولید شده
    4. مفاهیم و تکنیکهای تست امنیت (تست های نفود)
      1. تحلیل ریسكهای امنیت
      2. برنامه ریزی تست امنیت
      3. طراحی و اجرای تست امنیت
      4. تكنیكهای جمع آوری اطلاعات یك برنامه كاربردی( عمدتا وب سایتها)

        تست مدیریت پیكربندی (Configuration Management)

        تست منطق كاری (Business Logic)

        تست مدیریت نشست (Session Management)

        تست احراز هویت (Authentication)

        تست كنترل دسترسی (Authorization)

        تست های مربوط به اعتبارسنجی داده های وروردی (Injections، Buffer overflow)

        تست DOS

    5. مفاهیم و تکنیکهای تست واحد و یکپارچه سازی
      1. استرتژیهای طراحی و انتخاب تست واحد
      2. ویژگیهای تست واحد سیستماتیک
      3. سازماندهی تست های واحد
      4. انواع تست واحد(مبتنی بر حالت یا تعامل)
      5. الگوهای تست واحد
      6. اصول و مبانی TDD
      7. نقش Mock Object ها در تست واحد
      8. ابزارها و چارچوبهای تست واحد
    6. مفاهیم و تکنیکهای تحلیل ایستای کد (مرور سورس کد)
      1. تكنیكهای مرور و بازبینی
      2. تشریح شیوه های تشخیص خطاهابه کمک syntax and data flow checking
      3. ارتقاء كیفیت طراحی و كد از طریق مرور از ابعاد مختلف ذیل:
      4. صحت کارکرد

        كارایی

        امنیت

        قابلیت نگهداشت شامل قابلیت تغییر، قابلیت استفاده مجدد، خوانایی و قابلیت حمل

      5. انواع bug های رایج تحت بستر موردنظر و دلایل پایه ای آنها
      6. چک لیست ارزیابی کیفیت سورس کد
    7. مفاهیم و تکنیکهای تحلیل پویای برنامه (پروفایلینگ)
      1. تشخیص bad query های صورت گرفته برروی DB server
      2. تشخیص و برطرف كردن خطاهای مربوط به نشتی حافظه (memory leakage)
      3. تشخیص و برطرف كردن مشکلات مربوط به پردازشهای سنگین سیستم (high CPU usage)
      4. تشخیص و برطرف كردن بن بست احتمالی در سیستم (deadlock)
      5. تشخیص مشکلات همروندی (Concurrency)
      6. تشخیص برخی مشکلات طراحی سیستم در زمان اجرا
      7. تشخیص برخی از مشکلات کدنویسی رایج در زمان اجرا
    8. ابزار مدیریت فرایند تست
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای مدیریت تست
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای مدیریت تست
      4. تعریف نیازمندهای سیستم مورد تست در محیط ابزار یا لینک کردن نیازمندهای از قبل تعریف شده به ابزار (در صورت پشتیبانی ابزار انتخاب شده)
      5. تعریف موارد و روالهای تست سیستم در ابزار
      6. اتصال موارد تست به نیازمندهای مورد تست جهت برقراری traceability
      7. پیکربندی ابزار جهت اجرای manual و automated تست ها
      8. پیکربندی ابزار (یا لینک کردن آن به ابزار issue tracking) برای گزارش خطاهای تست
      9. مقایسه ابزار انتخاب شده با سایر ابزارهای مدیریت تست
    9. ابزار تست کارکردی
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای تست کارکردی
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای تست کارکردی
      4. نحوه record کردن test procedure ها جهت خودکارسازی آنها
      5. نحوه تولید موارد تست (test case) در ابزار
      6. نحوه parametric کردن سناریوهای تست و data binding
      7. نحوه assert کردن نتایج مورد انتظار
      8. مقایسه ابزار انتخاب شده با سایر ابزارهای تست کارکردی
    10. ابزار تست کارایی
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای تست کارایی
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای تست کارایی
      4. نحوه رکورد کردن سناریوهای تست کارایی
      5. نحوه تعریف data set و link کردن آنها به سناریوهای کارایی موردنظر
      6. مقدمه ای بر نحوه تولید دیتا و ابزارهای مربوطه
      7. نحوه ارزیابی خروجی از دید عملکردی
      8. نحوه مانیتور کردن performance counter ها در حین اجرای تست
      9. تفسیر نتایج و نمودارهای خروجی تست کارایی
      10. مقایسه ابزار انتخاب شده با سایر ابزارهای تست کارایی
    11. ابزار تست امنیت
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای تست امنیت
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای تست امنیت
      4. نحوه crawling وب سایت موردنظر
      5. پیکربندی ابزار برای اجرای تست های امنیت موردنظر
      6. نحوه تشخیص false-positive ها در گزارشات خروجی ابزار
      7. تشخیص Injection های رایج (همچون SQL/XSS Injection) به کمک ابزار
      8. نحوه fuzzy testing و بررسی استحکام سیستم در مقابل انواع داده های ورودی
      9. نحوه HTTP editing/encoding/decoding برای بررسی مشروح request/response های ترافیک شبکه
      10. مقایسه ابزار انتخاب شده با سایر ابزارهای تست امنیت
    12. ابزار تست واحد و یکپارچه سازی تحت بستر مورد نظر
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای تست واحد و یکپارچه سازی
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای تست واحد
      4. نحوه تولید test script تحت چارچوب موردنظر (مثلا JUnit برای جاوا)
      5. نحوه تولید test case طبق تکنیکهای رایج به کمک ابزار در سطح برنامه
      6. نحوه پیکربندی ابزار برای تولید تست ها
      7. نحوه پارامتریک کردن script های تست و bind کردن دیتای موردنظر به آنها
      8. نحوه اندازه گیری test coverage در ابزار تست واحد
      9. نحوه تولید mock object ها به کمک ابزار
      10. مقایسه ابزار انتخاب شده با سایر ابزارهای تست واحد
    13. ابزار مرور سورس کد تحت بستر مورد نظر
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای مرور سورس کد
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای مرور کد
      4. نحوه پیکربندی ابزار برای انجام بازبینی های مختلف
      5. نحوه انجام data flow testing به کمک ابزار (در صورت پشتیبانی ابزار انتخابی)
      6. نحوه تعریف قوانین جدید تشخص مشکلات (در صورت پشتیبانی ابزار انتخابی)
      7. تشخیص false-positive ها در گزارشات خروجی
      8. نحوه fix کردن برخی از خطاهای استخراج شده
      9. نحوه گزارش گیری های مختلف ابزار
      10. مقایسه ابزار انتخاب شده با سایر ابزارهای مرور کد
    14. ابزار پروفایلینگ تحت بستر مورد نظر
      1. نحوه نصب و راه اندازی ابزار
      2. مقدمه ای بر ابزارهای پروفایلینگ
      3. ارائه قابلیتهای عمومی ابزار انتخاب شده برای پروفایلینگ
      4. تشریح مدهای مختلف پروفایلینگ (sampling و tracing)
      5. شیوه CPU capturing
      6. شیوه Memory capturing
      7. تشخیص مشکلات deadlock به کمک ابزار
      8. تشخیص مشکلات concurrency به کمک ابزار
      9. تشخیص مشکلات کدنویسی در لایه data access به کمک ابزار
      10. مقایسه ابزار انتخاب شده با سایر ابزارهای پروفایلینگ
    15. مدیریت پیکربندی و تغییرات
      1. برنامه ریزی مدیریت پیکربندی و تغییرات
      2. تشکیل کمیته کنترل تغییرات
      3. شناسایی اقلام پیکربندی
      4. طبقه بندی و نام گذاری فراورده ها
      5. نحوه نسخه گذاری فراورده ها و ایجاد baseline
      6. کنترل تغییرات فراورده های سیستم
      7. تدوین جریان کاری تغییرات (change workflow)
      8. ممیزی فراورده ها
    16. ابزارهای مدیریت پیکربندی و تغییرات
      1. معرفی ابزارهای مناسب در زمینه مدیریت پیکربندی و تغییرات
      2. مقایسه ابزارها از دیدهای مختلف
      3. ابزار Jira به عنوان یک ابزار رایج در زمینه کنترل تغییرات
      4. ابزار SharePoint به عنوان یک ابزار رایج در زمینه مدیریت اسناد و محتوا
      5. ابزارهای Git، SVN و TFS به عنوان ابزارهای رایج در زمینه کنترل سورس کد
    17. مفاهیم و ابزارهای مانیتورینگ برنامه کاربردی (APM)
      1. مقدمه ای بر ابزارهای مانیتورینگ لایه اپلیکیشن
      2. نحوه نصب و راه اندازی ماژول های مختلف ابزار
      3. مقایسه ابزارهای مانیتورینگ
      4. ارائه شاخص های کارایی در لایه های مختلف نرم افزار
      5. معرفی شاخص های کارایی مهم وب سرور، دیتابیس سرور و سیستم عامل
      6. تشریح قابلیت های عمومی ابزارهای مانیتورینگ
      7. نحوه مانیتور کردن کاربران و نحوه استفاده آنها از سیستم
      8. تشخیص نحوه استفاده از سیستم (مرورگر، موبایل و غیره)
      9. تشخیص میزان استفاده از منابع سیستم در لایه های مختلف
      10. بررسی متریک های مختلف سنجش کارایی سیستم
      11. نحوه مانیتور کردن تراکنش های کاری
      12. نحوه راه اندازی سیستم های هشدار دهنده
      13. نحوه شناسایی خطاهای سیستم
      14. ریشه یابی نقاط کند سیستم

    لازم به ذکر است که در مورد دوره های مربوط به تضمین کیفیت تولید (یعنی تست واحد، مرور سورس کد و پروفایلینگ)، طبیعتا ابزار موردنظر بستگی به بستر و زبان مورد استفاده دارد. آموزش ابزارهای تضمین کیفیت تولید، برای اکثر بسترها و زبانهای رایج همچون ++Java، C#، C و PHP ارائه می گردد.