پیوند خودکار کد بین دو برنامه امکانپذیر شد
به گزارش کارگروه فناوری اطلاعات سایبربان؛ پژوهشگران آزمایشگاه علوم رایانه و هوش مصنوعی دانشگاه امآیتی (1CSAIL) در زمان برگزاری «نشست ماشینآلات محاسباتی بر پایهی مهندسی نرمافزار2» سامانهی جدیدی به نام «کدکربنکاپی» (CodeCarbonCopy) را معرفی کردند که به برنامهنویسها اجازه میدهد کدهای دو برنامه را به یکدیگر پیوند بزنند. در واقع کاربران میتوانند بخشی از کد را از نرمافزار اول انتخاب کرده و آن را در برنامهی دوم قرار بدهند، سپس این سامانه به صورت خودکار تغییرات ضروری مانند تغییر نام متغیر را انجام داده و آن را در محتوای جدید ادغام میکند.
کدکربنکاپی میتواند دادههایی را که بین دو برنامههای فرستنده و گیرنده مورد استفاده قرار میگیرند، ترجمه بکند. برای نمونه یک نرمافزار پردازش تصویر، باید فایلهای را که دارای تنوع گستردهای از فرمتها مانند «jpeg»، «Tiff» یا «png» هستند، کنترل بکند؛ اما در پسزمینه همهی عکسها با یک استاندارد نمایش داده میشوند. در مقابل برنامهای دیگر ممکن است از طرح متفاوتی برای این کار استفاده بکند. دستاورد امآیتی به صورت خودکار طرح برنامهی فرستنده را روی گیرنده پیادهسازی کرده و کدها را به شکلی یکپارچه منتقل میکند.
استلیوس سییدایرگلو داسکاس (Stelios Sidiroglou-Douskos)، یکی از محققان آزمایشگاه علوم رایانه و هوش مصنوعی گفت:
کدکربنکاپی دستیابی به یکی از جامهای مقدس مهندسین برنامهنویس با نام «استفادهی مجدد خودکار از کد» را ممکن ساخته است. این موضوع تنها یک گام دیگر از حرکت به سمت خودکار سازی و کنار گذاشتن انسان از چرخهی توسعه به حساب میآید. بر پایهی چشمانداز ما احتمالاً بیشتر نرمافزارهایی که تاکنون نوشته شدهاند به آنها نیاز داشتهایم و هماینک تنها باید آنها را بازنویسی کنیم.
محققان کدکربنکاپی را 8 مرتبه مورد آزمایش قرار دادند و در هر نوبت این سامانه باید کدها را بین 6 برنامهی پردازش تصویر محبوب جابهجا کرده و در آنها وارد میساخت. به جز در یک مورد تمامی آزمایشها موفقیتآمیز بودند و بدون این که در روند اجرای برنامه اختلالی ایجاد بشود، ویژگیهای جدید را نیز به خوبی به نمایش گذاشتند.
اولین گام برای پیوند زدن کد با کدکربنکاپی، آمادهسازی یک فایل ورودی مشابه برای هر دو برنامه است. سپس این سامانه نحوهی پردازش فایل و تفاوت این کار را بین هر نرمافزار مقایسه میکند. برای نمونه اگر برنامهی اهدا کننده چندین عملیات را روی یک قطعه داده انجام داده و نتیجه در متغیری به نام « mem_clip->width» ذخیره گردد و گیرنده با انجام همان کارها نتیجه را در متغیر «picture.width» جایگذاری کند، دستاورد مذکور تشخیص میدهد که هر دو متغیر دارای عملکرد مشابهی هستند.
زمانی که متغیرها شناسایی شدند، سامانه مورد بحث آنها را به کاربر ارائه میدهد. این موضوع حتی متغیرهایی را که در برنامهی اهدا کننده وجود داشته، اما معادلی در سمت گیرنده ندارند نیز نمایش میدهد. بیشتر این نمونهها با وجود اینکه در سمت دریافتکننده وجود ندارند نقشی بسیار مهم را در طرف اول ایفا میکنند. کاربر میتواند این نمونهها را به عنوان متغیری غیرضروری نشانهگذاری کند تا فناوری امآیتی به صورت خودکار از انتقال عملکرد آنها جلوگیری کند.
کدکربنکاپی برای بازنشانی دادهها از نرمافزاری به دیگری، به دادههای ذخیره شدهی هرکدام در حافظه نگاه میکند. برای مثال هرکدام از پیکسلها در یک تصویر دیجیتالی، توسط سه رنگ قرمز، سبز و آبی ایجاد شدهاند. یک برنامه ممکن است مقدار عددی این سه رنگ را به ترتیب «قرمز، سبز و آبی» را ذخیره کند و نرمافزار دیگر همین کار را به صورت «آبی، سبز، قرمز» انجام بدهد. اگر سامانه نوعی رابطه را بین دادههای ذخیره شده و برنامهها پیدا کند، شروع به ترجمهی دادهها بین دو نرمافزار خواهند کرد.
دستاورد یاد شده در زمان به کارگیری فرمتهای مختلفی مانند تصاویر که دادههای آن در ردیفی یکسان از خانههای حافظه قرار میگیرند، عمل کرد مناسبی از خود نشان میدهد؛ اما محققان در تلاش هستند تا آن را با دیگر فرمت فایلها که دارای دادههای غیر سازماندهی شده هستند، نیز به کار بگیرند.
ویتالی شماتیکو (Vitaly Shmatikov)، استاد دانشگاه مهندسی کارنل تک (Cornell Teck) گفت:
به طور کلی انتقال کد یکی از اصلیترین مشکلات در نرمافزارها است. بسیاری از باگها و مشکلات امنیتی زمان رخ میدهند که کاربر قصد دارد قطعی کد را از برنامهی مبدأ به مقصد منتقل بکند. آنها اشتباه کوچکی مرتکب شده و برنامه را مختل میکنند. بنابراین داشتن سامانهای که به شکل خودکار این روند را انجام میدهد کمک بسیار بزرگی خواهد بود.
______________________________________
1- MIT’s Computer Science and Artificial Intelligence Laboratory
2- Association for Computing Machinery’s Symposium on the Foundations of Software Engineering.