آزمون نرم‌افزار

مدرس: دکتر سیدحسن میریان، دکتر مهران ریواده پیش‌نیاز: برنامه‌سازی شی‌گرا (جاوا)
ترم: محل برگزاری: کلاس مجازی
زمان ارائه: دوشنبه ۱۵:۰۰ تا ۱۸:۰۰ مشاهده: دریافت لایسنس

معرفی درس

آزمون نرم‌افزار؛ از طراحی آزمون تا خودکارسازی و تضمین کیفیت

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

در این درس، با مفاهیم اساسی آزمون نرم‌افزار، انواع آزمون و جایگاه آن‌ها در فرایند توسعه آشنا می‌شوید. موضوعاتی مانند آزمون جعبه‌سیاه و جعبه‌سفید، آزمون واحد، آزمون یکپارچگی و آزمون سیستم، مدل V و معیارهای پوشش کد بررسی می‌شوند. همچنین یاد می‌گیرید چگونه موارد آزمون را طراحی کنید و با استفاده از ابزارهای برنامه‌نویسی، بخشی از فرایند آزمون را خودکار سازید. برای این منظور، ابزارهایی مانند `unittest` در پایتون و ابزارهایی مانند `pytest` یا Robot معرفی می‌شوند.

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

در پایان این درس چه توانایی‌هایی کسب می‌کنید؟

با گذراندن این درس، انتظار می‌رود بتوانید:

  • مفهوم آزمون نرم‌افزار، انواع شکست و نقش آزمون در تضمین کیفیت را توضیح دهید.
  • تفاوت آزمون‌های واحد، یکپارچگی، سیستم و پذیرش را درک کنید و با مدل V آشنا شوید.
  • آزمون‌های جعبه‌سیاه و جعبه‌سفید را از یکدیگر متمایز کنید و با معیارهای پوشش کد آشنا شوید.
  • آزمون‌های واحد را در پایتون با استفاده از ابزار `unittest` بنویسید و اجرا کنید.
  • موارد آزمون مناسب طراحی کنید و با ابزارهایی مانند `pytest` یا Robot برای خودکارسازی آزمون آشنا شوید.
  • نقش آزمون خودکار، آزمون مستمر و یکپارچگی مستمر را در فرایند توسعه نرم‌افزار درک کنید.
  • با رویکرد توسعه مبتنی بر آزمون (TDD) و کاربرد آن در توسعه و اصلاح نرم‌افزار آشنا شوید.
  • از معیارهای پوشش برای طراحی و ارزیابی مجموعه آزمون‌ها شناخت مناسبی به دست آورید.
  • اهمیت برنامه‌ریزی آزمون و تدوین نقشه‌راه آزمون را در پروژه‌های نرم‌افزاری درک کنید.
  • مفهوم آزمون رگرسیون و ضرورت آن را هنگام تغییر یا توسعه نرم‌افزار توضیح دهید.
  • از Mock و Stub برای کنترل وابستگی‌ها و آزمون اجزای نرم‌افزار آشنایی عملی به دست آورید.
  • با مفهوم تحلیل ایستای کد و کاربرد ابزارهایی مانند SonarQube در بررسی کیفیت کد آشنا شوید.

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

پیش‌نیاز

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

سرفصل‌ها

  • مفاهیم آزمون نرم‌افزار
    • مفهوم آزمون و شکست
    • روال کاری یک آزمونگر نرم‌افزار
    • انواع آزمون‌های نرم‌افزاری (آزمون پذیرش، آزمون سیستم، آزمون یکپارچگی و …)
    • مدل V
    • مفهوم پوشش کد
    • آزمون‌های جعبه‌سیاه و جعبه سفید
  • آزمون واحد
    • هدف از آزمون واحد
    • نحوه نگارش و اجرای آزمون‌های واحد در پایتون (بسته unittest)
  • خودکار ‌سازی آزمون
    • نرم‌افزار آزمون پذیر و آزمون مستمر
    • هدف از خودکارسازی آزمون
    • طراحی موارد آزمون
    • خودکارسازی آزمون‌های واحد (ابزار Robot یا Pytest)
  • آزمون در محیط‌های چابک
    • نمودار هزینه تغییر
    • یکپارچگی مستمر
    • تست‌های سیستمی در محیط‌های چابک
    • مفهوم TDD همراه با مثال‌های عملی
  • آشنایی با طراحی آزمون مبتنی بر معیار پوشش
    • نیازمندی‌های آزمون و تعریف معیار پوشش
    • نحوه استفاده از معیارهای پوشش
    • آشنایی کلی با معیارهای پوشش (افراز فضای ورودی، پوشش گراف، پوشش منطق، پوشش نحوی)
  • نگارش نقشه‌راه آزمون و برنامه‌ریزی برای آن
  • سیستم‌های در حال تغییر و آزمون رگرسیون
  • Mock‌ و Stub
    • مفهوم Mock و Stub‌ و معماری
    • پیاده‌سازی آزمون Mock
  • تحلیل ایستای کد
    • آشنایی با مفهوم تحلیل ایستای کد
    • آشنایی با ابزارهای تحلیل ایستای کد (SonarQube)

ارزیابی

  • تمرین‌های عملی هفتگی: ۵۰٪ نمره
  • آزمون‌ نهایی: ۵۰٪ نمره

منابع

  1. P. Ammann and J. Offutt. Introduction to Software Testing. Cambridge University Press, 2017.