توسعه، خلق تکراری چیزی جدید و مفید است.
هنگامی که به توسعه فکر میکنیم، اغلب توسعه محصول جدید به ذهن میآید. این با تولید که محصولات فردی را تولید میکند، متفاوت است؛ در عوض، شامل ایجاد مشخصات طراحی یا قالبهای محصولات است.
بنابراین، نقشهها یا قالبهای ایجاد شده از طریق توسعه محصول جدید، به طور مکرر در کارخانهها برای تولید تعداد زیادی محصول یکسان استفاده میشوند.
همچنین کاربردهایی مانند توسعه تواناییهای فردی یا توسعه جامعه و ملتها وجود دارد. اینها نه تنها به معنای افزایش آنچه فرد در اختیار دارد، بلکه به معنای توانایی استفاده مکرر و بهرهبرداری از قابلیتهای توسعه یافته است.
در حالی که قدرت اقتصادی افراد و جوامع ممکن است به دلیل شرایط اقتصادی نوسان داشته باشد، قابلیتهای توسعه یافته اساساً دائمی هستند.
حتی اگر کاهش یابند، این کاهش به جای نوسانات صعودی و نزولی رونق اقتصادی، زوال محسوب میشود.
فراتر از اینها، توسعه فناوری و دانش نیز وجود دارد. اینها برخلاف تواناییهای افراد یا جوامع خاص، ویژگی قابلیت اشتراکگذاری آسان را دارند.
و در میان محصولات، قابلیتها، دانش و فناوریهایی که نتایج این توسعهها هستند، برخی میتوانند به توسعههای بعدی کمک کنند.
با توسعه چنین خروجیهای مفیدی، دامنه توسعه گسترش مییابد و کارایی و کیفیت بهبود مییابد.
توسعه نرمافزار مبتنی بر هوش مصنوعی (AI-Driven)
به طور کلی، توسعه نیازمند زمان و تلاش قابل توجهی بوده است. به خصوص با پیشرفت جامعه و پیچیدهتر شدن مسائل مختلف، ایجاد چیزهای جدید دشوارتر نیز میشود.
با این حال، با ظهور هوش مصنوعی مولد (Generative AI)، این وضعیت در حال تغییر است. در حال حاضر، توسعه نرمافزار به لطف قابلیتهای بالای برنامهنویسی هوش مصنوعی مولد، دستخوش تغییرات چشمگیری است.
در این چشمانداز، آیندهای که در آن عاملهای خودمختار مبتنی بر هوش مصنوعی مولد به عنوان مهندسان نرمافزار، محور توسعه نرمافزار قرار میگیرند، در حال تبدیل شدن به واقعیت است.
ما در حال حاضر در یک مرحله گذار هستیم. در حالی که نمیتوانیم توسعه را به طور کامل به هوش مصنوعی مولد بسپاریم، اما استفاده ماهرانه از آن میتواند توسعه نرمافزار را به شدت پیش ببرد.
این رویکرد به عنوان توسعه نرمافزار مبتنی بر هوش مصنوعی شناخته میشود.
توسعه توسعهای
هنگامی که هوش مصنوعی مولد توسعه نرمافزار را کارآمدتر میکند، میتواند نه تنها توسعه نرمافزار هدف نهایی، بلکه توسعه نرمافزاری را که به خود توسعه کمک میکند نیز سادهسازی کند.
همانطور که قبلاً ذکر شد، خروجیهایی که توسعه را تسهیل میکنند، دامنه آن را گسترش داده و به بهبود کارایی و کیفیت کمک میکنند. علاوه بر این، اگر به طور موثر ایجاد شوند، میتوانند در سایر پروژههای توسعه نیز مورد استفاده مجدد قرار گیرند.
بنابراین، با توسعه نرمافزاری که در طول فرآیند توسعه نرمافزار به آن کمک میکند، کارایی کلی افزایش یافته و میتوان از این داراییها برای توسعههای آینده بهره برد.
به طور سنتی، توسعه چنین نرمافزارهای کمکی یک رویه معمول بود، اما نیازمند زمان و تلاش توسعه مخصوص به خود بود که مستلزم بررسی دقیق و اجرای متمرکز بود.
با استفاده از هوش مصنوعی مولد، میتوان به سرعت نرمافزارهای سادهای را برای خودکارسازی وظایف جزئی که به ذهن میرسند، ایجاد کرد. اگر وظیفه شامل پردازش واضحی باشد، هوش مصنوعی مولد میتواند برنامه را با دقت و تقریباً بدون خطا تولید کند.
در نتیجه، توسعه نرمافزاری برای کمک به توسعه در طول فرآیند توسعه نرمافزار، آسانتر از قبل شده است.
و با تفکر عمیق در مورد این موضوع، سبک توسعهای پدیدار میشود که در آن ابزارهای مفید برای توسعه به طور مداوم در طول فرآیند ایجاد میشوند و بدین ترتیب روش توسعه را متحول میکنند.
ما این را "توسعه توسعهای" مینامیم.
برای تمرین توسعه توسعهای، فرد نیاز به عادت مشاهده عینی توسعه نرمافزار خود دارد و اینکه کدام بخشها را میتوان توسط نرمافزار و کدام بخشها را فقط توسط انسان انجام داد، همراه با مهارت توسعه چنین نرمافزارهای کمکی.
علاوه بر این، هوش مصنوعی مولد را میتوان در این ابزارهای نرمافزاری گنجاند. با جاسازی آن در نرمافزار، برخلاف عاملهای هوش مصنوعی مولد، دامنه پردازش را میتوان تا حدی محدود کرد و مسیرها را تعریف نمود.
در حالی که عاملهای هوش مصنوعی میتوانند نتایج مشابهی را از طریق دستورات (prompts) به دست آورند، نرمافزارهای دارای هوش مصنوعی مولد تعبیهشده میتوانند با ترکیب هر دو برنامه و دستورات، دقت را راحتتر افزایش دهند.
اگر چنین توسعه توسعهای قابل اجرا باشد، پروژه دوم در مقایسه با پروژه اول، بهبودهایی در کیفیت و هزینه نشان خواهد داد. علاوه بر این، با هر پروژه بعدی – سوم، چهارم و غیره – بهبودها همچنان انباشته خواهند شد.
این کاملاً متفاوت از صرفاً استفاده از هوش مصنوعی مولد برای توسعه نرمافزار است. با گذشت زمان، شکاف قابل توجهی بین تیمهایی که فقط بر ابزارهای هوش مصنوعی مولد مسلط هستند و تیمهایی که توسعه توسعهای را تمرین میکنند، پدیدار خواهد شد.
تست با محوریت بازآرایی (Refactoring-Driven Testing)
مفهومی به نام توسعه تست محور (TDD) وجود دارد که در آن ابتدا تستها بر اساس مشخصات طراحی میشوند و سپس نرمافزار برای گذراندن آن تستها توسعه مییابد.
در ابتدا، من نیز فکر میکردم که با استفاده از هوش مصنوعی مولد، توسعه برنامههای تست برای تست خودکار آسان خواهد بود و TDD را عملی میسازد.
با این حال، همانطور که شروع به تمرین توسعه توسعهای کردم، به این باور رسیدم که فکر کردن درباره تستها قبل از پیادهسازی آنها همیشه مناسبترین رویکرد نیست.
بهویژه برای نرمافزارهایی مانند برنامههای وب که شامل جنبههای ذهنی مانند قابلیت استفاده (usability) و طراحی بصری میشوند و کاربر مستقیماً با آنها تعامل دارد، متوجه شدم که اجرای واقعی و تعامل با نرمافزار بر تستهای جزئی اولویت دارد.
این به این دلیل است که اگر پس از تعامل با نرمافزار، نارضایتی قابل توجهی در سطح UI/UX وجود داشته باشد، این احتمال وجود دارد که بخواهید بخشهای اساسی مانند فریمورک، معماری پایه، مدل داده یا موارد استفاده (use cases) را تغییر دهید.
در پروژه توسعه نرمافزار شخصی فعلیام، متوجه مشکلاتی در انعطافپذیری ویژگیها و عملکرد شدم و در نهایت دو فریمورک را با فریمورکهای دیگری جایگزین کردم.
همچنین مجبور شدم پردازش در برخی مناطق را به دلیل استفاده ناکارآمد از حافظه کاملاً بازبینی کنم.
این در همین لحظات بازآرایی است که تست کردن برای اولین بار به یک ملاحظه آگاهانه تبدیل میشود.
اگر این در مراحل اولیه توسعه باشد، یا اگر قرار است توابع و مشخصات به هر حال به طور قابل توجهی تغییر کنند، تستها ممکن است غیرضروری باشند.
با این حال، اگر توسعه از قبل پیشرفت قابل توجهی کرده باشد و موارد زیادی برای بررسی وجود داشته باشد، تستها برای تأیید اینکه بازآرایی باعث ایجاد نقص یا حذف عملکردی نشده است، ضروری خواهند بود.
بنابراین، رویکرد ایجاد برنامههای تست زمانی که توسعه تا حدی پیشرفت کرده و بازآرایی ضروری میشود، ایده بدی نیست.
در این مرحله، نکته کلیدی این است که تستها را برای تمام کد ایجاد نکنیم، بلکه بر تست بخشهای بالغی که احتمالاً در آینده تغییر زیادی نخواهند کرد، تمرکز کنیم، در حالی که بخشهای سیال را بدون تستهای خودکار رها کنیم.
این را میتوان تست با محوریت بازآرایی نامید.
نتیجهگیری
هوش مصنوعی مولد به طور چشمگیری در حال دگرگون کردن توسعه نرمافزار است.
در مقالهای قبلی، من درباره اهمیت هدفگذاری برای تبدیل شدن به یک «مهندس همهجانبه» (Omni-directional Engineer) نوشتم؛ مهندسی که قادر به توسعه سیستمهایی است که دامنهها، زیرساختها و محیطهای اجرایی مختلف را ترکیب میکند و فراتر از مهندس سنتی فولاستک میرود.
همچنین مقالهای نوشتم که نشان میداد در حال ورود به عصر «توسعه مبتنی بر تجربه و رفتار» هستیم، جایی که تمرکز نه بر همراستایی مشخصات با پیادهسازی، بلکه بر بهبود تجربه کاربری از طریق رفتار نرمافزار است.
توسعه توسعهای و تست با محوریت بازآرایی دقیقاً همان چیزی هستند که به این افقهای جدید در توسعه نرمافزار منجر میشوند.