Назад в библиотеку

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

Автор: Mark Harman
Источник: CREST Centre, University College London, Malet Place, London, WC1E 6BT, UK

ВСТУПЛЕНИЕ

История области Искусственного интеллекта (ИИ) длинна и прославлена, уходя своими корнями в основополагающую работу Тьюринга и Маккарти. Идея о том, что машины могут быть интеллектуальными, обеспечила основную диету для научной фантастики. Несмотря на это, ИИ может показаться довольно распространенным явлением: вычислительный интеллект регулярно предоставляет примеры конкретных областей интеллектуального поведения, для которых машины с комфортом превосходят производительность даже самого лучшего человека. С самого своего интеллектуального происхождения в 1950-х годах эта область стимулировала философские, а также технологические дебаты и вызвала большой интерес, не говоря уже о небольшом беспокойстве, со стороны широкой общественности.

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

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

Рассмотрим Эйфелеву башню, чудо инженерной мысли, которое, как известно, содержит не менее 2,5 миллионов заклепок [3]. Это неоспоримое физическое проявление инженерного мастерства, доминирующее над парижским горизонтом. Напротив, масштаб инженерной задачи, создаваемой программным обеспечением, остается совершенно невидимым. Когда одна из 2,5 миллионов заклепок Эйфелевой башни выходит из строя, сама башня не выходит из строя. Сравните это огромное инженерное здание с типичным крошечным смартфоном, который может содержать от пяти до десяти миллионов строк кода, отказ любого из которых может привести к полному отказу системы. Пространство входов даже для самого маленького приложения на телефоне, вероятно, с комфортом превысит 1080 (разумная оценка тока для числа атомов в наблюдаемой вселенной), но все, кроме одного из этих входов, могут не выявить присутствие просто такая критическая ошибка.

Столкнувшись с непростой задачей проектирования, создания и тестирования инженерных систем в этих масштабах, разработчики программного обеспечения, к счастью, имеют одно важное преимущество, которого нет у других инженеров; собственный материал разработчика программного обеспечения, программное обеспечение, может быть использован для решения задач, возникающих при производстве систем из этого самого материала. Алгоритмы искусственного интеллекта хорошо подходят для решения таких сложных задач разработки программного обеспечения, поскольку они предназначены для решения одной из самых сложных задач из всех; тиражирование интеллектуального поведения. Какой инженер-программист не хотел бы пользоваться помощью интеллектуальных программных средств?

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

1) Вычислительные методы поиска и оптимизации (область, известная как Разработка программного обеспечения на основе поиска (SBSE)).
2) Нечеткие и вероятностные методы рассуждения при наличии неопределенности.
3) Классификация, обучение и прогнозирование.

Конечно, ни программная инженерия, ни искусственный интеллект не являются статичными сферами деятельности; конечно, это еще не все. За последние пять лет произошли важные прорывы в области искусственного интеллекта, благодаря которым были преодолены ранее неразрешимые проблемы [4]. Существующая работа уже убедительно продемонстрировала, что у инженеров-программистов есть значительный потенциал для использования методов искусственного интеллекта. В этом документе представлен краткий анализ этого развития, выделены общие тенденции, общая и частично совпадающая номенклатура, открытые проблемы и проблемы.

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

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

Когда искусственный интеллект работает хорошо?

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

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

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

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

В работе Разработка программного обеспечения на основе поиска (SBSE) цель состоит в том, чтобы переформулировать проблемы разработки программного обеспечения как задачи оптимизации, которые затем могут быть атакованы вычислительным поиском. Это оказалось широко применимым и успешным подходом, с приложениями от требований и дизайна до обслуживания и тестирования. Вычислительный поиск использовался всеми инженерными дисциплинами, а не только разработчиками программного обеспечения. Однако виртуальный характер программного обеспечения делает его инженерным материалом, идеально подходящим для вычислительного поиска. Существует недавнее руководство, которое предоставляет руководство по SBSE.

Связь между подходами к AI для SE

Различные способы применения методов искусственного интеллекта в разработке программного обеспечения обнаруживают значительные совпадения. Например, различия между вероятностными рассуждениями и предсказаниями для разработки программного обеспечения чрезвычайно размыты, если не сказать произвольны. Можно легко представить систему прогнозирования как не более чем вероятностный аргумент. Можно также думать о байесовских моделях как о учениках, а о классификаторах – как о учениках, вероятностных рассуждениях и / или оптимизаторах.

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

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

Существует очень тесная взаимосвязь между подходами машинного обучения к программной инженерии и подходами SBSE. Машинное обучение — это, по сути, изучение подходов к вычислениям, которые улучшаются по мере использования. Чтобы улучшить, нам нужен способ измерить улучшение, и, если оно у нас есть, мы можем использовать SBSE для оптимизации в соответствии с ним. К счастью, в ситуациях, связанных с разработкой программного обеспечения, у нас обычно есть большое количество возможных измерений, которые мы могли бы улучшить.

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

Тем не менее, генетическое программирование также можно рассматривать как алгоритм обучения моделей поведения программного обеспечения, линзу, через которую он, по-видимому, представляет собой подход машинного обучения, а также метод оптимизации. Таким образом, мы видим, что между машинным обучением для SE и SBSE существуют чрезвычайно тесные связи: один из способов обучения - это оптимизация, а один из способов думать о прогрессе, который происходит во время оптимизации, — это процесс обучения.

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

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

Вызовы перед AI для SE

В этом разделе описываются некоторые открытые проблемы в применении методов искусственного интеллекта к программной инженерии.

А. Поиск стратегий, а не экземпляров

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

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

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

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

Б. Использование многоядерных вычислений

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

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

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

Для многих методов ИИ, обсуждаемых в этой статье, и почти для всех тех, которые связаны с SBSE, используемые алгоритмы естественно распараллеливаются. Сообщите, что с недорогим графическим процессором общего назначения (GPGPU) они могут добиться ускорения по сравнению с одиночными вычислениями факторов в диапазоне до 25. Они также сообщают, что для более крупных задач регрессионного тестирования степень увеличения также имеет тенденцию к увеличению , Увеличение числа доступных процессоров - это захватывающая перспектива для масштабируемости, которую преследует только наблюдение, что наши проблемы разработки программного обеспечения могут масштабироваться с одинаковыми скоростями.

C. Предоставление информации для разработчиков программного обеспечения

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

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

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

D. Компиляция Smart Optimization в развернутое программное обеспечение

Большая часть работы над ИИ для SE, такая как оптимизация, прогнозирование и обучение, была применена в автономном режиме для улучшения как программного процесса (такого как разработка программного обеспечения, разработки и тестирование), так и самого программного обеспечения (автоматическое исправление улучшений и портирование). Мы можем спросить себя: «Если мы можем оптимизировать версию системы, почему бы не скомпилировать процесс оптимизации в развернутое программное обеспечение, чтобы оно стало динамически адаптивным?»

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

Это дало бы нам набор инструментов и методов для решения таких давних проблем, как автономные вычисления и самоадаптирующиеся системы.

E. Разработка и развертывание нового программного обеспечения, дружественного к AI

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

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

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

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

Заключение

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

1. A.M. Turing, Computing machinery and intelligence, Mind, vol. 49, pp. 433–460, Jan. 01 1950.

2. J. McCarthy, Programs with common sense, in Proceedings of the Symposium on Mechanisation of Thought Processes, vol. 1. London: Her Majesty’s Stationery Office, 1958, pp. 77–84.

3. J.P. Cramer, Almanac of Architecture and Design. Atlanta: Greenway Communications, 2000.

4. S. Gelly, L. Kocsis, M. Schoenauer, M. Sebag, D. Silver, C. Szepesvari, and O. Teytaud, The grand challenge of computer Go: Mnote Caril tree search and extensions, Communications of the ACM, vol. 55, no. 3, pp. 106–113, Mar. 2012.

5. N.E. Fenton, M. Neil, W. Marsh, P. Hearty, L. Radlinski, and P. Krause, On the effectiveness of early life cycle defect prediction with Bayesian Nets, Empirical Software Engineering, vol. 13, no. 5, pp. 499–537, 2008.

6. B. Littlewood and J. L. Verrall, A Bayesian reliability growth model for computer software, Applied Statistics, vol. 22, no. 3, pp. 332–346, 1973.

7. E. Horvitz, J. Breese, D. Heckerman, D. Hovel, and K. Rommelse, The Lumiere project: Bayesian user modeling for inferring the goals and needs of software users, in Proceedings of the Fourteenth Conference on Uncertainty in Artificial Intelligence. San Mateo: Morgan Kaufmann, Jul. 1998, pp. 256–265.

8. A. Idri, T. M. Khoshgoftaar, and A. Abran, Can neural networks be easily interpreted in software cost estimation? Honolulu, Hawaii, p. 11621167, 2003.

9. C. Mair, G. Kadoda, M. Lefley, K. Phalp, C. Schofield, M. Shepperd, and S. Webster, An investigation of machine learning based prediction systems, The Journal of Systems and Software, vol. 53, no. 1, pp. 23–29, Jul. 2000.

10. A. Maedche and S. Staab, Ontology learning for the semantic web, IEEE Intelligent Systems, vol. 16, no. 2, pp. 72–79, 2001.

11. V.U.B. Challagulla, F.B. Bastani, I.-L. Yen, and R.A. Paul, Empirical assessment of machine learning based software defect prediction techniques, International Journal on Artificial Intelligence Tools, vol. 17, no. 2, pp. 389–400, 2008.

12. T. Menzies, Practical machine learning for software engineering and knowledge engineering, in Handbook of Software Engineering and Knowledge Engineering. World-Scientific, December 2001, available from http://menzies.us/pdf/00ml.pdf.

13. J. Clark, J.J. Dolado, M. Harman, R.M. Hierons, B. Jones, M. Lumkin, B. Mitchell, S. Mancoridis, K. Rees, M. Roper, and M. Shepperd, Reformulating software engineering as a search problem, IEE Proceedings — Software, vol. 150, no. 3, pp. 161–175, 2003.

14. M. Harman and B.F. Jones, Search based software engineering, Information and Software Technology, vol. 43, no. 14, pp. 833–839, Dec. 2001

15. M. Harman and B.F. Jones, Search based software engineering, Information and Software Technology, vol. 43, no. 14, pp. 833–839, Dec. 2001

16. O. Raiha, A survey on search–based software design, Computer Science Review, vol. 4, no. 4, pp. 203–249, 2010.