задачи оптимизации «черного ящика», например, распределение людей по задачам (типичная задача комбинаторной оптимизации ).
проблемы «белого ящика», где необходимо учитывать операции с исходным кодом. [2]
Определение
SBSE преобразует проблему программной инженерии в проблему вычислительного поиска, которую можно решить с помощью метаэвристики . Это включает определение пространства поиска или набора возможных решений. Это пространство, как правило, слишком велико для исчерпывающего исследования, что предполагает метаэвристический подход. Метрика [3] (также называемая функцией пригодности, функцией стоимости, целевой функцией или мерой качества) затем используется для измерения качества потенциальных решений. Многие проблемы программной инженерии можно переформулировать как проблему вычислительного поиска. [4]
Термин « приложение на основе поиска », напротив, относится к использованию поисковой технологии, а не методов поиска, в другом промышленном приложении.
Краткая история
Одна из самых ранних попыток применить оптимизацию к проблеме программной инженерии была описана Уэббом Миллером и Дэвидом Спунером в 1976 году в области тестирования программного обеспечения . [5] В 1992 году С. Ксантакис и его коллеги впервые применили метод поиска к проблеме программной инженерии . [6] Термин SBSE был впервые использован в 2001 году Харманом и Джонсом. [7] К 2013 году исследовательское сообщество выросло и включало более 800 авторов, охватывая примерно 270 учреждений в 40 странах. [8]
Инженерия требований — это процесс, посредством которого определяются и управляются потребности пользователей и среды программного обеспечения. Методы поиска использовались для выбора и оптимизации требований с целью нахождения наилучшего возможного подмножества требований, которое соответствует запросам пользователей в условиях ограничений, таких как ограниченные ресурсы и взаимозависимости между требованиями. Эта проблема часто рассматривается как проблема принятия решений по нескольким критериям и, как правило, включает предоставление лицу, принимающему решения, набора хороших компромиссов между стоимостью и удовлетворенностью пользователя, а также риском требований. [17] [18] [19] [20]
Отладка и обслуживание
Выявление ошибки в программном обеспечении (или запаха кода ) и последующая отладка (или рефакторинг ) программного обеспечения в значительной степени является ручным и трудоемким занятием, хотя этот процесс поддерживается инструментами. Одной из целей SBSE является автоматическое выявление и исправление ошибок (например, с помощью мутационного тестирования ).
Генетическое программирование , биологически вдохновленная техника, которая включает в себя развитие программ посредством использования кроссинговера и мутации, использовалось для поиска исправлений программ путем изменения нескольких строк исходного кода. Программное обеспечение GenProg Evolutionary Program Repair исправило 55 из 105 ошибок примерно за 8 долларов за один тест. [21]
Коэволюция принимает метафору «хищник и жертва» , в которой набор программ и набор модульных тестов развиваются вместе и влияют друг на друга. [22]
Тестирование
Поисковая программная инженерия применялась к тестированию программного обеспечения, включая автоматическую генерацию тестовых случаев (тестовых данных), минимизацию тестовых случаев и приоритизацию тестовых случаев. [23] Регрессионное тестирование также получило некоторое внимание.
Оптимизация программного обеспечения
Использование SBSE в оптимизации программ или модификации части программного обеспечения для повышения его эффективности с точки зрения скорости и использования ресурсов стало объектом успешного исследования. [24] В одном случае программа из 50 000 строк была генетически улучшена, в результате чего программа стала работать в среднем в 70 раз быстрее. [25]
Недавняя работа Basios et al. показывает, что путем оптимизации структуры данных Google Guava обнаружила 9%-ное улучшение времени выполнения, 13%-ное улучшение потребления памяти и 4%-ное улучшение использования процессора по отдельности. [26]
Управление проектом
Ряд решений, которые обычно принимаются менеджером проекта, могут быть выполнены автоматически, например, планирование проекта. [27]
Инструменты
Инструменты, доступные для SBSE, включают OpenPAT, [28] EvoSuite , [29] и Coverage, инструмент измерения покрытия кода для Python. [30]
Получение абстрактного синтаксического дерева , связанного с программой, которое можно автоматически исследовать для получения представления о ее структуре.
Будучи относительно новой областью исследований, SBSE пока не получила широкого признания в отрасли.
Успешные применения SBSE в отрасли можно найти в основном в тестировании программного обеспечения, где возможность автоматически генерировать случайные тестовые входы для обнаружения ошибок в больших масштабах привлекательна для компаний. В 2017 году Facebook приобрела стартап программного обеспечения Majicke Limited, который разработал Sapienz, приложение для поиска ошибок на основе поиска. [32]
В других сценариях применения инженеры-программисты могут неохотно принимать инструменты, над которыми у них мало контроля или которые генерируют решения, которые не похожи на те, которые производят люди. [33] В контексте использования SBSE для исправления или улучшения программ разработчики должны быть уверены, что любая автоматически произведенная модификация не генерирует неожиданное поведение за пределами требований системы и среды тестирования. Учитывая, что полностью автоматизированное программирование еще не достигнуто, желательным свойством таких модификаций будет то, что они должны быть легко поняты людьми для поддержки мероприятий по обслуживанию. [34]
Еще одна проблема заключается в том, что SBSE может сделать инженера-программиста ненужным. Сторонники утверждают, что мотивация SBSE заключается в улучшении отношений между инженером и программой. [35]
^ Мохан, М.; Грир, Д. (1 августа 2019 г.). «Использование многоцелевого подхода для исследования автоматизированного рефакторинга». Информационные и программные технологии . 112 : 83– 101. doi : 10.1016/j.infsof.2019.04.009. ISSN 0950-5849.
^ Харман, Марк (2010). «Почему анализ и обработка исходного кода всегда будут важны». 10-я рабочая конференция IEEE по анализу и обработке исходного кода (SCAM 2010) . 10-я рабочая конференция IEEE по анализу и обработке исходного кода (SCAM 2010). стр. 7–19 . doi :10.1109/SCAM.2010.28.
^ Харман, Марк; Джон А. Кларк (2004). «Метрики — это тоже функции приспособленности». Труды 10-го Международного симпозиума по метрикам программного обеспечения, 2004. 10-й Международный симпозиум по метрикам программного обеспечения, 2004. С. 58–69 . doi :10.1109/METRIC.2004.1357891.
^ Кларк, Джон А.; Доладо, Хосе Хавьер; Харман, Марк; Хиеронс, Роберт М.; Джонс, Брайан Ф.; Ламкин, М.; Митчелл, Брайан С.; Манкоридис, Спирос; Риз, К.; Ропер, Марк; Шепперд, Мартин Дж. (2003). «Переформулирование программной инженерии как проблемы поиска». Труды IEE — Программное обеспечение . 150 (3): 161– 175. CiteSeerX 10.1.1.144.3059 . doi :10.1049/ip-sen:20030559 (неактивен 7 декабря 2024 г.). ISSN 1462-5970.{{cite journal}}: CS1 maint: DOI неактивен по состоянию на декабрь 2024 г. ( ссылка )
^ Миллер, Уэбб; Спунер, Дэвид Л. (1976). «Автоматическая генерация тестовых данных с плавающей точкой». Труды IEEE по программной инженерии . SE-2 (3): 223– 226. doi :10.1109/TSE.1976.233818. ISSN 0098-5589. S2CID 18875300.
^ S. Xanthakis, C. Ellis, C. Skourlas, A. Le Gall, S. Katsikas и K. Karapoulios, «Применение генетических алгоритмов к тестированию программного обеспечения», в Трудах 5-й Международной конференции по программной инженерии и ее приложениям , Тулуза, Франция, 1992, стр. 625–636
^ Харман, Марк; Джонс, Брайан Ф. (15 декабря 2001 г.). «Программная инженерия на основе поиска». Информационные и программные технологии . 43 (14): 833– 839. CiteSeerX 10.1.1.143.9716 . doi :10.1016/S0950-5849(01)00189-6. ISSN 0950-5849.
^ Харман, Марк; Мансури, С. Афшин; Чжан, Юаньюань (1 ноября 2012 г.). «Разработка программного обеспечения на основе поиска: тенденции, методы и приложения». ACM Computing Surveys . 45 (1): 1– 61. doi :10.1145/2379776.2379787. S2CID 207198163.
^ Макминн, Фил (2004). «Генерация данных для тестирования программного обеспечения на основе поиска: обзор». Тестирование, проверка и надежность программного обеспечения . 14 (2): 105–156 . CiteSeerX 10.1.1.122.33 . doi :10.1002/stvr.294. ISSN 1099-1689. S2CID 17408871.
^ Грир, Дес; Руэ, Гюнтер (15 марта 2004 г.). «Планирование выпуска программного обеспечения: эволюционный и итеративный подход». Информационные и программные технологии . 46 (4): 243–253 . CiteSeerX 10.1.1.195.321 . doi :10.1016/j.infsof.2003.07.002. ISSN 0950-5849. S2CID 710923.
^ Коларес, Фелипе; Соуза, Джерффесон; Кармо, Рафаэль; Падуя, Клариндо; Матеус, Джеральдо Р. (2009). «Новый подход к планированию выпуска программного обеспечения». XXIII Бразильский симпозиум по разработке программного обеспечения, 2009 г. SBES '09 . XXIII Бразильский симпозиум по разработке программного обеспечения, 2009 г. SBES '09. стр. 207–215 . doi :10.1109/SBES.2009.23.
^ Кларк, Джон А.; Джейкоб, Джереми Л. (15 декабря 2001 г.). «Протоколы — это тоже программы: метаэвристический поиск протоколов безопасности». Информационные и программные технологии . 43 (14): 891– 904. CiteSeerX 10.1.1.102.6016 . doi :10.1016/S0950-5849(01)00195-1. ISSN 0950-5849.
^ Ряйха, Оути (1 ноября 2010 г.). «Обзор разработки программного обеспечения на основе поиска» (PDF) . Computer Science Review . 4 (4): 203–249 . CiteSeerX 10.1.1.188.9036 . doi :10.1016/j.cosrev.2010.06.001. ISSN 1574-0137.
^ Мариани, Тайна; Вергилио, Сильвия Регина (1 марта 2017 г.). «Систематический обзор рефакторинга на основе поиска». Информационные и программные технологии . 83 : 14– 34. doi : 10.1016/j.infsof.2016.11.009. ISSN 0950-5849.
^ Альба, Энрике; Чикано, Дж. Франциско (1 июня 2007 г.). «Управление программными проектами с помощью GAs». Информационные науки . 177 (11): 2380– 2401. doi : 10.1016/j.ins.2006.12.020. hdl : 10630/8145 . ISSN 0020-0255.
^ Антониол, Джулиано; Ди Пента, Массимилиано; Харман, Марк (2005). «Методы поиска, применяемые для оптимизации планирования проекта для масштабного проекта по обслуживанию». Труды 21-й Международной конференции IEEE по обслуживанию программного обеспечения, 2005. ICSM'05 . Труды 21-й Международной конференции IEEE по обслуживанию программного обеспечения, 2005. ICSM'05. стр. 240–249 . CiteSeerX 10.1.1.63.8069 . doi :10.1109/ICSM.2005.79.
^ Чжан, Юаньюань (февраль 2010 г.). Выборка и оптимизация требований на основе многоцелевого поиска (PhD). Strand, Лондон, Великобритания: Лондонский университет.
^
Y. Zhang и M. Harman и S. L. Lim, «Оптимизация управления взаимодействием требований на основе поиска», Кафедра компьютерных наук, Университетский колледж Лондона, Исследовательская записка RN/11/12, 2011.
^ Ли, Линбо; Харман, Марк; Летье, Эммануэль; Чжан, Юаньюань (2014). «Проблема надежного следующего релиза». Труды Ежегодной конференции по генетическим и эволюционным вычислениям 2014 года . Gecco '14. стр. 1247– 1254. doi :10.1145/2576768.2598334. ISBN9781450326629. S2CID 8423690.
^ Ли, Л.; Харман, М.; Ву, Ф.; Чжан, И. (2017). «Значение точного анализа при выборе требований» (PDF) . IEEE Transactions on Software Engineering . 43 (6): 580– 596. doi :10.1109/TSE.2016.2615100. ISSN 0098-5589. S2CID 8398275.
^ Le Goues, Claire; Dewey-Vogt, Michael; Forrest, Stephanie; Weimer, Westley (2012). «Систематическое исследование автоматизированного исправления программ: исправление 55 из 105 ошибок по 8 долларов за каждую». 2012 34-я Международная конференция по программной инженерии (ICSE) . 2012 34-я Международная конференция по программной инженерии (ICSE). стр. 3–13 . doi :10.1109/ICSE.2012.6227211.
^ Arcuri, Andrea; Yao, Xin (2008). «Новый коэволюционный подход к автоматическому исправлению ошибок в программном обеспечении». Конгресс IEEE по эволюционным вычислениям, 2008. CEC 2008. (Всемирный конгресс IEEE по вычислительному интеллекту) . Конгресс IEEE по эволюционным вычислениям, 2008. CEC 2008. (Всемирный конгресс IEEE по вычислительному интеллекту). стр. 162–168 . CiteSeerX 10.1.1.159.7991 . doi :10.1109/CEC.2008.4630793.
^ Харман, Марк; Цзя, Юэ; Чжан, Юаньюань (апрель 2015 г.). «Достижения, открытые проблемы и вызовы для тестирования программного обеспечения на основе поиска». 8-я международная конференция IEEE по тестированию, верификации и валидации программного обеспечения (ICST) 2015 г. Грац, Австрия: IEEE. стр. 1– 12. CiteSeerX 10.1.1.686.7418 . doi :10.1109/ICST.2015.7102580. ISBN978-1-4799-7125-1. S2CID 15272060.
^ Memeti, Suejb; Pllana, Sabri; Binotto, Alecio; Kolodziej, Joanna; Brandic, Ivona (2018). «Использование метаэвристик и машинного обучения для оптимизации программного обеспечения параллельных вычислительных систем: систематический обзор литературы». Computing . 101 (8): 893–936 . arXiv : 1801.09444 . Bibcode :2018arXiv180109444M. doi :10.1007/s00607-018-0614-9. S2CID 13868111.
^ Лэнгдон, Уильям Б.; Харман, Марк. «Оптимизация существующего программного обеспечения с помощью генетического программирования» (PDF) . Труды IEEE по эволюционным вычислениям .
^ Basios, Michail; Li, Lingbo; Wu, Fan; Kanthan, Leslie; Barr, Earl T. (9 сентября 2017 г.). «Оптимизация дарвиновских структур данных в Google Guava». Search Based Software Engineering (PDF) . Lecture Notes in Computer Science. Vol. 10452. pp. 161– 167. doi :10.1007/978-3-319-66299-2_14. ISBN978-3-319-66298-5.
^ Минку, Леандро Л.; Садхолт, Дирк; Яо, Синь (2012). «Эволюционные алгоритмы для задачи планирования проекта: анализ времени выполнения и улучшенный дизайн». Труды четырнадцатой международной конференции по генетическим и эволюционным вычислениям . GECCO '12. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 1221– 1228. doi :10.1145/2330163.2330332. ISBN978-1-4503-1177-9.
^ Mayo, M.; Spacey, S. (2013). «Предсказание сбоев регрессионного теста с использованием выбранных генетическим алгоритмом динамических метрик анализа производительности» (PDF) . Поисковая программная инженерия . Конспект лекций по информатике. Том 8084. С. 158–171. doi : 10.1007/978-3-642-39742-4_13. hdl : 10289/7763 . ISBN978-3-642-39741-7.
^ "Главная". evosuite.org .
^ другие, Нед Батчелдер и 100, покрытие: измерение покрытия кода для Python , получено 14 марта 2018 г.{{citation}}: CS1 maint: числовые имена: список авторов ( ссылка )
^ «Профилировщики с открытым исходным кодом на Java».
^ "Sapienz: стремление Facebook автоматизировать тестирование программного обеспечения". VentureBeat . 30 декабря 2018 г. Получено 29 сентября 2020 г.
^ Джонс, Дерек (18 октября 2013 г.). «Программирование с использованием генетических алгоритмов: разве это не то, что уже делают люди ;-)». Форма кода . Получено 31 октября 2013 г.
^ Le Goues, Claire; Forrest, Stephanie; Weimer, Westley (1 сентября 2013 г.). «Текущие проблемы автоматического восстановления программного обеспечения». Software Quality Journal . 21 (3): 421– 443. CiteSeerX 10.1.1.371.5784 . doi :10.1007/s11219-013-9208-0. ISSN 1573-1367. S2CID 16435531.
^ Саймонс, Кристофер Л. (май 2013 г.). Куда (прочь) инженеры-программисты в SBSE?. Первый международный семинар по объединению моделирования с разработкой программного обеспечения на основе поиска, Первый международный семинар по объединению моделирования с разработкой программного обеспечения на основе поиска. Сан-Франциско, США: IEEE Press. стр. 49–50 . Получено 31 октября 2013 г.
Внешние ссылки
Репозиторий публикаций по SBSE
Метаэвристика и программная инженерия
Репозиторий инфраструктуры программных артефактов
Международная конференция по программной инженерии
Генетические и эволюционные вычисления (GECCO)
Страница Google Scholar о поисковой разработке программного обеспечения