گروه نرم افزاری هیلتن

مهندسی نرم افزار: برنامه نویس به روش تولید خودکار

برنامه نویس به روش تولید خودکار

Generative Programming



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

1) فکر کردن و نوشتن Think & program
2) بررسی و مونتاژ Survey & assembly
3) سفارش و تولید Order & generate

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

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

هر چند استفاده از روش دوم تا حد زیادی از مشکلات پیاده سازی می کاهد اما نهایتا این برنامه نویس است که می بایست به جستجوی کامپوننت ها باشد و پس از پیدا کردن، آن ها را در کنار هم قرار دهد. پس اولین مسئله چیدمان دستی این کامپوننت ها در کنار یکدیگر است. مسئله ی دیگر این است که شاید این کامپوننت ها صد در صد نیاز را برطرف ننموده و لازم باشد تا باز هم خود او دست به کار شده و قسمت هایی که توسط کامپوننت ها پشتیبانی نمی شوند را پیاده سازی نماید. روش سفارش و تولید این مسائل را حل می نماید، به این صورت که برنامه نویس از تمام این جزئیات بی اطلاع بوده و تنها به نحوی نیاز خود را عنوان نموده و برنامه مورد نظر وی به صورت اتوماتیک تولید می گردد. بنابراین نه تنها طول زمان تولید نرم فزار به طور چشمگیری کاهش پیدا می کند بلکه از خطاهای برنامه نویسی نیز تا حد بسیار زیادی کاسته می شود. شاید مثالی که در ادامه می آید تفاوت چشمگیر این دو روش را به طور موثرتری بیان نماید و قدرت روش سوم را به شکل بهتری نمایش دهد: فرض نمایید که شما اتومبیلی را خریداری می نمایید اما به جای دریافت اتومبیل قابل استفاده به شما تنها تمام قطعاتی که می توان یک اتومبیل را ساخت داده می شود. در واقع، البته نه به طور حتم، بعضی از قطعات به صورت 100 درصدی قابلیت تطابق با دیگر قطعات را نداشته و شما مجبورید تا خودتان آنها را به شکل قابل استفاده ای تبدیل کرده تا اتومبیل موردنظر را تولید نمایید. این فرآیند درست همان راهکاری است که در روش دوم به کار گرفته می شود. حتی اگر به صورت 100 درصد قطعات قابلیت تطابق را داشته باشند، نهایتا این شمایید که به صورت دستی قطعات را سرهم می نمایید. به جای این کار شما دوست دارید تا اتومبیل خود را به شکلی انتزاعی بیان نموده و اتومبیل مربوطه را به شکلی آماده و کامل دریافت نمایید. مثلا تنها عنوان کنید «من به یک مرسدس بنز کلاس C که برای مسابقه سفارشی شده و دارای یک موتور تون آپ شده V8 و بدنه تقویت شده است، نیاز دارم» و کارخانه آن را به صورت کامل به شما تحویل دهد. این همان رهیافتی است که در روش سوم (سفارش و تولید) به کار می رود.

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

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

بکارگیری برنامه نویسی مولد در فرآیند واکشی اطلاعات

به منظور تولید مولدها و محیا کردن امکان برنامه نویسی مولد، از فرآیند توسعه نرم افرار، با عنوان «توسعه نرم افزار مولد» استفاده می گردد .







گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن