در طراحی سخت‌افزار و نرم‌افزار از چه روشهایی استفاده می شود؟
طراحی نرم‌افزار
طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان "تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده" یا "فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد." طراحی بالا به پایین و پایین به بالا
روش‌های مدرن طراحی نرم‌افزار معمولاً از ترکیبی از روش‌های بالا به پایین و پایین به بالا می‌باشند. این همواره ضروری است که یک شناخت کامل نسبت به سیستم برای طراحی آن داشته باشیم، که این اساس و پایه روش بالا به پایین است. بیشتر پروژه‌های نرم‌افزاری کد نویسی را در چند مرحله در حین پیشرفت پروژه (و نه به طور پیوسته در حین پیشرفت پروژه) بر اساس طراحی خود دارند و در چند مرحله سعی می‌کنند که کدنویسی را پیش ببرند که این کد زنی در حین انجام پروژه ایده و پایه برنامه‌نویسی پایین به بالا است. این روش به مرور کدها تکمیل و در صورت نیاز نیز اصلاح می‌شوند؛ بنابراین بیشتر پروژه‌های نرم‌افزاری ترکیبی از این دو روش می‌باشند.
طراحی نرم‌افزار
طراحی نرم‌افزار فرایند پیش‌بینی و تعریف راه حل‌های نرم‌افزاری به یک یا تعدادی از مشکلات است. یکی از اجزای اصلی طراحی نرم‌افزار، نرم‌افزار مورد نیاز تجزیه و تحلیل software requirements analysis]]SRA]] است. SRA بخشی از فرایند توسعه نرم‌افزار است که مشخصات مورد استفاده در مهندسی نرم‌افزار را فهرست می‌کند. اگر نرم‌افزار به‌طور «کامل اتوماتیک» (به معنی بدون کاربر یا رابط کاربری) باشد، طراحی نرم‌افزاری ممکن است به اندازه یک فلوچارت یا متن توصیفی دنباله ای از رویدادهای برنامه‌ریزی شده ساده باشد. همچنین روش‌های نیمه استاندارد مانند زبان مدل‌سازی یکسان و مفاهیم مدل‌سازی اساسی وجود دارد. در هر صورت، بعضی مستندات این طرح معمولاً محصول طراحی است. علاوه بر این، طراحی نرم‌افزار ممکن است یک پلت فرم_مستقل(platform-independent)یا پلت فرم_مشخص(platform-specific) باشد که بسته به دسترسی به تکنولوژی مورد استفاده برای طراحی دارد. تفاوت اصلی بین تجزیه و تحلیل نرم‌افزار و طراحی نرم‌افزار این است که خروجی یک تجزیه و تحلیل نرم‌افزاری از مشکلات کوچکتر برای حل مسئله تشکیل شده‌است. علاوه بر این، تجزیه و تحلیل نباید با تفوت زیادی در میان اعضای تیم یا گروه‌های مختلف، طراحی شود. در مقابل، طراحی بر قابلیت‌ها متمرکز است و بنابراین طرح‌های متعددی برای یک مشکل مشابه می‌تواند وجود داشته باشد. بسته به محیط، طراحی اغلب متفاوت است، چه از طریق چارچوب (frameworks)های قابل اعتماد چه با الگوهای طراحی(design patterns) مناسب پیاده‌سازی شده باشد. نمونه‌های طراحی شامل سیستم‌های عملیاتی، صفحات وب، دستگاه‌های تلفن همراه یا حتی پارادایم ابری جدید است. مهندسی نرم‌افزار
مهندسی نرم‌افزار اغلب شامل فرایند خطی تحلیل، طراحی، پیاده‌سازی و آزمون است؛ که با به‌کارگیری روش‌های فنی و علمی از علوم مهندسی موجب تولید نرم‌افزاری با کیفیت مطلوب در طول یک فرایند انتخابی مناسب پروژه می‌شود. فردریک کانستانت
در طراحی ساعت‌ها تاکید زیادی می‌شود که مطابق با مد و ترجیحات مشتری باشند. فردریک کنستانت از نرم‌افزار کامپیوتری بریدن لبه و در اصل نرم افزار طراحی به کمک رایانه استفاده می‌کند که پروسه طراحی و توسعه ساعت بهتر انجام شود. ساخت نرم‌افزار
حکمیت، گزاره ای قابل اجرا درون یک برنامه است که به برنامه‌نویس اجازه چک در زمان اجرا برنامه را می‌دهد. طراحی با تعهد به روشی می‌گویند که در آن پیش شرط و پس شرط‌هایی مشمول هر روال می‌شوند. برنامه‌نویسی تدافعی، روشی است که در آن از شکست یک روال در برابر ورودی‌های نامعتبر آن جلوگیری می‌شود. فرانک گری
نکته بسیار جالب در روند طراحی‌گری در استفاده از رایانه در این روند است. بر خلاف سایر معماران که از نرم‌افزارهای معمول دوبعدی و سه بعدی مانند CAD و ۳DsMAX برای کارهای خود استفاده می‌کنندگری از نرم‌افزار کاتیا که یک نرم‌افزار مربوط به طراحی جامدات است استفاده کرد. این نرم‌افزار بیشتر برای طراحی خودرو و هواپیما و محاسبات پیچیده بدنه‌های مختلف کاربرد دارد و هماهنگی بسیار عالی با سایر نرم‌افزارها دارد. کاتیا سطوح را تحلیل و بر اساس محدودیت سازه‌ای، کارکردی و اقتصادی پروژه آن را تصحیح می‌کرد. داده‌های عددی که به این ترتیب بدست می‌آمدند بار دیگر بر روی یک مدل پیاده می‌شدند تا حجمها کنترل شوند و در صورت لزوم تغییر کنند. این رفت و برگشت بین مدل‌های مطالعاتی و داده‌های دیجیتال بنیاد شکلی پروژه را به وجود می‌آورند. سپس از داده‌های کامپیوتر برای تهیه پلانهای ساخت موزه استفاده شد. زبان توصیف سخت‌افزار
یک مهندس برای شبیه‌سازی یک مدل HDL، یک محیط شبیه‌سازی سطح بالا می‌نویسد (تست پنج نامیده می‌شود). یک تست پنج حداقل شامل یک ساختار از مدل (دستگاه تحت تست یا DUT) اعلام پنن سیگنال برای مدل ورودی خروجی و یک موج کلاس است. کد تست پنج رویداد محور است: مهندس حالات HDL را برای پیاده‌سازی تنظیمات سیگنال (تست پنج تولید شده) برای مدل خط اتصال تراکنش (به عنوان یک باس میزبان نوشتن/خواندن) و برای نظارت خروجی DUP. یک شبیه‌ساز HDL –برنامه‌ای که شبیه‌ساز را اجرا می‌کند- کلاک شبیه‌ساز، منبع اصلی برای همه رویدادهای شبیه‌سازی تست پنج را القا می‌کند. رویدادها تنها در هم لحظه دیکته شده به وسیلهٔ تست پنج HDL اتفاق می‌افتند (به عنوان بازنشانده به یکدیگر کدشده به تست پنج) یا در عکس‌العمل (توسط مدل) برای شبیه‌سازی راه اندازی رویدادها. شبیه‌سازهای مدرن واسط گرافیکی کاربر تماماً برجسته دارند. با تمام ابزار مناسب خطایابی. این‌ها به کاربر اجازه توقف و اجرای شبیه‌ساز را در هرزمانی، داخل کردن نقطه انفصال در شبیه‌ساز، (مستقل از کد HDL) و نظارت و اصلاح هر قسمتی در سلسه مرتب مدل HDL را می‌دهد. شبیه‌سازهای مدرن همچنین می‌توانند محیط HDL را به کتابخانه‌های کامپایل شده کاربر پیوند دهند، در میان یک واسط PLI/VHPI تعریف شده. پیوند سیستم وابسته (WIN32,LINUX,SPARC)، به عنوان شبیه‌ساز HDL و کتابخانه‌های کاربر کامپایل می‌شوند و پیوند می‌خورند از بیرون به محیط HDL. بازبینی طراحی اغلب بیشترین بخش وقت گیر از فرایند طراحی می‌باشد که با توجه به قطع ارتباط بین خصوصیات عملکردی دستگاه، تفسیر دستگاه از خصوصیات، و عدم دقت از زبان HDLاست. اکثر چرخه آزمون اشکال زدایی اولیه در محیط شبیه‌ساز HDL هدایت شده‌است، به عنوان حالت اولیه طراحی به تغییرات مکرر مدار بزرگ است. یک توصیف HDL همچنین می‌تواند نمونه‌سازی و تست شده در سخت‌افزار قابل برنامه‌ریزی در دستگاهایی باشد که اغلب برای این هدف استفاده می‌شوند. نمونه‌سازی سخت‌افزار نسبتاً گران‌تر از شبیه‌سازی HDL است، اما دنیای واقعی از طراحی را نمایش می‌دهد. نمونه‌سازی بهترین راه برای چک کردن اتصال در برابر دیگر دستگاه‌های سخت‌افزاری و نمونه‌های اولی سخت‌افزاری است. حتی کسانی که در حال اجرا در FPGAهای کند هستند زمان شبیه‌سازی را کمتر از شبیه‌سازی خالص HDL پیشنهاد می‌دهند. طراحی بالا به پایین و پایین به بالا
طراحی بالا به پایین و پایین به بالا() هر دو استراتژی‌هایی در پردازش اطلاعات و مرتب‌سازی کارها و اطلاعات هستند که در زمینه‌های مختلفی چون نرم‌افزار، رفتارشناسی انسانی و تئوری‌های علمی و مدیریت و سازماندهی کاربرد دارند. قابلیت استفاده در تکنیک ریختن و فکر کردن و مدیریت در هر پروژه ای را دارا می‌باشند یکم فرایند توسعه نرم‌افزار
تولید نرم‌افزار به روش برنامه‌سازی مفرط در فازهای خیلی کوچک (یا مداوم) انجام و با فرایندهای دسته‌ای قدیمی‌تر تطبیق داده می‌شوند. فاز اول (که عمداً کامل نشده) در طول مراحل ممکن است به جای اینکه ماه‌ها و سال‌ها در روش آبشاری طول بکشد تا کامل شود، یک روز یا یک هفته وقت بگیرد. ابتدا یک آزمون خودکار برای ایجاد اهداف اساسی تولید نرم‌افزار نوشته می‌شود. سپس (توسط دو برنامه‌نویس) برنامه‌نویسی انجام می‌گیرد که وقتی تمام آزمون‌ها را پشت سر گذاشته و دیگر هیچ آزمون مورد نیازی به ذهن برنامه‌نویسان نرسد کامل می‌شود. کار طراحی و معماری سیستم بعد از اینکه نه آزمونی وجود دارد و نه برنامه‌نویسی‌شده انجام می‌شود. طراحی توسط برنامه‌نویسان انجام می‌شود. (فقط مشخصات نهایی و ترکیب طراحی و کد در تمام فرایندها در روش سریع مشترک هستند) عملیات اصلی ناقص سامانه (توسط دست کم یکی از افراد گروه تولیدکننده و برنامه‌نویس) برای کاربران (یا برخی از کاربران) نصب یا نمایش داده می‌شوند. در اینجا تمام عوامل پروژه دوباره شروع به نوشتن آزمون برای قسمت‌های مهم سامانه خواهند کرد. کلمه دستورالعمل بسیار طولانی
از روزهای آغازین معماری کامپیوتر برخی CPUها بسیاری واحدهای منطقی محاسباتی (ALU) برای اجرای موازی به معماری اضافه کرده‌اند. CPUهای Superscalar برای اینکه تصمیم بگیرند کدام اعمال می‌توانند به شکل موازی اجرا شوند از سخت‌افزار استفاده می‌کنند.CPUهای VLIW برای اینک په تصمیم بگیرند کدام اعمال می‌توانند به شکل موازی اجرا شوند از نرم‌افزار (کامپایلر) استفاده می‌کنند. از آنجایی که پیچیدگی برنامه‌ریزی دستورالعمل بر دوش کامپایلر گذاشته شده، پیچیدگی سخت‌افزار اساساً می‌تواند کاسته شود. روش بوچ
روش بوچ یک تکنیک مورد استفاده در مهندسی نرم‌افزار است. روش بوچ در واقع یک زبان مدلسازی شی و متدولوژی است که به گستردگی در تحلیل و طراحی شی گرا مورد استفاده قرار می‌گیرد. این روش توسط گریدی بوچ (Grady Booch) در زمانی که در شرکت «رشنال سافتور» (Rational Software) - که اکنون بخشی از آی بی ام است - کارمی‌کرد به وجود آمد. فرایند توسعه نرم‌افزار
روش توسعه سریع نرم‌افزار روش تکراری را به عنوان پایه کار استفاده می‌کند اما طرفداری نظریه سبک‌تر و محبوبیت بیشتر از روش سنتی است. روش سریع از بازخوردها به جای برنامه‌ریزی به عنوان سازوکار اصلی کنترل پروژه استفاده می‌کند. بازخوردها به وسیلهٔ آزمون‌های مرتب و انتشار پیاپی در بازه‌های زمانی کوتاه نرم‌افزارهای در حال تکامل تولید می‌شوند. طراحی نرم‌افزار
طراحی نرم‌افزار هم یک فرایند و هم یک مدل است. فرایند طراحی یک دنباله ای از مراحل است که طراح را قادر می‌سازد که تمام جنبه‌های ساخت نرم‌افزار را توصیف کند. مهارت خلاقیت، تجربیات گذشته، حس اینکه چه چیزی نرم‌افزار «خوب» را می‌سازد و تعهد کلی به کیفیت، نمونه‌هایی از عوامل موفقیت قطعی برای یک طراحی مناسب است. با این وجود مهم است که توجه داشته باشید که فرایند طراحی همیشه یک روش ساده نیست؛ مدل طراحی را می‌توان با طراحی معماری خانه مقایسه کرد. با نشان دادن کلییت چیزی که باید ساخته شود آغاز می‌شود (به عنوان مثال، ارائه سه بعدی خانه)؛ و به آرامی، این برای ساخت هر جزئی (به عنوان مثال، نصب لوله‌کشی) اراِیه شده. است به‌طور مشابه، مدل طراحی که برای نرم‌افزار ایجاد شده‌است، دیدگاه‌های مختلفی از نرم‌افزارهای کامپیوتری را فراهم می‌کند. اصول طراحی اولیه، مهندس نرم‌افزار را قادر می‌سازد تا در فرایند طراحی حرکت کند. دیویس مجموعه ای از اصول طراحی نرم‌افزار را پیشنهاد می‌کند که در لیست زیر ارائه شده و گسترش یافته‌است: نرم‌افزار مهندسی عمران
یکی دیگر از زیرشاخه‌های تخصصی این رشته، یعنی طراحی زیرساخت نیز وابستگی بالایی به برآورد میزان بار، فشار، زه‌کشی و جریان آب دارد. برخی از شرکت‌های تولیدکننده نرم‌افزار، در تلاش هستند تا برنامه‌های طراحی ویژه‌ای را برای رشته‌های گوناگون طراحی زیرساخت به صورت یکپارچه فراهم کنند. اگرچه معمولاً استفاده از نرم‌افزارهایی مثل مایکروسافت اکسل با قیمتی به مراتب پایین‌تر نیز مفید است. هنگام طراحی مرحله ساخت‌وساز، روش‌های مختلف مدیریت پروژه برای تخمین عواملی همچون قیمت، جدول زمان‌بندی و منابع مفید هستند. بسته‌های نرم‌افزاری گوناگون، بر مبنای معادلات و نظریات مختلفی که پایه و اساس این محاسبات هستند، ساخته شده‌اند. یک طراح جاده ممکن است برای مثال موقعیت کنونی لوله‌های زیر زمین را اصلاح کند. نرم‌افزار سیویل دیزاینر یک نمونه از بسته طراحی است که از جمع‌آوری داده‌های یک پارچه، ترسیم، مدل‌سازی سطحی و سیستم طراحی برای زیرساخت مهندسی عمران تشکیل شده‌است. طراحی به کمک رایانه
همه رشته‌های مهندسی برای طراحی از نرم‌افزارهای مناسب خود استفاده می‌کنند. نرم‌افزارهای مورد استفاده در طراحی معماری و طراحی صنعتی اغلب نرم‌افزارهای گرافیکی هستند. از نرم‌افزارهای سه‌بعدی که بیشتر در طراحی معماری و طراحی صنعتی استفاده می‌شوند می‌توان به "اتوکد"،" سالیدورکس"، "اینونتور"، "سالید اج" و "مکانیکال دسکتاپ" اشاره کرد. علاوه‌بر این موارد، نرم‌افزارهای گرافیکی دو بعدی مانند "فتوشاپ"، "کورل‌دراو" و "فری‌هند" نیز بسیار پر کاربرد هستند. "کتیا"، "یونیگرافیکس" و "پرو/اینجینیر" هم از بهترین نرم‌افزارهای گرافیکی مورد استفاده‌هستند که با امکان محاسبات پیچیده مهندسی مانند محاسبات تنش‌های محوری و هزاران توانمندی حرفه‌ای دیگر به طراحان کمک کرده‌اند. بدترین زمان اجرا
معمولاً، تیکه‌های کوچکی از نرم‌افزار را می‌توان به‌طور خودکار با استفاده از تکنیک‌هایی اندازه‌گیری کرد به عنوان مثال مانند استفاده از ابزار (افزودن نشانگر به نرم‌افزار) یا استفاده از پشتیبانی سخت‌افزاری مانند استفاده از debuggers، و ماژول‌های ردیابی سخت‌افزار CPU. این نشانگرها باعث ردیابی مسیرهای اجرا می‌شوند که این ردیابی‌ها شامل هر دوی این موارد می‌شود هم مسیری که از طریق برنامه اجرا می‌شود را ردیابی می‌کند و هم‌زمانی که نقاط متفاوت اجرا می‌شوند را دربرمیگیرد. پس از این، ردیابی‌های انجام شده تجزیه و تحلیل می‌شوند برای تعیین اینکه حداکثر زمانی که در هر قسمت از برنامه که تا به حال اجرا شده چقدر است و همچنین برای تعیین کردن اینکه حداکثر تکرار زمانی مشاهده شده یرای هر حلقه چقدر است و اینکه آیا بخش‌های از نرم‌افزار وجود دارد که تست نشده (پوشش کد) باشند یا نه؟ الگوی طراحی نرم‌افزار
طبق تعریف، برای استفاده از الگوها در هر برنامه‌ای که از آن‌ها استفاده می‌کند، باید از نو برنامه‌نویسی کرد. از آن‌جایی که بعضی از نویسندگان این نکته را مخالف با en:Code reuse آن‌گونه که توسط مهندسی نرم‌افزار بر پایه پیکرپار فراهم می‌شود، می‌بینند، پژوهش‌گران تلاش کرده‌اند تا الگوها را به پیکرپارها تبدیل کنند. میر و آرنوت توانستند دو سوم الگوهایی را که رویشان کار می‌کردند، به صورت کامل یا جزئی به پیکرپار تبدیل کنند. معمار سخت افزار
بسیاری از اجزای سخت افزاری تجاری یا از قبل توسعه یافته ممکن است به‌طور مستقل با توجه به محدودیت‌هایی مانند هزینه، پاسخ، توان عملیاتی و غیره انتخاب شوند. در برخی موارد، معمار می‌تواند بدون کمک سیستم نهایی را مونتاژ کند. یا ممکن است هنوز به کمک یک مهندس سخت افزار برای انتخاب اجزا و طراحی و ساخت هر عملکرد با هدف خاص نیاز داشته باشد. معماران (یا مهندسان) همچنین ممکن است از کمک متخصصان در زمینه ایمنی، امنیت، ارتباطات، سخت افزار با هدف ویژه، گرافیک، عوامل انسانی، آزمایش و ارزیابی، کنترل کیفیت، مدیریت رابط و غیره استفاده کنند. یک تیم معماری سخت افزاری مؤثر باید دسترسی فوری به متخصصان در تخصص‌های حیاتی. یک معمار که یک ساختمان را برنامه‌ریزی می‌کند، روی طرح کلی کار می‌کند و مطمئن می‌شود که برای ساکنان آن خوشایند و مفید خواهد بود. در حالی که ممکن است یک معمار به تنهایی برای ساختن یک خانه تک‌خانواده کافی باشد، ممکن است به مهندسان زیادی نیاز باشد، علاوه بر این، برای حل مشکلات دقیقی که هنگام طراحی یک ساختمان مرتفع جدید ایجاد می‌شود. اگر کار به اندازه کافی بزرگ و پیچیده باشد، بخش‌هایی از معماری ممکن است به عنوان اجزا طراحی شوند؛ یعنی اگر ما در حال ساخت یک مجتمع مسکونی هستیم، ممکن است یک معمار برای مجتمع و یک معمار برای هر نوع ساختمان به عنوان بخشی از یک تیم معماری داشته باشیم. طراحی بالا به پایین و پایین به بالا
در پروسه توسعه و پیاده‌سازی نرم‌افزار روشهای بالا به پایین و پایین به بالا نقش اساسی دارند. روش بالا به پایین تأکید بر روی برنامه‌ریزی و درک کامل برنامه برنامه دارد. به طبع هیچ کد زنی نمی‌تواند شروع شود تا زمانیکه به سطح کافی جزئیات در طراحی حداقل چندین بخش سیستم برسیم. روش بالا به پایین با متصل کردن و جایگزین کردن زیرسیستم‌ها با ریشه عمل می‌کند. به هر حال تست نهایی عملکردها را تا زمان طراحی لازم صورت بگیرد، به تأخیر می‌اندازد. در حالی که روش پایین به بالا به کد زنی و تست زود هنگام تمرکز دارد؛ که این امر به محض مشخص شدن اولین بخش‌های برنامه قابل شروع است. به هر حال این روش نیز ضرر خود را دارد. به این صورت که ما این ریسک را می‌پذیریم که کد زنی را در حالتی شروع کنیم که دید کافی از سیستم و اجزایی که باید به هم مرتبط شوند نداریم در حالی که ممکن است این اجزا و نحوه ارتباطشان با هم آنگونه که در اول به نظر می‌رسد ساده نباشد. پیشرفت تدریجی کدها از مشخصات اصلی این روش می‌باشد. مهندسی معکوس
محیط کاری (Quick Surface Reconstruction (QSR برای بازسازی سریع و آسان سطوح از روی داده‌های خروجی ابر نقاط مورد استفاده قرار می‌گیرد. این محیط با توجه به نوع شکل ورودی، چندین روش مختلف برای بازسازی سطوح ارائه می‌دهد. از عمده کاربردهای مهندسی معکوس، طراحی یک مدل سه بعدی با استفاده از عکس یا تصویر سه نما می‌باشد. محیط کاری (FreeStyle Sketch Tracer (FSK بخشی از مجموعه طراحی سطوح CATIA شما را قادر می‌سازد تا طرح‌ها، عکس‌ها یا هر نوع ترسیمه دوبعدی را وارد کرده و موقعیت و مقیاس آن را در فضای سه بعدی تعیین کنید. سپس می‌توانید از سایر محیط‌های طراحی سطوح یعنی FreeStyle، Generative Shape Design و Imagine & Shape برای ترسیم المان‌های هندسی بر روی این طرح‌ها استفاده نموده و در نهایت مدل سه بعدی مورد نظر را ایجاد نمایید. ساخت نرم‌افزار
هدف از تست نرم‌افزار کاهش فاصله زمانی آشکار سازی خطاهای کدنویسی است. در بسیاری از مواقع، تست ساخت بلااستفاده پس از نوشتن کد اولیه صورت می‌پذیرد. در راستای این هدف معمولاً مهندس نرم‌افزار، از دو روش تست کردن استفاده می‌کند: تست واحد و تست مجتع. آزمون نرم‌افزار
روشهای ارزیابی روش جعبه سفید دانستن نحوه کار داخلی برنامه امکان تأیید نحوه عمل هر تکه کد و مسیر اجرا مراحل اولیه ارزیابی روش جعبه سیاه دانستن عمل مورد انتظار و مطلوب امکان تأیید کاری که سیستم باید انجام دهد مراحل انتهایی ارزیابی استرتژی تست استراتژی تست نرم‌افزار یک توصیف رسمی از این است که نرم‌افزار چگونه تست خواهد شد. هدف استراتژی تست تعریف همه مراحل برای فرایند تست نرم‌افزار است که شامل برنامه‌ریزی آزمایش، طراحی ابزار آرمایش، اجرای آزمایش و جمع‌آوری و ارزیابی داده‌های بدست آمده باشد. معیارهای نرم‌افزارسنجی
شاخص میزان بهروه وری منابع کامپیوتری (بهره وری سخت افزار) نشان می‌دهد که آیا نرم افزار مذکور مقدارمشخص شده در برنامه‌ریزی را استفاده می‌کند یا نه. منابع معمول کامپیوتر شامل سرعت پردازنده مرکزی (CPU)، ورودی خروجی ها(I/O) و حافظه اصلی (RAM)می‌باشند. برای بعضی نرم افزارها، محدودیت‌ها تأثیر قابل توجهی در طراحی و پیاده‌سازی و تست محصول را اعمال می‌کنند. این محدودیت‌ها ممکن است در برنامه ریزی‌های دیگر، و طراحی‌های دیگر و به عنوان راهنمای منابع سخت افزاری مورد نیاز به صورت فراگیر مورد استفاده قرار گیرند. ساخت به کمک رایانه
این روند با قسمت سختی آغاز می‌شود که به طرز نا همواری مدل را شبیه‌سازی می‌کند و در فاصلهٔ جبرانی ثابت از مدل، جدا می‌شود. یک مسیر نیمه اتمامی باید میزان کمی از مواد را از بین برد طوری‌که ابزار بتواند به طرز صحیحی در زمان اتمام کار جدا شود، اما نه آنچنان کم که ابزار و مواد به جای ارسال، بازتاب داشته باشند. از استراتژی‌های رایج می‌توان به این موارد نام برد: مسیرهای raster، مسیرهای خط آبی، مسیرهای روند ثابت، pecil melling. مدل‌سازی اطلاعات ساختمان
روش مخزن گسترده روشی است که اکثر طراحان و پیمانکاران از آن استفاده می‌کنند. در این روش، مدل BIM به دسته‌ای از پایگاه داده‌های جداگانه، که توسط برنامه‌های مستقلی ایجاد شده‌اند، دسترسی دارد. به عنوان مثال، تمام اطلاعات مورد نیاز جهت تخمین مالی پروژه در برنامه مستقل مربوط قرار دارد. این برنامه جهت انجام کار خود احتیاج به یک ارتباط دو طرفه با مدل سه بعدی BIM دارد تا به مبادله اطلاعات لازم بپردازد. این کار در همان مراحل اولیه طراحی امکان‌پذیر می‌باشد؛ بنابراین با وجود استفاده از منابع مستقل داده به دلیل خاصیتی به نام Interoperability تمام اطلاعات گروه‌های مختلف درگیر در پروژه یکپارچه می‌گردند. به این ترتیب گروهای طراحی شامل معماری، سازه، تأسیسات برقی و مکانیکی مدل‌های خود را به صورت جداگانه در نرم‌افزارهایی از قبیل Autodesk revit تهیه نموده و در نهایت به کمک نرم‌افزارهایی مانند Autodesk NavisWorks روی هم‌گذاری شده تا مدل یکپارچه BIM بدست آید. کارآیی کامپیوتر
یک طراح پردازنده اغلب برای اجرای یک مجموعه دستورالعمل خاص مورد نیاز است، و بنابراین نمی‌تواند N را تغییر دهد. گاهی اوقات یک طراح برای بهبود کارایی بر بهبود قابل توجه در f (با تکنیک‌هایی مانند پایپلاین‌های عمیق‌تر و حافظه نهان سریع تر) تمرکز می‌کند، در حالی که (امیدوار است) C، بیش از حد فدای این امر نشود - منجر به طراحی پردازنده سرعتی (ترجیح سرعت کلاک بر IPC) می‌شود. گاهی اوقات یک طراح برای بهبود کارایی بر بهبود قابل توجه در CPI (با تکنیک‌هایی مانند خروج از دستور در حال اجرا، پردازنده‌های فوق مقیاس، حافظه نهان بزرگتر، حافظه نهان با بهبود نرخ ضربه (برای حافظه نهان)، بهبود پیش‌بینی پرش، اجرای حدسی و گمان طور و غیره) بر بهبود عملکرد تمرکز می‌کند، در حالی که (امیدوار است) بیش از حد فرکانس کلاک را قربانی نکند - که منجر به طراحی CPU بِرِینیَک (نابغه) می‌شود. برای یک مجموعه دستورالعمل (و بنابراین N ثابت) و فرایند نیمه هادی، حداکثر کارایی تک رشته‌ای (formula_8) نیاز به تعادل بین تکنیک‌های برینیک و تکنیک‌های سرعتی دارد. ساخت نرم‌افزار
کاهش پیچیدگی نرم فزار به صورت عمده از آن جایی ناشی می‌شود که اکثریت مردم توانایی به حافظه سپردن جزئیات ساختاری و اطلاعات پیچیده را در حافظه خود ندارند. کاهش پیچیدگی تنها از راه تأکید بر خلق کدهای ساده و خوانا میسر است، و هوشمندانه بودن کدها تنها بر پیچیدگی کد می‌افزاید. برای خلق کدهای ساده و خوانا، می‌بایست از یک سری اصول، استانداردها و تکنیک‌های برنامه‌نویسی تبعیت کرد. استفاده از تکنیک‌های کیفیت متمرکز بر ساخت نیز برای کا منطق فازی
برای هر دستور کار و خواسته عمل‌کرد مکانیکی، الکترومغناطیسی یا نرم‌افزاری و غیره که برای آن فرمول یا دستورالعمل مطلق و شفاف ریاضی وجود نداشته باشد و به‌ویژه زمانی که دستور کار به‌وسیلهٔ جملات انشاء شده باشد، نرم‌افزار متکی به منطق فازی راه‌گشا و کارآمد است. توسعه نرم‌افزاری چابک
اخیراً موفقیت‌ها، چالش‌ها و محدودیت‌هایی که در انطباق با متدهای چابک در یک سازمان بزرگ مشاهده می‌شوند، مستندسازی شده‌اند. در شرایط برون‌سپاری توسعهٔ چابک، Michael Hckett، معاون رئیس شرکت LogiGear گفته‌است «یک تیم دورکار... باید این موارد را داشته باشد: تخصص، تجربه، مهارت‌های ارتباطی خوب، تفاهم بین فرهنگ‌ها، اعتماد و تفاهم بین اعضا، گروه‌ها و با یکدیگر.». متدهای چابک به‌طور گسترده برای توسعهٔ محصولات نرم‌افزاری به کار رفته‌اند، بعضی از آن‌ها نیز از خصوصیات مشخصی از نرم‌افزار، مانند فناوری‌های موضوع استفاده می‌کنند. اگرچه این فناوری‌ها می‌توانند برای محصولات غیر نرم‌افزاری (مانند کامپیوترها، وسایل نقلیهٔ موتوری، وسایل پزشکی، خوراک و پوشاک) نیز به کار گرفته شوند. همچنین تحلیل ریسک می‌تواند برای انتخاب بین متدهای انطباقی (چابک یا ارزش‌محور) و پیشگویانه (برنامه‌محور) استفاده شود. Barry Boehm و Richard Turner می‌گویند که هر سوی این زنجیره پایهٔ اصلی (home ground) خاص خود را دارد، که به شرح زیر است: تروجان سخت‌افزاری
برای سازمان‌های دولتی تغییر طراحی به صورت بدخواهانه، و مخرب یک تهدید محسوب می‌شود. یکی از راه‌های کاهش آسیب‌پذیری در بخش‌های نظامی، مالی، انرژی و اقتصادی، رفع شک در مورد صحت سخت‌افزار است. از آنجا که ساخت در کارخانجات غیرقابل اعتماد رایج است، روش‌های تشخیص پیشرفته‌ای معرفی شده‌اند که می‌توانند اجزایی که مهاجم آنها را در سخت‌افزار پنهان کرده، یا قصد خرابکاری در عملکرد مدار دارند، تشخیص دهند. قفل نرم‌افزاری
این مقاله دربارهٔ شیوه و راهکارهای گوناگون طراحی و پیاده‌سازی قفل‌های نرم‌افزاری می‌باشد. ضرورت بکار بردن قفلهای نرم‌افزاری آنجا مشخص می‌شود که حاصل تلاش شبانه‌روزی یک برنامه‌نویس، به سادگی و بدون آنکه چیزی نصیب او شود مورد استفاده همگان قرار می‌گیرد. البته گونه دیگری از قفل‌ها وجود دارد که به جای نرم‌افزار از یک قطعه سخت‌افزاری برای جلوگیری از کپی و استفاده غیرمجاز استفاده می‌کند. معمار سخت افزار
توسعه سطح اول الزامات مهندسی سخت افزار یک تمرین صرفاً تحلیلی نیست و باید معمار و مهندس سخت افزار را نیز درگیر کند. اگر قرار است مصالحه‌ای صورت گیرد، برای برآورده کردن محدودیت‌هایی مانند هزینه، برنامه، قدرت یا فضا، معمار باید اطمینان حاصل کند که محصول نهایی و ظاهر و احساس کلی از هدف کاربر دور نمی‌شود. مهندس باید روی توسعه طرحی تمرکز کند که محدودیت‌ها را بهینه کند اما محصولی قابل اجرا و قابل اعتماد را تضمین کند. معمار در درجه اول به راحتی و قابلیت استفاده محصول می‌پردازد. مهندس در درجه اول به تولید و سودمندی محصول می‌پردازد. مایکل ای. جکسون
بررسی مشکلات یا رویکرد قاب مشکلات سومین روش ایجاد شده توسط جکسون است. این روش تلاش می‌کند تا تمامی نرم‌افزارها را پشتیبانی کند و نه فقط سیستم‌ها را. طرح اصلی این روش برای اولین بار در کتاب "احتیاجات و مشخصات نرم‌افزار" بیان شده و در "قاب مشکلات" به صورت کامل توضیح داده شد. اولین کارگاه جهانی پیشرفت‌ها و کاربردهای قاب مشکلات در بیست و ششمین کنفرانس بین‌المللی مهندسی نرم‌افزار(آی‌سی‌اس‌ایی) در ادینبرو اسکاتلند برگزار شد. معماری رایانه با زبان سطح بالا
از دهه ۱۹۸۰، تمرکز تحقیق و پیاده‌سازی در معماری‌های کامپیوتری همه منظوره عمدتاً در معماری‌های ریسک مانند بوده‌است، معمولاً معماری‌های ذخیره‌سازی بار-ذخیره‌ای غنی از ثبت داخلی، با موردهای نسبتاً پایدار و غیر اختصاصی زبان، دارای چندین ثب‌ها، خط لوله. و اخیراً سیستم‌های چند هسته ای، به جای زبان خاص. پشتیبانی زبان بر روی کامپایلرها و زمان اجرا آنها و مفسرها و ماشین‌های مجازی آنها (به ویژه ماشین‌ها) با پشتیبانی مستقیم سخت‌افزاری کمی متمرکز شده‌است. به عنوان مثال، زمان اجرا فعلی برای نشانگرهای برچسب‌گذاری شده را پیاده‌سازی می‌کند، که علیرغم اینکه سخت‌افزار یک معماری برچسب‌دار نیست، از آن‌ها برای بررسی نوع و جمع‌آوری زباله استفاده می‌کند. طراحی مبتنی بر مدل
طراحی مبتنی بر مدل () یک روش ریاضی و گرافیکی است، که برای حل مشکلات مربوط به طراحی سیستم‌های کنترل پیچیده، پردازش سیگنال و اجرای سیستم‌های ارتباطی، مورد استفاده قرار می‌گیرد. طراحی مبتنی بر مدل، فرایندی برای طراحی و پیاده‌سازی سیستم‌های کنترل است که در آن، تمامی مراحل طراحی، پیاده‌سازی، تست و ارزیابی سیستم کنترل با استفاده از یک مدل نرم‌افزاری انجام می‌شود. این روش نخستین بار در دهه ۱۹۲۰ میلادی مطرح شد و امروزه در بسیاری از تجهیزات کنترل حرکت، تأسیسات و تجهیزات صنعتی، صنایع هوافضا و خودروسازی استفاده می‌شود. معماری چندلایه
معماری چندلایه (در مهندسی نرم‌افزار) برای آسانتر نمودن پردازش رایانه‌ای بکار می‌رود. این گونه معماری برای توصیف و تشریح فرایندی بکار می‌رود که در آن درجه‌ای از تفکیک میان اجزای گسسته بدست آمده باشد. این تفکیک توسط یک یا چند پیشکار نرم‌افزاری اعمال می‌شود. مثالی از آن کاربرد میان افزار برای افزایش بهره‌وری خدمات داده‌ای میان یک کاربر و یک پایگاه داده‌ها می‌باشد. همچنین ممکن است از این عبارت با عنوان معماری n-لایه یاد شود. بیشترین شکل استفاده آن در حالت معماری سه-لایه می‌باشد. برنامه ریزی و طراحی شبکه
به دلیل پیچیدگی اندازه گیری شبکه ، این کار معمولاً با استفاده از ابزارهای نرم افزاری تخصصی انجام می شود. در حالی که محققان معمولاً برای مطالعه یک مشکل خاص ، نرم افزار سفارشی تهیه می کنند ، اپراتورهای شبکه معمولاً از نرم افزارهای برنامه ریزی شبکه تجاری استفاده می کنند. مهندسی کانسی
مهندسی کانسی همواره یک روش پیشرفته به لحاظ ریاضیات بوده‌است. بسیاری از انواع آن به دانش تخصصی خوب و مقدار معقولی از تجربه برای انجام مطالعات نیاز دارند. این مسئله همچنین مانع بزرگی برای کاربرد گسترده مهندسی کانسی بوده‌است. به منظور تسهیل کار برخی از بسته‌های نرم‌افزاری در سال‌های اخیر توسعه داده شده‌است که اغلب آن‌ها در ژاپن تولید شده‌اند. دو نوع مختلف از بسته‌های نرم‌افزاری وجود دارد: کنسول کاربران برنامه‌های نرم‌افزاری هستند که طراحی محصول براساس اولویت‌های ذهنی کاربران کانسی را محاسبه و ارائه می‌کنند. با این حال، این نرم‌افزار نیاز به یک پایگاه داده دارد که ارتباطات بین کانسی و ترکیب ویژگی‌های محصول را مورد بررسی قرار می‌دهد. برای ساخت چنین پایگاه‌های داده‌ای، ابزارهای جمع‌آوری داده‌ها و تجزیه و تحلیل داده‌ها را می‌توان مورد استفاده قرار داد. ابزارهای بیشتری مورد استفاده در شرکت‌ها و دانشگاه‌ها وجود دارد که ممکن است برای عموم در دسترس نباشد. معماری ۳ لایه
در مهندسی نرم افزار، سیستم‌های نرم افزاری را به دلیل کاهش پیچیدگی و ساده‌تر شدن آن‌ها و همچنین به خاطر تسهیل در امر نگــهداری و اعمال تغییرات در آنها، به چـند زیر سیستم تقسیم کـرده و قسمت‌های مستقل سیستم را به صورت لایه‌های جداگانه و مستقل از هم طراحی می‌کنند. هر کدام از این لایه‌ها ضمن اینکه وظیفه خاص خود را دارند، با هم در ارتباط بوده به‌طوری‌که هر لایه به لایه‌های بالایی و پایینی خود سرویس داده و از آن‌ها سرویس می‌گیرد. انتقال اطلاعات و داده‌ها در بین این لایه‌ها از طریق Objectهایی که اصطلاحا DTO نامـیده می‌شوند، انجام می‌گیرد و کاربر نهایی فقط با لایه بیرونی در ارتباط بوده و کاری با لایه‌های دیگر ندارد. به این روش طراحی سیستم‌های نرم افزاری، معماری چندلایه یا N-Tier گفته می‌شود. شتاب‌دهنده سخت‌افزاری
مزایای نرم‌افزاری نرم‌افزار عبارتند از: توسعه سریعتر (به سرعت سریعتر به بازار)، هزینه‌های مهندسی هزینه‌های غیر تکراری، انتقال قابلیت افزایش، و سهولت به روز رسانی ویژگیها یا تکه کردن اشکالات، به هزینه سربار برای محاسبه عملیات عمومی. مزایای سخت افزاری عبارتند از: سرعت بالا، کاهش مصرف برق، تأخیر کمتر، افزایش موازی بودن و پهنای باند و استفاده بهتر از قطعات و اجزای عملکردی موجود در یک مدار مجتمع؛ در هزینه توانایی کمتر برای به روز رسانی طرح‌ها، پس از آن بر روی سیلیکون پراکنده شده و هزینه‌های بالای تأیید عملیاتی و زمان به بازار افزایش می‌یابد. در سلسله مراتب سیستم‌های محاسباتی دیجیتال اعم از پردازنده همه منظوره به‌طور کامل سفارشی سخت افزار، یک معاوضه بین انعطاف‌پذیری و بهره‌وری وجود دارد، با راندمان افزایش سفارشات از قدر زمانی که هر برنامه با توجه به بالاتر که سلسله مراتب اجرا شده‌است. این سلسله مراتب شامل پردازنده‌های عمومی مانند پردازنده‌ها، پردازنده‌های متفاوتی مانند پردازنده‌های گرافیکی، عملکرد ثابت ساخته شده در آرایه‌های دروازه قابل برنامه‌ریزی فازی (FPGAها) و عملکرد ثابت بر روی مدار یکپارچه برنامه کاربردی (ASICs) است. طراحی باز
با این وجود در مقایسه با توسعهٔ نرم‌افزار، موانعی چند پیش روی طرح-باز وجود دارد؛ زیرا در توسعهٔ نرم‌افزار، ابزار جا افتاده و بسیار کاربردی موجود هستند و تکثیر و توزیع کد هزینه ای نزدیک به صفر دارد. ساخت، آزمایش و اصلاح طراحی‌های فیزیکی آنقدرها هم آسان نیست، زیرا برای ساختن مصنوع فیزیکی تلاش، زمان و هزینه لازم است؛ اگر چه با وجود دسترسی به فناوریهای تولید موجود که به‌طور انعطاف‌پذیری توسط کامپیوتر کنترل می‌شوند، پیچیدگی و تلاش برای ساخت به‌طور قابل توجهی کاهش می‌یابد. مهندسی نرم‌افزار
مهندسی نرم‌افزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرم‌افزاری با کیفیت است. زبان توصیف سخت‌افزار
از لحاظ تاریخی، بازبینی طراحی یک کار پرزحمت، حلقه تکراری نوشتن و اجرای موارد آزمون شبیه‌سازی در مقابل طراحی تحت تست بود. چون که تراشه‌های طراحی بزرگتر و پیچیده‌تر شده‌اند، وظیفه بررسی طراحی به نقطه‌ای که آن را در حال حاضر غالب برنامه تیمی طراحی است افزایش پیدا کرده‌است. دنبال راه‌هایی برای بهبود بهره‌وری طراحی، طراحی الکترونیکی صنعت اتوماسیون زبان مشخصات اموال را توسعه داده است. در شرایط تأیید رسمی، ویژگی‌ها بیانیه واقعی در مورد رفتار مورد انتظار یا فرض‌های شی دیگری است. در حالت ایده‌آل، برای توصیف دادن ،HDL می‌توان ثابت کرد درستی یا غلط بودن یک ملک یا ویژگی را با استفاده از روش‌های رسمی ریاضیات، در مورد عملی، خیلی از ویژگی‌ها نمی‌توانند ثابت بشوند زیرا آن‌ها یک فضای راه حل نامحدود را اشغال می‌کنند. به هر حال اگر یک مجموعه از فرضیات عمل یا محدودیت‌ها فراهم شوند، یک چک‌کننده ملک می‌تواند ویژگی‌های خاصی را توسط فضای راه حل باریک معین کاوش کند. طراحی بالا به پایین و پایین به بالا
روش بالا به پایین یک روش برنامه‌نویسی است که وابستگی زیادی به روش‌ها و رسم‌های زبان‌های برنامه‌نویسی دارد. به این صورت که وقتی طراحی آغاز می‌شود اجزای سیستم پیچیده به قسمت‌های کوچکتر شکسته می‌شوند. تکنیکی که در برنامه‌نویسی با روش بالا به پایین مورد استفاده قرار می‌گیرد به این صورت است که یک روال اصلی که در آن اسامی بیشتر تابع‌هایی که بعداً مورد نیاز است را بنویسیم. سپس تیم برنامه‌نویسی در هر مرحله تلاش می‌کند که هر یک توابع را پیاده‌سازی و کد مربوط به آن را بنویسد. این چند تکه کردن باعث می‌شود که نوشتن کدهای داخل هر بخش و تابع اسانتر و سریعتر صورت بگیرد. زمانی که کد تمام توابع و زیرروالها نوشته شد، در آن موقع می‌توان برنامه را تست کرد. پس در این روش نوشتن هر تابع به این صورت است که ابتدا نام و فضا تمامی زیر تابع‌های مورد نظر آن را مشخص و سپس وارد تک تک تابع‌ها شده و سعی در نوشتن کد آن داریم. این روال بالا به پایین را برای تک تک تابع‌ها و روال‌ها و قسمت‌های برنامه تکرار می‌کنیم. نرم‌افزار سیستم
نرم‌افزار سیستم به نرم‌افزاری در رایانه گفته می‌شود که به کارکرد سیستم رایانه یا کاربردهای سطح پایین (یا Low Level) رایانه مربوط باشد. این نرم‌افزارها به ساختار فیزیکی سخت‌افزار رایانه وابسته هستند و در نوشتن آن‌ها از زبان‌های سطح پائین مانند زبان اسمبلی استفاده می‌شود. سیستم‌عامل، پوسته ها، درایور ها، میان‌ افزار ها، سیستم های پنجره بندی، موتورهای بازی سازی و نرم افزارهای سودمند از نرم‌افزارهای سیستم هستند. از جمله زبان‌هایی که برای نگارش نرم‌افزارهای سیستمی استفاده می‌شود، زبان برنامه‌نویسی C می‌باشد. کار کردن با سی برای برنامه نویسان راحت‌تر است و آنان این زبان را به اسمبلی ترجیح می‌دهند. اگر برای نگارش نرم‌افزار سیستمی مشکل محدودیت فضای سخت‌افزاری داشته باشیم بهتر است با زبان اسمبلی کار کنیم که حجم آن پایین‌تر است. نرم‌افزارهای سیستمی به سخت‌افزار وابسته‌اند. تست‌افزار
تست‌افزار توسط روش‌های تأیید و اعتبارسنجی تولید می‌شود. تست‌افزارها مانند نرم‌افزار، علاوه بر کدها و فایل‌های باینری شامل موارد آزمایشی، طرح آزمایش، گزارش آزمایش و … هستند. تست‌افزار می‌بایست تحت یک سیستم مدیریت پیکربندی کنترل، ذخیره و صادقانه نگه‌داری شوند. طراحی نرم‌افزار
طراح نرم‌افزار یا معمار ممکن است به مشکلی برخورد کنند که قبلاً توسط افراد دیگری دید شده و حل شده‌استیک تمپلیت یا الگو که راه حل این مشکل مشترک شناخته را توضیح می‌دهد به عنوان طراحی الگوشناخته می‌شود. استفاده مجدد از این الگوها می‌تواند به سرعت بخشیدن به فرایند توسعه نرم‌افزار کمک کند. برنامه‌نویسی رایانه‌ای
اولین قدم در اکثر فرایندهای رسمی توسعه نرم‌افزار، تجزیه و تحلیل الزامات است، و پس از آن آزمایش برای تعیین مدل‌سازی ارزش، پیاده‌سازی و حذف نقص (اشکال زدایی) انجام می‌شود. برای هر یک از این کارها رویکردهای مختلفی وجود دارد. یکی از رویکردهای محبوب برای تجزیه و تحلیل الزامات، استفاده از آنالیز Case است. بسیاری از برنامه نویسان از اشکال توسعه نرم‌افزار Agile استفاده می‌کنند که مراحل مختلف توسعه نرم‌افزار رسمی در چرخه‌های کوتاه که چند هفته به طول می‌انجامند در کنار هم قرار گرفته‌اند. رویکردهای زیادی برای فرایند توسعه نرم‌افزار وجود دارد. زبان توصیف سخت‌افزار
از سوی دیگر، یک کامپایلر نرم‌افزار کد منبع را به یک کد شی ریزپردازنده خاص برای اجرا در ریزپردازنده هدف تبدیل می‌کند. چون HDLها و زبان‌های برنامه‌نویسی قرض می‌کنند مفاهیم و ویژگی‌هایی از یکدیگر، مرز بین آن‌ها کمتر نامشخص شده‌است. با این حال، HDL خالص برای اهداف عمومی توسعه نرم‌افزار کاربردی نامناسب هستند، همان‌طور که زبان‌های برنامه‌نویسی همه منظوره برای مدلسازی سخت‌افزار مناسب نیستند. با این حال، چون سیستم‌های الکترونیکی رشد فزاینده پیچیده‌ای دارند، و سیستم‌های قابل پیکربند به‌طور فزاینده رایج شده‌اند، تمایل به رشد در صنعت برای یک زبان واحد وجود دارد که می‌تواند برخی از وظایف هر دو طراحی سخت‌افزار و برنامه‌نویسی نرم‌افزار را انجام دهند. System C یک نمونه از سخت‌افزار سیستم تعبیه شده‌است که می‌تواند بلوک‌های غیرجزئی معماری (جعبه سیاه با ورودی سیگنال مدل و درایور خروجی) را مدل کند. آسیب‌پذیری اجرای گذرای واحد پردازش مرکزی
روش‌های سخت‌افزاری نیاز به تغییر در طراحی واحد پردازش مرکزی دارند و به همین دلیل نیاز است تا منتظر نسل بعد از سخت‌افزارها بمانیم، با این حال تقریباً تأثیری برروی کارایی سامانه برجای نمی‌گذارند. به‌روزرسانی ریزبرنامه‌ها، برنامه‌ای که واحد پردازش مرکزی بر روی آن در حال اجراست را تغییر می‌دهد و نیاز است تا به ازای هر زوج سیستم‌عامل و واحد پردازش مرکزی، یک وصله منتشر و با سامانه یکپارچه شود. پیشگیری‌های مبتنی بر سیستم‌های عامل و ماشین‌های مجازی در سطح سیستم‌عامل یا لایهٔ ماشین مجازی اعمال می‌شود و بسته به میزان بار وارد بر این بخش از سیستم‌عامل، می‌تواند تأثیر زیادی در کاهش کارایی سامانه داشته باشد. بازسازی نرم‌افزارها نیاز به دوباره‌سازی همه‌ی بخش‌های برنامه دارد و معمولاً تأثیر نامطلوبی بر کارایی سیستم اعمال می‌کند. نسل هشتم معماری کافی لیک در جدول بالا، به گسترهٔ وسیعی از واحدهای پردازش مرکزی اینتل که پیش از آن منتشر شده‌اند هم اعمال می‌شود و به معماری‌های مبتنی بر هستهٔ اینتل، پنتیوم ۴ و اینتل اتم با شروع از Silvermont محدود نمی‌شود. گسترهٔ متفاوتی از ریزمعماری‌های واحد پردازش مرکزی که در جدول بالا به آنها اشاره نشده‌اند هم از این دسته آسیب‌پذیری‌ها در امان نیستند که از این میان می‌توان به پردازنده‌های آی‌بی‌ام پاور ، آرم ، میپس و دیگر واحدهای پردازش مرکزی اشاره کرد. مدل در فرآیند ریخته‌گری
معمولاً از طراحی سیستم تغذیه و کانل‌های اصلی و فرعی به عنوان متودینگ ("methoding") یا روش طراحی ("methods design") یاد می‌شود. این کار را می‌توان به صورت دستی یا تعاملی با استفاده از نرم‌افزار CAD عمومی یا به صورت نیمه خودکار با استفاده از نرم‌افزار مخصوص (مانند AutoCAST) انجام داد. معماری رایانه
هنگامی که یک مجموعه دستورالعمل و معماری خرد طراحی شد، باید یک ماشین عملی ساخته شود. به این فرآیند طراحی "پیاده سازی گفته می‌شود". پیاده سازی معمولاً به عنوان طراحی معماری در نظر گرفته نمی‌شود، بلکه مهندسی طراحی سخت افزار محسوب می‌شود. پیاده سازی را می‌توان به چندین مرحله تقسیم کرد:برای پردازنده‌ها ، کل روند پیاده سازی به گونه‌ای متفاوت سازماندهی می‌شود و اغلب از آن به عنوان طراحی CPU یاد می‌شود. موازی‌سازی در سطح دستورالعمل
دو روش برای موازی‌سازی در سطح دستورالعمل وجود دارد: سخت‌افزار و نرم‌افزار. برنامه زیر را در نظر بگیرید: e = a + b f = c + d m = e * f عملیات ۳ به نتایج عملیات‌های ۱ و ۲ بستگی دارد، بنابراین تا زمانی که هر دو به اتمام نرسند نمی‌توان آن را محاسبه کرد. با این حال، عملیات ۱ و ۲ به هیچ عملیات دیگری بستگی ندارند، بنابراین می‌توان آنها را به‌طور همزمان محاسبه کرد. مهندسی نرم‌افزار به کمک کامپیوتر
این ابزارها برای توسعه نرم‌افزار با کیفیت بالا، بدون نقص و قابل نگهداری بکار برده می‌شوند. این ابزارهای نرم‌افزاری اغلب با روش‌های توسعه سیستم‌های اطلاعاتی با کمک ابزارهای خودکار که در فرایند توسعه نرم‌افزار می‌توانند مورد استفاده قرار بگیرند استفاده می‌شوند. نمونه‌سازی اف‌پی‌جی‌ای
روش‌های تأیید طراحی سخت‌افزار و همچنین نرم‌افزار اولیه و طراحی مجدد سیستم عامل تبدیل به جریان اصلی شده‌اند. طراحی نمونه اس‌اوسی و ای‌اس‌آی‌سی با یک یا چند اف‌پی‌جی‌ای به روش خوبی برای انجام این کار تبدیل شده‌است.موانعی که تیم‌های توسعه یافته که نمونه‌های اف‌پی‌جی‌ای را دریافت می‌کنند با آن روبه رو می‌شوند، می‌توانند به سه «قوانین» تقسیم شوند: قرار دادن یک طراحی اس‌اوسی در یک نمونه اولیه اف‌پی‌جی‌ای مستلزم برنامه‌ریزی دقیق برای دستیابی به اهداف نمونه برداری با کمترین تلاش است. برای به حداقل رساندن توسعه نمونه اولیه، یکی از بهترین شیوه‌ها که به نام «طراحی برای نمونه‌سازی (دی‌اف‌پی)» () نامیده می‌شود، هم بر سبک طراحی اس‌اوسی هم در شیوه‌های پروژه اعمال شده توسط تیم‌های طراحی تأثیر می‌گذارد. توصیه‌های رویه‌ای شامل افزودن توافقنامه دی‌اف‌پی به استانداردهای برنامه‌نویسی RTL، استفاده از یک محیط شبیه‌سازی سازگار با نمونه اولیه و ایجاد استراتژی اشکال‌زدایی در سیستم با تیم نرم‌افزاری است. پروکست
یکی از مهم‌ترین زمینه‌های توسعه علم و فناوری در ریخته‌گری، کاربرد کامپیوتر و روش‌های عددی برای حل مسائل مکانیک سیالات و ترمودینامیک در جریان حرکت مذاب در راهگاه‌ها و قالب و انجماد مذاب در قطعه است. این توسعه به ویژه موجب گردیده تا طراحان بتوانند از طریق طراحی روش‌های تولید به وسیله کامپیوتر قبل از اقدام به ساخت مدل و ریختن فلز مذاب در قالب، به مشخصات ساخت و تولید قطعه دست یافته و از قابل تولید بودن قطعه اطمینان حاصل نمایند. این پیشرفت باعث شده تا طراحان بتوانند قبل از صرف وقت و هزینه‌های زاید نسبت به اصلاح طرح‌های خود اقدام نموده و روش‌های بهینه تولید قطعه ریختگی مورد نظر خود را بفهمند. نتیجه عملی استفاده از نرم‌افزارهای کامپیوتری در طراحی فرایندهای تولید دستیابی سریع به قطعه‌ای ارزان تراست. طراحی نرم‌افزار
در طراحی یک قطعه نرم‌افزاری، جنبه‌های بسیاری وجود دارد. اهمیت هر بررسی باید نشان دهنده اهداف و انتظارات برنامه‌نویسی برای دیدار باشد. برخی از این جنبه‌ها عبارت‌ند از: طراحی به کمک رایانه
نرم‌افزارهای طراحی رایانه‌ای، به نرم‌افزارهایی اطلاق می‌شود که کار ایجاد و ویرایش شکل‌ها را به کمک رایانه انجام می‌دهند. امروزه بیشتر نرم‌افزارهای طراحی به کمک رایانه، نه تنها توانایی ایجاد و ویرایش نقشهٔ دوبعدی و سه‌بعدی قطعات را دارند، بلکه توانایی وارسی (تحلیل) قطعات از نظر مسائل تنش، گرما و مسائل مکانیکی با استفاده از روش المان محدود را دارند. سخت‌افزار متن‌باز
سخت‌افزار متن باز ، همانند نرم‌افزارهای متن‌باز از استانداردهای متن‌باز پیروی کرده و به این گونه طراحی می‌شوند که تمامی اجزاء آن‌ها باز و به راحتی برای همگان قابل دسترس می‌باشند. سخت‌افزار منبع‌باز قسمتی از فرهنگ جنبش متن باز محسوب می‌شود و مفهوم مشابهی دارد. هدف سخت‌افزار منبع‌باز این است که اطلاعات در مورد سخت‌افزار به راحتی در دسترس همه قرار داشته باشد. طراحی سخت‌افزار (مانند طرح‌های مکانیکی، نمودار مدار (شماتیک)، مدار چاپی) بعلاوهٔ نرم‌افزار راه‌انداز سخت‌افزار همگی مطابق قوانین نرم‌افزار آزاد و متن‌باز (FOSS) منتشر می‌شوند. معماری سخت‌افزار
این یک فرایند است زیرا یک رشته از مراحل برای تولید یا تغییر معماری، و / یا طرحی از آن معماری، از یک سیستم سخت‌افزاری در مجموعه‌ای از محدودیت‌ها تعیین شده‌است. سامانه اطلاعاتی
هر سامانه اطلاعاتی از پنج قسمت اصلی تشکیل شده‌است که عبارتند از: ۱-سخت‌افزار که شامل CPU و همه تجهیزات پشتیبانی، ورودی، خروجی، دستگاه‌های ذخیره‌سازی و دستگاه هلی ارتباطی است. ۲-نرم‌افزار به برنامه‌های رایانه‌ای و کتابچه‌های راهنما اطلاق می‌شود. برنامه‌های رایانه‌ای دستورالعمل‌های قابل خواندن ماشین است که به‌طور مستقیم مدارات موجود در قطعات سخت‌افزاری رابرای ایجاد اطلاعات مفید از داده‌ها به‌کار می‌اندازد. ۳-داده اطلاعات خامی هستند که به‌طور کلی به شکل ماشین خوان بر روی دیسک یا نوار و به‌طور کلی حافظه‌ها قرا می‌گیرند تا زمانی که رایانه‌ها به آن نیاز پیدا کنند. ۴-روش به سیاست حاکم بریک سامانه رایانه‌ای دراستفاده از سخت‌افزارها و نرم‌افزارهای موجود گفته می‌شود. ۵-مردم هر سامانه اطلاعاتی براساس نیاز مردم ایجاد شده‌است؛ بنابراین میزان رضایتمندی افراد به یک سامانه نقش بسیار مهمی در تعیین موفقیت و شکست یک سامانه اطلاعاتی دارد. الگوریتم
الف) طراحی الگوریتم‌ها: روش‌های مختلفی برای طراحی الگوریتم‌ها وجود دارد که عبارتند از: روشهای تقسیم و غلبه، روش‌های حریصانه، روش‌های برنامه‌نویسی پویا، روش‌های پسگرد و روش‌های انشعاب و تحدید. مهندسی نرم‌افزار بر پایه مؤلفه
نظریهٔ «نرم‌افزار باید پیکرپارای باشد از پیکرپارهای از پیش‌ساخته شده» برای اولین بار در دستور داگلاس مکتوری در کنفرانس ناتو که موضوع آن مهندسی نرم‌افزار بود در سال ۱۹۶۸ به اسم تولید انبوه نرم‌افزار به چاپ رسید. این کنفرانس برای مقابله با مثلاً بحران نرم‌افزاری برگزار شد. فرمان و فیلترهای گنجایشی ثانویه او در سیستم‌عامل یونیکس اولین اجرا در پیدایش این نظر بود. مفهوم مدرن پیکرپار نرم‌افزار به‌طور گسترده با براد کوکس که آن‌ها را ای‌سی‌های نرم‌افزاری می‌نامید و شروع به تولید و فروش آن‌ها با اختراع برنامه ابجکتیو-سی کرد ارائه شد. آی‌بی‌ام در اوایل ۱۹۹۰ با سیستم مدل شی‌گرایی پیشرو این زمینه شد. بعضی‌ها می‌گویند که مایکروسافت با گسترش واقعی پیکرپارهای نرم‌افزاری با اوال‌ای و کام هموار کرده‌است که امروزه چندین مدل از پیکرپارهای نرم‌افزاری موفق موجود است. تروجان سخت‌افزاری
ابتدا برای ظاهر شدن مدار، روکش آن برش داده می‌شود. سپس، مهندس در حالی که لایه‌های تراشه را خرد می‌کند، مرتباً سطح مدار را اسکن می‌کند. چندین عملیات برای اسکن مدار وجود دارد. روشهای معمول بازرسی بصری عبارتند از: اسکن میکروسکوپ نوری(SOM) (SEM) , تجزیه و تحلیل مدار تصویربرداری پیکو دوم (PICA)، تصویربرداری کنتراست ولتاژ (VCI) , (LIVA) یا (CIVA). برای مقایسه طرح کف تراشه باید با تصویر تراشه واقعی مقایسه شود. این هنوز هم بسیار چالش‌برانگیز است. برای تشخیص تروجان سخت‌افزاری که شامل کلیدهای (رمزنگاری) متفاوت است، با استفاده از تصویری که تفاوت را نشان می‌دهد می‌توان به ساختار متفاوت روی تراشه پی برد. تنها تروجان سخت‌افزاری شناخته شده با استفاده از کلیدهای رمزنگاری منحصر به فرد اما دارای همان ساختار است. این خاصیت غیرقابل کشف بودن تروجان را افزایش می‌دهد. نرم‌افزارهای رشته مهندسی مکانیک شاخه CAD و CAE
معنای لغوی Computer Aided Design طراحی به کمک رایانه است. واژه CAD یعنی ابتدایی‌ترین مرحله برای ساخت یک قطعه و معرفی آن به یک رایانه است که این کار توسط یک اپراتور (کاربر) صورت می‌گیرد که با طراحی سه بعدی توسط نرم‌افزاری خاص خود انجام می‌شود یا حتی توسط اسکن سه بعدی اجسام صورت می‌گیرد. اگر قطعه پیچیده باشد هر قسمت آن را جداگانه طراحی کرده و سپس اسمبل می‌کنند. نرم‌افزار طراحی و کنترل سمعی و بصری
نرم‌افزار طراحی Stardraw برای ایجاد سیستم‌های سمعی و بصری به کار برده می‌شود. این شامل طرحهای سمعی و بصری، (مشابه نمودار شبکه کامپیوتر)، پوسته Rack، طراحی‌های ارائه (نمودارهای شکلی)، پوسته‌های پانل برای کارهای فلزی، طراحی‌های پلان نقشه، و گزارش هامربوط مانند موارد موردنیاز، نقل قول و برنامه‌های تلویزیونی می‌باشد. نرم‌افزار شامل ابزارهای پیش فرض به منظور تسریع طراحی سیستم سمعی و بصری می‌باشد. نرم‌افزارهای این دسته شامل موارد زیر می‌باشند: معمار سخت افزار
از آنجایی که نیازمندی‌ها در طول یک پروژه، به ویژه پروژه طولانی، تکامل می‌یابند، تا زمانی که سیستم سخت‌افزاری توسط کاربر پذیرفته شود، به یک معمار نیاز است: معمار بهترین بیمه است که هیچ تغییر و تفسیری در طول توسعه، دیدگاه کاربر را به خطر نمی‌اندازد. اکثر مهندسان سخت افزار متخصص هستند. آنها کاربردهای طراحی و توسعه سخت افزار را از نزدیک می‌دانند، دانش خود را در موقعیت‌های عملی به کار می‌گیرند؛ یعنی مشکلات دنیای واقعی را حل می‌کنند، هزینه مزایای راه حل‌های مختلف را در تخصص سخت افزار خود ارزیابی می‌کنند و از عملکرد صحیح هر آنچه طراحی می‌کنند اطمینان حاصل می‌کنند. معماران سخت افزار عمومی هستند. از آنها انتظار نمی‌رود در هیچ‌یک از فناوری‌ها یا رویکردهای سخت افزاری متخصص باشند، اما انتظار می‌رود که از بسیاری از آنها آگاه باشند و بتوانند کاربرد آنها را در موقعیت‌های خاص قضاوت کنند. آن‌ها همچنین دانش خود را در موقعیت‌های عملی به کار می‌گیرند، اما هزینه یا مزایای راه‌حل‌های مختلف را با استفاده از فن‌آوری‌های سخت‌افزاری مختلف، به‌عنوان مثال، به‌خصوص توسعه‌یافته در مقابل اجزای سخت‌افزاری موجود تجاری، ارزیابی می‌کنند و اطمینان می‌دهند که سیستم به‌طور کلی مطابق انتظارات کاربر عمل می‌کند. کیفیت نرم‌افزار
در حال حاضر هر دو نوع نرم‌افزار از معماری چند لایه ای و پیشرفته استفاده می کنند ، بنابراین تجزیه و تحلیل و اندازه گیری کیفیت نرم‌افزار باید به صورت جامع و مداوم مدیریت شود ، و از هدف نهایی یا استفاده نهایی نرم‌افزار جدا شوند. الگوی خلاقیت
الگوی خلاقیت () در مهندسی نرم‌افزار، به نوعی از الگوهای طراحی نرم‌افزاری اطلاق می‌گردد، که با مکانیسم‌های ایجاد و خلق اشیاء سروکار دارند و سعی دارند تا اشیاء را به روشی متناسب با موقعیت شیء مورد نظر، ایجاد نمایند. در این فرایند شکل اصلی ایجاد اشیاء می‌تواند منجر به بروز مشکلاتی در طراحی یا اعمال پیچیدگی بیشتر، در طراحی گردد، که الگوهای خلاقیت این مشکلات را با اعمال نوعی از کنترل بر فرایند ایجاد اشیاء حل می‌نمایند. الگوهای خلاقیت اغلب به الگوهای خلاقیت اشیاء و الگوهای کلاس-خلاقیت تفکیک می‌شوند. ۵ الگوی طراحی شناخته‌شده که جزئی از الگوهای خلاقیت محسوب می‌شوند، شامل: الگوی کارخانه انتزاعی، الگوی سازنده، الگوی متد کارخانه شیء، الگوی نمونه اولیه و الگوی یگانه می‌باشند. مهندسی نرم‌افزار بر پایه مؤلفه
نظریه در برنامه‌نویسی شیءگرا به این گونه‌است که نرم‌افزار باید با توجه به مدل‌های موضوع‌های حقیقی و فرضی که ارائه می‌کند نوشته شود. برنامه‌نویسی شیءگرا و ترتیبات مرتبط با طراحی شیءگرا و آنالیز شیءگرا روی ساختن فعل و انفعالات واقعی تمرکز کرده و سعی می‌کند فعل‌ها و اسم‌هایی بسازد که بتوان آن‌ها را به صورت مستقیم و شهودی برای کابران نهایی و برنامه هائی که آن‌ها را به صورت کد برای کاربران نهائی تبدیل می‌کنند استفاده کرد. در مقایسه نرم‌افزارهای پیکرپار ای چنین فرضیاتی درست نمی‌کنند وبجای آن می‌گوید که نرم‌افزارها باید از پیکرپارهای از پیش‌ساخته شده به هم چسبیده استفاده کرد مثل رشته‌های الکترونیک و مکانیک. با قبول اینکه توضیحات خوب پیکرپارها بر عکس موضوعات و اشیاء می‌تواند در مقابل شناخت حضوری و شهودی باشد. حتی بعضی از همسالان پیکرپارهای نرم‌افزاری را یک الگوی جدید برنامه‌نویسی می‌دانند: برنامه‌نویسی شیءگرا. بعضی‌ها بر این عقیده آن که این تفاوت‌ها را دانشمندان کامپوتر پیشین ساخته‌اند. با نظریه Donald Knuth دربارهٔ برنامه‌نویسی بر مبنای سواد که به صورت خوشبینانه همگرایی بین مدل هلی رسمی و شهودی را فرض می‌کند، نظریه دیکسترا در مقاله The Cruelty of Really Teaching Computer Science، (بیرحمی تدریس واقعی علم کامپوتر) بیان می‌کند که برنامه‌ریزی فقط یک شاخه ساده از ریاضیات است. در دو حالت، این دو عقیده و نظر باعث بحث‌های آکادمیک زیادی در مورد مزایا و معایب این دو دیدگاه و راهبرهای ممکن برای ترکیب این دو گردید. از نظر بعضی‌ها این دو رقیب یکدیگر نبوده و فقط دو راه حل متفاوت با دیدگاه‌های متفاوت برای حل یک موضوع هستند. برای نوشتن یک برنامه احتیاج به تلاش‌های بسیار زیاد و آگاهی فراوان است که بتوانند بارها استفاده شود. هر جز نیاز به: کاملاً مستند باشد بیشتر آزمایش شود قادر به چک کردن ورودی‌های بزرگ باشد بتواند پیام‌های خطای مفید را به موقع نشان دهد. با یک آگاهی که این برنامه می‌تواند برای استفاده‌های پیش‌بینی نشده‌استفاده شود. یک مکانیزم برای جبران کردن تلاش کسانی که روی این برنامه سرمایه‌گذاری کرده‌اند. تروجان سخت‌افزاری
(BIST) و (DFT) روش‌هایی هستند برای اضافه کردن مدار و منطقی به تراشه به منظور تأیید این که مدار مشخصات عملکردی خود را پیاده‌سازی می‌کند. منطق دیگری بر برانگیخته شدن ورودی و سیگنال‌های داخلی یا وضعیت‌های حافظه نظارت می‌کند. این کار به‌طور کلی با محاسبه یا با نمایش دادن رجیسترهای داخلی از طریق ، انجام می‌شود. در جایی که معمولاً DFT با برخی سازوکارهای تست خارجی هماهنگ می‌شود، تراشه‌های دارای BIST مولدهای الگوی تست را با یکدیگر ترکیب می‌کنند. عملکرد BIST اغلب برای انجام تأیید سرعت (سرعت بالا) است. در جایی که امکان استفاده از زنجیره‌های اسکن یا سایر قابلیت‌های DFT با سرعت کم امکان‌پذیر نیست، هر دو روش در ابتدا برای تشخیص خطاهای هنگام تولید ساخته شده بودند، اما همچنین دارای پتانسیل استفادهٔ خوب و بد هستند به این صورت که می‌توان از آنها برای تشخیص برخی از اثرات منطق مخرب بر روی تراشه استفاده کرد، یا منطق مخرب بوسیلهٔ آنها به صورت پنهانی وضعیت چیپ را از راه دور بازرسی کند. گریدی بوچ
بوچ یک روش توسعهٔ نرم‌افزاری به نام روش بوچ ایجاد کرد که در کتاب "طراحی و آنالیز شی‌گرا" خود معرفی شد. او برای ساده کردن کدها، اضافه نمودن کلاس‌ها را توصیه نمود. روش بوچ روشی است که در مهندسی نرم‌افزار استفاده می‌شود. این روش یک زبان مدل‌سازی شی و اسلوب‌شناسی است که به وفور در طراحی و آنالیز شی‌گرا استفاده شده‌است. این روش توسط گریدی بوچ در شرکت نرم‌افزار گویا ایجاد شد. جنبه‌های نمادی روش بوچ امروزه توسط زبان مدل‌سازی یکپارچه(یو ام‌ال) جایگزین شده‌است، که عناصر گرافیکی از روش بوچ را به همراه عناصر تکنیک مدل‌سازی شی (او ام تی) و مهندسی نرم‌افزار شی‌گرا (او او اس ای) در خود دارد. ابعاد روش‌شناختی روش بوچ به چندین اسلوب‌شناسی و فرایند تقسیم شده‌است، مانند فرایند یکپارچه رشنال (آر یو پی). اندازه‌گیری نرم‌افزار
یکی از روشهای اندازه‌گیری نرم‌افزار، معیارهایی است که در برابر خود کد تحلیل می‌شود. این‌ها معیارهای نرم‌افزاری نامیده می‌شوند و شامل معیارهای ساده مانند شمارش تعداد خطوط دریک فایل منفرد، تعداد پرونده‌های موجود در یک برنامه، تعداد توابع موجود در یک پرونده و غیرهاین اندازه‌گیری‌ها به یک روش معمول توسعه نرم‌افزار تبدیل شده‌اند. معماری رایانه
رشته معماری رایانه دارای سه زیر مجموعه اصلی است: فناوری‌های دیگری نیز در معماری رایانه وجود دارد. فن آوری‌های زیر در شرکت‌های بزرگتر مانند اینتل مورد استفاده قرار می‌گیرد و در سال 2002 تخمین زده شد که 1٪ از کل معماری رایانه را شامل می‌شود:معماری کلان قابل مشاهده توسط برنامه نویسان : ابزارهای زبان‌های سطح بالاتر مانند کامپایلرها ممکن است یک رابط یا قرارداد ثابت برای برنامه نویسان با استفاده از آنها تعریف کنند، تفاوت بین ISA ، UISA و ریز معماری‌های اساسی را انتزاع کنند. برای مثال، استانداردهای C ،C ++ یا Java، معماری‌های مختلف قابل مشاهده توسط برنامه نویس را تعریف می‌کنند. پیچیدگی زمانی
بنابراین روش‌های گوناگونی طراحی شده‌است تا به کمک آن‌ها الگوریتم‌هایی نوشته و براساس آن‌ها برنامه‌نویسی‌هایی انجام گیرد تا بهترین کارایی از لحاظ پیچیدگی زمانی و مکانی حاصل شود که روش‌های زیر از جمله مهم‌ترین آن‌ها بوده و در کتاب طراحی الگوریتم مورد بحث قرار گرفته‌است: معماری سخت‌افزار
معماری سخت‌افزار بازنمایی یک سیستم سخت‌افزاری (یا مهندسی) الکترونیکی یا الکترومکانیکی، و فرایند و نظم برای اجرای مؤثر طراحی(ها) برای چنین سیستمی است. این بخش به‌طور کلی بخشی از یک سیستم یکپارچه بزرگ‌تر است که شامل اطلاعات، نرم‌افزار و نمونه‌سازی دستگاه است. معمار سخت افزار
یک معمار خوب تضمین می‌کند که سیستم، هر چند پیچیده، بر اساس مفاهیم نسبتاً ساده و تمیز برای هر (زیر) سیستم یا لایه ساخته شده‌است که به راحتی برای همه، به ویژه کاربر، بدون آموزش خاص قابل درک است. معمار از حداقل قوانین استفاده می‌کند تا اطمینان حاصل کند که هر پارتیشن به خوبی تعریف شده‌است و از کلاژها، کارها، میانبرها، یا جزئیات گیج کننده و استثناها پاک است. همان‌طور که نیازهای کاربر تکامل می‌یابد، (زمانی که سیستم وارد میدان شد و مورد استفاده قرار گرفت)، متعاقباً تکامل یک مفهوم ساده بسیار آسان‌تر از مفهومی است که دارای استثنائات، موارد خاص، و بسیاری از نسخه‌های ظریف است. ساخت نرم‌افزار
مطالعات نشان داده‌اند که ترکیبی از این تکنیک‌ها نیاز مورد استفاده قرار گیرد برای رسیدن به بالا در تشخیص نقص رأی دادن. مطالعات دیگر نشان داد که افراد مختلف تمایل به پیدا کردن مختلف نقص. یک مطالعه نشان داد که شدید برنامه‌نویسی شیوه‌های جفت برنامه‌نویسیبا میز چکهای تست واحدبا ادغام تستو آزمون رگرسیون می‌تواند دستیابی به ۹۰ درصد نقص نرخ تشخیص است. یک آزمایش شامل برنامه نویسان با تجربه دریافتند که به‌طور متوسط آن‌ها قادر به پیدا کردن ۵ خطا (۹ در بهترین حالت) از ۱۵ خطاها توسط تست. ساخت دیجیتال
اشیایی ساخته‌شده به روش دیجیتال، ابتدا با استفاده از گستره‌ی بزرگی از نرم‌افزارهای طراحی به کمک رایانه (CAD)، هم در نوع دو بعدی و هم از انواع مدل‌سازی سه‌بعدی آن‌ها، مدل‌سازی می‌شوند. در مدل‌سازی سه‌بعدی نیز انواع روش‌های طراحی شبکه‌ای، جامد، صفحه‌ای یا مش‌بندی مورد استفاده قرار می‌گیرد و در طراحی یک مدل، ممکن است از یک یا چند از این الگوها استفاده شده باشد. مدل نما
مدل نما () در مهندسی سیستم‌ها، مهندسی نرم‌افزار و مهندسی سازمانی، چارچوبی است که با تعریف مجموعه‌ای منسجم از دیدگاه‌ها، امکان استفاده از آنها را در ساخت مدل معماری سیستم یا معماری نرم‌افزار فراهم می‌سازد. در دهه ۱۹۷۰ روش‌هایی در حوزه مهندسی نرم‌افزار، با هدف مدل‌سازی دیدگاه‌های مختلف ظاهر شد. در سال ۱۹۷۷ نخستین مدل نما توسط داگلاس تی. راس و کی.ای. شومان، بمنظور سازماندهی فرایندهای مدل‌سازی و تعریف شرایط سیستم، معرفی گردید. شتاب‌دهنده سخت‌افزاری
زبان توصیف سخت‌افزار (HDLs) مانند Verilog و VHDL می‌تواند مدلی که به صورت نرم‌افزار یا سنتز طراحی به صورت netlist است را برنامه‌ریزی کند و به وسیلهٔ یک FPGA یا گیت‌های منطقی تشکیل شده از یک مدارهای مجتمع با کاربرد خاص توصیف کند. زبان توصیف سخت‌افزار
دو زبان عمده توصیف سخت‌افزار وجود دارد وی‌اچ‌دی‌ال (VHDL) و VERILOG. تفاوت‌هایی بین توصیف جریان داده و رفتار و ساختار آن‌ها وجود دارد. به‌طور مثال جریان داده‌ای از VHDL: library iEEE; use iEEE.STD_LOGIC_1164.ALL; use iEEE.STD_NUMERIC_STD.ALL; entity not1 is end not1; architecture behavioral of not1 is begin end behavioral; HDLها عبارات استاندارد مبتنی بر متن از ساختار سیستم‌های الکترونیکی و رفتار آن‌ها در طول زمان هستند. HDL مانند زبان‌های برنامه‌نویسی همزمان، شامل نحو و معناشناسی و نمادهای صریح برای بیان همزمانی می‌باشد. در مقابل اکثر زبان‌های برنامه‌نویسی نرم‌افزار، HDLها شامل یک مفهوم صریح و روشن از زمان که ویژگی اصلی سخت‌افزار است، می‌باشند. زبان‌هایی که تنها ویژگی آن بیان همزمانی مداری بین سلسه مراتبی از بلوک‌های رده‌بندی مناسب می‌باشد به عنوان زبان‌های لیستنت برای طراحی از طریق کامپیوتر برق CAD)) مورد استفاده قرار می‌گیرد. امنیت سیستم نرم‌افزار
در ابتدا تجزیه و تحلیل خطرهای عملکردی (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 مگابایت اگزوکرنل
طراحان هسته به‌طور سنتی سعی در ایجاد منابع سخت‌افزاری انفرادی برای برنامه‌های کاربردی دارند که با استفاده از برخی مدل‌های انتزاع، برنامه‌های لازم برای برقراری تعامل با سخت‌افزار را دارند. این مدل‌ها شامل سیستم‌های فایل برای ذخیره‌سازی دیسک، فضای آدرس‌های مجازی برای حافظه، برنامه ریزان برای مدیریت کار و پریزها برای ارتباطات شبکه هستند. این انتزاع‌های سخت‌افزاری نوشتن برنامه‌ها به‌طور کلی را آسان‌تر می‌کند، اما عملکرد و آزمایش‌های سخت را در انتزاعات جدید محدود می‌کند. یک برنامه امنیتی گرا ممکن است به یک سیستم پرونده ای نیاز داشته باشد که داده‌های قدیمی را بر روی دیسک باقی نگذارد، در حالی که یک برنامه قابلیت اطمینان محور ممکن است به یک سیستم پرونده ای نیاز داشته باشد که چنین داده‌هایی را برای بازیابی خرابی حفظ کند. امنیت سخت‌افزار
برخی از ارائه دهندگان این رشته معتقدند که تفاوت اساسی بین امنیت سخت‌افزار و امنیت نرم‌افزار در این است که امنیت سخت‌افزار با استفاده از منطق "ماشین غیر تورینگ" (منطق ترکیبی خام یا ماشینهای ساده ای دولت) پیاده‌سازی می‌شود. یک رویکرد که به آن "hardsec" گفته می‌شود، از FPGAها برای پیاده‌سازی کنترلهای امنیتی غیر Turing-Machine به عنوان راهی برای ترکیب امنیت سخت‌افزار با انعطاف‌پذیری نرم‌افزار استفاده می‌کند. معمار سخت افزار
برای تمایز بین معماری دنیای کاربر و معماری سخت افزار مهندسی شده ضروری است. اولی مشکلات و راه حل‌های موجود در دنیای کاربر را نشان می‌دهد و به آنها می‌پردازد. این اساساً در رابط‌های کامپیوتر-انسان سیستم مهندسی شده ثبت می‌شود. سیستم مهندسی شده راه‌حل‌های مهندسی را نشان می‌دهد چگونه مهندس پیشنهاد توسعه یا انتخاب و ترکیب اجزای زیرساخت فنی برای پشتیبانی را می‌دهد. در غیاب یک معمار، تمایل تاسف باری برای اشتباه گرفتن این دو معماری وجود دارد، زیرا مهندس از نظر سخت افزاری فکر می‌کند، اما کاربر ممکن است به حل مشکلی فکر کند که افراد را از نقطه یک به نقطه دو برساند. زمان معقول و با صرف انرژی معقول یا دریافت اطلاعات مورد نیاز به مشتریان و کارکنان. از یک معمار سخت افزار انتظار می‌رود دانش معماری دنیای کاربر و (همه بالقوه مفید) معماری‌های مهندسی سخت افزار را ترکیب کند. مورد اول یک فعالیت مشترک با کاربر است. دومی یک فعالیت مشترک با مهندسان است. این محصول مجموعه ای از الزامات سطح بالا است که منعکس کننده نیازهای کاربر است که می‌تواند توسط مهندسان برای توسعه الزامات طراحی سیستم‌های سخت افزاری استفاده شود. معماری نرم‌افزار
این فرایند باید به شکلی انجام شود که معیارهای کیفی مانند بهره‌دهی، امنیت و قابلیت اطمینان و مدیریت‌پذیری، بهینه شده باشند. فیلیپ کرچن و گریدی بوش معماری نرم‌افزار را به صورت زیر تعریف می‌نمایند: «معماری نرم‌افزار شامل تصمیمات کلیدی راجع به ساختار یک سیستم نرم‌افزاری است که شامل انتخاب اجزای سازنده نرم‌افزار و رابطه‌های آنها است. همچنین رفتار این اجزا را به عنوان تعاملی که باهم برای ساختن یک زیر سیستم بزرگتر، انجام می‌دهند، مشخص می‌سازد. معماری نرم‌افزار همچنین، کارکردها، قابلیت استفاده، انعطاف پذیری، عملکرد، استفاده مجدد، قابل درک بودن، محدودیت‌های اقتصادی و فناوری، نحوه تبادل اطلاعات و جنبه‌های زیبایی سیستم نرم‌افزاری را شامل می‌شود.» زبان توصیف سخت‌افزار
نرم‌افزار هدف در C و C ++ نوشته شده و برای سیستم توسعه میزبان به صورت محلی کامپایل می‌شود (به عنوان مخالف هدف CPU تعبیه شده، که نیاز به میزبان شبیه‌سازی از CPU جاسازی شده یا پردازنده شبیه‌سازی شده). سطح انتزاعی بالا از مدل‌های سیستمی C برای اکتشاف معماری اولیه بسیار مناسب هستند، به عنوان اصلاحات معماری می‌تواند به راحتی با کمی نگرانی برای مسائل پیاده‌سازی سطح سیگنال مورد بررسی قرار گیرد. به هرحال، مدل نخ مورد استفاده در System C و وابستگی آن به حافظه مشترک این معنی است که آن به خوبی اجرای موازی یا مدل‌های سطح پایین‌تر را اجرا نمی‌کند. توسعه نرم‌افزاری چابک
اگرچه چابکی به عنوان ابزاری برای پایان دیده می‌شود، تعدادی رویکرد پیشنهاد شده‌اند که کیفیت چابکی را تعیین می‌کنند. اندازه‌گیری شاخص‌های چابکی (AIM) پروژه‌ها را برای کسب یک امتیاز کل، در مقابل تعدادی از فاکتورهای چابکی امتیازدهی می‌کنند. نام مشابه «شاخص اندازه‌گیری چابکی»، توسعه‌ها را در برابر ۵ بعد یک پروژهٔ نرم‌افزاری (مدت‌زمان، ریسک، تازگی، تلاش و تعامل) امتیازدهی می‌کند. تکنیک‌های دیگر مبتنی بر اهداف قابل‌اندازه‌گیری هستند. بدترین زمان اجرا
هر دو تکنیک مطرح شده در بالا دارای محدودیت‌هایی هستند. اندازه‌گیری پایان تا پایان، تست نرم‌افزار برای دست یافتن به طولانی‌ترین مسیر را مجبور به تحمل بار زیادی می‌کند؛ همچنین دستورالعمل‌های شمارش فقط برای نرم‌افزار و سخت‌افزار ساده قابل اجراست. در هر دو مورد، حاشیه خطا اغلب برای کدهای تست نشده، تقریب یا اشتباه عملکرد سخت‌افزاری محاسبه و استفاده می‌شود. اغلب حاشیه ۲۰٪ استفاده می‌شود، اگرچه برای استفاده از این رقم به این شکل توجیه بسیار کمی وجود دارد، صرفاً با توجه به تجارب بدست آمده از مشاهدات پیشین از این رقم استفاده می‌شود ("آخرین بار استفاده از این رقم نتیجه خوبی را نشان داده‌است"). توسعه سریع نرم‌افزار
توسعه سریع نرم‌افزار در پاسخ به فرایندهای توسعه یافته در دهه‌های ۱۹۷۰ و ۱۹۸۰ مانند روش‌های ساختاری تجزیه و تحلیل سیستم و دیگر مدل‌های آبشاری به وجود آمد. یکی از مشکلات این روش‌ها این است که آن‌ها بر اساس مدل سنتی مهندسی مورد استفاده برای طراحی و ساخت چیزهایی مانند پل‌ها و ساختمان‌ها، پایه‌گذاری شده‌اند. نرم‌افزار ذاتاً نوع دیگری از محصول است. نرم‌افزار می‌تواند شدیداً کل فرایند مورد استفاده برای حل یک مشکل را تغییر دهد. در نتیجه، دانش به دست آمده از فرایند توسعه خود می‌تواند بازخوردی باشد برای تعیین نیازمندی‌ها و طراحی راه حل. راه‌حل روش آبشاری برای حل این مسئله این بود که نیازمندی‌ها و برنامه‌ریزی برای پیاده‌سازی آن‌ها به شکل صلبی تعیین شوند و فرایندی داشته باشیم که از تغییر هر یک از آن‌ها اجتناب کند. رویکرد جدید RAD از سوی دیگر فرایند توسعه نرم‌افزار را به عنوان فرایندی دانش محور به رسمیت می‌شناسد؛ و به دنبال توسعه فرایندهای انعطاف‌پذیری است که دانش به دست آمده در طول عمر پروژه را برای ابداع دوباره راه‌حل مورد استفاده قرار می‌دهد. تولیدکننده شماره تصادفی سخت‌افزار
مهندسان نرم‌افزار بدون تولیدکننده شماره تصادفی واقعی اغلب سعی می‌کنند با اندازه‌گیری رویدادهای بدنی در دسترس نرم‌افزار، آنها را توسعه دهیم. مثالی اندازه‌گیری زمان بین کلیدهای کاربری کاربر، و سپس گرفتن حداقل بیت معنی دار (یا دو یا سه) از تعداد به عنوان رقم تصادفی است. یک رویکرد مشابه، برنامه‌ریزی وظیفه، بازدید از شبکه، زمان جستجوی دیسک و سایر رویدادهای داخلی را اندازه‌گیری می‌کند. یکی از طراحی‌های مایکروسافت شامل لیست بسیار طولانی چنین مقادیر داخلی است، نوعی تولیدکننده عدد شبه تصادفی از نظر رمزنگاری. از لامپ‌های گدازه نیز به عنوان دستگاه‌های فیزیکی برای نظارت استفاده شده‌است، مانند سیستم لاراند. مهندسی نرم‌افزار بر پایه مؤلفه
زمانی که یک پیکرپار در دسترس است ویا اینکه در تمام بستر اجرایی یا در شبکه به اشتراک گذاشته شده‌است تکنیک‌هایی مانند تسلسل (Serialization) یا ترتیبی (Marshalling) بکار گرفته می‌شوند تا پیکرپارها بتوانند به هدف نهایی خود برسند و فعالیت مورد نظر را انجام دهند. طراحی صنعتی
اگرچه روند طراحی ممکن است صرفاً امری "خلاقانه" در نظر گرفته شود، اما بسیاری از فرآیندهای تحلیلی نیز در این روند دخیل هستند. در واقع، بسیاری از طراحان صنعتی اغلب از متدولوژی‌های مختلفِ طراحی در فرآیند خلاقانۀ خود استفاده می‌کنند. برخی از فرآیندهایی که معمولا مورد استفاده قرار می گیرند عبارتند از: شناسایی و تحقیق درارۀ کاربر، پیش‌طرح (Sketching)، تحقیقات و بررسی محصول (تطبیقی یا قیاسی)، ساخت مدل (Model Making)، نمونه‌سازی اولیه (Prototyping) و آزمایش (Testing). این روند می‌تواند بهترین توضیح دربارۀ طراحان صنعتی و/یا سایر اعضای تیم باشد. طراحان صنعتی اغلب از نرم افزارهای سه‌بعدی سازی و برنام‌های طراحی و نقشه‌کشی به کمک کامپیوتر (CAD) برای خلق ایده‌های خود از مفهوم ذهنی به محصول تولیدی استفاده می‌کنند. همچنین ممکن است ابتدا یک نمونۀاولیه بسازند و سپس از مقطع‌نگار کامپیوتری (CT scan) صنعتی برای آزمایش عیوب داخلی و تولید یک مدل سه‌بعدی کامپیوتری استفاده کنند. لذا این شیوه ممکن است منجر به بهبود فرآیند تولید در جهت اصلاح محصول شود. مبهم‌سازی سخت‌افزاری
مبهم سازی سخت‌افزاری، تکنیکی است که به کمک آن توصیف یا ساختار سخت‌افزارهای الکترونیکی با هدف پنهان سازی عمدی آن‌ها و دشوارترکردن مهندسی معکوس، تغییر داده می‌شود. به عبارتی دیگر در مبهم سازی سخت‌افزاری، طرح به گونه ای تغییر داده می‌شود که معماری حاصله برای مهاجم مبهم و نامفهوم گردد. مبهم سازی سخت‌افزاری، بسته به پلتفرم سخت‌افزاری هدف، می‌تواند دو نوع باشد: (الف) مبهم سازی سخت‌افزاری هسته پردازنده‌های سیگنال دیجیتال؛ که در آن، روی نمایش گراف جریان داده هسته پردازنده سیگنال دیجیتال، تغییرات سطح بالای مشخصی داده می‌شود تا آن را به فرم نامعلوم و معماری مبهمی در سطح انتقال ثباتی یا گیتی، تبدیل کند. این نوع مبهم سازی، مبهم سازی ساختاری نیز نامیده می‌شود. نوع دیگری از متدهای مبهم سازی هسته پردازنده سیگنال دیجیتال، مبهم سازی عملکردی است که در آن از استاندارد رمزنگاری پیشرفته و بلوک‌های قفل کننده هسته با مالکیت معنوی، به منظور قفل کردن عملکرد هسته پردازنده سیگنال دیجیتال با بیت‌های کلید، به صورت ترکیبی استفاده می‌شود. بدون به‌کارگیری توالی کلید صحیح، هسته پردازنده سیگنال دیجیتال خروجی اشتباه می‌دهد یا اصلاً هیچ خروجی نمی‌دهد. (ب) مبهم سازی سخت‌افزاری ترکیبی- ترتیبی؛ که در این نوع مبهم سازی، در ساختار سطح گیتی خود مدار تغییراتی داده می‌شود. مهندسی نرم‌افزار به کمک کامپیوتر
Computer-aided software engineering (CASE) گستره‌ای وسیع از نرم‌افزارها و ابزارهای مورد استفاده برای طراحی و پیاده‌سازی برنامه‌های کاربردی است. ابزارهای CASE مشابه ابزارهای طراحی به کمک کامپیوتر (CAD) هستند که برای طراحی محصولات سخت‌افزاری بکار برده می‌شوند مثل ابزارهای شبیه‌ساز مدارات الکتریکی و منطقی و اتوکد و ... . تضمین کیفیت نرم‌افزار
تضمین کیفیت نرم‌افزار عبارتست از نظارت بر روند مهندسی نرم‌افزار و روش‌هایی که برای اطمینان یافتن از کیفیت آن مورد استفاده قرار می‌گیرند. روش‌هایی که بدین منظور ایجاد شده‌اند بسیار زیاد و متنوع هستند که هریک انطباق با چند مورد از استانداردها (مثل ایزو ۹۰۰۰ و یک مدل مثل CMMI) را بررسی و تضمین می‌کنند. روش‌های تضمین کیفیت نرم‌افزار کل فرایند توسعه نرم‌افزار را دربرمی‌گیرند. از جمله مراحل توسعه نرم‌افزار می‌توان به تعریف نیازمندی‌ها، طراحی نرم‌افزار، کدنویسی، بازبینی کد، مدیریت پیکربندی نرم‌افزار، تست، مدیریت پخش، یکپارچه سازی محصول اشاره کرد. تضمین کیفیت نرم‌افزار به اهداف، الزامات، توانایی‌ها، فعالیت‌ها، اندازه‌گیری‌ها و ارزیابی‌ها سامان می‌بخشد. تضمین کیفیت نرم‌افزار برحسب (ISO/IEC 15504 v.2.5 (SPICE یک فرایند حمایتی است که باید به وسیله طرح‌های از پیش تعیین شده و isO 15504 کیفیت را در تک تک محصولات، فعالیت‌ها و فرایندها به‌طور مستقل تضمین کند. پس از مباحث مطرح در چگونگی ایجاد نرم‌افزار و بحث‌های مربوطه؛ یکی از چالش‌های موجود بررسی مفهوم چیستی کیفیت نرم‌افزار و متعاقب آن معیارهای سنجش و روش‌های تضمین کیفیت آن است. صحبت از کیفیت نرم‌افزار و بررسی و سنجش آن تنها از طریق پاسخگویی به سوالات زیر و مشخص کردن روشی برای رسیدن به این پاسخ امکانپذیر است: ۱. تعریف صریح و دقیق معنا و مفهوم «کیفیت نرم‌افزار» ۲. ایجاد مجموعه ای فعالیت‌هایی که ما را از بالا بودن کیفیت محصولات نرم‌افزاری ارائه شده مطمئن می‌کنند. ۳. اجرا کردن فعالیت‌های کنترل و ضمانت کیفیت در همه پروژه‌های نرم‌افزاری ۴. استفاده از ابزارها در راستای توسعه استراتژی‌های بهبود فرایندهای نرم‌افزار و در نتیجه باکیفیت شدن محصول نهایی مهندسی معکوس
یکی از کاربرد های مهم روش مهندسی معکوس، تولید و یا ساختن یک دستگاه، قطعه یا محصول از روی نمونه مشابه است. در این روش با استفاده از عکس، فیلم یا نمونه موجود، یک دستگاه یا محصول را تولید می کنند. روش مهندسی معکوس ماشین آلات و قطعات با استفاده از نرم افزارهای کد مثل سالیدورک، یا کتیا سرعت بسیار بیشتری پیدا می کند و دقت آن بیشتر می شود. این نرم افزارها، به کاربران کمک می کند که مدل سه بعدی قطعات را به صورت مجزا یا در یک اسمبلی مشاهده کنند و قبل از شروع فرآیند ساخت، بتوانند ایراد ها و اشکالات احتمالی را رفع کنند. البته بین مهندسی معکوس و کپی کردن دستگاه، تفاوت زیادی است. در این حالت(مهندسی معکوس در مهندسی مکانیک) به علم و تکنولوژی عملکرد یا سیستم پی می بریم. روش کپی کردن کاملا سنتی است و تولید کننده به دانش و علم طراحی پی نمی برد. اما در روش مهندسی معکوس، تمام قطعات و اجزای یک مجموعه مورد بررسی دقیق قرار می گیرند و علاوه بر ابعاد و اندازه، جنس و متریال، کاربرد و شرایط ظاهری تمام اجزا هم مورد بررسی قرار خواهد گرفت. مراحل انجام مهندسی معکوس دستگاه عبارت است از : - دمونتاژ کامل - اندازه برداری قطعات و مدلسازی - آنالیز متریال - شناسایی مکانیزم ها - تغییرات و اصلاخات - آماده سازی اطلاعات فنی برای تولید محصول جدید و مشابهدر عمل دو نوع عمده از مهندسی معکوس وجود دارد. در حالت اول، سورس کد برای برنامه وجود دارد، اما سطوح بالاتری از جنبه‌های این برنامه، شاید مستندات ضعیف یا مستنداتی که دیگر اعتبار ندارد، مشاهده می‌شوند. در حالت دوم، سورس کدی برای برنامه موجود نیست و هرگونه تلاشی در جهت استخراج یک سورس کد ممکن برای نرم‌افزار به عنوان مهندسی معکوس در نظر گرفته شده‌است. بسیاری از مردم با استفاده دوم از این اصطلاح آشنا هستند. مهندسی معکوس نرم‌افزار برای جلوگیری از نقض کپی رایت می‌تواند از تکنیک طراحی اتاق پاک استفاده کند. منطق در علوم کامپیوتر
یکی دیگر از عمده زمینه های تحقیق برای نظریه منطق، مهندسی نرم‌افزار بود. پروژه های تحقیقاتی مانند دستیار نرم‌افزار دانش بنیان و برنامه های کارآموزی به برنامه نویسان از نظریه منطقی برای تایید درستی مشخصه نرم‌افزار استفاده کردند. همچنین از آنها برای تبدیل مشخصات به کد کارآمد در سیستم عامل های گوناگون و اثبات برابری میان پیاده سازی و مشخصات استفاده کردند. این روش رسمی مبتنی بر تبدیل، اغلب بسیار پر زحمت تر از توسعه نرم‌افزار سنتی است. اگر چه، در حوزه های خاص با فرم گرایی مناسب و الگوهایی با قابلیت استفاده مجدد، این روش برای محصولات تجاری ثابت شده است. دامنه های مناسب معمولاً مواردی از قبیل سیستم های تسلیحاتی، سیستم های امنیتی و سیستم های مالی درلحظه است که خرابی این سیستم هزینه های انسانی یا مالی بیش از حد دارد. نمونه ای از چنین دامنه ای طراحی یکپارچه مقیاس بزرگ است - فرایندیی برای طراحی تراشه های مورد استفاده در پردازنده ها و بقیه ی اجزای مهم دستگاه های دیجیتال. خطا در یک تراشه فاجعه بار است. بر خلاف نرم‌افزار، تراشه ها نمی‌توانند تعمیر یا به روز رسانی شوند. در نتیجه، توجیه تجاری برای استفاده از روش های رسمی برای اثبات مطابقت پیاده سازی و مشخصات وجود دارد. تروجان سخت‌افزاری
این روش تشخیصی، درگاه‌های ورودی یک تراشه را تحریک می‌کند و بر خروجی نظارت می‌کند تا خطاهای ساخت را تشخیص دهد. اگر مقادیر منطقی خروجی با الگوی اصلی مطابقت نداشته باشد، می‌توان نقص یا تروجان را پیدا کرد. کورل‌دراو
کورل‌دراو یک نرم افزار فوق العاده قوی برداری و پیکسلی می‌باشد که این به این معنی است که کل محاسبات طراحی در بر اساس محاسبات ریاضی می‌باشد و اکثر اشکال و طرح‌های درون این نرم افزار با نقاط و خطوط رسم می‌شوند.