Добивки:
- Способност да се користи вештачката интелигенција како второ око во прегледот на кодот за читливост, логика и безбедност
- Способност да се планираат чекори за рефакторирање со поддршка за вештачка интелигенција без да се наруши сложеното однесување на кодот
- Способност да се потврди прегледот на вештачката интелигенција и да се уредуваат препораките со тестирање и споредба со контрола на верзии
Во софтверското инженерство, кодот се чита многу повеќе отколку што се пишува. Линијата од кодот се пишува еднаш, но се чита, модифицира и се гради десетици пати во текот на месеците. Затоа прегледот на кодот (прегледувањето на туѓиот или вашиот сопствен код за логика, читливост и безбедност) и рефакторирање (подобрување на структурата на кодот без промена на неговото однесување) се во срцето на инженерството. Вештачката интелигенција станува моќно „второ око“ за овие две задачи: брзо сугерира читливост, укажува на занемарени логички и безбедносни проблеми и разделува големо рефакторирање на помали безбедни чекори. Но, постои критично правило: рефакторирањето не треба да го менува однесувањето, а единственото нешто што го гарантира тоа е тестирањето.
Во оваа единица, ќе видиме како да се користи ВИ на структуриран начин за преглед на кодот, како да се поправи сложениот код без да се прекрши неговото однесување и како да се управува со технички долг (брзи, но скапи одлуки за кодови).
Концепти: Технички долг: Код одлуки донесени денес за брзина кои го отежнуваат одржувањето во иднина. Мирис на код: Шаблони кои самите не се грешки, туку укажуваат на проблеми (премногу долги функции, повторувачки код). Регресија: Кога промената крши нешто што претходно функционирало.
Користење на вештачката интелигенција во преглед на структурирани кодови
Кога времето е ограничено, неопходно е да се фокусирате на прашањата со најголем ризик. Автоматскиот форматер се справува со прашањата за форматирање како што се вовлекување и растојание; Мора да посветите човечко внимание на логиката, безбедноста и однесувањето на рабовите. Кога го правите прегледот на вештачката интелигенција, побарајте листа со приоритети, а не обичен наплив на критики.
- Дајте го опсегот. Каков код, што да се прави, во кој контекст функционира.
- Наведете ја приоритетната оска. Прво, точноста и безбедноста, второ читливоста.
- Побарајте конкретна корекција. „Зошто проблемот“ и „препорачано решение“ за секој наод.
- Вие ги проверувате наодите. ВИ, исто така, произведува лажни позитиви; Потврдете го секое откритие во однос на кодот и тестирањето.
Структурно барање за преглед: „Испитајте ја следната функција како постар инженер. Наведете ги наодите по важност и означете ги со овие ознаки: [КРИТИЧНА] логика/безбедност, [СРЕДЕН] раб/изведба, [НИСК] читливост/име. Код: [шифра]"
Прашање за преглед фокусиран на безбедноста: „Прегледајте го овој код само за безбедносни цели: недостаток на валидација на внесување, ризик од инјектирање, недостаток на контрола на овластување, протекување на доверливи информации, несигурни стандардни обврски. Додајте пример за сценарио за напад на секое откритие. Ако нема безбедносен проблем, јасно наведете „Не најдов никакви критични безбедносни проблеми“. Код: [шифра]“.
Внимание: Само затоа што вештачката интелигенција вели „нема проблем“ не е доказ дека нема проблем. ВИ може да произведе лажни негативи; може да заобиколи вистинско безбедносно прашање. Преглед на вештачката интелигенција дополнува, а не заменува, преглед на луѓе и безбедносно тестирање. Во безбедносно критичниот код, последниот збор го има надлежниот инженер.
Тест-зачувано рефакторирање
Златното правило на рефакторирање: прво тестирај, подоцна смени. Пред да го поправите кодот, треба да има тестови кои го заклучуваат тековното однесување за да знаете веднаш дали промената нешто крши. Не го нарушувајте редот кога имате рефакторирање на вештачката интелигенција.
- Ставете го сегашното однесување на тест. Во спротивно, нека вештачката интелигенција направи „тест за карактеризација“ (тест што го доловува моменталното однесување како што е).
- Поправете го во мали чекори. Тестирањето мора да остане зелено на секој чекор.
- Стартувај го по секој чекор. Фати регресија рано.
Известување за планот за безбедно рефакторирање: "Следнава функција од 60 линии прави премногу и тешко се чита. Сакам да ја рефакторирам БЕЗ промена на неговото однесување. Прво: наведете кои случаи на тест ми требаат за да го заклучам тековното однесување. Потоа: разделете го рефакторирањето на мали чекори, од кои секој може да се изврши додека тестовите се зелени. Не го пишувајте уште првиот код на планот."
Слаба навестување / Силен навестување
СЛАБ: „Направете го овој код подобар“. (Резултат: нејасно што да се подобри; вештачката интелигенција прави произволни промени, може тивко да го промени однесувањето.) СИЛНО: "Рефакторирајте ја оваа функција за пресметување на плаќањата за читливост. ОГРАНИЧУВАЊЕ: однесувањето мора да остане исто, вредностите не смеат да се менуваат. Поделете ја долгата функција на значајни корисни функции, зголемувајќи ги магичните броеви на именуваното однесување со константи. [шифра]"
Моќниот промпт јасно наведува дека ограничувањето „однесувањето мора да остане сосема исто“ и што треба да се подобри. Без ова ограничување, вештачката интелигенција може да ја промени логиката во име на „подобрување“ и да произведе тивка регресија.
Управување со технички долг
Пристап
На краток рок
на долг рок
игнорирање на долгот
брз напредок
Парализа на одржување, забавување на тимот
препиши сè
Развој на стоечка карактеристика
Неизвесно враќање, висок ризик
Измерено рефакторирање заштитено со тест
мало забавување
Одржлива брзина
Најздравиот начин е третиот: направете го долгот видлив (следете го во список), почнете таму каде што најмногу боли и тестирајте го секој поправен. Вештачката интелигенција е добра помош за идентификување и одредување приоритет на должничките ставки, но кој долг да се плати е деловна одлука.
Мини футроли
Случај 1 - Тивка регресија. Развивачот и кажува на вештачката интелигенција да ја „поедностави оваа функција“; Вештачката интелигенција погрешно преведува состојба и пресметката за враќање е скршена. Бидејќи нема тестирање, грешката се јавува по 3 недели со поплака од клиент. Тимот ја врши истата работа така што прво пишува тест за карактеризација и ја фаќа грешката со црвен тест при првото возење.
Случај 2 - Корисно второ око. Во прегледот на кодот, вештачката интелигенција сфаќа дека овластувањето на корисникот се проверува само во интерфејсот, а не на серверот. Ова е ранливост за неовластен пристап. Инженерот додава проверка на авторизација од страна на серверот; Инспекцијата со вештачка интелигенција спречува вистински безбедносен инцидент.
Случај 3 - Лажно позитивен. Вештачката интелигенција вели „оваа променлива никогаш не се користи, избришете ја“; Сепак, се користи индиректно преку механизам за променлива рефлексија. Ако инженерот не го потврди предлогот против тестот, тој ќе биде избришан и ќе се појави грешка при извршувањето. Секој наод за вештачка интелигенција мора да биде потврден пред имплементацијата.
Вообичаени грешки
- Рефакторирање без тестирање. Не останува ништо за да се осигура дека однесувањето е зачувано.
- Примена на наодите за вештачка интелигенција без нивно потврдување. Се случуваат и лажни позитивни и лажни негативни.
- Губење човечко време на проблеми со форматот. Фокусирањето на задачи што може да се решат со автоматизирани алатки ги засенува реалните ризици.
- Земајќи го одговорот „Нема проблем“ како гаранција. ВИ може да ја заобиколи ранливоста; потребен е човечки преглед.
- Обидувајќи се да го платите целиот долг одеднаш. Главните препишувања се ризични; Се претпочитаат чекори кои се мерат и заштитени со тестирање.
Сумирано
Прегледот и рефакторирањето на кодот ја одредува долговечноста на кодот. Вештачката интелигенција е моќен генератор на второ око и планови: обезбедува приоритетни наоди, безбедносни сценарија и планови за рефакторирање во мали чекори. Но, рефакторирањето не треба да го промени однесувањето, а само тестирањето го гарантира тоа. Потврдете го секој наод за вештачка интелигенција во однос на кодот и тестирањето; Не го земајте одговорот „нема проблем“ како доказ. Направете технички долг видлив и отплатете го во измерени чекори, заштитени со тестови.
Задача за апликација
Земете линија 40-70, малку сложена функција што ја имате (или нека ве генерира вештачката интелигенција). Најпрво следете ја структурата за прегледување и подредете ги наодите како [КРИТИЧНИ]/[СРЕДНИ]/[НИСКИ]; Рачно потврдете барем еден наод во однос на кодот. Потоа, со барањето за безбедносен план за рефакторирање, прво генерирајте и извршете ги тестовите за карактеризација, а потоа применете го рефакторирањето во мали чекори и проверете дали тестовите остануваат зелени на секој чекор.
листа за проверка
- [ ] Го структурирав прегледот со приоритетни ознаки (критични/средни/ниски).
- [ ] Потврдив барем еден наод за вештачка интелигенција во однос на кодот/тестот.
- [ ] Го тестирав тековното однесување пред рефакторирање.
- [ ] Ги направив промените во мали чекори и правев тестови на секој чекор.
- [ ] Го наведов ограничувањето „Однесувањето мора да остане исто“ во промптот.
- [ ] Потврдив дека безбедносните наоди бараат човечка потврда.