ساخت نرم‌افزار

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

به حداقل رساندن پیچیدگی

کاهش پیچیدگی نرم فزار به صورت عمده از آن جایی ناشی می‌شود که اکثریت مردم توانایی به حافظه سپردن جزییات ساختاری و اطلاعات پیچیده را در حافظه خود ندارند. کاهش پیچیدگی تنها از راه تأکید بر خلق کدهای ساده و خوانا میسر است، و هوشمندانه بودن کدها تنها بر پیچیدگی کد می‌افزاید. برای خلق کدهای ساده و خوانا، می‌بایست از یک سری اصول، استانداردها و تکنیک‌های برنامه‌نویسی تبعیت کرد. استفاده از تکنیک‌های کیفیت متمرکز بر ساخت نیز برای کاهش پیچیدگی برنامه، بسیار مؤثرند.

پیش بینی تغییر

پیش‌بینی تغییرات این امکان را به مهندس‌های نرم‌افزار می‌دهد تا برنامه‌های قابل توسعه ای را بسازند، بدون آنکه نیازی به برهم زدن زیرساختار درونی آن برنامه باشد. تجربه نشان می‌دهد که هزینه دوباره کاری در یک برنامه می‌تواند بین ۱۰ تا ۱۰۰ برابر هزینه اولیه در نوشتن برنامه تمام شود. به صورت میانگین، در هر پروژه ای جدود ۲۵ درصد تغییرات آتی انجام می‌گیرد، بنابراین پیش‌بینی تغییرات در یک پروژه از اهمیت خاصی برخوردار است.

ساخت مبنایی برای بازبینی

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

مدل‌های ساختاری نرم‌افزار

مدل‌های متعددی برای ایجاد نرم‌افزار معرفی شده‌اند، که از بین آن‌ها برخی مدل‌ها تأکید بیشتری بر ساخت دارند. از دیدگاه ساختاری، برخی مدل‌ها بیشتر به صورت خطی هستند (همانند مدل‌های Waterfall و Stage-Delivery Life Cycle). این مدل‌ها به ساخت نرم‌افزار، نگاه و رفتاری همانند فعالیتی دارند که حتماً می‌بایست پیش از آن تمامی پیش نیازات اساسی برنامه مربوطه برآورده شود. بسیاری از مدل‌های دیگر تکرار شونده‌اند (همانند مدل‌های evolutionary prototyping, Extreme Programming، و Scrum. این مدل‌ها تمایل نسبتاً بیشتری دارند تا با ساخت نرم‌افزار به صورت فعالیتی همزمان با دیگر فعالیت‌های ایجاد نرم‌افزار رفتار کنند.

برنامه‌ریزی ساخت نرم‌افزار

انتخاب روش ساخت نرم‌افزار یکی از وجهه‌های کلیدی برنامه‌ریزی ساخت نرم‌افزار می‌باشد. انتخاب روش ساخت نرم‌افزار تعیین‌کننده وسعت پیش نیازهای ساخت، ترتیب آن‌ها و درجه ای از تکمیل آن پیش نیازها قبل از شروع عملیات ساخت است. برنامه‌ریزی ساخت نرم‌افزار همچنین تعیین‌کننده ترتیب ساخت و اجتماع اجزا، روند مدیریت کیفیت برنامه، تخصیص عملیات به مهندس واجد صلاحیت و غیره بر اساس نوع مدل انتخابی است.

اندازه‌گیری ساخت نرم‌افزار

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

ساخت نرم‌افزار با تعدادی ملاحظات عملی همراه است و بایستی به این ملاحظات توجه شود:

طراحی ساخت

به منظور جلوگیری از فاصله‌های پیش رو در طراحی نرم‌افزار، بهینه‌سازی‌هایی را می‌بایست حین ساخت نرم فزار در مقیاس‌های کوچکتر یا بزرگتری صورت داد، تا بتوان با کمک آن به جزییات طراحی نرم‌افزار افزود.
Fan Out پایین یکی از ویژگی‌های طراحی ای است که بسیاری از محققان این حوزه آن را بسیار مفید ارزیابی کرده‌اند. ثابت شده‌است که تکنیک پنهان کردن اطلاعات می‌تواند تکنیکی بسیار مفید در برنامه‌نویسی‌های با مقیاس بزرگ باشد. این تکنیک توانایی آسان تر کردن برنامه‌ها تا اقلاً ۴ برابر حالتی که بکار گرفته نشود را دارارست.

اجتماع

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

مسائل مربوط به زمان اجرا شی گرا

زبانهای شی گرا سری هی مختلفی از مکانیزم‌های runtime را پشتیبانی می‌کنند که استفاده از آن‌ها سبب افزایش انعطاف‌پذیری و تطبیق پذیری برنامه‌ها می‌گردد (همانند خلاصه سازی داده، وراثت، پلی مورفیسم، بازتاب و …).
خلاصه سازی داده به روندی می‌گویند که در طی آن داده‌ها و برنامه‌ها به وسیله بیانی یکسان با معنایشان معرفی می‌شوند در حالی که جزییات اجرایی آنان مخفی می‌گردد. مطالعات آکادمیک نشان داده‌اند که خلاصه سازی داده فهم برنامه‌ها را ۳۰ درصد ساده‌تر از برنامه‌های عملکردی می‌کند.

حکمیت، طراحی با تعهد، و برنامه‌نویسی تدافعی

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

مدیریت خطا، مدیریت استثناء، و دامنه خطا

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

تکنیک‌های برنامه‌نویسی State-Based و Table-Driven

برنامه‌نویسی state-based نوعی فناوری برنامه‌نویسی است که از تعداد محدودی ماشین حالت بهره برده تا رفتارهای یک برنامه را توصیف کند. روش table-driven روشی است که در آن از جعبه‌هایی نمایشی بجای بیان‌های منطقی برای نمایش اطلاعات استفاده می‌شود.

تنظیمات در زمان اجرا و بین‌المللی کردن آن

تنظیمات در زمان اجرا، تکنیکی هست که در آن مقادیر متغیرها و تنظیمات برنامه‌ها با یکدیگر باند می‌شوند. این امر با خوانش همزمان تنظیمات و بروزرسانی آنان انجام می‌پذیرد. بین‌المللی سازی فعالیتی است که در آن یک برنامه (معمولاً یک برنامه تعاملی) برای پشتیبانی چند منطقه آماده می‌شود. در طی این فعالیت، تمهیداتی چیده می‌شود که هر برنامه زبان آن منطقه را پشتیبانی کند.