یادگیری ماشین چگونه توسعه نرمافزار را متحول میكند؟
ماشینافزار
یادگیری ماشین و هوش مصنوعی از اصطلاحاتی هستند كه در سالهای اخیر بسیار باب شدهاند. تحلیلگران و متخصصان پیشبینی میكنند شاهد رشد قابلتوجهی در بهكارگیری هوش مصنوعی و رشتههای مرتبطش در مواجهه با مسائل پیچیده و معنادار باشیم و این شامل توسعه نرمافزار نیز میشود. در توسعه نرمافزار، تركیب پیچیدگیهای ذاتی و روشهای نهچندان بهینه اغلب كل این زمینه را دشوار میكند و بنابراین، كسبوكارها به فكر كندوكاو عمیقترین رازهای یادگیری ماشین افتادهاند! همینكه نزدیك به ۴۰ درصد سازمانهای جهانی برنامه دارند تا راهكارهای هوش مصنوعی را تا پایان ۲۰۲۰ در چارچوبهای نرمافزاریشان وارد كنند، نشانه واضحی است كه یادگیری ماشین و هوش مصنوعی راهشان را به هسته كسبوكار باز كردهاند.
محمود صادقی / محقق سیستمهای تعاملی
یادگیری ماشین میتواند كاركردهای ساختاری و مهمی در توسعه نرمافزار داشته باشد كه به برخی از آنها اشاره میكنیم:
تشخیص انحراف از دستورهای كدنویسی
نرمافزاری كه خوب نوشته شده باشد، باید علاوه بر پاسخ به نیازهای عملكردی و غیرعملكردی تعریف شده برای آن، دستورالعملهای كدنویسی
(coding guidelines) مورد نظر هم در كدش دنبال شده باشد. برنامهنویسانی كه بهطور مداوم دستورالعملها و اصول كدنویسی را رعایت میكنند، كدهایشان پیچیدگیهای بیمورد ندارد، به آسانی قابل فهم است و نگهداری و بهبود آن كدها برای سازمان آسانتر و كمهزینهتر خواهد بود. اما اگر شما مدیر یك تیم برنامهنویسی باشید، چگونه میتوانید مطمئن شوید تیمتان از این دستورالعملها و استانداردها پیروی میكند؟ یك راه، بررسی كد (code reviews) است؛ اما این كارِ پرهزینهای است! بنابراین بهتر است كه بررسیكنندهها به موارد واقعا مهم در كد بپردازند و ابزاری وجود داشته باشد كه انحرافات عادی و معمولی از استانداردها را دربیاورد.
این كاری است كه از عهده یادگیری ماشین برمیآید، زیرا این الگوریتمها در یافتن الگوها موفق هستند و نه بررسی موارد خاص. با بهكار بستن آنها در این زمینه، میتوان حجم زیادی از كد را با سرعت بالا و با هزینه پایین بررسی و انحرافیابی كرد.
كسب بینش از كد
مدیریت فنی یك شركت بزرگ با انواع و اقسام پروژههای گوناگون، كاری بس پیچیده و سخت است! اولویتبندیها، پیادهسازی ویژگیها، رفع ایرادات، پروژههای همپوشان، تكنولوژیها و چارچوبهای قدیم و جدید و بسیاری از مسائل دیگر سبب میشود حفظ كیفیت و پیشبرد اهداف كار بسیار دشواری شود.
یادگیری ماشین شاید نتواند به جای یك انسان این وظایف را انجام دهد، ولی این توانایی را دارد كه حداقل در آسانسازی آن شریك شود. یكی از اطلاعاتی كه برای این آسانسازی نیاز است، بینشی (insight) از كدهای پروژههای موجود است. شما میتوانید یك ابزار قدرتگرفته از یادگیری ماشین را روی مخزن كدی (مثلا در گیتهاب) اجرا كنید تا به شما بینشهای ملموسی ارائه كند و پاسخ سؤالات اینچنینی را بدهد: چه حجم از كدها قدیمی (legacy) هستند؟ آیا كدی دارید كه درست نگهداری (maintained) نشده است؟ چه میزان از كدها در پروژههایتان بازاستفاده (reuse) شده؟ ارتباطات میان افراد تیم فنی چقدر كاراست؟
سادهسازی مدیریت پروژه
مدیریت یك پروژه توسعه نرمافزار پیچیدگیهای زیادی دارد و مدیران پروژه (PM) با چالشهای مختلف از جمله زمانبندی و تخمین هزینهها، دنبال كردن وضعیت پروژه، مدیریت كیفیت، مدیریت خطر و مدیریت منابع انسانی مواجه هستند.
در این زمینه هم ابزارهای یادگیری ماشین میتوانند به این مدیران یاری برسانند. ابزار Easy Projects نمونه خوبی است كه از یادگیری ماشین و هوش مصنوعی برای مواردی چون پیشبینی وضعیت پروژه و اتمام آن، تحلیل كارایی تیم پروژه، نرخ پیشرفت و... بهره میگیرد.
ابزارهای یادگیری ماشین همچنین با بهرهگیری از اطلاعات سازمانی و اطلاعات بازار به مدیران پروژه كمك کرده و خطرات را شناسایی میكنند. كاركردهای دیگری مانند دنبال كردن وضعیت دقیق پروژه، بررسی اسناد پروژه و تولید ساختارهای تقسیم كار (WBSs) هم از جمله وظایفی است كه یادگیری ماشین در آنها نیروی كارآمدی خواهد بود.
خودكارسازی و بهبود كدنویسی، بررسی كد و آزمون كد
مدیران فنی نرمافزار میدانند كه حجم زیادی كارهای تكراری در نوشتن، بررسی و آزمودن كد وجود دارد كه در حال حاضر بهطور دستی انجام میشود و یادگیری ماشین موج نوینی از خودكارسازی (automation) را به ارمغان میآورد كه بسیار فراتر از خودكارسازیهایی قانونپایه (rule ــ based) مرسومی است كه تاكنون دیدهایم. برای نمونه، یكی از كارمندان گوگل توانسته ۵۰۰ هزار خط كد از سرویس مترجم گوگل را با تنها ۵۰۰ خط كد از ابزار TensorFlow (ابزار یادگیری ماشین گوگل) جایگزین كند! یعنی حجم كد آن سرویس به یكباره یكهزارم شده است! یا شركتی در سانفرانسیسكو ابزار تكمیلكننده خودكار كد (code autocomplete) توسعه داده كه با سؤال و جوابهای سایت
Stack Overflow كار میكند! این ابزار قدرت آن را دارد كه بفهمد این كد احتمالا قرار است چه كاری انجام دهد و سپس از كدهایی كه در این سایت پیشنهاد شده است برای ادامه دادن آن بهره میگیرد.
یادگیری ماشین چیست؟
یادگیری ماشین كه در كنار برخی از اصول كارآمد هوش مصنوعی ایجاد شده، یك تكنولوژی پیشرفته است كه میتواند نرمافزارهای رایانهای با قابلیت یادگیری طراحی كند. بهاین معنا كه كاركرد سامانه میتواند از طریق یادگیری بهبود یابد. این یادگیری با بهرهگیری از الگوریتمهای یادگیری ماشین انجام میشود كه نرمافزار را آموزش (train) و به آن ساختاری برای یادگیری تدریجی میدهند. این الگوریتمها توسط متخصصان طوری طراحی میشود كه بتواند حجم عظیمی از دادهها را بگیرد، تحلیل كرده و براساس نتایج، الگوها و روندها را در آن شناسایی كند. این كار به سامانه كمك میكند پیشبینیهای دقیقی انجام دهد و قابلیتهای تصمیمگیریاش را هم بهتدریج بهبود دهد تا دقت عملكرد بالاتری داشته باشد.
مبنای یادگیری ماشین الگوریتمهایش است و این الگوریتمها در چهار دسته اصلی تقسیمبندی میشوند:
یادگیری نظارتشده (Supervised leaning)
كه در آن سیستم با دادههای برچسبخورده (labeled)، یعنی ورودیها و خروجیهای مشخص مربوط به آنها آموزش میبیند.
یادگیری نظارتنشده (Unsupervised leaning)
كه در آن سیستم با دادههایی طرف است كه برچسب ندارند و باید خود الگوها و ساختارها را از آن استخراج كرد.
یادگیری نیمهنظارتشده
(Semi ــ supervised leaning) كه دادههای تركیبی در آن استفاده میشود.
یادگیری تقویتشده (Reinforced leaning)
كه به جای تمركز بر دادهها، بر اساس سعی و خطا عمل یادگیری را انجام میدهد.