در این پادکست، شین هستی، سردبیر ارشد فرهنگ و روشها، با آدام سندمن در مورد اینکه چگونه هوش مصنوعی مولد با خودکارسازی وظایف پیشپاافتاده، فعالسازی نمونهسازی سریعتر و ادغام نقشهای سنتی به موقعیتهای عمومیتر، توسعه و آزمایش نرمافزار را متحول میکند، صحبت کرد. او همچنین چالشهایی مانند افزایش نقصها، نگرانیهای اخلاقی و ماهیت در حال تحول همکاری انسان و ماشین را برجسته کرد.
شین هستی: روز بخیر، دوستان. این شین هستی برای مقدمهای بر پادکست فرهنگ مهندسی است. امروز، من با آدام سندمن نشستهام. آدام، خوش آمدید.
آدام سندمن: خیلی ممنون، شین.
شین هستی: چند سالی است که شما در مورد کیفیت و تست با ما صحبت میکنید و روندها در آن مرحله نشان میدهد که هوش مصنوعی مولد کاملاً جدید است و ما در مورد اینکه این موضوع چه تاثیری در تست دارد صحبت میکردیم؟ خب، ما دو سال از آن زمان فاصله داریم. چه چیزی تغییر کرده است؟
آدام سندمن: خب، من فکر میکنم که ما قدرت هوش مصنوعی مولد را دیدهایم و من فکر میکنم که ما همچنین برخی از محدودیتها و محدودیتها را نیز دیدهایم. ما همچنین شاهد تکامل هوش مصنوعی به روشهایی بودهایم که شاید انتظارش را نداشتیم. من فکر میکنم دو سال پیش، ما هیجان زیادی را در مورد توانایی تولید چیزها، تولید محتوا، خواه کد باشد، خواه وبلاگ، خواه مستندات یا چیزهایی که واقعاً فکر میکنم بهرهوری نرمافزار را بهبود بخشیدهاند، دیدیم. من میخواهم بگویم مهندسی نرمافزار یا تولید نرمافزار. برخی از آن کدنویسی است، برخی از آن مستندات است، اما من فکر میکنم که ما همچنین موارد استفاده جدیدی را دیدهایم که مردم انتظار نداشتند در مورد هوش مصنوعی عامل جدید به عنوان اصطلاح روز.
اما توانایی هوش مصنوعی برای شروع به کار با برنامهها و ارائه بازخورد کیفی در مورد چیزهایی که با استفاده از بینایی میبیند. اینها چیزهایی هستند که من فکر نمیکنم لزوماً از یک مدل زبانی بزرگ پیشبینی شده بودند. ما فرض کردیم که بیشتر تولید است تا بینش بیشتر. من همچنین احساس میکردم که ممکن است در برخی جهات در تولید محتوا پیشرفت بیشتری داشته باشیم نسبت به آنچه که انجام دادهایم و من فکر میکنم موارد استفاده اضافی که همه به سمت رباتهای گفتگو و دستیارهای کدنویسی و نوشتن وبلاگ جذب شدهاند، در دو سال به طور گستردهای تکامل نیافتهاند. همان بوده است. پوششهای بیشتری در اطراف عملکرد بیشتر بوده است تا استفاده از آن را آسانتر کند، شاید آن را برای مردم راحتتر کند. من فکر میکنم مردم سعی کردهاند انسان و رایانهها را با هم نقشهبرداری کنند.
بنابراین، در دنیای غیرتوسعه، در حالی که مردم فکر میکردند فقط ماشینها همه چیز را مینویسند، مردم اکنون خدماتی دارند که در آن یک انسان و یک رایانه با هم با بازخورد در اطراف آن کار میکنند. بنابراین، من فکر میکنم آنچه تغییر کرده است این است که ما بهتر درک میکنیم که چگونه هوش مصنوعی میتواند به ما کمک کند، اما ما همچنین راههای جدیدی برای استفاده از هوش مصنوعی پیدا میکنیم که پیشبینی نشده بودند. چیز دیگری که فکر میکنم بسیار جالب است، هزینه است. مقیاسبندی بسیار متفاوت از آن چیزی است که فکر میکردیم. ما فرض کردیم که مورد استفاده اصلی تولید محتوا خواهد بود، که یک مدل زبانی بزرگ پس از آموزش و ساخت پرهزینه، آن را نسبتاً ارزان انجام میدهد.
ما اکنون موارد استفادهای را میبینیم که به آن زنجیره تفکر و گردش کار میگویند، جایی که استنتاج که قدرت محاسباتی و توانایی اجرا از طریق، در واقع پرسش از مدل به این روشهای مختلف فوقالعاده گران است. بنابراین، ما شروع به دیدن محدودیتها و هزینهها در مورد برخی از این ایدههایی که مردم دارند میکنیم. بنابراین، در برخی موارد، ما در مورد آزمایش صحبت خواهیم کرد. برخی از این LLMها که برای آزمایش به روشهای خاصی استفاده میشوند، میتوانند گرانتر از یک آزمایشکننده انسانی باشند، که فکر نمیکردم دو سال پیش فکر میکردم.
شین هستی: پس بیایید وارد آزمایش شویم زیرا این زمینهای است که شما در آن متخصص هستید.
آدام سندمن: ممنون.
شین هستی: هوش مصنوعی مولد، مدلهای زبانی بزرگ، چگونه امروز از آزمایش پشتیبانی میکنند و این چه تاثیری بر آزمایش محصولات نرمافزاری شما دارد؟
آدام سندمن: درست است. من میگویم ما معتقدیم که آزمایش تابعی از کیفیت است و من فکر میکنم آزمایش فعالیت است، کیفیت باید نتیجه باشد. بنابراین، این جعبه صابون کوچک من است. من فقط میخواهم به آن اشاره کنم و میدانم که شما InfoQ دارید. من فکر میکنم Q همیشه برای کیفیت است. من فکر میکنم آنچه امروز برای آزمایش استفاده میشود، اول از همه در سطح توسعهدهنده است، بسیاری از توسعهدهندگانی که من میشناسم از هوش مصنوعی برای تولید چیزهایی استفاده میکنند که دوست ندارند انجام دهند. بنابراین، به عنوان مثال، تستهای واحد. ما میدانیم که تستهای واحد وحشتناک هستند. من به طور تجاری یک توسعهدهنده هستم. من قبلاً در C# و Java کد مینوشتم و هنوز هم این کار را انجام میدهم. من ممکن است مدیرعامل باشم، اما وقتی نگاه نمیکنند، هنوز در کد دست و پا میزنم و با آن تفریح میکنم. اما من از نوشتن تستهای واحد متنفرم. همه این کار را انجام میدهند و میدانیم که واقعاً قدرتمند است.
ما میدانیم که اگر به هرم آزمایش نگاه کنید، این کلاسیک بهترین راه برای به دست آوردن پوشش ارزان و قابل اعتماد با کمترین تعمیر و نگهداری است و با این حال ما هنوز کار وحشتناکی را در آن انجام میدهیم. بنابراین، بسیاری از مشتریان ما از هوش مصنوعی برای انجام بسیاری از کارهای سخت تست واحد، به ویژه تغییرات پارامتر ورودی استفاده میکنند. اگر من بخواهم این تابع را با 1000 ترکیب پارامتر مختلف آزمایش کنم، این یک کار وحشتناک انسانی است. توسعهدهندگان از این متنفرند. این کسلکنندهترین کار برنامهنویسی است. هوش مصنوعی در این زمینه خوب است. بنابراین، من فکر میکنم این مورد استفاده به خوبی و به درستی حل شده است، اما با استفاده از هوش مصنوعی و Copilot و سیستمهای مختلف دیگر از این دست بهبود یافته است. چیزهای دیگری که ما فهمیدهایم در آن بسیار خوب هستند، تولید دادههای تست است.
اگر به دادههای تست مصنوعی نیاز دارید، تولید 1000 شماره تلفن یا نام کاربری و میتوانید به آن بگویید، "من میخواهم اینها شرایط مرزی داشته باشند، آنها را بسیار طولانی کنید، آنها را بسیار کوتاه کنید، اما علائم دلار برای نویسههای خاص، هر چه باشد"، برای آن مورد استفاده نیز خوب است. همچنین برای برخی از جنبههای آزمایش مدیریت پروژه نیز خوب است. بنابراین، ما موفقیت زیادی دیدهایم. من یک داستان کاربری دارم که از آن برای ارائه بازخورد در مورد آن داستان کاربری استفاده میکنم. من کلمه "آن" را میبینم، بارها در آن است. آن چیست؟ آیا مشتری است؟ آیا صفحه است؟ بهبود نیاز داستان، اشتباهات و تفسیر کمتر توسط افراد مختلف که کیفیت را بهبود میبخشد، و همچنین چیزهایی مانند تولید موارد آزمایشی، تولید مراحل آزمایش، تولید اسکریپتهای اتوماسیون.
اکنون ما شروع میکنیم به این فکر کنیم که برخی از صنعت به کدام سمت حرکت میکنند، استفاده از آن برای بهبود برخی از آزمایشهای UI و آزمایش API. به ویژه آزمایش UI که همیشه در دنیای آزمایش سختترین بخش برای انجام خوب بوده است. آزمایشهای خودکار در UI همیشه مورد پسند نیستند زیرا خیلی راحت خراب میشوند. توسعهدهندگان میخواهند آزادی تغییر برنامه را داشته باشند و کاربران تجاری قطعاً میخواهند آزادی بهبود تجربه کاربری را داشته باشند. میتوانید کل مجموعه آزمایش خود را در یک چهارم یا در یک ماه بسیار، بسیار آسان با ایجاد تغییرات در مقیاس بزرگ به دلایل خوب، حداقل دلایل تجاری خوب از بین ببرید. بنابراین، هوش مصنوعی در برخی از این موارد کمک میکند تا آزمایش انعطافپذیرتر شود.
شروع به کمک به آزمایشکنندگان میکند تا آزمایشهای زبان طبیعی را به اتوماسیون تبدیل کنند. ما به این سمت حرکت میکنیم که از لحاظ تئوری، بسته به اینکه از چه کسی بپرسید و چه نوع برنامهای باشد، ممکن است بتوانیم هوش مصنوعی را برای شما آزمایش کنیم، جایی که میتواند به یک برنامه نگاه کند و شروع به تفسیر سناریوی تجاری کند و تا حدی مانند یک انسان با آن تعامل کند. مطمئناً، برخی از مدلها اکنون با قابلیتهای بینایی خود میتوانند برنامه را ببینند و بازخورد کیفی اولیه در زمان واقعی به شما ارائه دهند. این دکمه از صفحه خارج است، این دکمه شکل گردی دارد. الزامات میگوید که باید، نمیدانم، مربع یا سهبعدی باشد، هر چه باشد، اینها چیزهایی هستند که ما معمولاً در آزمایش خودکار از دست میدهیم.
یک آزمایشکننده انسانی ممکن است وقت کافی برای ثبت آنها نداشته باشد. یک آزمایشکننده اکتشافی خوب ممکن است آنها را بگیرد. بنابراین، هوش مصنوعی قادر به انجام برخی از این وظایف است. اکنون، چیزهایی که برای آن مناسب نیست، ما میدانیم که آنها بسیار خوب هستند، آنها یک پیشبینی هستند، شما به دنبال خروجیگرا بودن هستید. شما دادهها را داخل میکنید و میخواهید یک چیز منطقی بیرون بیاید. ما میدانیم که هوش مصنوعی، مدلهای زبانی بزرگ، خوب نیستند، ریاضیات است. اگر میخواهید یک عدد را بفهمید، من میگویم یک ماشین حساب دریافت کنید. شما 10 برابر شانس بیشتری برای داشتن این عدد به صورت صحیح دارید، بنابراین نمیخواهید از آن برای درک دادههایی استفاده کنید که دادههای بسیار خاص و منسجمی هستند و شما به دنبال آن هستید. همچنین به آزمایش در سناریوهای غیررگرسیون یا آزمایش در سناریوهای غیرگسترده بسیار خوب نیست.
اگر ما در حال تغییر یک برنامه هستیم، میخواهید قبل از انتشار تغییر بررسی کنید که آیا مشکلی وجود دارد یا خیر، نه اینکه آیا مطابقت با الزامات دارد یا نه. من فکر میکنم آزمایش رگرسیون تا حدی است که میتواند برای آن بسیار مفید باشد. من فکر میکنم به این دلیل است که باید بدانید که برنامه چگونه باید عمل کند، در غیر این صورت نمیتوانید به درستی آن را آزمایش کنید. اگر این کار را درست انجام دهید، باید اسنادی داشته باشید، هر چه که باشد، همه چیز باید وجود داشته باشد. اگر میدانید که برنامه برای انجام چه کاری طراحی شده است، میتوانید به درستی آن را در برابر آن آزمایش کنید. اگر فقط به دنبال این هستید که برنامه چه کار میکند، دیگر واقعاً آزمایش نیست. شما در حال کاوش هستید، که چیز خوبی است. اما در مورد آزمایش رگرسیون، بسیار مهم است که بدانید قصد دارید با آن چه کاری انجام دهید، و به همین دلیل است که فکر میکنم آن مورد استفاده غالب است. آزمایش بیشتر در سناریوهای بزرگ وجود دارد، جایی که من به عنوان یک آزمایشکننده انسانی، فقط یک مورد آزمایشی میسازم که سعی میکنم همه چیز را در یک مورد آزمایشی داشته باشم و سپس آن را اجرا میکنم، در مقابل ایجاد موارد آزمایشی بسیار کوچکتر، بسیار سریعتر و گستردهتر که در آن من سعی میکنم بسیاری از کارهایی را که در یک مورد آزمایشی معمولی در این سیستمها انجام میدهم، خودکار کنم.
ما مشتریانی داریم که بیش از 1000 مورد آزمایشی را از 10 مورد آزمایشی میبرند، زیرا اکنون میتوانند حجم کاری را که باید انجام دهند خودکار کنند. فقط به این دلیل که ما میتوانیم کارها را به روشهای جدید انجام دهیم، به این معنی نیست که روشهای قدیمی دیگر معتبر نیستند. فقط به این معنی است که رویکرد متفاوتی وجود دارد که ممکن است برای آنچه که شما به عنوان یک آزمایشکننده تلاش میکنید به دست آورید، مناسبتر باشد. چیز دیگری که متوجه میشویم، بسیاری از سازمانها یک شخص متخصص آزمایش دارند، متخصص آزمایش، کسی است که به طور تجربی از انواع زیادی آزمایش میداند، کسی که سابقه دارد، کسی که ممکن است تصمیمگیرنده از نظر اینکه آیا چیزی مناسب برای انتشار است یا نه، باشد و ما شروع به دیدن آنها میکنیم که کمی بیشتر به یک عمومیگرا تبدیل میشوند. آنها کمتر به شخصی تبدیل میشوند که در حال نوشتن اتوماسیون است، اما بیشتر این است که آنها در نوشتن دستورالعمل برای هوش مصنوعی هستند.
حتی ممکن است هنوز یک شخصی باشند که در آن کلید میچرخاند و میگوید، خوب است که شما این چیز را به بیرون بفرستید، یا نه، و ممکن است همه انواع دیگر اتوماسیون را ایجاد نکنند، اما در حال افزایش هستند و میگویند که همه این آزمایشها را به این ترتیب میخواهم. برای مثال، ما ابزار ایجاد خودکار آزمایش داریم و ما همچنین مشتریانی داریم که میگویند، من این اتوماسیون سفارشی را به این ترتیب میخواهم. این یک تحول جالب است که ما شروع به دیدن آن میکنیم، چیزی که از ابتدای اتوماسیون دیده نمیشدیم. ما همیشه میدانستیم که آزمایشکننده حرفهای وجود دارد، اتوماسیون کار متفاوتی است. الآن میبینیم که چیزها ترکیب میشوند.
شین هستی: در این مورد، چه توصیهای برای مدیران و مهندسان دارید؟
آدام سندمن: من فکر میکنم این چیزی است که ما از ابتدای اتوماسیون آموختهایم. مدیران باید از اتوماسیون بهعنوان ابزار برای به دست آوردن برخی از کارها استفاده کنند، نه بهعنوان پایانبندی همهچیز. متوجه میشویم که مدیران فکر میکنند "من اتوماسیون دریافت خواهم کرد و اتوماسیون مشکلات من را حل خواهد کرد." و با یک ناامیدی بزرگ میآیند. بنابراین، دیدگاهی داشته باشید که از اتوماسیون بهعنوان یک ابزار استفاده میکنید که به شما کمک میکند به یک نتیجه خاص برسید. میخواهید کیفیت بهتری داشته باشید، برای مثال. اکنون، ما در واقع دیدهایم که استفاده بیش از حد از هوش مصنوعی باعث میشود نقصها از همان ابتدا بیشتر شوند.
بنابراین، اگر یک توسعهدهنده در حال نوشتن تمام کدهای خود با هوش مصنوعی است و بررسی نمیشود، تعداد خطاهای بیشتری وجود دارد. و ما مواردی را در تولید دیدهایم. مواردی در خارج از شرکت دیدهایم که شخصی فقط از کد تولید شده استفاده کرده است، و ما میدانیم که به چند دلیل بدنام است. امنیت یک مورد بزرگ است، اما تنها چیزی که میگوید "آدرس" است، حتی قبل از مسائل کپی رایت به سراغ شما میآید. فقط کاری را کپی میکند که قبلاً دیده است. بنابراین، اگر از این استفاده میکنید، باید مطمئن شوید که هنوز تستها را انجام میدهید. شما همچنان باید بررسی کد همتا داشته باشید. شما هنوز باید این کارها را انجام دهید.
برای مهندسان، من میگویم که درک کنید که فقط به این دلیل که چیزی در این ابزار جدید بسیار آسان است، به این معنی نیست که به نوعی به همان دانش قبلی نیاز ندارید. به عنوان مثال، اگر میخواهید یک تست API را با یک تست UI مقایسه کنید، درک اینکه تست API چیست برای اتوماسیون تستهای API مهم است. درک اینکه تست UI چیست هنوز برای اتوماسیون تستهای UI بسیار مهم است. بنابراین، فقط به این دلیل که اکنون کلمات و دستورالعملها و استفاده از زبان طبیعی را مینویسیم به این معنی نیست که ناگهان میتوانید آن دانش عمیق را پشت سر بگذارید. من این را به عنوان درک کنید که مهارتها فقط به ابزار جدید انتقال مییابند، توصیف میکنم. بنابراین، درک این موارد و اینکه مهارتهای شما چگونه با روشهای جدید ترجمه میشوند، بسیار مهم است.
من فکر میکنم چیز دیگری که در آن بسیار قدرتمند است، هوش مصنوعی است، بهویژه هوش مصنوعی عامل، از قبل دیدهام که به مهندسان کمک میکند واقعاً با مشکلات تعامل داشته باشند و شروع به جستجوی در داخل کد برای راه حلها و کمک به درک مسائل بیشتر و بیشتر کند. بنابراین، به این فکر کنید که اتوماسیون تنها برای یک بخش از گردش کار نیست، بلکه برای برخی از کل تجربهها نیز وجود دارد. برای آزمایش، به ویژه، درک این مورد که چگونه همه این کارها به هم مرتبط هستند و چگونه کدهایی که برای آنها مینویسید همه این قطعات به خوبی کنار هم قرار میگیرند، و فکر کردن در مورد آنچه که قبلاً میدانستید که انجام آن بسیار سخت بود. من فکر میکنم در چند سال آینده نیز به این فکر خواهید کرد که آزمایش چه شکلی خواهد بود.
و سپس در مورد اینکه چگونه اتوماسیون به طور خاص با آن نوع آزمایش جدید مرتبط است، بسیار مهم است. من به این میپردازم که چرا هوش مصنوعی میتواند به شما کمک کند کارها را سریعتر انجام دهید، چگونه میتواند کارها را ارزانتر انجام دهد و چرا اصلاً باید اتوماسیون را انجام دهید.
من به این فکر خواهم کرد که اتوماسیون از بالا به پایین به چه چیزهایی متصل است و چگونه ما به یک درک جامع و کامل از اینکه شما به عنوان یک توسعهدهنده چه کاری انجام میدهید میرویم و هوش مصنوعی به شما کمک میکند این را بهتر ببینید. من با توجه به این موضوع خیلی به این موضوع فکر میکنم. درک کل این که اتوماسیون شما از بالا به پایین به چه چیزی متصل است بسیار مهم است. اگر هنگام صحبت با یک کدنویس، این موارد را به او میگویید و سعی میکنید آن را در مورد روشی که کد شما مینویسد به کار ببرید مردم، بسیار به این موضوع میاندیشم. من سعی میکنم هوش مصنوعی را برای یک کدنویس قرار دهم، به نحوی که اتوماسیون کد برای این برنامهنویس از بالا به پایین به چه چیزهایی متصل است. هوش مصنوعی با این به ما کمک میکند، زیرا من سعی میکنم این موارد را بیان کنم در مورد این موضوع چگونه مینویسند. بنابراین، من این را به عنوان سعی در متصل کردن یک کدنویس به آنچه از بالا به پایین در جریان است، توصیف میکنم، در نحوه نوشتن آن. خوب، بله، این در مورد مهارتهای برنامهنویس است.
شین هستی: آدام، خیلی ممنون از نظراتتان.
آدام سندمن: خیلی ممنون از شما، شین. بله، خوشحالم که اینجا بودم.