برای تولید یک نرمافزار لازم است تا تمام اجزای اصلی آن شناسایی شوند، سپس طراحی و پیادهسازی شوند. هنگامی که چندین نرمافزار قرار باشد که توسعه و تولید شوند و تمام این نرمافزارها از یک خانواده و عملکردی مشابه هم دیگر داشته باشند، مانند سیستمهای مدیریت محتوا یا سیستمهای تجارت الکترونیک، دیگر انجام مراحل تولید یک نرمافزار به ازای هر کدام از آن محصولات کار به صرفهای نیست و منابع و زمان زیاد به هدر خواهد رفت. از این رو مفهومی به نام خط تولید نرمافزار مطرح شد. مفهوم خط تولید در به تنهای در بسیار از صنایع مانند صنعت خودرو سازی وجود دارد و چنین مفهوم در مهندسی نرمافزار نیز معرفی شد. در خط تولید نرمافزار اجزا و داراییهای ثابتی که ممکن است برای تمام نرمافزارهایی که از یک خانواده هستند استفاده شود، نگهداری میشوند و در سایر سیستمها استفاده میگردد و به این صورت دیگر نیاز به ساخت اجزایی که از قبل برای یک نرمافزار مشابه ساخته شده بود نیست و بدین صورت زمان تولید نرمافزار افزایش مییابد و در مصرف منابع نیز صرفهجویی میگردد. در این مقاله به توضیح مفهوم خط تولید نرمافزار و روشهای توسعهی آن پرداخته میشود
یک شرکت خودرو سازی را در نظر بگیرید.این شرکت ماشینهایی در مدلهای مختلف تولید میکند. یک ماشین برای آن که به دست مشتری برسد باید یک سری ویژگیهای مشخصی داشته باشد، به عنوان مثال باید رنگ شده باشد، شیشه و چراغ داشته باشند. بنابراین شرکت سازندهی خودرو برای تولید محصولات خود باید یک سری کار تکراری را انجام دهند و آن کار نیاز به زیرساختها و لوازمی دارد. به همین جهت شرکت خودروسازی به جای آن که به ازای هر مدل خودرو لوازم و زیرساختهای مربوط به آن مراحل ثابت، مانند نصب در و کاپوت خودرو، رنگ کردن ماشین و غیره را از صفر بسازند و فراهم کنند، یک خط تولید درست میکنند که دارای مراحلی است و در هر مرحله یک کاری انجام میشود. به عنوان مثال در ابتدا اجزای بدنهی خودرو سر هم میشوند، در مرحلهی بعدی شیشهی ماشین نصب میشود و در انتها ماشین وارد قسمت رنگ آمیزی میگردد. هر مدل از ماشین ویژگیهای خاص خود را دارند و برخی از مدلها ممکن است که امکانات یک مدل دیگر را نداشته باشند بنابراین خط تولید را میتوان تغییر داد و برخی مراحل را حذف یا اضافه کرد. از طرفی در مراحل مشترک ممکن است که مواد و طرح فرق کنند، مانند نوع رنگی که در مرحلهی رنگ آمیزی میتواند متفاوت باشد. بنابراین خط تولید یک محصول دارای ویژگیهای ثابت و متغیر میباشد که در نیازهای متغیر متناسب با نیازهای هر مدل تغییر میکند.
چنین مفهومی در تولید سیستمهای نرمافزاری نیز وجود دارد و میتوان برای محصولات نرمافزاری که از یک خانواده هستند از چیزی به نام خط تولید نرمافزار استفاده نمود. خط تولید نرمافزار، ابزار و روشهایی است برای ایجاد مجموعهای از سیستمهای نرمافزار مشابه، از یک مجموعه داراییهای نرمافزاری مشترک با استفاده از ابزار تولید رایج. درواقع به کمک خط تولید نرمافزار میتوانید از اجزای موجود از پیش ساخته شده برای نرمافزارهای مختلفی که از اجزای استفاده میکنند، بهره ببرید. ایجاد خط تولید نرمافزار کار سادهای نیست و پیچیدگیهای خاص خود را دارد و در مقایسه با تولید یک محصول نرمافزاری سختتر به بنظر میآید. برای ایجاد خط تولید نرمافزار روشهایی وجود دارد و باید مراحلی طی شود تا آن را ساخت. همچنین از ابزارهای مناسب خط تولید نرمافزار برای تولید نرمافزار میتوان کمک گرفت. در این مقاله هدف بررسی مفهوم خط تولید نرمافزار، چند روش رایج برای ایجاد آن و ابزارهایی که میتوان برای ایجاد آن استفاده کرد، پرداخته میشود. ساختار مقاله به این صورت است که در بخش دو بتدا مفهوم خط تولید نرمافزار و مزایای آن توضیح داده میشود. در بخش سوم و چهارم سه روش رایج وابزارهای موجود برای ایجاد خط تولید نرمافزار بررسی میشود. در بخش پنجم به بررسی دو مورد از خطوط تولیدی نرمافزار که برای تولید محصولات نرمافزاری در دنیای واقعی راهاندازی شدهاند پرداخته میشود و در بخش ششم نیز جمع و نتیجهگیری حاصل از این تحقیق گفته میشود.
خط تولید نرمافزار را طبق تعریفی که توسط موسسهی نرمافزاری Carnegie Mellon ارائه شده است، میتوان به صورت زیر توصیف کرد:
یک مجموعهای از سیستمهای نرمافزاری فشرده است که مجموعهای رایج و مدیریت شده از ویژگیهایی که نیازهای مشخصی از یک بخش بازار یا ماموریت را به اشتراک میگذارد و از یک مجموعهی مشترکی از داراییهای اصلی به روش تجویز شده توسعه مییابد.
درواقع خط تولید نرمافزار یکی از روشهای مهندسی نرمافزار، ابزار و تکنیکهایی برای ایجاد یک مجموعهای از سیستمهای نرمافزاری مشابه از مجموعهای از داراییهای نرمافزار است که برای تولید نرمافزار استفاده میشود. در اینجا منظور از داراییهای سیستمهای نرمافزاری میتواند نیازمندیها، معماری، کد و موارد تست باشند. هدف از ایجاد یک خط تولید نرمافزار آن است که بتوان روند توسعهی نرمافزار را تسهیل کرد و در عین حال به صنعتی شدن آن کمک نمود. همچنین مجموعهای از اجزای نرمافزاری با قابلیت استفادهی مجدد به منظور تولید سریع یک خانواده از سیستمهای نرمافزار ساخت. هنگامی که از خانواده در نرمافزار صحبت میکنیم منظور سیستمهایی هستند که کارایی مشابهای دارند و هدفشان یکی است، مانند نرمافزارهای تجارت الکترونیک (e-commerce). استفاده از خط تولید میتوان مزایای زیادی به همراه داشته باشد. از جملهی این مزایا میتوان به موارد زیر اشاره نمود:
ایجاد و نگهداری یک خط تولید نرمافزار کار سادهای نیست و در کنار مزایای فراوانی که دارد، دارای چالشهایی نیز میباشد که باید به آنها توجه شود. از جملهی چالشهای مهم میتوان به موارد زیر اشاره کرد:
بنابراین برای ایجاد یک خط تولید محصول نرمافزاری لازم است تا به بسیار از جوانب توجه شود و نسبت به توسعهی یک محصول نرمافزاری به تنهایی زمان زیادتر و حتی نیروی انسانی بیشتری جهت بررسی و مهندسی اجزا و داراییهای مشترک و متغیر تشکیل دهندهی نرمافزارهایی از یک خانواده صرف شود.
پیش از آن که روشهای ایجاد خط تولید معرفی شوند، لازم است تا مفهومی به نام مهندسی خط تولید نرمافزار توضیح داده شود. مهندسی خط تولید نرمافزار دروافع روشی است برای ساخت یک مجموعهای از سیستمهای نرمافزاری متمرکز که مجموعهای از ویژگیهای مشترکی که میتوانند سفارشیسازی شوند با توجه به نیازهای ذینفعان در یک محدودهی مشخص استفاده میشود. به کمک مهندسی خط تولید میتوان ویژگیهای مشتری و متغیر یک خط تولید سیستمهای نرمافزاری را شناخت و از آنها به منظور استخراج حداکثر استفاده مجدد بهره برد. همچنین مهندسی خط تولید شامل دو فرایند است: مهندسی دامنه و مهندسی برنامه. در مهندسی دامنه محدوده کاری خط تولید و نیازهایی که دارد تعیین و اجزای آن پیادهسازی میشود. نکتهای که مهم میباشد آن است که عامل کلیدی موفقیت توسعهی یک خط تولید، ایجاد تمرکز مناسب برروی یک دامنه مشخص، به خوبی تعریف شده و با محدودهی مناسب است. یک دامنه ناحیهای از دانش است که:
بنابراین مرحلهی مهندسی دامنه بسیار مهم میباشد و به گونهای آن را سنگ بنای ایجاد یک خط تولید نرمافزار مناسب می توان دانست. در مورد مهندسی برنامه نیز میتوان گفت که مربوط به ترکیب اجزای ساخته شده در مهندسی دامنه و ساخت اجزای جدید برای رفع نیازهایی است که توسط مشتری مطرح شدهاند. حل با توجه به آشنایی با مفهوم مهندسی خط تولید و فرایندهای آن در ادامه به معرفی روشهای تولید خط تولید نرمافزار پرداخته میشود.
در این بخش به معرفی سه روش ساخت خط تولید نرمافزار پرداخته میشود که هر سه از الگوهای معروف برنامهنویسی هستند این سه روش عبارتاند از برنامه نویسی مبتنی بر ویژگی (Feature Oriented Programming یا به اختصار FOP)، برنامه نویسی مبتنی بر جنبه (Aspect Oriented Programming یا به اختصار AOP) و برنامه نویسی مبتنی بر شکست (Fragment Oriented Programming یا به اختصار FragOP) که در ادامه به بررسی بیشتر هر کدام از این روشهای پرداخته میشود.
ایدهی اصلی FOP تجزیهی طراحی یک سیستم و کد با توجه به ویژگیهایی است که ارائه می دهد و هدف اصلی خط تولید مبتنی بر ویژگی نیز استخراج محصول را به طور کامل خودکار کند. خط تولید مبتنی بر ویژگی شامل ۴ فرایند است که دو فرایند اول مربوط به مهندسی دامنه و دو فرایند دیگر نیز مربوط به مهندسی برنامه هستند و این ۴ فرایند عبارتاند از:
- آن نیازمندی خارج از محدودهی خط تولید باشد و نمیتوان ویژگی یا محصول متناظر را ارائه داد
- میتوان محصول را با ویژگیها و نیازمندیهای موجود توسعه داد و تولید کرد. در انتها به صورت
دستی آن را گشترش داد و افزونهها و پلاگینهایی به آن اضافه نمود
- آخرین را نیز آن است که این نیازمندی را به عنوان یکی از نیازهای خود دامنه و خط تولید در نظر
گرفته شود و محدودهی خط تولید را تغییر دهیم که در این صورت لازم است دوباره از ابتدا و فرایند
تحلیل دامنه شروع کنیم.
بنابراین به کمک این ۴ فرایند میتوان یک خط تولید مبتنی برروش FOP راهاندازی نمود.
برنامه نویسی مبتنی بر جنبه یک روشی است که دغدغههای مقطعی را به وسیلهی معرفی یکی واحد ماژولسازی جدید به نام جنبه تقسیم میکند و هر جنبه نیز برروی یک ویژگی دغدغهی مقطعی مشخصی تمرکز دارد. درواقع AOP اجازه میدهد تا برنامه را به قسمتهای متفاوتی تقسیم کنیم که هر کدام یک دغدغه محسوب میشوند. در این روش ویژگیهای مشترک به عنوان ماژولهای اصلی در نظر گرفته میشوند و ویژگیهای متغیر به عنوان جنبهها پیادهسازی میشوند. در روشهای سنتی و رسمی این ویژگیها به عنوان ماژولهای برنامه پیادهسازی میشوند و اگر یک ویژگی با سایر ویژگیها بخواهد در ارتباط باشد با یک فراخوانی API توسط هر کدام از ویژگیها به ویژگی مربوطه اتفاق بیفتد. به عنوان مثال در تصویر ۱ تمام ماژولها نیاز دارند که بررسی کنند که آیا کاربر وارد حساب کاربر خود شده است یا خیر.
به همین منظور تمام ماژولهای اصلی، سبد خرید و حساب من باید یک فراخوانی API به ماژول Login انجام دهند. در نتیجه کدها مربوط به فراخوانی API تنها در یک ماژول اجرا نمیشود بلکه در چندین ماژول اجرا میشوند، بنابراین در صورت نیاز به تغییر در کد فراخوانی API نیاز است تا تغییرات متعددی در سایر ماژولها نیز انجام گیرد. اما به کمک روش AOP این تغییرات کاهش مییابد. در این روش در صورتی که ماژولهایی وجود داشته باشند تا بخواهند با هم در ارتباط باشند نیاز به انجام فراخوانی توسط ماژولهای نیازمند نیست. به عنوان مثال در همان مورد بررسی احراز هویت دیگر نیازی به فراخوانی API توسط هر کدام از سه ماژول ذکر شده نیست و وظیفهی بررسی احراز هویت تنها بردوش جنبهی Login است و این جنبه بدون ماژولها یا جنبههایی که در کد برنامه تغییرات ایجاد میکنند این فرایند را کنترل میکند. در تصویر ۲ این مورد نشان داده شده است همچنین نام ماژولها نیز به جنبه تغییر کرده است.
در تصویر ۳ کد یک ویژگی نمایش داده شده است. در این ویژگی یک کاربر در هر لحظه یک سفارش را بررسی میکند، تاریخچهی تراکنش نیز در قسمت تاریخچه نیز وارد خواهد شد. برای پیادهسازی این ویژگی، مفهومی به نام نقطهی پیوست (Join Point) و نقطهی برش (Pointcut) تعریف میشود. نقطهی پیوست جایی است که کد جنبه اجرا خواهد شد. نقطهی برش نیز کد برنامه است که نقطهی پیوست را انتخاب میکند جایی است که کد جنبه اجرا میشود. در تصویر ۳ قسمت مربوط به نقطهی برش نشان میدهد که کد مربوط به افزودن تاریخچهی تراکنش پس از اجرای متد Checkout در جنبهی AspectCart اجرا خواهد شد. بدین ترتیب این AspectCart عملکرد برنامهی خود را بدون نیاز به کنترل هویت کاربر اجرا میکند.
پس از طراحی و پیادهسازی جنبهها به منظور اجرای آنها نیاز به فرایندی به نام دوختن (Weaving) می باشد. دوختن مکانیزم پایهای استفاده شده برای پیادهسازی AOP است که برای سازمان دادن به کلاسها و جنبهها به یک سیستم قابل اجراست. برای آن که بتوان تمام جنبههای پیادهسازی شده را اجرا نمود، لازم است تا به صورت ضمنی در یک فایل پیکربندی مانند Spring Bean XML که در تصویر ۴ آمده است تعریف شوند. تمام کلاسها و جنبهها با مکانیزم دوختن جهت شکل دادن و اجرای یک برنامه پردازش خواهند شد.
بدین ترتیب پس از فرایند دوختن محصول نهایی از خط تولید خارج و آمادهی بهرهبرداری و استفاده میشود.
برنامه نویسی مبتنی بر شکست یک روش طراحی و پیادهسازی اجزای دامنهی خط تولید نرمافزار است و براساس تعریف سه مفهوم زیر بنا شده است:
این سه مفهوم بر پایهی ۶ فعالیت محقق میشوند که در ادامه به توضیح هر کدام از شش فعالیت ارائه شده در این روش پراخته میشود.
طراحی نیازمندیهای خط تولید: اولین فعالیت فرایند FragOp میباشد که در آن باید طرح نیازمندیهای خط تولید از طریق طراحی ویژگیها ساخته شود. به عنوان مثال در تصویر ۵ ویژگیهای یک فروشگاه لباس نشان داده شده است که در آن ویژگیهایی مانند لیست محصولات، محصول، احراز هویت، مدیر محصول و نمایش کلی محصولات به عنوان ویژگی تعیین شدهاند. نکتهی دیگر در این شکل آن است که برای هر ویژگی تعیین شده که کدام یک اجباری و کدام یک اختیاری می باشد.
طراحی اجزای دامنه: در این فعالیت مدل اجزای دامنه ساخته میشود و این مدل یک دید انتزاعی نسبت به اینکه اجزا و عناصر دامنه چگونه سازماندهی میشوند ارائه میدهد. درواقع به کمک این دید انتزاعی میتوان اجزای دامنه، فایلهای عملیاتی و اطلاعات در مورد فایل را بدست آورد. در تصویر ۶ به عنوان مثال نشان داده شده است که یک عنصر از اجزا و فایلهایی با چه زبانی ساخته شده است.
پیادهسازی اجزای دامنه: در این فرایند ساختار خط تولید نرمافزار مشخص میشود و پوشههای اجزای شناسایی شده در فعالیت اول و فایلهای مربوط به هر عنصر که در فعالیت دوم شناخته شدند ساخته میشوند. در این قسمت درواقع یک استخری از اجزا به همراه پیادهسازی آنها ایجاد میشود. در تصویر ۷ نمونهای از فعالیت نشان داده شده است که در آن در پوشهی ComponentPool یک پوشهی دیگر به نام BasicViewsHtml ایجاد شده است که در آن نیز فایلهای سازندهی آن قرار دارند. در این مرحله کارهایی مانند پیادهسازی فایلها، پیادهسازی نقاط شکست و پیادهسازی شکستها نیز انجام میشود.
پیکربندی محصولات: این مرحله شامل انتخاب ویژگیهای مشخصی است که یک محصول مشخص براساس نیازمندیهای ذینفعان شامل میشود
استخراج محصولات: این فعالیت شامل سه گام میشود:
برای ساخت یک خط تولید نرمافزار میتوان از ابزارهای متفاوتی استفاده کرد که فرایند ایجاد این سیستم را راحت و سریع میکنند. در ادامه به معرفی سه مورد از این گونه ابزارها پرداخته میشود و با برخی ویژگیهای توضیح داده میشود.
یک ابزار خط تولید نرمافزار است که توسط شرکت نرمافزاری BigLever توسعه داده شده است. درواقع Gears یک چارچوب چرخهی حیات خط تولید نرمافزار است که تمام قابلیتهای ابزار خط تولید نرمافزار را به وسیلهی چرخهی حیات توسعهی نرمافزار ارائه میدهد. . اساس این سیستم FOP است و با استفاده از این روش باید مهندسی خط تولید را انجام داد و آن را ساخت. در جهان نیز سازمانها و شرکتها بزرگی از این محصول برای ایجاد خط تولید خود استفاده نمودهاند که از جملهی آنها میتوان به Engenio که یکی از بزرگترین ارائه دهندگان حافظهی داده است و ارتش ایالت متحدهی آمریکا نام برد
یک چارچوب و ابزار طراحی است که به راحتی قابل گسترش است و اجازه میدهد که بتوانید مدلهای خود را تعریف کنید. به عنوان ویژگی اصلی آن، از مدلسازیهای ویژگی، اجزا و چسباندن (binding) پشتیبانی میکند. همچنین این ابزار یک ابزار متن باز بوده و میتوان از مخزن گیت هاب آن را دانلود کرد، توسعه و گسترش داد. بنابراین به کمک این ابزار میتوان مدلهایی را توسعه داد تا بتوان یک تولید خط نرمافزار را مناسب با روش مورد نظر ایجاد کرد.
این ابزار توسط شرکت Pure Systems GmbH توسعه داده شده است و از تمام فازهای توسعهی نرمافزار از تشخیص نیازمندیها تا تست و نگهداری پشتیبانی میکند. در این ابزار نیازمندیها به صورت مدلهای ویژگی بیان میشود که یک محصول به تنهایی را در خط تولید نرمافزار نشان میدهد. برای استفاده از این محصول ابتدا باید در سایت شرکت سازنده ثبت نام کنید و لایسنس مربوط به نرمافزار را دریافت نمایید. سپس یک پیام به ایمیلی که با آن ثبت نام کردید ارسال میشود که در آن پیام نحوهی نصب و استفاده از آن توضیح داده شده است. به گفتهی شرکت سازندهی این محصول، نزدیک به ۱۰۰ مشتری و شریک در بخشهای محتلف شرکتها هستند که در حال استفاده از راهحلها و سرویسهای این شرکت بهره میبرند و دهها هزار مهندس هستند که فعالیتهای مهندسی روزانهی خود را به کمک این محصول انجام میدهد. اما در سایت این شرکت هیچ اسمی از شرکتهای استفاده کننده از این محصول دیده نشد.
نکتهای که در انتخاب ابزار مهم است شیوهی مدلسازی و روشی است که برای ایجاد خط تولید نرمافزار قرار است مورد استفاده قرار گیرد. در همان ابتدا روشی که قرار استفاده شود باید مشخص گردد. به عنوان مثال اگر قرار است که یک خط تولید نرمافزار مبتنی بر ویژگی ایجاد شود میتوان از ابزار Gears استفاده نمود اما اگر قرار باشد که از FragOP استفاده شود دیگر نمیتوان از این ابزار استفاده کرد و میتوان به سراغ ابزار VariaMos رفت و به کمک آن خط تولید خود را ایجاد کرد.
در این بخش به توضیح دو مورد از خطوط تولید نرمافزار پرداخته میشود که در محیط صنعتی و آموزشی راهاندازی و استفاده شدند.
این شرکت رهبر جهانی اجاره اقامتگاه برای تعطیلات به صورت آنلاین است. این شرکت صاحبان خانه و مدیران املاک را به مسافرانی که به دنبال فضایی جهت اقامت میگردند، متصل میکند. از نظر گسترهی جغرافیایی نیز این شرکت در نزدیک به ۱۰۰ کشور فعالیت دارد و بیش از ۵۰ میلیون کاربر جهت انتخاب و اجاره خانه به این شرکت مراجعه میکنند. این شرکت برای ارتباط مشتریان خود در جاهای مختلف جهان محصولات نرمافزاری دارد که از جملهی آنها میتوان به HomeAway.com، Verbo.com، CeyberRentals.com، Holiday-Rentals.co.uk و FeWo-direkt.de اشاره کرد. تمام این محصولات از یک خانواده میباشند. شرکت BigLevers روش خط تولید نرمافزار را برای این شرکت پیادهسازی نمود. مجموعهای از داراییها با قابلیت استفادهی مجدد برای محصولات ذکر شده که میتوانند درگاههای وب، سیستمهای مدیریت محتوا (CMS)، عملکرد واسط کاربری گرافیکی، اضافه و حذف ویژگیها، منو و صفحات وب و غیره. به ویژگیهای متغیری که در این سیستمها وجود دارد میتوان به زبان، مکان جغرافیایی و برند و غیره اشاره نمود. بنابراین شرکت HomeAway از روش خط تولید نرمافزار و چارچوب Gears برای انتقال از توسعهی رسمی و سنتی نرمافزار به توسعهی خط تولید استفاده کرد. Gears شرکت HomeAway را قادر به تولید جداگانه و خودکار، ساخت، آزمون و استقرار سایتها نمود.
در یکی از کارهای آموزشی برای ارزیابی روش FragOP پنج محصول نرمافزاری در نظر گرفته شده بود که تمام این محصولات از یک خانواده بودند و در زمینهی فروش لباس فعالیت میکردند. برای تولید این پنج محصول از روش خط تولید نرمافزار استفاده شد. از ویژگیهای این فروشگاهها میتوان به خرید، سبد خرید، مدیریت سایت، سیستم اشتراکگذاری، احراز هویت، مدیریت پایگاه داده اشاره کرد. در این پیادهسازی از ابزار VariaMos استفاده شد و آن را متناسب با مدل و روش FragOP که در بخش سوم توضیح داده شد تغییر دادند. در مجموع ۲۵ ویژگی و ارتباط میان آنها طراحی شد، ۲۰ عنصر ساخته شد که در مجموع منجر به تولید ۸۰ فایل شد که از این ۸۰ فایل، ۴۶ مورد فایلهای اجزای دامنه بودند و ۳۶تای دیگر شکستها. در انتهای این پیادهسازی، نتایج حاصل از استخراج پنج محصول به کمک روش FragOP در تصویر ۱۳ آمده است. در این تصویر ستون اول نام محصول، ستون دوم تعداد ویژگیهای انتخابی برای هر محصول، ستون سوم فایلهای پیوند شده میان ویژگیهای انتخاب شده و فایلهای عنصر متناظر، ستون چهارم تعداد خط کدی که برای استخراج محصول نهایی به صورت دستی تغییر کردند و ستون پنجم نیز زمان مورد نیاز برای استخراج محصول را نشان میدهد. نکتهای که در این روش وجود داشت تغییر تنها ۳ خط کد به صورت دستی جهت تولید محصول مورد نظر بود.
در هر دو مورد بررسی شده محصولاتی مورد نظر با کمترین میزان تغییرات کد و در زمانی بسیار کمتر نسبت با زمانی که هر کدام به صورت جداگانه پیادهسازی میشدند، تولید شدند.
برای تولید نرمافزارهای مشابه که از یک خانواده هستند و عملکردی یکسان دارند، مانند CMSها و e-commerceها، به جای آن که هر محصول را به صورت جداگانه توسعه داد میتوان از خط تولید نرمافزار استفاده کرد. خط تولید نرمافزار کمک میکند تا اجزا و داراییهایی که ثابت هستند را دیگر مجدد پیادهسازی نکنیم و امکان استفادهی مجدد آنها را در محصولات مشابه فراهم میکند. خط تولید نرمافزار مزایای زیادی مانند عرضهی سریعتر محصول به بازار، هزینهی مالی و زمانی کمتر، کاهش ریسک و خطاها و در نهایت رضایت مشتری را به همراه خواهد داشت. البته ایجاد و نگهداری خط تولید چالشهایی دارد. به عنوان مثال مدت زمانی که برای ایجاد اولین محصول صرف میشود زیادتر از زمانی است که برای تولید یک محصول به تنهایی صرف میگردد و نگهداری از آن با توجه به تغییراتی که در نیازمندی مشتریان و کسب و کار رخ میدهد دشوار است و برخی تغییرات بنیادین هزینهی زیادی خواهد داشت. در خط تولید نرمافزار مهندسی این خط تولید بسیار اهمیت دارد و باید به خوبی دامنه و محدودهی فعالیتهای نرمافزار و نیازهای آن را شناسایی کرد که به این کار مهندسی دامنه میگویند. پس از شناسایی دامنه و اجزای آن و پیادهسازی اجزا نوبت به مهندسی برنامه میرسد که مربوط به بخش توسعهی نرمافزار و ترکیب اجزای ساخته شده در مهندسی دامنه میباشد. نکتهای که در خط تولید نرمافزار مهم است مدیریت داراییها متغیر یا همان ویژگیهای متغیر است. برای پیادهسازی خط تولید نرمافزار به همراه مدیریت این ویژگیها روشهایی ارائه شده است که از الگوهای برنامه نویسی بهره بردهاند مانند FOP، AOP و FragOP. نکتهای که برای ایجاد خط تولید اهمیت دارد همین انتخاب روش توسعه است که با کدام یک از روشها میتوان نیاز ذینفعان را بهتر برطرف نماید. همچنین انتخاب روش در انتخاب ابزار ایجاد خط تولید نرمافزار نیز موثر است و متناسب با روش تعیین شده باید ابزار مناسب را انتخاب کرد. اما در کل روش FragOP را میتوان ترکیبی از دو روش AOP و FOP دانست که بنظر میآید که از انعطاف بیشتری نسبت به دو روش دیگر برخوردار باشد و در صورت وجود آمدن نیاز جدید نیاز به انجام تمام مراحل ایجاد خط تولید از ابتدا دیگر نباشد. همچنین این روش از این نظر شبیه AOP میباشد که مرحلهای مانند دوختن در انتها دارد و از این نظر مشابه FOP میباشد که تمام مراحل مربوط به مهندسی دامنه در آن نیز باید با دقت انجام شود. هر چند که در فعالیت پیادهسازی اجزای دامنه بنظر میرسد که گام مربوط به اتصال اجزای دامنه به نیازمندیهای دامنه اضافه باشد و میتوان از آن به عنوان یک مرحلهی اختیاری یاد کرد. البته در راستای مستندسازی میتواند کمک کننده باشد.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است