هوش مصنوعی در مهندسی نرم‌افزار

** این نوشته توسط دو نفر نوشته شده است **مهندسی نرم‌افزار به طور کلی شامل ۵ فاز می‌شود که عبارت است از:بررسی نیازمندی‌ها و برنامه‌ریزیطراحی ساختار نرم‌افزارتوسعه نرم‌افزار(نوشتن کد)تست کردن نرم‌افزارانتشار نرم‌افزار و نگه‌داری از آنما می‌توانیم از هوش مصنوعی در تمامی این فازها استفاده کنیم?بررسی نیازمندی‌ها و برنامه‌ریزی +‌ طراحی ساختار نرم‌افزاردر فاز ۱ و ۲ تولید یک نرم‌افزار اولین حوزه از هوش مصنوعی که سر و کله‌اش پیدا می‌شود Natural Language Processing یا به اختصار NLP است. با استفاده از NLP می‌توان نیازمندی‌ها را از متن مصاحبه با کارفرما(یا صاحب محصول) به دست آورد که به این کار Processing Natural Language Requirements یا NLR می‌گویند. فرآیند رسیدن از NLR به جزئیات و طراحی نرم‌افزار از سال ۱۹۸۰ میلادی شروع شد. پیشرفت‌هایی در این زمینه صورت گرفته است ولی از آنجا که با حوزه NLP گره خورده است و پیچیدگی‌های زبان درگیر آن است کار را کمی سخت کرده است.در دهه ۸۰ یک فریمورک کلی برای رسیدن از NL requirements به مدل‌های برنامه نویسی شئ‌گرا معرفی شد. در ادامه با استفاده از این موضوع یک سیستم با عنوان Large scale Object-based Linguistic Interactor Translator Analyser یا به اختصار LOLITA طراحی شد که طراحی شئ‌گرا بر اساس NLR انجام ‌می‌داد و در نهایت می‌توان use case و uml class دیاگرام‌ها را از این‌ها بدست آورد.توسعه نرم‌افزار(نوشتن کد)هوش مصنوعی ‌می‌تواند برای ما کد می‌نویسد!? شاید خواندن این جمله کمی عجیب به نظر برسد ولی پیشرفت‌های خیلی خوبه در این زمینه حاصل شده است. در ادامه مثال‌هایی را می‌بینیم.کامپایلرهای مدرن با استفاده از ماشین لرنینگ کدهایی اسمبلی‌ای تولید می‌کنند که optimize شده است.محققان شرکت ماکروسافت و دانشگاه کمبریج به صورت مشترک یک AI به نام DeepCoder طراحی کرده‌اند که با استفاد از شبکه‌های عصبی، می‌تواند کد بنویسد.داکیومنت نوشتن یکی از کارهای طاقت فرسا شاید باشد که AI در این زمینه هم کمک می‌کند. Mintlify با استفاده از شبکه‌های عصبی برای ما داک می‌نویسد که می‌تواند روند توسعه را ده برابر سریع‌تر کند. دموی زیر را می‌توانید مشاهده کنید:Mintlify AI Doc Writer Demo - Watch Videoمورد دیگر MutableAI است که یک CoPilot برای کدنویسی پایتون است که Refactor کد و کامل کردن کد بر اساس کدهایی که تا به حال نوشتیم را انجام می‌دهد. این مورد نیز از شبکه‌های عصبی استفاده می‌کند که می‌توانید در عکس‌هایی از آن را ببینید:تابع dequeue_list را بر اساس کدهایی که تا به حال نوشتیم کامل می‌کند.کوئری‌های SQL! احتمالا اگر با یک کوئری پیچیده سرکار داشته‌ باشید گاهی اوقات سخت است که هم جواب درست بدهد و هم اینکه بهینه باشد؛ دیگر می‌توانید تمرکز خود را روی درست بودن کوئری قرار دهید و بهینه بودن آن را به EverSql بسپارید!مورد بعدی IntelliCode است که در واقع نسل بعدی IntelliSense به حساب می‌آید که احتمالا آن را در ادیتورهای شرکت ماکروسافت دیده‌اید. IntelliSense بر اساس حروف الفبا پیشنهاد تکمیل کد را می‌داد اما IntelliCode تابع یا کدی را پیشنهاد می‌دهد که بیشترین سازگاری را دارد و همین که بعد از مدتی با استایل برنامه نویسی شما آشنا می‌شود و موارد مرتبط‌تر پیشنهاد می‌کند.یار برنامه نویسی شما! Github Copilot که محصول جدید گیتهاب(ماکروسافت) است از GPT-3 یا Generative Pre-trained Transformer 3 استفاده می‌کند که یک مدل بر اساس deep learning است که به کامل کردن متن و یا کد کمک می‌کند. ابتدا که می‌خواهید از Copilot استفاده کنید از شما می‌خواهد با شرایط استفاده موافقت کنید که این شرایط شامل جمع آوری دیتای کدنویسی شما است که این مورد بد نیست زیرا اگر به صورت کلی نگاه کنیم Copilot توسط بسیاری از برنامه نویسان در سراسر جهان در حال آموزش است!نمونه‌ای از کامل کردن کد توسط Github Copilotبا کامنت می‌گوییم تابعی می‌خواهیم که جمع دو عدد را حساب کند:پیشنهاد Copilotتست کردن نرم‌افزارنوشتن unit test شاید یکی از خسته کننده‌ترین کارها و در عین حال خیلی مهم باشد.شرکت Diffblue که توسط برخی از اعضای دپارتمان کامپیوتر ساینس آکسفورد تشکیل شده است با استفاده از متدهای هوش مصنوعی(مانند reinforcement learning) برای کدهای چه قدیمی و چه در حال توسعه یونیت تست می‌نویسد.گیتهاب کوپاپلت که قبل‌تر به آن اشاره کردیم، در این زمینه نیز به ما کمک می‌کند.با کامنت می‌گوییم که برای چه تابعی تست می‌خواهیم.تست تولید شده توسط گیتهاب کوپایلتانتشار نرم‌افزار و نگه‌داری از آناین فاز برای یک نرم‌افزار خیلی مهم است و باید بتوانیم نرم‌افزار را بنا به نیاز آپدیت و عیب‌یابی کنیم. همانطور که به نظر می‌آید یک فاز سخت و وقت‌گیر باید باشد ولی خب جای نگرانی نیست زیرا در این زمینه هم AI می‌تواند کمک کند.آژانسی به نام Darpa وجود دارد و برنامه ای به نام MUSE وجود دارد که روی آن کار می کنند و در ادامه راجع به آن توضیح می‌دهیم.برنامه MUSEهر برنامه نویسی به مقطعی از شغل حرفه ای خود میرسد که در آن با هزاران خط کد بدون مستندات مناسب مواجه میشود و در درک پایه کد، رفع اشکالات و تعمیر آن یا حتی تولید کد جدید به مشکل بر میخورد.برنامه‌ Muse، تولید شده توسط آژانس دارپا است که هدف آن بهبود کیفیت توسعه و ایجاد نرم‌افزار آسان‌تر، سریع‌تر، قوی‌تر و انعطاف‌پذیرتر است.آژانس پروژه‌های تحقیقاتی پیشرفته دفاعی (دارپا) یکی از شاخه‌های فناوری پیشرفته وزارت دفاع ایالات متحده است. هدف این آژانس آزمایش فناوری‌های جدید و آماده ‌سازی عملیاتی آن‌ها در صورت امکان، و رسیدن به فراتر از فناوری نظامی فعلی برای انجام کارهای جدید است.به طور کلی برنامه muse سه هدف دارد که در مورد آنها صحبت خواهیم کرد:کد کاوی و جستجوی معناییمحور رویکرد MUSE، ایجاد زیرساخت اجتماعی است که یک موتور استخراج-معدنی با مشخصات عملیاتی مداوم را در خود جای دهد. این موتور می‌تواند از تحلیل‌های عمیق برنامه و ایده‌های بنیادی زیربنای تجزیه و تحلیل داده‌های بزرگ استفاده کند تا پایگاه‌داده‌ای حاوی استنتاج‌هایی در مورد ویژگی‌های برجسته، رفتارها و آسیب‌پذیری‌های مؤلفه‌های برنامه در مجموعه را پر و اصلاح کند. در صورت موفقیت، MUSE می‌تواند قابلیت‌های متعددی را ارائه دهد که تا کنون گریزان مانده‌اند.تشخیص و تعمیر باگیک آزمایشگاه تحقیقاتی غیرانتفاعی که با دانشگاه استنفورد همکاری می‌کند، در حال توسعه یک سیستم یادگیری ماشینی است که ترابایت‌ها کد نرم‌افزار را برای یافتن نقص‌های امنیتی و رفع آنها تجزیه و تحلیل می‌کند.آزمایشگاه Draper، که قبلا بخشی از موسسه فناوری ماساچوست بود، در حال ساخت این سیستم با همکاری گروهی در دانشگاه استنفورد به رهبری اندرو نگ، پیشگام یادگیری ماشین است.براد گینور، معاون مدیر سیستم‌های سایبری در Draper، در مصاحبه‌ای با eWEEK گفت که این سیستم که DeepCode نامیده می‌شود، قبلاً برای شناسایی آسیب‌پذیری‌های امنیتی مانند Heartbleed Bug در OpenSSL استفاده شده است. در نهایت، هدف DeepCode یافتن تمام نمونه‌های همه باگ‌های نرم‌افزاری شناخته شده است.سنتز برنامهاین تیم سنتز برنامه را بر اساس مشخصات عملکردی انجام می دهد. هدف یافتن یک برنامه موجود از یک مجموعه کد بزرگ برای ارائه عملکرد مورد نظر و همچنین اعتبار برنامه یافت شده با اثبات درستی آن است. برای یافتن این کد، ویژگی های برنامه را با استفاده از تحلیل استاتیک استخراج می کنند و سپس از خوشه بندی (clustering) و شباهت برنامه استفاده می کنند. آنها همچنین ابزارهای کمی برای کمک به پردازش و جستجوی مجموعه و همچنین حذف موارد تکراری ایجاد کرده اند.بیشتر کاری که آنها تاکنون انجام داده اند روی داده‌های بیت کوین بوده است.برنامه Museنتیجه ?آیا هوش مصنوعی می‌تواند جایگزین برنامه نویسان و developerها شود؟در نوامبر 2017، Andrej Karpathy که یک محقق در زمینه کامپیوتر ساینس و همچنین مدیر بخش artificial intelligence and Autopilot Vision در شرکت Tesla است، یک پست وبلاگی با عنوان نرم افزار 2.0 منتشر کرد که در آن استدلال کرد که یک تغییر پارادایم اساسی در نحوه ساخت نرم افزار توسط انسان ها وجود داشته است. Karpathy عنوان کرد که پیدایش نرم افزار 2.0 به این معنی است که توسعه دهندگان دیگر نیازی به نوشتن کد ندارند. آنها فقط داده های مربوطه را پیدا کرده و به سیستم های یادگیری ماشینی وارد می کنند که سپس نرم‌افزار مورد نیاز را می نویسند.نظر شما چیست؟شاید ۵۰ سال قبل به شما می‌گفتند که یک ربات می‌تواند با آدم‌ها صحبت کند می‌خندیدید ولی خب عملا این موضوع ممکن شده است. بنابراین قضاوت و پیش‌بینی اینکه چه در سال‌های آینده‌ی هوش مصنوعی رخ می‌دهد کار ساده‌ای نیست? امیدوارم که نوشته مفیدی برایتان بوده باشد و ممنون از اینکه این نوشته را مطالعه‌ کردید ?نویسندگانحامد فیض‌آبادیماهان محمودیمنابعFeras A. Batarseh, Rasika Mohod, Abhinav Kumar, Justin Bui, 10 - The application of artificial intelligence in software engineering: a review challenging conventional wisdomAmmar, Hany & Abdelmoez, Walid & Hamdi, Mohamed. (2012). Software Engineering Using Artificial Intelligence Techniques: Current State and Open Problems. https://www.stxnext.com/blog/will-artificial-intelligence-replace-developers/https://www.youtube.com/watch?v=vkLHqWicqaUhttps://www.darpa.mil/program/mining-and-understanding-software-enclaveshttps://www.darpa.mil/attachments/MUSEFAQ32014.pdf