طراحی یک نرم‌افزاربا توجه به چه مواردی ساخته می شود؟
طراحی نرم‌افزار
طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان "تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده" یا "فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد." طراحی نرم‌افزار
طراحی نرم‌افزار فرایند پیش‌بینی و تعریف راه حل‌های نرم‌افزاری به یک یا تعدادی از مشکلات است. یکی از اجزای اصلی طراحی نرم‌افزار، نرم‌افزار مورد نیاز تجزیه و تحلیل software requirements analysis]]SRA]] است. SRA بخشی از فرایند توسعه نرم‌افزار است که مشخصات مورد استفاده در مهندسی نرم‌افزار را فهرست می‌کند. اگر نرم‌افزار به‌طور «کامل اتوماتیک» (به معنی بدون کاربر یا رابط کاربری) باشد، طراحی نرم‌افزاری ممکن است به اندازه یک فلوچارت یا متن توصیفی دنباله ای از رویدادهای برنامه‌ریزی شده ساده باشد. همچنین روش‌های نیمه استاندارد مانند زبان مدل‌سازی یکسان و مفاهیم مدل‌سازی اساسی وجود دارد. در هر صورت، بعضی مستندات این طرح معمولاً محصول طراحی است. علاوه بر این، طراحی نرم‌افزار ممکن است یک پلت فرم_مستقل(platform-independent)یا پلت فرم_مشخص(platform-specific) باشد که بسته به دسترسی به تکنولوژی مورد استفاده برای طراحی دارد. تفاوت اصلی بین تجزیه و تحلیل نرم‌افزار و طراحی نرم‌افزار این است که خروجی یک تجزیه و تحلیل نرم‌افزاری از مشکلات کوچکتر برای حل مسئله تشکیل شده‌است. علاوه بر این، تجزیه و تحلیل نباید با تفوت زیادی در میان اعضای تیم یا گروه‌های مختلف، طراحی شود. در مقابل، طراحی بر قابلیت‌ها متمرکز است و بنابراین طرح‌های متعددی برای یک مشکل مشابه می‌تواند وجود داشته باشد. بسته به محیط، طراحی اغلب متفاوت است، چه از طریق چارچوب (frameworks)های قابل اعتماد چه با الگوهای طراحی(design patterns) مناسب پیاده‌سازی شده باشد. نمونه‌های طراحی شامل سیستم‌های عملیاتی، صفحات وب، دستگاه‌های تلفن همراه یا حتی پارادایم ابری جدید است.
ایفل (زبان برنامه‌نویسی)
هدف طراحی پشت زبان ایفل، کتابخانه‌ها، و روش‌های برنامه‌نویسی است که برای فعال کردن برنامه نویسان برای ایجاد ماژول‌های نرم‌افزار قابل اعتماد، قابل استفاده مجدد. ایفل: وراثت چندگانه، genericity، پلی مورفیسم، یگدیگر، تبدیل نوع امن، و کوواریانس پارامتر پشتیبانی می‌باشد. مهم‌ترین ایفل سهم به مهندسی نرم‌افزار طراحی شده توسط قرارداد (DbC)، که در آن اظهارات، پیش شرط، شرایط ارسال، و ویژگی‌های کلاس برای کمک به اطمینان از صحت برنامه بدون فدا کردن بهره‌وری است. توسعه نرم‌افزاری چابک
بهتر است که همیشه مستندات کم حجمی از منطق و ساختار برنامه داشته باشید و آن را به روز نمایید. البته آن‌ها باید کوتاه و برجسته باشند. کوتاه به این معنی که ۱۰ تا ۲۰ صفحه بیشتر نباشد و برجسته به این معنی که طراحی کلی و ساختار سطح بالای سیستم را بیان نمایند. طراحی نرم‌افزار
در طراحی یک قطعه نرم‌افزاری، جنبه‌های بسیاری وجود دارد. اهمیت هر بررسی باید نشان دهنده اهداف و انتظارات برنامه‌نویسی برای دیدار باشد. برخی از این جنبه‌ها عبارت‌ند از: نقشه نرم‌افزاری
نقشه‌های نرم‌افزاری می‌توانند اطلاعات مربوط به توسعه نرم‌افزار، کیفیت نرم‌افزار و دینامیک سیستم را با نقشه‌برداری از این که اطلاعات بر روی متغیرهای تصویری عناصر نقشه درخت مانند اندازه مساحت، ارتفاع، رنگ یا بافت را ترکیب کنند. آن‌ها می‌توانند به صورت منظم مشخص شوند، به‌طور خودکار تولید شوند و توسط الگوها سازماندهی شوند. مهندسی نرم‌افزار به کمک کامپیوتر
در واقع ابزارهایی مانند CASE جهت کمک به مهندسان نرم‌افزار در طول چرخهٔ عمر نرم‌افزار ایجاد شده‌اند تا به تحلیل، طراحی، برنامه‌نویسی، آزمون و تست، نگهداری و ... نرم‌افزار کمک کنند.طراحی سیستم اطلاعاتی و پروژه بهینه‌سازی سیستم (ISDOS) در سال ۱۹۶۸ در دانشگاه میشیگان آغاز شد. فرانک گری
نکته بسیار جالب در روند طراحی‌گری در استفاده از رایانه در این روند است. بر خلاف سایر معماران که از نرم‌افزارهای معمول دوبعدی و سه بعدی مانند CAD و ۳DsMAX برای کارهای خود استفاده می‌کنندگری از نرم‌افزار کاتیا که یک نرم‌افزار مربوط به طراحی جامدات است استفاده کرد. این نرم‌افزار بیشتر برای طراحی خودرو و هواپیما و محاسبات پیچیده بدنه‌های مختلف کاربرد دارد و هماهنگی بسیار عالی با سایر نرم‌افزارها دارد. کاتیا سطوح را تحلیل و بر اساس محدودیت سازه‌ای، کارکردی و اقتصادی پروژه آن را تصحیح می‌کرد. داده‌های عددی که به این ترتیب بدست می‌آمدند بار دیگر بر روی یک مدل پیاده می‌شدند تا حجمها کنترل شوند و در صورت لزوم تغییر کنند. این رفت و برگشت بین مدل‌های مطالعاتی و داده‌های دیجیتال بنیاد شکلی پروژه را به وجود می‌آورند. سپس از داده‌های کامپیوتر برای تهیه پلانهای ساخت موزه استفاده شد. معماری رایانه
سازمان رایانه به بهینه سازی محصولات مبتنی بر عملکرد کمک می‌کند. به عنوان مثال، مهندسان نرم افزار باید قدرت پردازش پردازنده‌ها را بدانند. شاید برای دستیابی به بیشترین عملکرد با کمترین قیمت، نیاز به بهینه سازی نرم افزار داشته باشند. این امر می‌تواند به تجزیه و تحلیل کاملاً دقیق سازمان رایانه نیاز داشته باشد. برای مثال، در کارت SD ، ممکن است لازم باشد طراحان کارت را مرتب کنند تا بیشترین داده‌ها به سریع‌ترین شکل پردازش شوند. مهندسی نرم‌افزار
تست نرم‌افزار یکی از بخش‌های مهم و تأثیرگذار در مهندسی نرم‌افزار است. بالابردن کیفیت نرم‌افزارهای تولیدی بدون توجه به فرایند تست و تضمین کیفیت نرم‌افزار ممکن نخواهد بود. امروزه پیشگامان صنعت نرم‌افزار به این نتیجه رسیدند که توسعه و تست نرم‌افزار باید به صورت موازی با هم پیش روند. این امر سبب می‌شود که همراه با توسعه نرم‌افزار کیفی آن نیز تضمین شود. توجه به تست نرم‌افزار نکته متمایزکننده شرکت‌های موفق آی تی و شرکت‌های شکست خورده‌است. توسعه نرم‌افزاری چابک
مسیر یک پروژهٔ نرم‌افزاری نمی‌تواند برای بازه زمانی طولانی برنامه‌ریزی شود. اولاً احتمالاً محیط تغییر می‌کند و باعث تغییر در نیازمندی‌ها می‌شود. ثانیاً همین که سیستم شروع به کار کند مشتریان نیازمندی‌های خود را تغییر می‌دهند؛ بنابراین اگر بدانیم که نیازها چیست و مطمئن شویم که تغییر نمی‌کنند، قادر به برآورد مناسب خواهیم بود، که این شرایط بعید است. منطق فازی
برای هر دستور کار و خواسته عمل‌کرد مکانیکی، الکترومغناطیسی یا نرم‌افزاری و غیره که برای آن فرمول یا دستورالعمل مطلق و شفاف ریاضی وجود نداشته باشد و به‌ویژه زمانی که دستور کار به‌وسیلهٔ جملات انشاء شده باشد، نرم‌افزار متکی به منطق فازی راه‌گشا و کارآمد است. مهندسی نرم‌افزار بر پایه مؤلفه
مهندسی نرم‌افزار مبتنی بر مؤلفه با کوته‌نوشت CBSE که به آن توسعه مبتنی بر مؤلفه با کوته‌نوشت CBD نیز می‌گویند، شاخه‌ای از مهندسی نرم‌افزار است که به بررسی ترتیب جداسازی و تشخیص پیکرپارها براساس ارتباط عملکرد گسترده آن‌ها در محدوده موجود در سراسر یک سیستم نرم‌افزار می‌پردازد . این شیوه برای هر دو روش ساخت نرم‌افزار در کوتاه مدت و بلند مدت سودمند است و همین‌طور برای سازمان‌ها یا موسساتی که بر روی آن سرمایه‌گذاری کرده‌اند. منطق در علوم کامپیوتر
یکی دیگر از عمده زمینه های تحقیق برای نظریه منطق، مهندسی نرم‌افزار بود. پروژه های تحقیقاتی مانند دستیار نرم‌افزار دانش بنیان و برنامه های کارآموزی به برنامه نویسان از نظریه منطقی برای تایید درستی مشخصه نرم‌افزار استفاده کردند. همچنین از آنها برای تبدیل مشخصات به کد کارآمد در سیستم عامل های گوناگون و اثبات برابری میان پیاده سازی و مشخصات استفاده کردند. این روش رسمی مبتنی بر تبدیل، اغلب بسیار پر زحمت تر از توسعه نرم‌افزار سنتی است. اگر چه، در حوزه های خاص با فرم گرایی مناسب و الگوهایی با قابلیت استفاده مجدد، این روش برای محصولات تجاری ثابت شده است. دامنه های مناسب معمولاً مواردی از قبیل سیستم های تسلیحاتی، سیستم های امنیتی و سیستم های مالی درلحظه است که خرابی این سیستم هزینه های انسانی یا مالی بیش از حد دارد. نمونه ای از چنین دامنه ای طراحی یکپارچه مقیاس بزرگ است - فرایندیی برای طراحی تراشه های مورد استفاده در پردازنده ها و بقیه ی اجزای مهم دستگاه های دیجیتال. خطا در یک تراشه فاجعه بار است. بر خلاف نرم‌افزار، تراشه ها نمی‌توانند تعمیر یا به روز رسانی شوند. در نتیجه، توجیه تجاری برای استفاده از روش های رسمی برای اثبات مطابقت پیاده سازی و مشخصات وجود دارد. تخمین هزینه پروژه‌های نرم‌افزاری
منظور ازSCE ، برآورد هزینه و زمان موردنیاز برای توسعه نرم‌افزار پیش از شروع پروژه می‌باشد که تا پایان تولید و توسعه سیستم ادامه دارد. SCE برای تولید سیستم اطلاعاتی، یکی از دغدغه‌های مهم مدیریت پروژه، تلقی می‌شود. الگوهای SCE که در مراحل اولیه ساخت پروژه، با حداقل اطلاعات موجود از پروژه، هزینه ساخت سیستم را تخمین می‌زنند، سودمند و موردنیاز هستند. روش تخمین هزینه مناسب، امکان کنترل مؤثر زمان و هزینه ساخت سیستم را فراهم می‌نماید. یک پروژه نرم‌افزاری به تدریج تکامل می یابد و به این تر تیب نمی توان یک برآورد قطعی و روشن برای نرم‌افزارها داشت. در حال حاضر نرم‌افزارها و مدل‌های برآوردی وجود دارند که به جای یک برآورد نقطه‌ای برآورد حدودی انجام می دهند و به این ترتیب با متدهای جدید تولید نرم‌افزار هم‌سو می‌شود. ولی برآورد پروژه نرم‌افزاری را می‌توان به یک سری مراحل سیستماتیک تبدیل کرد که برآوردهایی با ریسک قابل قبول فراهم کند . روش‌های الگوریتمی مطرح شده برای SCE از مدل‌های ریاضی برای تخمین هزینه پروژه استفاده می‌کنند. هر مدل الگوریتمی به صورت تابعی از فاکتورهای هزینه تعریف می‌شود. روش‌های الگوریتمی موجود در دو جنبه با یکدیگر متفاوت هستند: مشهورترین و مستندترین مدل الگوریتمی مدل کوکومو می‌باشد که توسط آقای بوهم در سال 1981 مطرح شد. مدل کوکومو برای SCE و زمان مورد نیاز برای توسعه سیستم‌ها استفاده می‌شود. مهندسی نرم‌افزار بر پایه مؤلفه
نظریهٔ «نرم‌افزار باید پیکرپارای باشد از پیکرپارهای از پیش‌ساخته شده» برای اولین بار در دستور داگلاس مکتوری در کنفرانس ناتو که موضوع آن مهندسی نرم‌افزار بود در سال ۱۹۶۸ به اسم تولید انبوه نرم‌افزار به چاپ رسید. این کنفرانس برای مقابله با مثلاً بحران نرم‌افزاری برگزار شد. فرمان و فیلترهای گنجایشی ثانویه او در سیستم‌عامل یونیکس اولین اجرا در پیدایش این نظر بود. مفهوم مدرن پیکرپار نرم‌افزار به‌طور گسترده با براد کوکس که آن‌ها را ای‌سی‌های نرم‌افزاری می‌نامید و شروع به تولید و فروش آن‌ها با اختراع برنامه ابجکتیو-سی کرد ارائه شد. آی‌بی‌ام در اوایل ۱۹۹۰ با سیستم مدل شی‌گرایی پیشرو این زمینه شد. بعضی‌ها می‌گویند که مایکروسافت با گسترش واقعی پیکرپارهای نرم‌افزاری با اوال‌ای و کام هموار کرده‌است که امروزه چندین مدل از پیکرپارهای نرم‌افزاری موفق موجود است. شبکه نرم‌افزارمحور
شبکه نرم‌افزار محور یک معماری پویا، مدیریت پذیر، مقرون به صرفه و انطباق پذیر می‌باشد که به دنبال مناسب بودن برای برنامه‌های کاربردی با پهنای باند بالا و پویای امروزی می‌باشد. پروتکل اوپن فلو عنصر اصلی معماری شبکه نرم‌افزاری تعریف شده می‌باشد. معماری چنین شبکه‌ای به صورت زیر است: مهندسی نرم‌افزار بر پایه مؤلفه
بازمصرفی (Reusability) یک ویژگی مهم از بالا بودن کیفیت پیکرپارهای نرم‌افزاری است. یک پیکرپار نرم‌افزاری باید به صورتی طراحی و پیاده‌سازی بشود که بتوان از آن در برنامه‌های مختلف به تعداد زیاد مجدداً استفاده کرد و به زبان معمول باید چندبار مصرف باشد. توسعه نرم‌افزار
در سالهای اخیر با رشد نیاز به تولید نرم‌افزارهای تجاری توسعه نرم‌افزار به بحثی مهم تبدیل شده‌است و روش‌های گوناگونی در قالب‌های مختلف برای تولید نرم‌افزارها بر مبنای نیازهای کاربران، مشخصات کلی سیستم، شرایط مدیریتی و اقتصادی، زمان‌بندی و سطح کیفی به وجود آمده‌اند. ده فرمان اخلاق رایانه‌ای
توضیح: نرم‌افزارهایی که توسط یک توسعه دهنده نرم‌افزار توسعه می‌یابند، دارایی او هستند. اگر او با یک سازمان کار می‌کند، آن‌ها دارایی سازمان هستند. کپی و انتشار آنها به نام خود، غیراخلاقی است. این امر هر کار خلاقانه، مثل برنامه‌نویسی یا طراحی را شامل می‌شود. ایجاد مالکیت بر کاری که متعلق به شما نیست از نظر اخلاقی نادرست است. انتقال نرم‌افزار
نرم‌افزاری را که هزینه سازگار کردن آن از سیستمی به سیستم دیگر کمتر از هزینه دوباره‌نویسی آن از آغاز باشد نرم‌افزار قابل حمل می‌نامند. کم هزینه تر بودن سازگار کردن بستگی به پیاده‌سازی آن دارد. یعنی درهنگام پیاده‌سازی قابل حمل بودن چقدر مورد توجه قرار گرفته و نرم‌افزار استاندارد نوشته شده باشد. توسعه نرم‌افزاری چابک
اخیراً موفقیت‌ها، چالش‌ها و محدودیت‌هایی که در انطباق با متدهای چابک در یک سازمان بزرگ مشاهده می‌شوند، مستندسازی شده‌اند. در شرایط برون‌سپاری توسعهٔ چابک، Michael Hckett، معاون رئیس شرکت LogiGear گفته‌است «یک تیم دورکار... باید این موارد را داشته باشد: تخصص، تجربه، مهارت‌های ارتباطی خوب، تفاهم بین فرهنگ‌ها، اعتماد و تفاهم بین اعضا، گروه‌ها و با یکدیگر.». متدهای چابک به‌طور گسترده برای توسعهٔ محصولات نرم‌افزاری به کار رفته‌اند، بعضی از آن‌ها نیز از خصوصیات مشخصی از نرم‌افزار، مانند فناوری‌های موضوع استفاده می‌کنند. اگرچه این فناوری‌ها می‌توانند برای محصولات غیر نرم‌افزاری (مانند کامپیوترها، وسایل نقلیهٔ موتوری، وسایل پزشکی، خوراک و پوشاک) نیز به کار گرفته شوند. همچنین تحلیل ریسک می‌تواند برای انتخاب بین متدهای انطباقی (چابک یا ارزش‌محور) و پیشگویانه (برنامه‌محور) استفاده شود. Barry Boehm و Richard Turner می‌گویند که هر سوی این زنجیره پایهٔ اصلی (home ground) خاص خود را دارد، که به شرح زیر است: برنامه‌نویسی مفرط
برای محقق شدن سادگی در تولید نرم‌افزار تنها برای نیازهای فعلی مرحلهٔ طراحی صورت می‌گیرد و نیازهای آینده در طراحی در نظر گرفته نمی‌شود، با این هدف که طراحی تا جای ممکن ساده شود و پیاده‌سازی آن هر چه آسانتر گردد. معماری نرم‌افزار
معماری نرم‌افزار یعنی ساختار و سازمان یک سیستم نرم‌افزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز می‌باشد. در واقع اجزاء را در حوزه‌های مرتبط به هم گروه‌بندی می‌کند. دیگر حوزه‌های مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز می‌شوند. مهندسی نرم‌افزار
مهم‌ترین شاخص در مهندسی نرم‌افزار تولید (طراحی و پیاده‌سازی) نرم‌افزار با کیفیت متناسب با «نیازهای مشتری» است. مهندسی نرم‌افزار
مهندسی نرم‌افزار عبارت است از کاربرد مهندسی برای طراحی نرم‌افزار، توسعه، پیاده‌سازی و نگهداری از نرم‌افزار در یک روش سیستماتیک. نرم‌افزار سازمانی
نرم‌افزار سازمانی مجموعه‌ای از برنامه‌های رایانه‌ای را توصیف می‌کند که دارای ویژگی تجاری مشترکی هستند؛ ابزارهایی برای مدلسازی چگونگی کارکرد یک سازمان و نیز ابزارهای توسعه‌ایی برای ساخت برنامه‌هایی بی‌همتا برای آن سازمان. این نرم‌افزار به حل مشکلات سازمانی می‌پردازد(به جای مشکلات دپارتمانی). همچنین این نرم‌افزارها با استفاده از معماری نرم‌افزار سازمانی نوشته می‌شوند. نرم‌افزارهای سطح سازمانی با هدف پیشرفت و بهبود محصولات سازمانی برای پشتیبانی مطنقی از کارهاست. مستندسازی نرم‌افزار
مستندسازی نیازمندی‌ها به تشریح و توضیح اینکه یک نرم‌افزار خاص چه می‌کند یا از چه عملکردهایی برخوردار است می‌پردازد. این تشریح در طول توسعه نرم‌افزار مورد استفاده قرار می‌گیرد تا شاخصی باشد برای آنچه نرم‌افزار انجام می‌دهد یا باید انجام بدهد. همچنین این مستندسازی به عنوان یک توافقنامه یا اساسی برای توافقنامه بر آنچه که یک نرم‌افزار انجام می‌دهد یا باید انجام دهد مورد استفاده قرار می‌گیرد. نیازمندی‌ها توسط تمام کسانی که در تولید نرم‌افزار دست‌اندرکار بوده‌اند تولید و مصرف می‌گردد، که تعدادی از آن‌ها عبارتند از: کاربران نهایی، مشتریان، مدیران محصول، مدیران پروژه، فروش، بازاریابی، معماران نرم‌افزار، مهندسین قابلیت مصرف، طراحان تعامل، توسعه‌دهندگان و سنجش‌گران؛ بنابراین، مستندسازی محصول اهداف مختلف و فراوانی را دنبال می‌کند. نیازمندی‌ها به روش‌های گوناگونی ارائه می‌گردد. [نیازمندی]ها می‌توانند به روش: شبه‌هدف (مثلا [محیط کاری توزیع‌شده])، [نزدیک به طراحی] (مثلا ، builds می‌توان با راست‌کلیک کردن بر روی یک [فایل تنظیمات|فایل کانفیگیوریشن] و انتخاب گزینه «build» شروع گردد) یا هر روش دیگری ارائه شوند. آن‌ها همچنین می‌توانند به عنوان یک بیانیه به زبان طبیعی، اَشکال ، فرمول‌های ریاضی و ترکیبی از همه آن‌ها مشخص گردد. تنوع و پیچیدگی مستندسازی نیازمندی‌ها آن را تبدیل به چالشی حتمی نموده‌است. ممکن است نیازمندی‌ها تلویحی بوده و به‌سختی پیدا شود. درک این مسئله که هنگام مستندسازی نیازمندی‌ها تا چه اندازه باید پیش برویم و چه میزان را برای تیم‌های مستندسازی دیگر مانند مستندسازان طراحی و مستندسازان معماری واگذار نماییم بسیار دشوار است و دشوار تر از آن، پیاده‌سازی این مستند است بگونه‌ای که گسترهٔ مخاطبان آن که از طراحان و معماران سیستم تا ذینفعان را در بر می‌گیرد را اقناع کند. مستندسازی نیازمندی‌ها معمولا ناتمام است (یا حتا وجود ندارد). بدون مستندسازی نیازمندی‌ها، تغییرات نرم‌افزاری دشوارتر بوده و به تبع خطای بیشتر (کیفیت نرم‌افزاری کاهش‌یافته) و زمان بیشتری (پرهزینه‌تر) را بر پیاده سازان تحمیل خواهد کرد. اهمیت مستندسازی نیازمندی‌ها رابطه مستقیم با پیچیدگی محصول، تأثیر محصول، و امید به زندگی نرم‌افزار است. اگر نرم‌افزار بسیار پیچیده باشد یا توسط تعداد زیادی از افراد ساخته شده باشد، مستندسازی نیازمندی‌ها کمک می‌کند تا با آنچه که قصد داریم به آن برسیم بهتر ارتباط برقرار کنیم. به عبارت دیگر دورنمای بهتری از محصول نهایی خود داشته باشیم. اگر نرم‌افزار برای امنی تهدید باشد یا تأثیرات منفی برای زندگی بشر داشته باشد (برای مثال، سیستم‌های انرژی هسته‌ای، تجهیزات پزشکی)، مستندسازی نیازمندی‌های رسمی‌تری مورد نیاز خواهد بود. اگر بنابراین باشد که نرم‌افزار تنها یک یا دو ماه عمر کند (برای مثال، اپلیکیشن موبایلی که تنها برای یک کمپین خاص ساخته شده‌است)، به مستندسازی بسیار کمتری نیاز خواهد بود. اگر قرار است یک نرم‌افزار نسخه اولیه باشد که بعدتر نسخه‌های دیگری بر اساس آن ساخته شوند، مستندسازی نیازمندی‌ها در زمان مدیریت تغییر نرم‌افزار و تأیید اینکه هیچ چیزی در نرم‌افزار در زمان تعدیل شکسته نشده‌است، مفید خواهد بود. به‌طور سنتی، نیازمندی‌های نرم‌افزار در اسناد نیازمندی‌ها مشخص می‌گردند (برای مثال، کاربرد اپلیکیشن‌های پردازش واژه و اپلیکیشن‌های spreadsheet). برای مدیریت پیچیدگی روزافزون و ذات متغیر مستندسازی نیازمندی‌ها (و به‌طور کلی، مستندسازی نرم‌افزار)، سیستم‌های دیتابیس‌محور و ابزار مدیریت نیازمندی‌ها مبتنی بر اهداف خاص به وجود آمده‌اند که حامیان فراوانی دارند. ساخت (نرم‌افزار)
در توسعه نرم‌افزار، ساخت ابزاری برای ساختن اتوماتیک فایلهای اجرایی از کد منبع است. فایلی که Makefile(سیسیتم یونیکسی) خوانده می‌شود روند کامپایل قطعات پروژه را بر اساس پیش‌نیازهای آن معلوم می‌کند. اگر چه ابزارهای بسیار زیادی برای توسعه مداوم و اجرا کردن تست‌ها در محیط‌های برنامه‌نویسی موجود است، اما MakeFile به صورت گسترده و مخصوصاً در سیستم‌های مبتنی بر یونیکس (مانند ubuntu ,kubuntu,deepin)استفاده می‌شود. ارزیابی ریسک
- نرم‌افزارهایی که در داخل سازمان تولید شده و در راستای مأموریت و فعالیت‌های سازمان مورد استفاده قرار می‌گیرند. - نرم‌افزارهایی که در خارج از سازمان تهیه شده و در راستای مأموریت و فعالیت‌های سازمان مورد استفاده قرار می‌گیرند مانند سیستم‌های اتوماسیون اداری، نرم‌افزارهای مالی، انبارداری و ... - نرم‌افزارهای معمول وموجود در بازار که برای انجام امور عادی و روزمره مورد استفاده قرار می‌گیرند مانند نرم‌افزارهای تایپ و صفحه گسترده، نقشه کشی و ... . - سایر موارد. مهندسی نرم‌افزار بر پایه مؤلفه
همانند یک قاعده سرانگشتی می‌توان گفت که برای مهندسی جایگزینی پیکرپارها، پیکرپار B می‌تواند بلافاصله جایگزین پیکرپار A شود، اگر که پیکرپار B حداقل‌های پیکرپار A را مهیا کند، و اینکه بیش از چیزهایی (از قبیل داده‌های ورودی) که پیکرپار A استفاده می‌کرد برای انجام عمل خود از مورد اضافه دیگری استفاده نکند. الگوی طراحی نرم‌افزار
الگوهای طراحی می‌توانند سرعت فرایند توسعهٔ نرم‌افزار را با فراهم آوردن الگوهای توسعهٔ اثبات‌شده و مورد آزمون قرار گرفته افزایش دهند. طراحی نتیجه‌بخش نرم‌افزار نیازمند در نظر گرفتن پیامدهایی است که ممکن است هنوز در پیاده‌سازی قابل رؤیت نباشند، اما بعدها خود را نشان خواهند داد. استفاده از الگوهای طراحی کمک می‌کند تا از بروز خطاهای کوچک که ممکن است مشکلات بزرگی را ایجاد کنند، جلوگیری شود و علاوه بر آن، خوانایی کد را برای کدنویسان و معمارانی که با الگوها آشنا هستند، افزایش می‌دهد. الگوی طراحی نرم‌افزار
برای دست‌یافتن به انعطاف‌پذیری در نرم‌افزار، الگوهای طراحی اغلب اعمال را به صورت غیرمستقیم انجام می‌دهند. این کار در شرایطی ممکن است طراحی حاصل را پیچیده کند و باعث افت کارایی برنامه شود. کیفیت نرم‌افزار
ساختار ، طبقه بندی و اصطلاحات ویژگی ها و معیارهای قابل استفاده برای مدیریت کیفیت نرم‌افزار از دو مدل ISO 9126-3 و ISO / IEC 25000: 2005 گرفته شده است. تمرکز اصلی روی کیفیت ساختاری داخلی است. زیر شاخه ها برای رسیدگی به موارد خاص مانند معماری برنامه کاربردی تجاری و خصوصیات فنی مانند دسترسی به داده ها و دستکاری ها داده ها ایجاد شده اند. معماری رایانه
مانند سایر معماری‌ها، هنر، تعیین نیازهای کاربر از یک سازه و سپس طراحی آن برای رفع نیازها تا حد ممکن با توجه به محدودیت‌های اقتصادی و فناوری است. " برنامه‌نویسی رایانه‌ای
قدم اول در فرایند توسعه بیشتر نرم‌افزارها به شکل معمول شامل بررسی نیازمندی‌ها، سپس آزمایش برای تشخیص الگوی متغیرها، اجرا و سپس حذف خرابی‌ها (اشکال زدایی) است. راه‌های مختلفی برای رسیدن به هر کدام از این وظایف وجود دارند. یک راه پرطرفدار برای تحلیل نیازمندی‌ها تحلیل مورد کاربردی است. بسیاری از برنامه نویسان از شکل توسعه چابک نرم‌افزاری استفاده می‌کنند؛ در این روش مراحل مختلف توسعه نرم‌افزار به شکل چرخه‌های کوتاه با هم ترکیب می‌شوند به‌طوری‌که هر کدام از این چرخه‌ها فقط چند هفته طول بکشند. این در مقابل روش معمول است که ممکن است چند سال زمان ببرد. روش‌های خیلی زیادی برای روند توسعه برنامه‌ها وجود دارند. نرم‌افزار آزاد
طبق تعریف نرم‌افزار آزاد توسط بنیاد نرم‌افزارهای آزاد، هر نرم‌افزاری که آزادی‌های زیر را برای کاربرانش فراهم کند به عنوان یک نرم‌افزار آزاد شناخته می‌شود: در ابتدا فقط سه آزادی وجود داشت که از آزادی یکم شروع می‌شد و به آزادی سوم ختم می‌شد اما بعدها این مسئله مهم شد که بدون اجازه اجرای نرم‌افزار عملاً رسیدن به آزادی‌های دیگر ممکن نیست، پس آزادی صفرم یا آزادی اجرا به این شرایط اضافه شد. برنامه‌نویسی مفرط
طراحی در برنامه‌سازی مفرط از اصل سادگی تبعیت می‌کند و یک طراحی ساده همواره بر یک طراحی پیچیده اولویت دارد. طراحی دربرگیرندهٔ راهنمایی‌هایی برای نحوهٔ پیاده‌سازی داستان‌های کاربری است. در برنامه‌سازی مفرط طراحی کارایی‌های بیشتر از نیاز نیز مذموم است. امنیت سیستم نرم‌افزار
در ابتدا تجزیه و تحلیل خطرهای عملکردی (FHA) اغلب به موازات یا به عنوان بخشی از تجزیه و تحلیل عملکرد مهندسی سیستم (برای تعیین توابع ایمنی-بحرانی (SCF) سیستم برای تجزیه و تحلیل بیشتر و بازبینی) به کار برده شدند. ایمنی سیستم نرم‌افزار به‌طور مستقیم به جنبه‌های مهم طراحی و ویژگی‌های ایمنی در نرم‌افزار و قابلیت سیستم ارتباط دارد، در حالیکه ویژگی‌های کیفی نرم‌افزار از لحاظ ذاتی متفاوت هستند و نیازمند بررسی دقیق استاندارد و دقت توسعه است. سطح اطمینان توسعه (DAL) و سطح دقت مرتبط (LOR) یک رویکرد درجه‌بندی شده به کیفیت نرم‌افزار و تضمین طراحی نرم‌افزار به عنوان پیش نیاز است که یک فرایند مناسب نرم‌افزار برای اطمینان بوسیله آن دنبال می‌شود. مفاهیم LOR و استانداردهایی مانند DO-178C جایگزین ایمنی نرم‌افزار نمی‌شوند. ایمنی نرم‌افزار هر IEEE STD-1228 و MIL-STD-882E بر الزامات ایمنی صریح و حتمی متمرکز شده و با استفاده از رویکردهای عملکردی از تجزیه و تحلیل الزامات ایمنی و دیدگاه تست تأیید می‌شود. تجزیه و تحلیل خطر ایمنی نرم‌افزار مورد نیاز برای سیستم‌های پیچیده تر که در آن نرم‌افزار توابع بحرانی را به‌طور کلی کنترل می‌کند در دسته‌های ترتیبی زیر هستند و در مرحله ای به عنوان بخشی از ایمنی سیستم یا فرایند مهندسی ایمنی انجام می‌شود: تجزیه و تحلیل الزامات ایمنی نرم‌افزار؛ تجزیه و تحلیل طراحی ایمنی نرم‌افزار (سطح بالا، طراحی دقیق و در سطح کد)؛ تجزیه و تحلیل آزمون ایمنی نرم‌افزار و تجزیه و تحلیل تغییر ایمنی نرم‌افزار. هنگامی که این تجزیه و تحلیل عملکردی ایمنی نرم‌افزار تکمیل می‌شود، تیم مهندسی نرم‌افزار می‌داند در هنگام طراحی در ویژگی‌های ایمنی نرم‌افزار برای اطمینان از عملکرد صحیح و شناسایی خطاها، خرابی‌ها، کاستی‌ها و پیاده‌سازی تعدادی از استراتژی‌های کاهش ریسک برای کنترل خطرات، کجا بر ایمنی تأکید کند و بر چه موضوعات عملکردی، مسیرهای عملکردی، دامنه‌ها و مرزهایی تمرکز کند. فناوری‌های امنیت نرم‌افزار و فناوری‌های مختلف محافظت از نرم‌افزار شبیه به ویژگی‌های ایمنی نرم‌افزار در طراحی برای کاهش انواع آسیب‌پذیری‌ها و خطرات تهدید است. نرم‌افزار تعیین‌کننده در طراحی بوسیلهٔ بررسی رفتار درست و قابل پیش‌بینی در سطح سیستم، مطلوب است.این مقاله شامل مواد دامنه عمومی از ادبیات دولت ایالات متحده "مشترک سیستم ایمنی نرم‌افزار سیستم کمیته" نرم‌افزار سیستم مدیریت ایمنی "یک روش فنی و مدیریت تیمی" این سند در اصل از سمت وب به دست آمده " link|date=May 2018 |bot=InternetArchiveBot |fix-attempted=yes}} http://www.monmouth.army.mil/cecom / ایمنی / sys_service /٪ 5B٪ 5D ". که این پایگاه در سال ۲۰۱۱ بسته شده‌است. یک PDF از این سند در https://web.archive.org/web/20171013125128/http://www.system-safety.org/Documents/Software_System_Safety_Handbook.pdf موجود است 2.15 مگابایت فرایند توسعه نرم‌افزار
مستندسازی در تمام مراحل پروژه چون طراحی داخلی نرم‌افزار برای تعیین اهداف سیستم، نگهداری آینده و ارتقاء و بهبود سامانه هرچند پروژه پایان یافته باشد انجام می‌شود. همچنین ممکن است این مستندسازی شامل نوشتن ساختار تکه‌های برنامه ظاهر برنامه کاربردی داخلی و خارجی هم باشند. این مطلب خیلی مهم است که همه چیز پروژه مستندسازی شود. مهندسی نرم‌افزار بر پایه مؤلفه
این که بتوانید پیکرپارهای بازمصرف (Reusable) درست کنید نیاز به تلاش‌های قابل توجه و داشتن اطلاعات کافی برای نوشتن یک پیکرپار دارد. پیکرپارها برای استفاده به موارد زیر نیاز دارند: کیفیت نرم‌افزار
اندازه گیری کیفیت نرم‌افزار درواقع بررسی این است که نرم‌افزار تا چه میزان خصوصیات مورد انتظار را دارد . این امر می تواند از طریق روش های کیفی یا کمی یا ترکیبی از هر دو انجام شود. در هر دو مورد ، برای هر خصوصیت مطلوب ، مجموعه ای از ویژگی های قابل اندازه گیری وجود دارد که وجود آنها در یک قطعه نرم‌افزار یا سیستم منجر به وجود ویژگی مورد نظر می شوند . به عنوان مثال ، یک ویژگی مرتبط با قابلیت حمل ، تعداد عبارات وابسته به هدف در یک برنامه است. به طور دقیق تر ، با استفاده از رویکرد استقرار عملکرد کیفیت ، این ویژگی های قابل اندازه گیری "چگونگی" هایی هستند که باید اجرا شوند تا بتوانند "آنچه را" در تعریف کیفیت نرم‌افزار بالا را فعال کنید. الگوی طراحی نرم‌افزار
در مهندسی نرم‌افزار، الگوی طراحی یک راه‌حل عمومی قابل تکرار برای مشکلات متداول در زمینه طراحی نرم‌افزار است. الگوی طراحی، یک طراحی تمام‌شده نیست که به صورت مستقیم بتواند تبدیل به کد منبع یا ماشین شود؛ بلکه، یک توضیح یا قالب برای حل یک مسئله در شرایط مختلف است. الگوها در واقع بهترین روش ممکن هستند که یک برنامه‌نویس می‌تواند در هنگام طراحی یک برنامه برای حل مشکلاتش از آن‌ها استفاده کند. الگوهای طراحی شیءگرا نوعاً نشان‌دهندهٔ روابط و تعامل‌ها بین کلاس‌ها و شیء‌ها هستند، بدون این‌که کلاس‌ها یا اشیا نهایی برنامه را مشخص کند. الگوهایی که در خود وضعیت‌های تغییرپذیر دارند، شاید مناسب زبان‌های برنامه‌نویسی تابعی نباشند. هم‌چنین، در بعضی از زبان‌ها که برای حل یک مسئله راه‌حل‌های آمادهٔ از پیش تعریف‌شده وجود دارد، استفاده از بعضی الگوها برای حل مسئلهٔ مشابه می‌تواند لازم نباشد. به همین ترتیب، الگوهای طراحی شیءگرا ممکن است برای زبان‌های غیر شیءگرا مناسب نباشند. نیازمندی‌های نرم‌افزار
نیازمندی‌های نرم‌افزار یک رشته در مهندسی نرم‌افزار می‌باشد که به نیازهای ذینفعان که توسط نرم‌افزار باید حل شود، می‌پردازد. در واژه نامه استاندارد مهندسی نرم‌افزار IEEE استاندارد نیازمندی‌ها به صورت زیر تعریف می‌شود: فعالیت‌های مربوط به کار با نیازمندی‌های نرم‌افزار می‌تواند به طور گسترده به مراحل استخراج و تحلیل مشخصات و مدیریت شکسته شود. سالید (طراحی شیءگرا)
سالید (تک وظیفه‌ای، باز ـ بسته، جایگزینی لیسکُوْ، تجزیهٔ رابط، وارونگیِ وابستگی) یک سرواژه یادیار است که توسط مایکل فیدر برای اشاره به «پنج اصل اول» رابرت سی مارتین در اوایل دههٔ ۲۰۰۰، معرفی شد. این یادیار مخفف پنج اصل اساسی برنامه‌نویسی و طراحی شیءگرا می‌باشد. وقتی این اصول با هم در طراحی و پیاده‌سازی یک برنامه اعمال می‌شوند، به احتمال قریب به یقین آن سیستم قابلیت این را خواهد داشت که به آسانی قابل توسعه‌پذیری و نگهداری باشد. در حقیقت اصول سالید، دستورالعمل‌هایی هستند که می‌توان هنگام کار بر روی یک نرم‌افزار، آن‌ها را برای از بین بردن، عوامل نامطلوب در کد، اعمال کرد. اینکار از طریق فراهم آوردن چارچوبی انجام می‌گیرد که با استفاده از آن برنامه‌نویس می‌تواند متن برنامه را اصلاح و بازسازی کندتا کد برنامه خوانا و توسعه‌پذیر شود. این اصول بخشی از راهبرد توسعهٔ نرم‌افزار چابک و تطبیقی می‌باشند. نرم‌افزار
نرم‌افزار گردآوردی از دستورالعمل‌‌ها است که به رایانه می‌گوید «چگونه کار کن». این مفهوم در برابر سخت‌افزار فیزیکی قرار دارد، که توسط آن سامانه ساخته شده است، و «در واقعیت کار را انجام می‌دهد». در علوم رایانه و مهندسی نرم‌افزار، یک نرم‌افزار رایانه‌ای همه اطلاعاتی است که توسط سامانه رایانه‌ای پردازش می‌شود، که شامل برنامه‌ها و داده است. نرم‌افزار رایانه‌ای شامل برنامه‌های رایانه‌ای، کتابخانه‌ها، و داده‌های مرتبط غیرقابل‌اجرا (مثل مستندات برخط و رسانه‌های دیجیتالی) است. سخت‌افزار و نرم‌افزار رایانه‌ای به هم احتیاج دارند، و هیچ‌کدام به صورت واقعی قابل استفاده به خودی خود نیست. رویکرد گسترده معماری هسته
هرچه تعداد کمتری نرمافزار درگیر شوند سریعتر است اگر قسمتی از یک نرم‌افزار در کد منبع و فرم ترجمه شده باید کوچک‌تر از کل کد نرم‌افزار باشد کدهای کمتر به معنی اشکالات کمتر است که منجر به مشکلات امنیتی کمتر می‌شود آزمون نرم‌افزار
• به نیازمندی هایی که توسعه و طراحی نرم افزار را جهت دهی کرده اند رسیده است؟ کیفیت نرم‌افزار
به لحاظ تاریخی ساختار ، دسته بندی و مطالعه ی ویژگی ها و معیارهای مورد استفاده در مدیریت کیفیت نرم‌افزار از مدل های ISO 9126-3 و ISO 2500:2005 سرچشمه می گیرد . بر اساس این مدل ها کنسرسیوم کیفیت نرم‌افزار های آی تی پنج خصوصیت اصلی برای یک محصول نرم‌افزاری دارای ارزش بازاری را معرفی کرد : قابلیت اطمینان ، کارآیی ، امنیت ، قابلیت نگه داری و اندازه کافی طراحی به کمک رایانه
نرم‌افزارهای طراحی رایانه‌ای، به نرم‌افزارهایی اطلاق می‌شود که کار ایجاد و ویرایش شکل‌ها را به کمک رایانه انجام می‌دهند. امروزه بیشتر نرم‌افزارهای طراحی به کمک رایانه، نه تنها توانایی ایجاد و ویرایش نقشهٔ دوبعدی و سه‌بعدی قطعات را دارند، بلکه توانایی وارسی (تحلیل) قطعات از نظر مسائل تنش، گرما و مسائل مکانیکی با استفاده از روش المان محدود را دارند. کیفیت نرم‌افزار
مدیریت ریسک : خرابی نرم‌افزار مشکلاتی بیش از ناراحتی و نگرانی ایجاد کرده است .مشکلات نرم‌افزار فجایای انسانی ایجاد کرده است . این مشکلات میتواند از طراحی رابط کاربرب ضعیف تا حطاهای اساسی نرم‌افزار در کد نویسی متغیر باشد .مثال هایی از از مشکلات نرم‌افزاری که به مرگ منجر شده اند در مقاله دکتر لوسون موجود است . این مثال ها شامل نرم‌افزار هایی که در دستگاه های پزشکی و دیگر دستگاه های حساس وجود دارند ، می باشد ."[مهندسانی که نرم‌افزارهای جاسازی شده را می نویسند] برنامه های جاوارا می بینند که یک سوم ثانیه برای انجام جمع آوری زباله و به روزرسانی رابط کاربری ، زمان صرف میکنند و آنها هواپیماهای در حال سقوط از آسمان را پیش بینی می کنند. " . در ایالات متحده ، اداره حمل و نقل هوایی فدرال (FAA) ،با ارائه ی سرویس صدور گواهینامه هواپیما FAA ، برنامه های نرم‌افزاری ، قوانین ، راهنمایی و آموزش هایی ارائه می دهد ، که تأثیر آن بر روی محصولات هواپیمایی است . معمار نرم‌افزار
معمار نرم‌افزار () یک کارشناس نرم‌افزار است که انتخاب‌های طراحی سطح بالا را انجام می‌دهد و استانداردهای فنی شامل: استانداردهای کدگذاری نرم‌افزار، ابزارها و سیستم عامل را دیکته می‌کند. کارشناس برجسته به عنوان رئیس معماری معرفی می‌شود. برنامه‌سازی سامانه‌های توکار
از آنجا که معمولاً سامانه توکار باید بتواند در مدت زمان خاصی بدون نیاز به مراقبت انسان کارش را بدون خطا انجام دهد، قابلیت اعتماد نرم‌فزار و سخت‌افزار آن از اهمیت خاصی برخوردار است؛ بنابراین نرم‌افزار این قبیل سامانه‌ها معمولاً با دقت بیش‌تری توسعه داده شده و آزمایش می‌شود. نرم‌افزار مدیریت پروژه
یک سیستم جمعی طراحی می‌شود تا چندین کاربر بتوانند به صورت هم‌زمان بخش‌های مختلف یک طرح را تغییر دهند. مثلاً برای به روز رسانی حوزه‌ها افراد شخصا مسئول یکپارچگی چیزی هستند که درسراسر پروژه تخمین زده‌اند. ابزارهای مبتنی بر وب، از جمله اکسترانت اساساً در این گروه قرار می‌گیرند. اما محدودیت‌هایی دارند. از جمله این که کاربر بایستی برای استفاده از نرم‌افزار به اینترنت دسترسی داشته باشد. برای گذر از این محدودیت برخی از ابزارهای نرم‌افزارها از معماری client-server استفاده می‌کنند و یک نسخه برای کاربر که بر روی کامپیوتر رومیزی وی اجرا می‌شود را فراهم می‌سازند تا اطلاعات پروژه و وظایف را در اختیار دیگر اعضای تیم پروژه قرار دهد. البته این کار از طریق یک سرور مرکزی و زمانی انجام می‌شود که کاربر به شبکه وصل می‌شود. برخی از ابزارها به اعضای تیم پروژه اجازه می‌دهد تا در زمانی در شبکه نیستند اطلاعات زمان بندی کارها را تهیه و تنظیم کنند (البته اطلاعات دیگر اعضا ‘فقط خواندنی’ است). زمانی که دو باره به دیتا بیس متصل می‌شود همهٔ تغییرات با زمان بندی‌های دیگر همگام(synchronized) می‌شود. ساخت (نرم‌افزار)
به‌طور مثال معمولاً در یک برنامه رایانه‌ای نیاز است از کدهای منبع فایل‌های آبجکت و سپس از این فایل‌های آبجکت، فایل اجرایی ساخته شود. وقتی شما برنامه‌ای می‌نویسید، باید برای آن یک Makefile هم درست کنید و سپس برای کامپایل و نصب آن از ساخت کمک می‌گیرید. کیفیت نرم‌افزار
در مبحث مهندسی نرم‌افزار، کیفیت نرم‌افزار به دو رده مرتبط اما مجزای زیر اشاره دارد: بسیاری از جنبه های کیفیت ساختاری نرم‌افزار تنها با تحلیل و بررسی ساختار درونی و کد آن در سطح واحد ، سطح تکنولوژی و سطج سیستم بررسی می شود . اما برخی خصوصیات ساختاری مثل قابلیت استفاده بودن فقط به صورت پویا قابل ارزیابی می باشند .(ارزیابی کاربران و افرادی که با نرم‌افزار سر و کار دارند حتی اگر با یک نسخه ی پروتوتایپ روبرو باشند) جنبه های دیگر مثل قابلیت اطمینان ممکن است علاوه بر نرم‌افزار ، سخت افزار را نیز در یر بگیرد .پس می توان آن را به صورت ایستا و پویا ارزیابی کرد . توسعه ویژگی‌محور
از آن‌جا که طرح‌ها کوچک هستند، تکمیل یک طرح، نسبتاً کار کوچکی به حساب می‌آید. برای گزارش دقیق پیگیری پروژه توسعه نرم‌افزار، مشخص نمودن روند ساخته شده در هر طرح مهم می‌باشد؛ بنابراین FDD تعریفی از 6 نقطه عطف در هر طرح می‌باشد که به تدریج تکمیل می‌شوند. سه نقطه عطف اولیه در طول فعالیت طراحی و سه مورد دیگر در طول ساخت آن تکمیل می‌شوند. برای کمک به ردیابی این روند، درصد کاملی به هر نقطه عطف اختصاص داده شده‌است. زمانی‌که برنامه‌نویسی برای یک طرح آغاز می‌شود، 44 درصد تکمیل شده می‌باشد (دامنه خرید 1 درصد، طراحی 40 درصد، بازرسی از طراحی 3 درصد؛ در مجموع 44 درصد). طراحی نرم‌افزار
مفاهیم طراحی ارائه دهنده طراح نرم‌افزار بر اساسی است که از روش‌های پیچیده‌تر می‌توان استفاده کرد. مجموعه‌ای از مفاهیم طراحی بنیادی تکامل یافته شرح زیر هستند: گریدی بوچ در مدل شیء خود، انتزاع، کپسوله سازی، مدولارسازی و سلسله مراتب را به عنوان اصول طراحی نرم‌افزار معرفی می‌کند. مخفف PHAME (اصول سلسله مراتب، انتزاع، مدولارسازی و کپسولاسیون) گاهی برای اشاره به این چهار اصل اساسی استفاده می شود. مرکز داده
مدل معماری باید بگونه‌ای باشد که در آن بتوان محیطی را فراهم آورد که به واسطه آن اعمال تغییرات دینامیکی که به صورت معمول مورد نیاز می‌باشد امکان‌پذیر گردد. معماری باید این قابلیت را به وجود آورد که در پایان استقرار سایت به شکلی در نظر گرفته شود که مجموعه از قابلیت توسعه و افزایش امکانات در هر یک از اجزا خود بدون بروز هیچگونه مشکلی در یکپارچگی کل مجموعه برخوردار باشد. معیارهای مورد توجه عبارت هستند از: توسعه رفتارمحور
توسعه رفتار محور مشخص می‌کند که آزمایش‌های هر واحد نرم‌افزاری باید با توجه به رفتار مورد نظر آن واحد باشد. الهام گرفتن از توسعه نرم‌افزاری چابک برای «رفتار مورد نظر» در این مورد شامل الزاماتی است که توسط کسب و کار تعیین می‌شود — یعنی رفتار مورد نظر که ارزش کسب و کار را برای هر نهاد که واحد نرم‌افزاری را در دست ساخت دارد، به کار گرفته‌است. این مورد در طی فعالیت ت.ر. م تحت عنوان برون‌گرا بودن ت.ر. م یاد می‌شود. مبتنی بر متن (رایانه)
مبتنی بر متن به‌طور معمول به برنامه‌های رایانه‌ای اشاره دارد که بر پایه متن نوشته شده‌اند، یک برنامه که بر پایه متن نوشته شده باشد در وهله اول ورودی و خروجی آن براساس متن است تا اینکه گرافیک یا صدا باشد و به این معنا نیست که مطلقاً این نوع برنامه گرافیک و صدا ندارد، فقط گرافیک و صدا در درجه دوم اهمیت دارند. قراردادهای کدنویسی
کاهش هزینه‌های نگهداری نرم‌افزار، بیشترین دلیل ذکر شده برای پیروی از قراردادهای برنامه‌نویسی زیر است. Sun Microsystems در مقدمه ای برای قوانین کدنویسی زبان برنامه‌نویسی جاوا، دلایل زیر را ارائه می‌دهد: معاهدات کد برای برنامه نویسان به دلایل مختلف اهمیت دارد: مهندسی نرم‌افزار فرایندی است که توسط آن پروژه مشخص و طراحی شده‌است. مهندسی نرم‌افزار برای موفقیت پروژه‌ها کاملاً بنیادی و ضروری است، خصوصاً اگر آنها، پروژه‌های بزرگی باشند. فرایند مهندسی نرم‌افزار، چیزی است که پروسهٔ کد زدن را تا زمان کامپایل موفق آمیز اجرا می‌کند. مهندسی نرم‌افزار خوب می‌تواند بین یک پروژه موفق (هم از نظر مالی و هم مهندسی) و پروژه ای که، در بدترین حالت، هنگام تحویل شکست می‌خورد، تفاوت ایجاد کند. مهندسی نرم‌افزار خوب هزینه‌های جاری را پایین می‌آورد و موفقیت در بازاریابی پروژه را به حداکثر می‌رساند. کیفیت نرم‌افزار
اندازه گیری ویژگی های مهم برنامه شامل اندازه گیری ویژگی های ساختاری معماری برنامه ، برنامه نویسی و مستندات درون کد است . بنابراین ، هر مشخصه تحت تأثیر ویژگی هایی در سطوح متعدد انتزاع در برنامه قرار دارد و همه این موارد را باید در محاسبه اندازه گیری خصوصیات در صورتی که پیش بینی کننده ارزشمندی از نتایج کیفی است که در کسب و کار تأثیر می گذارد ، لحاظ کرد. فرایند توسعه نرم‌افزار
مرحله اول تدوین و فرموله کردن یک برنامه برای رسیدن به اهداف با این محدودیت‌ها، و پس از آن تلاش برای پیدا کردن و حذف تمام خطرات بالقوه (ریسک‌های بالقوه) از طریق تجزیه و تحلیل دقیق و در صورت لزوم، با ساخت نمونه اولیه است. اگر برخی ریسک‌ها قابل حل نبودند در این صورت مشتریان باید تصمیم بگیرند که آیا می‌خواهند انجام پروژه را خاتمه دهند یا از ریسک‌های مورد نظر چشم پوشی کنند و به هر ترتیب ادامه دهند. در نهایت، نتایج ارزیابی شده و طراحی مرحله بعدی آغاز می‌شود. در حالت کلی یک الگو تکاملی است که به صورت مجموعه‌ای از نسخه‌های افزایشی توسعه میابد و همچنین در طی تکرارهای اولیه ممکن است یک الگو کاغذی یا یک نمونه اولیه باشد ولی در طول تکرارهای بعدی هر بار نسخه کامل‌تری از سامانه تولید می‌شود و این الگو به ۳ تا ۶ نواحی کاری تقسیم می‌شود. توسعه نرم‌افزاری چابک
نرم‌افزار بدون مستندات فاجعه است. کد برنامه ابزار مناسبی برای تشریح سیستم نرم‌افزاری نیست. تیم باید مستندات قابل فهم برای مشتری بسازد تا ابعاد سیستم از تجزیه تحلیل تا طراحی و پیاده‌سازی آن را تشریح نماید. نقشه نرم‌افزاری
نقشه‌های نرم‌افزاری بر پایه اطلاعات عینی است که تجزیه و تحلیل کد و اطلاعات واردشده از سیستم‌های مخزن نرم‌افزار، اطلاعات از کده‌ای منبع، یا ابزارهای توسعه نرم‌افزار وابزارهای برنامه‌نویسی تعیین می‌شود. به‌طور خاص، نقشه‌های نرم‌افزاری به یک زبان برنامه‌نویسی، زبان مدل‌سازی یا مدل فرایند توسعهنرم‌افزار بستگی ندارد. نرم‌افزار کسب‌وکار
به‌طور کلی، نرم‌افزار کسب‌وکار احتمالاً برای نیازهای یک کسب و کار خاص طراحی شده‌است و بنابراین به راحتی قابل انتقال به یک محیط کاری دیگر نیست، مگر اینکه طبیعت و عمل آن یکسان باشد. با توجه به الزامات منحصر به فرد هر کسب و کار، بعید است یک نرم افراز آماده مصرف همهٔ نیازهای یک شرکت را برطرف کند. پس با این که یک راه حل آماده مصرف موجود است، با توجه به ملاحظات زمانی یا پولی، ممکن است تعدادی از موارد سفارشی سازی مورد نیاز باشد. بسته به نوع کسب و کار مورد نظر، استثنائات وجود دارد، و قبل از سفارشی سازی یا راه حل‌های آماده مصرف، همیشه باید تحقیق کامل انجام شود. مهندسی نرم‌افزار به کمک کامپیوتر
این ابزارها برای توسعه نرم‌افزار با کیفیت بالا، بدون نقص و قابل نگهداری بکار برده می‌شوند. این ابزارهای نرم‌افزاری اغلب با روش‌های توسعه سیستم‌های اطلاعاتی با کمک ابزارهای خودکار که در فرایند توسعه نرم‌افزار می‌توانند مورد استفاده قرار بگیرند استفاده می‌شوند. نرم‌افزار کسب‌وکار
برنامه‌های بازرگانی بر اساس نیازهای کاربران تاجر ساخته می‌شوند. همچنین، برنامه‌های بازرگانی برای استفاده از نوع خاصی از معاملات تجاری یا اقلام داده ساخته شده‌اند. این برنامه‌ها بی وقفه اجرا می‌شوند مگر زمانی که که نیازی به احتیاجات بازرگانی جدید و تغیر در معاملات بازرگانی اساسی باشد. برنامه‌های بازرگانی به خوبی اجرا می‌شوند مگر این که مشکلی با سخت افزار کامپیوتر، شبکه‌های کامپیوتری (اینترنت / اینترانت)، دیسک‌های رایانه ای، منابع برق، و اجزای نرم‌افزاری مختلف وجود داشته باشد. مهندسی نرم‌افزار
مهندسی نرم‌افزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرم‌افزاری با کیفیت است. مهندسی نرم‌افزار بر پایه مؤلفه
Clemens Szyperski و David Messerschmitt ۵ شرط‌های زیر را برای یک پیکرپار نرم‌افزاری تعیین می‌کنند: طراحی واسط کاربر
طراحی واسط کاربر در طیف گسترده‌ای از پروژه‌ها، از سامانه‌های رایانه‌ای تا اتومبیل‌ها و هواپیماهای تجاری دخالت دارد، همه این پروژه‌ها درگیر بسیاری از همان تعاملات اساسی انسان که هنوز نیز، نیاز به برخی از مهارت‌های منحصر به فرد و دانش است، هستند. در نتیجه، طراحان به تخصص پیدا کردن در انواع مختلف پروژه‌ها و داشتن مهارت‌های محوری روی تخصصشان چه در حوزه طراحی صنعتی، طراحی نرم‌افزار و طراحی وب گرایش پیدا کردند. معماری نرم‌افزار
معماری نرم‌افزار فرایند تعریف یا راه حل نرم‌افزاری ساختار منداست به شکلی که بتواند کلیه نیازمندی‌های فنی و عملیاتی مورد انتظار را، پوشش دهد. کیفیت نرم‌افزار
تحلیل و اندازه گیری کیفیت ساختاری از طریق تجزیه و تحلیل سورس کد ، معماری ، چارچوب نرم‌افزار ، شمای پایگاه داده در رابطه با اصول و معیارهای تشکیل دهنده معماری مفهومی و منطقی سیستم انجام می شود . این موضوع با تجزیه و تحلیل کدهای اساسی ، محلی و مؤلفه ای سطحی که معمولاً توسط ابزارهای توسعه انجام می شود می باشد . مهندسی نرم‌افزار بر پایه مؤلفه
پیکرپارهای سازنده یک نرم‌افزار غالباً به صورت اشیاء یا مجموعه‌هایی از اشیاء (در برنامه‌نویسی شیء گرا یا Object-Oriented Porgramming)، در برخی موارد به شکل کدهای باینری یا دودویی یا به صورت متون، که در این صورت به یک زبان توصیفی میانی یا Interface Description Language نیاز دارند به این ترتیب ممکن است پیکرپارها به صورت خودکار از پیکرپارهای دیگر م. جود در رایانه به وجود بیایند. مرکوری (زبان برنامه‌نویسی)
این زبان با در ذهن داشتن اصول مهندسی نرم‌افزار طراحی شده‌است. بر خلاف پیاده‌سازی اصلی از پرولوگ، به جای تفسیر مستقیم، جداگانه کامپایل می‌شود که اجازه می‌دهد طیف بسیار گسترده‌تری از اشتباهات که باید قبل از اجرای برنامه گرفته شوند، از بین بروند. این امر باعث به وجود آمدن سیستم ایستای حالت و نوع و سیستم ماژول سفت و سختی شده‌است. ساخت نرم‌افزار
کاهش پیچیدگی نرم فزار به صورت عمده از آن جایی ناشی می‌شود که اکثریت مردم توانایی به حافظه سپردن جزئیات ساختاری و اطلاعات پیچیده را در حافظه خود ندارند. کاهش پیچیدگی تنها از راه تأکید بر خلق کدهای ساده و خوانا میسر است، و هوشمندانه بودن کدها تنها بر پیچیدگی کد می‌افزاید. برای خلق کدهای ساده و خوانا، می‌بایست از یک سری اصول، استانداردها و تکنیک‌های برنامه‌نویسی تبعیت کرد. استفاده از تکنیک‌های کیفیت متمرکز بر ساخت نیز برای کا قراردادهای کدنویسی
پیچیدگی در مرحله طراحی طراحی می‌شود - چگونه پروژه‌ها معماری می‌شود - و در مرحله توسعه - چه کدام استفاده می‌شود. اگر برنامه‌نویسی پایه و ساده نگه داشته شود پیچیدگی به حداقل می‌رسد. اغلب این‌ها برنامه‌نویسی را به عنوان «فیزیکی» نگه می‌دارند - برنامه‌نویسی به شیوه ای بسیار مستقیم و بسیار انتزاعی نیست. این کد مطلوب را تولید می‌کند که به راحتی قابل خواندن و پیگیری است. ساخت نرم‌افزار
تکنیک‌های اولیه اطمینان از کیفیت کد ساخته شده عبارتند از: فرایند توسعه نرم‌افزار
از مهم‌ترین کارها در تولید نرم‌افزار استخراج نیازمندی‌ها یا تحلیل نیازمندی‌های آن سامانه است. مشتریان عمومی معمولاً تصور مفهومی، انتزاعی و مبهمی از نتیجه نهایی خواسته‌هایشان دارند و نمی‌دانند به درستی نرم‌افزار مورد نظرشان چه کاری باید انجام دهد. در این مرحله نیازمندی‌های ناتمام، پیچیده و مبهم، و حتی متضاد توسط مهندسان نرم‌افزار ماهر شناسایی می‌شوند. در این برهه تکه نرم‌افزارهای آماده، تجربه‌شده و فعال ممکن است برای پایین آوردن ریسک (و مشکلات) نیازمندی‌ها کمک کنند. نخست نیازمندی‌های عمومی از کاربران جمع‌آوری شده و دامنه توسعه و تولید نرم‌افزار که باید تولید شود شناسایی و تحلیل می‌شود، سپس مستندات به صورت شفاف نوشته می‌شوند. معمولاً به این مستند، مستند دامنه یا محدوده سامانه اطلاق می‌شود. چارچوب نرم‌افزاری
بر اساس گفته‌های Pree, چهارچوب‌های نرم‌افزاری از نقاط منجمد و نقاط داغ تشکیل شده‌اند. نقاط منجمد معماری کلی یک سیستم نرم‌افزاری را تعریف می‌کنند، یعنی همان اجزای پایه و اساسی و روابط بین آنها. این موارد در نمونه سازی از چهارچوب نرم‌افزاری بدون تغییر (منجمد) باقی می‌مانند. نقاط داغ نشان دهنده قسمت‌هایی است که برنامه نویسان با استفاده از چهارچوب کدهای مختص به خودشان را برای افزایش عملکردهای خاص به پروژه خود اضافه می‌کنند. مهندسی نرم‌افزار
مهندسی نرم‌افزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنی را آماده می‌کند که اگر به‌درستی پیاده‌سازی شود، نرم‌افزاری را تولید خواهد کرد که می‌تواند بررسی شود که آیا این نیازمندی‌ها را تأمین می‌کند یا خیر. چارچوب نرم‌افزاری
در برنامه‌نویسی کامپیوتر یک چهارچوب نرم‌افزاری یک انتزاع است که در آن نرم‌افزار فراهم کننده عملکردهای عمومی می‌تواند به صورت انتخابی توسط کدهای نوشته شده کاربران عوض شود، در تعریفی بهتر می‌توان گفت یک فراهم کننده طراحی‌های قابل استفاده برای نرم‌افزار است. در واقع یک چهارچوب یک راه استاندارد برای ساخت و گسترش برنامه‌ها است و یک محیط با قابلیت استفاده مجدد در محیط نرم‌افزاری است به صورتی که عملکردهای خاصی از بخش‌های یک پلتفرم بزرگ نرم‌افزاری را آماده می‌کند تا برنامه‌نویسی نرم‌افزارهای کاربردی و الگوریتم‌ها را آسان‌تر کند، چهارچوب‌های نرم‌افزاری ممکن است شامل برنامه‌های پشتیبانی، کامپایلرها، کتابخانه‌های کد، مجموعه ابزارها ورابط‌های برنامه‌نویسی برنامه (API) باشد که تمام اجزای مختلف را گرد هم آورده تا امکان توسعه یک پروژه یا سیستم فراهم کند. پارک علم و فناوری
رکن اساسی برای ساخت یک محیط مناسب داشتن یک فرایند طراحی درست است و بالطبع موانع و محدودیتهایی که در فرایند طراحی هر پروژه وجود دارد با توجه به مکان، زمان و خصوصیات هر پروژه متفاوت است . در فرایند طراحی پارکهای علم و فناوری همانند بسیاری از فضاهای انسان ساخت دیگر، ایده اولیه‌ای که در ذهن یک طراح ظاهر می‌شود بر اساس تکرار یک فرایند پیچیده بین مشکل و راه حل است ، که این فرایند در همه بخش‌های طراحی تداوم دارد. عوامل مختلفی بر این فرایند در طول طراحی و برنامه‌ریزی کالبدی پارک علم و فناوری تأثیرگذار است که شناخت و بررسی این عوامل باعث طراحی و ساخت محیطی مناسب برای یک پارک خواهد شد.طراحی و برنامه‌ریزی کالبدی پارکهای علم و فناوری بر اساس موارد ذیل صورت میگیرد: خانه کتاب – فرایند توسعه در طراحی پارک بر مبنای طراحی پایدار – ساختار توسعه پارک در طرح جامع – الگوهای پایه توسعه فضایی پارک – استقلال فضایی و لبه در ساختار توسعه و طرح جامع  – امنیت در پارک علم و فناوری – امکان مکاشفه در پارک علم و فناوری – آرامش در پارک علم و فناوری – آسایش در پارک علم و فناوری – صمیمیت در پارک علم و فناوری  – انعطاف‌پذیری در پارک علم و فناوری  – نظام حرکتی و ارتباطات  – طراحی منظر معیار نرم‌افزار ای‌بی‌سی
از آنجا که معیار نمره ای‌بی‌سی بر اساس این ایده ساخته شده‌است که وظایفی مانند ذخیره داده، انشعاب و آزمایش شرطی در آن موجود باشند، این معیار مستقل از سبک برنامه‌نویسی کاربر است. مهندسی نرم‌افزار
مهندسی نرم‌افزار یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرم‌افزاری با کیفیت که قابل اطمینان و با صرفه بوده و بر روی ماشین‌های واقعی به‌طور کارآمدی عمل کند. چارچوب نرم‌افزاری
طراح‌های چهارچوب‌های نرم‌افزاری با هدف آسان کردن توسعه نرم‌افزاری به برنامه نویسان و طراحان نرم‌افزاری اجازه می‌دهند تا وقت خود را برای تأمین نیازهای نرم‌افزاری خود اختصاص داده و به جزئیات استاندارد سطح پایین‌تر ارائه سیستم کاری نپردازند، که نتیجه آن کاهش زمان کلی توسعه و برنامه سازی است. به عنوان مثال، تیمی که از یک چهارچوب وب برای ساخت یک وبسایت بانکی استفاده می‌کند می‌تواند تمرکز بیشتری بر روی نوشتن کدهای مخصوص بانکی داشته باشد تا مکانیک‌های درخواست پاسخ وبسایت یا state management. الگوی طراحی
در طراحی نرم‌افزارهای مختلف مسایلی دایماً بروز می‌یابند که در پروژه‌های قبلی، که حتی دارای قلمرو کاربردی مختلفی هستند، نیز وجود دارند. راه حل موجود برای این روش‌های غالباً یکسان است و یافتن طراحی مناسب برای این موارد تکراری وقت‌گیر و هزینه‌بر است. از این رو می‌توان راه‌حل‌هایی را ارائه نمود که مسایل را ساده نماید. از طرفی روح برنامه‌نویسی شیءگرا بر مبنای قابلیت باز-استفادگی و جز-محوری است، موجب ایجاد برنامه‌هایی قابل استفاده در آینده خواهد شد. اریک گاما ،ریچارد هلم، رالف جانسون، جام ولیسایدز که بعدها به دستهٔ۴ معروف شدند در سال ۱۹۹۴ کتاب الگوهای طراحی را به همراه مقدمه‌ای از سوی گریدی بوش به رشتهٔ تحریر درآوردند. این کتاب به دسته‌بندی ۲۳ الگوهای طراحی می‌پرداخت که تا آن زمان ابداع شده‌بودند. گریدی بوش در مقدمهٔ کتاب "الگوهای طراحی" از الگوهای طراحی به عنوان راه حلی برای ایجاد سیستم‌های پیچیده نام می‌برد و از آن به عنوان زبانی نام می‌برد که می‌تواند بر روی دامنه‌های مختلفی مورد استفاده قرار گیرند. هوش نرم‌افزاری
هوش نرم افزاری دیدگاهی از شرایط ساختاری دارایی‌های نرم افزاری است که توسط نرم افزاری طراحی شده‌است که برای تجزیه و تحلیل ساختار پایگاه داده، چارچوب نرم افزار و کد منبع برای درک و کنترل بهتر سیستم‌های نرم افزاری پیچیده در محیط‌های فناوری اطلاعات طراحی شده است. مشابه هوش تجاری (BI)، هوش نرم افزاری توسط مجموعه ای از ابزارها و تکنیک‌های نرم افزاری برای استخراج داده‌ها و ساختار داخلی نرم افزار تولید می‌شود. نتایج نهایی اطلاعاتی است که ذینفعان مشاغل و نرم افزارها برای تصمیم‌گیری آگاهانه از آنها استفاده کرده و میزان کارایی سازمان‌های توسعه دهنده نرم افزار اندازه‌گیری می‌کنند و در مورد سلامت نرم افزار ارتباط برقرار می‌کنند تا از فجایع نرم افزاری جلوگیری کنند. الگوی طراحی نرم‌افزار
در الگوی طراحی از اشیاء ویژه‌ای به نام آداپتور (واسطه) استفاده می‌شود. این آداپتورها به اشیاء مورد نیاز در پروژه مرتبط می‌شوند. نوشتن برنامه تا حد زیادی از طریق این واسطه‌ها انجام می‌شود. الگوهای طراحی را بر اساس دو معیار طبقه‌بندی می‌کنیم. ۱-اولین معیار، که مقصود نامیده شده، منعکس‌کننده آنچه یک الگو انجام می‌دهداست. یک الگو ممکن است هدف ایجادی، ساختاری یا رفتاری داشته باشد. الگوهای ایجادی پروسه ایجاد اشیاء را مورد توجه قرار می‌دهند. الگوهای ساختاری با ترکیب کلاس‌ها و اشیاء سروکار دارند. الگوهای رفتاری طرقی که اشیاء با همدیگر فعل و انفعال انجام داده و وظایف را توزیع می‌کنند مشخص می‌سازند. ۲- معیار دوم، که محدوده نامیده شده، مشخص‌کننده اینکه الگو بر روی کلاس‌ها یا اشیاء اعمال می‌گردد. است. الگوهای در محدوده کلاس‌ها با ارتباطات بین کلاس‌ها و زیر کلاس‌های آن‌ها سر و کار دارند. این‌گونه ارتباطات از طریق وراثت برقرار می‌گردد، که بنابراین در زمان کامپایل ثابت می‌شوند. الگوهای در محدوده اشیاء با ارتباطات بین اشیاء سرو کار داشته که می‌تواند در زمان اجرا تغییر کرده و در نتیجه پویا هستند. تقریباً تمام الگوها از وراثت استفاده می‌کنند؛ بنابراین الگوهایی که با برچسب «در محدوده کلاس» معین شده‌اند آن‌هایی هستند که تنها بر روی ارتباط بین کلاس‌ها تأکید دارند. توجه کنید که بیشتر الگوها در محدوده اشیاء عمل می‌کنند. الگوهایایجادی که در محدوده کلاس‌ها هستند قسمتی از ایجاد اشیاء را به زیر کلاس‌ها محول می‌کنند، در حالیکه الگوهای ایجادی در محدوده اشیاء چنین عملی را به شیء دیگری محول می‌نمایند. الگوهای ساختاری کلاسی از وراثت برای ترکیب کلاس‌ها استفاده کرده در عوض الگوهای ساختاری در محدوده اشیاء روش‌هایی برای آمیختن اشیاء را شرح می‌دهند. الگوهای رفتاری کلاسی از وراثت برای تشریح الگوریتم‌ها و کنترل جریان اجرای برنامه‌ها استفاده می‌کنند در صورتی‌که الگوهای رفتاری شیئی چگونگی همکاری گروهی از اشیاء برای انجام یک وظیفه که یک شیء به تنهایی نمی‌تواند به انجام رساند را شرح می‌دهند. تعامل انسان و رایانه
کاربر در مرکز توجه طراحان است و همه چیز طبق خواست نیاز و سلایق او طراحی می‌شود. مدیریت پروژه نرم‌افزاری
تاریخچه مدیریت پروژه‌های نرم‌افزاری با تاریخچه تولید نرم‌افزار در هم آمیخته‌است. نرم‌افزارها در آغاز برای مقاصد خاص یا راه‌اندازی سخت‌افزارها نوشته می‌شد. اما با معرفی مفهوم برنامه‌نویسی شیءگرا در سال ۱۹۶۰ (میلادی) برنامه‌نویسی با این رویکرد مورد استقبال شرکت‌های توسعه نرم‌افزار قرار گرفت و در دهه‌های ۱۹۷۰ و ۱۹۸۰ روند تولید و توسعه نرم‌افزار رشد سریعی را تجربه کرد. طراحی بازی ویدئویی
از طراحان بارها انتظار می‌رود که نقش‌های چندگانه‌ای را در طبیعت گستردهٔ در حال تغییر بر عهده بگیرند. به عنوان مثال، استفاده از ابزار و موتورهای پیش‌ساخته از جمله یونیتی (Unity)، گیم میکر (Game Maker)، گودت (Godot) یا کانستراکت (Construct) می‌تواند به نمونه‌سازی مفاهیم کمک کند. طراحی مرحله ممکن است ابتدا روی کاغذ و دوباره با استفاده از یک نرم‌افزار طراحی سه بعدی در موتور بازی انجام شود. طراح برای طراحی عناصری مانند هوش مصنوعی، صحنه‌ها، فرایندهای محیط، رفتارها و افکت‌های بسیار که می‌خواهد بدون کمک برنامه‌نویس تنظیم کند، از زبان‌های برنامه‌نویسی استفاده می‌کند. مفاهیم دکور، داستان و شخصیت‌ها به روند تحقیقاتی و نوشتاری نیاز دارند. طراحان شاید تست تمرکز، هنر نوشتاری و لیست‌های تنظیمات صوتی را پیش‌بینی کنند و مستندات بازی را بنویسند. طراحان به‌طور ایده‌آل علاوه بر دیگر مهارت‌های ذکرشده، با دیگران نیز به خوبی ارتباط برقرار می‌کنند و توانایی برآورده کردن مناسب مسئولیت‌ها و توجه بالا به جزئیات را دارند. کیفیت نرم‌افزار
اندازه گیری کیفیت نرم‌افزار در اصل بررسی میزان تطابق نرم‌افزار با این پنج ویژگی است .اندازه گیری کیفیت نرم‌افزار در اصل یک نمره ی کیفی یا کمی یا ترکیبی از هر دو و سپس یک سیتم وزن گیری که اولویت ها را مشخص می کند می باشد .این روش با تجزیه و تحلیل خطاهای برنامه نویسی که منجر به فاجعه می شود خاتمه می یابد .این خطاها در سطح سیستم تا ۹۰ درصد از مشکلات پروژه را نشان می دهند .در حالی که در سطح واحد ۱۰ درصد از مشکلات تولید را شامل می شود .در نتیجه کیفیت کد بدون بدون چهارچوب کل سیستم دارای ارزش محدود است . نرم‌افزار مهندسی عمران
یکی دیگر از زیرشاخه‌های تخصصی این رشته، یعنی طراحی زیرساخت نیز وابستگی بالایی به برآورد میزان بار، فشار، زه‌کشی و جریان آب دارد. برخی از شرکت‌های تولیدکننده نرم‌افزار، در تلاش هستند تا برنامه‌های طراحی ویژه‌ای را برای رشته‌های گوناگون طراحی زیرساخت به صورت یکپارچه فراهم کنند. اگرچه معمولاً استفاده از نرم‌افزارهایی مثل مایکروسافت اکسل با قیمتی به مراتب پایین‌تر نیز مفید است. هنگام طراحی مرحله ساخت‌وساز، روش‌های مختلف مدیریت پروژه برای تخمین عواملی همچون قیمت، جدول زمان‌بندی و منابع مفید هستند. بسته‌های نرم‌افزاری گوناگون، بر مبنای معادلات و نظریات مختلفی که پایه و اساس این محاسبات هستند، ساخته شده‌اند. یک طراح جاده ممکن است برای مثال موقعیت کنونی لوله‌های زیر زمین را اصلاح کند. نرم‌افزار سیویل دیزاینر یک نمونه از بسته طراحی است که از جمع‌آوری داده‌های یک پارچه، ترسیم، مدل‌سازی سطحی و سیستم طراحی برای زیرساخت مهندسی عمران تشکیل شده‌است. چارچوب نرم‌افزاری
این روند جنجالی مسئله مهمی را در مورد چهارچوب‌ها نتیجه می‌دهد. ساختن یک چهارچوب ظریف در مقابل چهارچوبی که صرفاً مشکلی را حل می‌کند هنوز یک مهارت است تا یک علم. "ظرافت نرم افزاری " به معنی نظم و ترتیب، وضوح و دقت به همراه ضعف اندک (عملکردهای اضافی که بیشتر آنها توسط کاربر تعریف می‌شوند) است. به عنوان مثال برای چهارچوب‌هایی که کد تولید می‌کنند، ظرافت به معنای ایجاد کدی است که واضح و قابل درک برای یک برنامه‌نویس (و به راحتی قابل اصلاح) باشد، در مقابل کدی که صرفاً تصحیح می‌کند. مسئله ظرافت این است که چرا تعداد نسبتاً کمی از چهارچوب‌های نرم‌افزاری در آزمایش زمان متوقف شده‌اند: بهترین چهارچوب‌ها توانسته‌اند به عنوان پیشرفته‌ترین فناوری که بر اساس آن ساخته شده‌اند پیشرفت کنند و تکامل بیابند، در حین تکامل یافتن، بسیاری از آنها قابلیت‌های قدیمیشان را حفظ کرده‌اند. ساخت (نرم‌افزار)
به این ترتیب است که قواعد ("Rules") دیگر موجود در Makefile پردازش و اجرا می‌شوند. زیرا آن‌ها پیش‌نیازهای ساخت هدف اصلی هستند. روشن است که اگر یک قاعده جزء پیش‌نیازهای هدف اصلی نباشد پردازش نخواهد شد. مگر اینکه به‌طور صریح از Make بخواهید آن را پردازش کند (مثلاً با دستور make target-name) ساخت نرم‌افزار
به منظور جلوگیری از فاصله‌های پیش رو در طراحی نرم‌افزار، بهینه‌سازی‌هایی را می‌بایست حین ساخت نرم فزار در مقیاس‌های کوچکتر یا بزرگتری صورت داد، تا بتوان با کمک آن به جزئیات طراحی نرم‌افزار افزود. برنامه‌سازی سامانه‌های توکار
توسعه نرم‌افزار برای سامانه‌های توکار دارای شرایط و نیازمندی‌های خاصی است. این شرایط میزان پیچیدگی طراحی و ابزارهای مورد نیاز کار پیاده‌سازی را مشخص می‌کند. ریسک عملیاتی
. طراحی نرمافزار و پیادهسازی آن مطابق نیازهای مشتری پشته راه حل
برای مثال، برای ساخت یک برنامه کاربردی وب، معماری پشته شامل «سیستم عامل، سرور وب، پایگاه داده، و زبان برنامه‌نویسی» می‌باشد. یک ورژن دیگر از پشته نرم‌افزاری «سیستم عامل، میان افزار، پایگاه داده، و برنامه کاربردی» می‌باشد. به صورت معمول، اجزای پشته نرم‌افزاری توسط توسعه دهندگان مختلف، به صورت مستقل از یکدیگر توسعه می‌یابند. پایگاه داده
طراحی پایگاه باید به گونه‌ای باشد که از پیش با نحوه عملکرد لایه میانی مدل بانک اطلاعاتی روی برنامه استفاده‌کننده هماهنگ باشد (گاهی برعکس برنامه بر اساس بانک اطلاعاتی موجود ساخته می‌شود اما نه زمانی پایگاه داده مختص پروژه در حال طراحی است) برای مثال بسته به میزان وسعت پروژه و تعداد کاربران ممکن است از لایه (Datamapper) با سرعت بالاتر برای پروژه‌های عظیم‌تر نسبت به الگوی ثبت کنشور (AR) که از سرعت‌پایین‌تری برخوردار است استفاده شود حتی در مواردی ممکن است امکان استفاده از هیچ‌گونه لایه ORM وجود نداشته باشد برای مثال به خاطر مسائل امنیتی هر گونه تراکنش بانک اطلاعاتی بواسطه procedureها و روتین‌های از پیش‌نوشته شده ایمن انجام شود و اجازه افزودن یا ویرایش روی سرور بانک اطلاعاتی برای کاربران سرور وجود نداشته باشد. اکثراً توصیه شده‌است که از AR برای پروژه‌هایی که کاربران بسیار دارند استفاده نشود در عوض دیتامپر گزینه بهتر است. در مبحث بانک‌های اطلاعاتی از عبارت دومین یا دامنه برای امور کاملاً متفاوتی استفاده می‌شود یکی از آن‌ها لایه دومین در تضاد با لایه بیزینس در دیتامپر است که یکی لایه کنترل‌کننده ثبت و ویرایش و بررسی ریلیشن داده‌هاست و دیگری لایه مدل‌سازی در برنامه که از لایه اول استفاده می‌کند.