طراحی نرم‌افزار
طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان "تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده" یا "فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد."
الگوی طراحی نرم‌افزار
در مهندسی نرم‌افزار، الگوی طراحی یک راه‌حل عمومی قابل تکرار برای مشکلات متداول در زمینه طراحی نرم‌افزار است. الگوی طراحی، یک طراحی تمام‌شده نیست که به صورت مستقیم بتواند تبدیل به کد منبع یا ماشین شود؛ بلکه، یک توضیح یا قالب برای حل یک مسئله در شرایط مختلف است. الگوها در واقع بهترین روش ممکن هستند که یک برنامه‌نویس می‌تواند در هنگام طراحی یک برنامه برای حل مشکلاتش از آن‌ها استفاده کند. الگوهای طراحی شیءگرا نوعاً نشان‌دهندهٔ روابط و تعامل‌ها بین کلاس‌ها و شیء‌ها هستند، بدون این‌که کلاس‌ها یا اشیا نهایی برنامه را مشخص کند. الگوهایی که در خود وضعیت‌های تغییرپذیر دارند، شاید مناسب زبان‌های برنامه‌نویسی تابعی نباشند. هم‌چنین، در بعضی از زبان‌ها که برای حل یک مسئله راه‌حل‌های آمادهٔ از پیش تعریف‌شده وجود دارد، استفاده از بعضی الگوها برای حل مسئلهٔ مشابه می‌تواند لازم نباشد. به همین ترتیب، الگوهای طراحی شیءگرا ممکن است برای زبان‌های غیر شیءگرا مناسب نباشند.