ساخت نرم‌افزار
ساخت نرم‌افزار شاخه ای از مهندسی نرم‌افزار است. در این شاخه از ترکیبی از کد نویسی، بازبینی، آزمون واحد، آزمون یکپارچگی، و اشکال زدایی بهره برده شده تا نرم‌افزاری دقیق، معنادار و حاوی جزئیات فراوان خلق شود. ساخت نرم‌افزار شاخه ای است که به صورت بسیار نزدیکی به دیگر شاخه‌های مهندسی نرم‌افزار (همانند طراحی نرم‌افزار و تست نرم‌افزار) متصل می‌باشد.
کاهش پیچیدگی نرم فزار به صورت عمده از آن جایی ناشی می‌شود که اکثریت مردم توانایی به حافظه سپردن جزئیات ساختاری و اطلاعات پیچیده را در حافظه خود ندارند. کاهش پیچیدگی تنها از راه تأکید بر خلق کدهای ساده و خوانا میسر است، و هوشمندانه بودن کدها تنها بر پیچیدگی کد می‌افزاید. برای خلق کدهای ساده و خوانا، می‌بایست از یک سری اصول، استانداردها و تکنیک‌های برنامه‌نویسی تبعیت کرد. استفاده از تکنیک‌های کیفیت متمرکز بر ساخت نیز برای کا
پیش‌بینی تغییرات این امکان را به مهندس‌های نرم‌افزار می‌دهد تا برنامه‌های قابل توسعه ای را بسازند، بدون آنکه نیازی به برهم زدن زیرساختار درونی آن برنامه باشد. تجربه نشان می‌دهد که هزینه دوباره کاری در یک برنامه می‌تواند بین ۱۰ تا ۱۰۰ برابر هزینه اولیه در نوشتن برنامه تمام شود. به صورت میانگین، در هر پروژه ای جدود ۲۵ درصد تغییرات آتی انجام می‌گیرد، بنابراین پیش‌بینی تغییرات در یک پروژه از اهمیت خاصی برخوردار است.
ساختار مبنا برای بازبینی به معنی ساختن نرم‌افزار به طریقه ای است که بتوان در آن خطاهای سیستمیک را در زمان برنامه‌نویسی، تست‌های مستقل، یا استفاده از نرم‌افزار، شناسایی و حذف کرد. تکنیک‌های ویژه ای که منجر به ایجاد مبنایی برای بازبینی مجدد نرم‌افزار می‌شوند بسیار متنوع بوده و می‌تواند شامل استفاده از استانداردهای کدنویسی بازبینی کد، تست‌های واحد، تست‌های اتوماتیک، و عدم نوشتن کدهای بسیار پیچیده می‌باشد.
استفاده مجدد سیستماتیک بهره‌وری، کیفیت و بهبود هزینه‌های را منجر می‌شود و دارای دو رویهٔ کاملاً نزدیک به هم است:
اسناتداردها – چه استانداردهای برون سازمانی یا استانداردهای درون سازمانی – می‌توانند سبب تأثیر بالقوه ای بر روی نرم افزاها گردند. این استانداردها شامل:
مدل‌های متعددی برای ایجاد نرم‌افزار معرفی شده‌اند، که از بین آن‌ها برخی مدل‌ها تأکید بیشتری بر ساخت دارند. از دیدگاه سامدل‌های Waterfall و Stage-Delivery Life Cycle). این مدل‌ها به ساخت نرم‌افزار، نگاه و رفتاری همانند فعالیتی دارند که حتماً می‌بایست پیش از آن تمامی پیش نیازات اساسی برنامه مربوطه برآورده شود. بسیاری از مدل‌های دیگر تکرار شونده‌اند (همانند مدل‌های evolutionary prototyping, Extreme Programming، و Scrum. این مدل‌ها تمایل نسبتاً بیشتری دارند تا با ساخت نرم‌افزار به صورت فعالیتی همزمان با دیگر فعالیت‌های ایجاد نرم‌افزار رفتار کنند.
انتخاب روش ساخت نرم‌افزار یکی از وجهه‌های کلیدی برنامه‌ریزی ساخت نرم‌افزار می‌باشد. انتخاب روش ساخت نرم‌افزار تعیین‌کننده وسعت پیش نیازهای ساخت، ترتیب آن‌ها و درجه ای از تکمیل آن پیش نیازها قبل از شروع عملیات ساخت است. برنامه‌ریزی ساخت نرم‌افزار همچنین تعیین‌کننده ترتیب ساخت و اجتماع اجزا، روند مدیریت کیفیت برنامه، تخصیص عملیات به مهندس واجد صلاحیت و غیره بر اساس نوع مدل انتخابی است.
تعدا بسیار زیادی از فعالیت‌ها و مصنوعات ساخته شده می‌توانند اندازه‌گیری شوند؛ به‌طور مثال: کد نوشته شده، کد بهینه شده، کد باز استفاده شده، کد تخریب شده، پیچیدگی کد، آمار بازبینی کد، تعداد خطاهای یافت شده و برطرف شده، و زمان‌بندی. این اطلاعات از آنجایی مفید هستند که می‌توانند ما را در دستیابی به اهدافی همانند مدیریت ساخت، تضمین کیفیت حین ساخت، و ارتقا روند ساخت یاری کنند. ساخت نرم‌افزار با تعدادی ملاحظات عملی همراه است و بایستی به این ملاحظات توجه شود:
به منظور جلوگیری از فاصله‌های پیش رو در طراحی نرم‌افزار، بهینه‌سازی‌هایی را می‌بایست حین ساخت نرم فزار در مقیاس‌های کوچکتر یا بزرگتری صورت داد، تا بتوان با کمک آن به جزئیات طراحی نرم‌افزار افزود.
Fan Out پایین یکی از ویژگی‌های طراحی ای است که بسیاری از محققان این حوزه آن را بسیار مفید ارزیابی کرده‌اند. ثابت شده‌است که تکنیک پنهان کردن اطلاعات می‌تواند تکنیکی بسیار مفید در برنامه‌نویسی‌های با مقیاس بزرگ باشد. این تکنیک توانایی آسان تر کردن برنامه‌ها تا اقلاً ۴ برابر حالتی که بکار گرفته نشود را دارارست.
زبانهای ساخت شامل تمامی فرم‌های ارتباطی ای می‌باشند که با استفاده از آنها، انسان یک راه حل مسئله قابل اجرا را به کامپیوتر معرفی کند. زبان‌های ساخت شامل زبان‌های تنظیماتی، زبان‌های جعبه ابزار، و زبان‌های برنامه‌نویسی می‌باشد که در زیر شرح هر یک به صورت مختصر آمده است. برنامه‌نویس‌هایی که اقلاً سه سال در زمینه یک زبان برنامه‌نویسی کار کرده باشند، از کارایی حدود ۳۰ درصد بیشتر از برنامه نویسان تازه‌وارد برخوردار هستند. زبان‌های سطح بالا همانند زبان‌های ++C، جاوا، Smalltalk، و Visual Basic از ۵ الی ۱۵ درصد افزایش بهره‌وری، سادگی، قابل اعتمادی، و قابلیت درک نسبت به زبان‌های سطح پایین دارا می‌باشند. برای نوشتن برنامه ای یکسان، تعداد کد خط‌های کمتری در زبان‌های برنامه‌نویسی سطح بالا نیاز است.
در ساخت نرم‌افزار می‌بایست به ملاحظات مربوط یه کد زنی که در زیر آمده‌اند توجه ویژه داشت:
هدف از تست نرم‌افزار کاهش فاصله زمانی آشکار سازی خطاهای کدنویسی است. در بسیاری از مواقع، تست ساخت بلااستفاده پس از نوشتن کد اولیه صورت می‌پذیرد. در راستای این هدف معمولاً مهندس نرم‌افزار، از دو روش تست کردن استفاده می‌کند: تست واحد و تست مجتع.
استفاده مجدد از یک نرم‌افزار چیزی فراتر از خلق و استفاده از کتابخانه‌های آن است. فعالیت‌های مربوط به استفاده مجدد از ساخت نرم‌افزار در خلال کدنویسی و تست آن عبارتند از:
تکنیک‌های اولیه اطمینان از کیفیت کد ساخته شده عبارتند از:
مطالعات نشان داده‌اند که ترکیبی از این تکنیک‌ها نیاز مورد استفاده قرار گیرد برای رسیدن به بالا در تشخیص نقص رأی دادن. مطالعات دیگر نشان داد که افراد مختلف تمایل به پیدا کردن مختلف نقص. یک مطالعه نشان داد که شدید برنامه‌نویسی شیوه‌های جفت برنامه‌نویسیبا میز چکهای تست واحدبا ادغام تستو آزمون رگرسیون می‌تواند دستیابی به ۹۰ درصد نقص نرخ تشخیص است. یک آزمایش شامل برنامه نویسان با تجربه دریافتند که به‌طور متوسط آن‌ها قادر به پیدا کردن ۵ خطا (۹ در بهترین حالت) از ۱۵ خطاها توسط تست.
۸۰ درصد از خطاهای یک برنامه در ۲۰ درصد کلاس‌های و روال‌های آن برنامه متمرکز شده‌اند. ۵۰ درصد خطاها در ۵ درصد کلاس‌های پروژه وجود دارند. شرکت IBM با تعمیر و نوشتن مجدد حدود ۳۱ کلاس از ۴۲۵ کلاس یک برنامه خود، تعداد خطاهای موجود را یک دهم و هزینه نگهداری را ۴۵ درصد کاهش داده است.
یکی از فعالیت‌های بسیار مهم در زمینه ساخت نرم‌افزار اجتماع کلاس‌ها، روالها، اجزا و زیر سیستم‌های برنامه مربوطه است. به علاوه این نیاز بسیار محتمل است که یک سیستم نرم‌افزاری با دیگر سیستم‌های نرم‌افزاری یا سخت‌افزاری اجتماع یابند. همواره در ارتباط با اجتماع اجزا نگرنی‌هایی وجود داشته و دارند که برخی از آن‌ها عبارتند از: ترتیب اجتماع اجزا، خلق داربست‌هایی برای پشتیبانی از نسخه‌های درونی نرم‌افزار، تعیین درجه تست و کیفیت کار هر جزء پیش از اجتماع آن، و تعیین نقاطی از پروژه که در آن‌ها نسخه‌های درونی نرم‌افزار تست می‌شوند.
زبانهای شی گرا سری هی مختلفی از مکانیزم‌های runtime را پشتیبانی می‌کنند که استفاده از آن‌ها سبب افزایش انعطاف‌پذیری و تطبیق پذیری برنامه‌ها می‌گردد (همانند خلاصه سازی داده، وراثت، پلی مورفیسم، بازتاب و …).
خلاصه سازی داده به روندی می‌گویند که در طی آن داده‌ها و برنامه‌ها به وسیله بیانی یکسان با معنایشان معرفی می‌شوند در حالی که جزئیات اجرایی آنان مخفی می‌گردد. مطالعات آکادمیک نشان داده‌اند که خلاصه سازی داده فهم برنامه‌ها را ۳۰ درصد ساده‌تر از برنامه‌های عملکردی می‌کند.
حکمیت، گزاره ای قابل اجرا درون یک برنامه است که به برنامه‌نویس اجازه چک در زمان اجرا برنامه را می‌دهد. طراحی با تعهد به روشی می‌گویند که در آن پیش شرط و پس شرط‌هایی مشمول هر روال می‌شوند. برنامه‌نویسی تدافعی، روشی است که در آن از شکست یک روال در برابر ورودی‌های نامعتبر آن جلوگیری می‌شود.
مدیریت خطا به نوعی برنامه‌نویسی اطلاق می‌شود که در آن پیش‌بینی‌ها و کد نویسی‌هایی برای خطاهای حین اجرا یک برنامه صورت می‌گیرد. مدیریت استثنا ساختاری در برنامه‌نویسی است که با کمک آن می‌توان در صورت بروز پی در پی خطا (چه یکسان و چه متغیر) برنامه را مجاب کرد تا به روند عادی اجرا خود بپردازد. دامنه خطاها به مجموعه ای از تکنیک‌ها اطلاق می‌شود که به کمک آن‌ها می‌توان خطاهای یک برنامه را آشکار کرده و تمهیدات لازم را برای بازیابی مجدد برنامه فراهم کرد. این مجموعه تکنیک، اعتبار برنامه‌ها را افزایش می‌دهند.
برنامه‌نویسی state-based نوعی فناوری برنامه‌نویسی است که از تعداد محدودی ماشین حالت بهره برده تا رفتارهای یک برنامه را توصیف کند. روش table-driven روشی است که در آن از جعبه‌هایی نمایشی بجای بیان‌های منطقی برای نمایش اطلاعات استفاده می‌شود.
تنظیمات در زمان اجرا، تکنیکی هست که در آن مقادیر متغیرها و تنظیمات برنامه‌ها با یکدیگر باند می‌شوند. این امر با خوانش همزمان تنظیمات و بروزرسانی آنان انجام می‌پذیرد. بین‌المللی سازی فعالیتی است که در آن یک برنامه (معمولاً یک برنامه تعاملی) برای پشتیبانی چند منطقه آماده می‌شود. در طی این فعالیت، تمهیداتی چیده می‌شود که هر برنامه زبان آن منطقه را پشتیبانی کند.