Перейти к содержимому
Эта статья была переведена с японского с помощью ИИ
Читать на японском
Эта статья находится в общественном достоянии (CC0). Чувствуйте себя свободно использовать ее. CC0 1.0 Universal

Разработка, управляемая развитием, и тестирование, управляемое рефакторингом

Разработка — это многократное создание чего-то нового и полезного.

Когда мы слышим «разработка», часто на ум приходит разработка нового продукта. Это отличается от производства отдельных продуктов; это, так сказать, создание чертежей или форм продукта.

Таким образом, дизайны и формы, созданные в процессе разработки нового продукта, многократно используются на заводах для массового производства идентичных продуктов.

Существуют также такие применения слова «разработка», как развитие индивидуальных способностей или развитие общества и нации. Это подразумевает не просто увеличение того, что имеется, а скорее способность многократно использовать и извлекать выгоду из развитых способностей.

Хотя экономическая мощь отдельных людей и обществ может колебаться в зависимости от экономических условий, развитые способности, как правило, постоянны.

Даже если они уменьшаются, это рассматривается как упадок, а не как колебание, подобное экономическому процветанию.

Кроме того, существует развитие технологий и знаний. В отличие от способностей отдельных людей или конкретных обществ, они обладают свойством легко делиться.

И среди результатов этих разработок — продуктов, способностей, знаний и технологий — некоторые могут быть полезны для последующей разработки.

Развивая такие полезные результаты, расширяется сфера разработки, а также повышается эффективность и качество.

Разработка программного обеспечения, управляемая ИИ

Как правило, разработка требовала значительного времени и усилий. Особенно по мере развития общества и усложнения различных вещей создание нового становилось все более трудным.

Однако с появлением генеративного ИИ эта ситуация меняется. В настоящее время разработка программного обеспечения переживает драматическую трансформацию, извлекая выгоду из высоких программных возможностей генеративного ИИ.

Видение будущего, в котором автономные агенты на базе генеративного ИИ станут центральными в разработке программного обеспечения в качестве инженеров-программистов, уже становится реальностью.

Сейчас мы находимся в переходном периоде. Хотя мы не можем полностью доверить разработку генеративному ИИ, умелое использование генеративного ИИ может мощно продвинуть разработку программного обеспечения.

Это называется разработкой программного обеспечения, управляемой ИИ.

Разработка, управляемая развитием

Когда генеративный ИИ оптимизирует разработку программного обеспечения, он может повысить эффективность не только разработки конечного целевого ПО, но и разработки самого ПО, помогающего в развитии.

Как упоминалось ранее, результаты, способствующие развитию, расширяют область разработки и способствуют повышению эффективности и качества. Более того, при эффективном создании их можно повторно использовать в других проектах разработки.

Таким образом, разрабатывая полезное программное обеспечение в процессе разработки ПО, можно в конечном итоге повысить общую эффективность, а эти активы можно использовать и для будущих разработок.

Традиционно разработка такого вспомогательного программного обеспечения была обычной практикой в этой области, но она требовала собственного времени и усилий на разработку, что требовало тщательной оценки и целенаправленной реализации.

Используя генеративный ИИ, можно быстро создавать простое программное обеспечение для автоматизации небольших, импровизированных задач. Для задач с четкими процессами генеративный ИИ может генерировать точные программы практически без ошибок.

Это делает разработку программного обеспечения, помогающего в разработке, проще, чем когда-либо прежде.

И при более глубоком размышлении вырисовывается стиль разработки, при котором полезные инструменты постоянно разрабатываются в процессе разработки, тем самым трансформируя сам метод разработки.

Мы назовем это Разработкой, управляемой развитием.

Чтобы практиковать разработку, управляемую развитием, требуется привычка объективно наблюдать за собственной разработкой программного обеспечения, чтобы определить, какие части могут быть делегированы ПО, а какие — только людям, а также навык разработки такого вспомогательного ПО.

Кроме того, генеративный ИИ может быть интегрирован в эти программные инструменты. Встраивая его в ПО, в отличие от автономного агента генеративного ИИ, можно в некоторой степени сузить область обработки и определить четкий путь.

В то время как агенты ИИ могут достигать аналогичных результатов с помощью подсказок, программное обеспечение, интегрирующее генеративный ИИ, может легче повысить точность, комбинируя как программы, так и подсказки.

Если разработка, управляемая развитием, может быть реализована на практике, второй проект покажет улучшения как в качестве, так и в стоимости по сравнению с первым. Более того, с каждым последующим проектом — третьим, четвертым и так далее — улучшения будут продолжать накапливаться.

Это полностью отличается от простого создания программного обеспечения с использованием генеративного ИИ. Со временем возникнет значительный разрыв между командами, которые просто осваивают инструменты генеративного ИИ, и командами, которые практикуют разработку, управляемую развитием.

Тестирование, управляемое рефакторингом

Существует концепция разработки через тестирование (TDD), которая предполагает сначала разработку тестов на основе спецификаций, а затем создание программного обеспечения, которое проходит эти тесты.

Изначально я также думал, что с появлением генеративного ИИ, упрощающего разработку тестовых программ для автоматического тестирования, разработка через тестирование может стать практичной.

Однако, когда я начал применять разработку, управляемую развитием, я пришел к выводу, что подход, при котором тесты разрабатываются до реализации, не всегда подходит.

Особенно для программного обеспечения, такого как веб-приложения, которые включают субъективные аспекты, такие как удобство использования и визуальный дизайн, которые можно оценить при взаимодействии, я понял, что фактический запуск и взаимодействие с ПО имеют приоритет над детальным тестированием.

Это связано с тем, что при наличии значительных неудовлетворенностей на уровне UI/UX при взаимодействии существует вероятность того, что могут потребоваться изменения фундаментальных частей, таких как фреймворк, базовая архитектура, модель данных или варианты использования.

В моем текущем личном проекте по разработке программного обеспечения я также заметил проблемы с функциональной гибкостью и производительностью, что привело меня к замене двух фреймворков на другие.

Была также часть с низкой эффективностью использования памяти, что потребовало полного пересмотра обработки.

Именно на этих этапах рефакторинга тестирование впервые становится осознанным.

Если это происходит на ранних стадиях разработки, или если функции и спецификации все равно будут значительно меняться, тесты могут быть не нужны.

Однако, если разработка уже продвинулась достаточно далеко и есть много пунктов для проверки, тесты, вероятно, потребуются во время рефакторинга, чтобы убедиться в отсутствии функциональных недостатков или упущений.

Поэтому идея создания тестовых программ в тот момент, когда разработка достигла определенной степени и возникает необходимость в рефакторинге, не так уж плоха.

В этом случае главное — не создавать тесты для всего кода, а сосредоточить тесты на зрелых частях, которые вряд ли сильно изменятся в будущем, оставив все еще изменчивые части без автоматических тестов.

Это можно назвать тестированием, управляемым рефакторингом.

Заключение

Генеративный ИИ кардинально меняет разработку программного обеспечения.

В предыдущих статьях я писал о важности стремления стать всенаправленным инженером, который может выйти за рамки традиционной роли фулстек-инженера и разрабатывать всенаправленные системы, объединяющие различные домены, инфраструктуру и среды выполнения.

Я также написал статью, предполагающую, что мы вступаем в эпоху разработки, управляемой опытом и поведением, которая фокусируется на улучшении пользовательского опыта посредством поведения программного обеспечения, а не на традиционном подходе к разработке ПО, заключающемся в согласовании спецификаций с реализацией.

Разработка, управляемая развитием, и тестирование, управляемое рефакторингом, — это именно те подходы, которые приведут нас к этим новым горизонтам в разработке программного обеспечения.