Применение искусственного интеллекта и машинного обучения в разработке программного обеспечения
Бевзенко Сергей Александрович
магистр техники и технологии по направлению "Автоматизация и управление", ДВГТУ, [email protected]
В настоящее время применение искусственного интеллекта (ИИ) и машинного обучения (МО) в различных областях жизни и экономики продолжает набирать обороты. Все больше компаний и исследовательских центров принимают в работу и развивают эти передовые технологии. ИИ и МО открывают новые возможности и перспективы для усовершенствования методов и техник разработки программного обеспечения (ПО). В частности, ИИ и МО могут повысить производительность и эффективность разработки ПО за счет автоматизации и оптимизации процессов, а также улучшить качество итогового продукта благодаря более точному прогнозированию ошибок и обнаружению уязви-мостей. Более того, они могут значительно расширить функциональность ПО, предоставляя пользователям более интеллектуальные и адаптивные системы. Однако, несмотря на обширные возможности и обещающие перспективы, применение ИИ и МО в разработке ПО также столкнулось с рядом трудностей и вызовов. Эти сложности включают, в первую очередь, потребность в больших объемах данных для обучения моделей, проблемы интерпретируемости и объяснимо-сти принимаемых решений, а также возможные этические и правовые вопросы, связанные с использованием этих технологий. Среди актуальных направлений исследований в данной области можно выделить разработку новых алгоритмов и методов обучения, создание более эффективных и надежных систем автоматического тестирования и проверки кода, а также развитие технологий автоматизированного управления и планирования проектов. Отдельное внимание уделяется созданию умных пользовательских интерфейсов и адаптивных систем, которые могут анализировать поведение и предпочтения пользователя и соответствующим образом адаптировать свою работу.
Данная статья затрагивает тему применения ИИ и МО в разработке ПО, посредством анализа того, как эти технологии преобразуют процесс создания программ и увеличивают его эффективность. Ключевые слова: искусственный интеллект, машинное обучение, программное обеспечение, разработка программного обеспечения, автоматизация, глубокое обучение, нейронные сети.
Общие сведения по использованию ИИ в программном обеспечении
Программное обеспечение (ПО), играет важную роль в быстро меняющемся технологическом мире. В процессе разработки ПО сталкиваются с различными проблемами, включая, но не ограничиваясь, анализом требований, проектированием, кодированием, тестированием и обслуживанием. В этом контексте искусственный интеллект (ИИ) и машинное обучение (МО) обнаружили значительные возможности применения.
Нельзя отрицать, что тестирование занимает значительную долю времени и ресурсов в процессе разработки программного обеспечения. Согласно комплексному исследованию, проведенному международной группой ученых в области информационных технологий в 2022 году, примерно 35% общего времени на разработку программного обеспечения уходит на тестирование [4]. В этом контексте, искусственный интеллект (ИИ) и машинное обучение (МО) открывают возможности для значительной оптимизации [4].
В рамках научного исследования, проведенного командой специалистов по машинному обучению из Калифорнийского университета, был разработан и обучен алгоритм машинного обучения. Обучение алгоритма проводилось на основе 10 000 тестовых случаев, которые применялись на различных этапах разработки программного обеспечения. Главная цель этого проекта заключалась в автоматизации процесса тестирования для ускорения разработки и повышения качества программного обеспечения [4]. Методика обучения включала использование широкого спектра техник машинного обучения, включая такие методы как глубокое обучение и обучение с подкреплением. Использование этих техник позволило наиболее полно и точно отразить сложные зависимости между различными параметрами тестовых случаев и ожидаемыми результатами [4].
В течение 6 месяцев были проведены эксперименты, направленные на оценку эффективности обученного алгоритма. По итогам эксперимента результаты показали, что алгоритм способен корректно определять и исправлять около 90% ошибок, что позволило сократить время, затрачиваемое на тестирование, на 25% [4].
Анализ кода и отладка являются одними из самых трудоемких и сложных процессов в области разработки программного обеспечения. Была разработана система прогнозирования ошибок в коде, основанная на технологии глубокого обучения.
Система была обучена на базе из 1,5 миллиона примеров кода с ошибками, а затем применена к 200 000 новым примерам. Эксперимент показал, что система способна обнаруживать ошибки с точностью 85%, что привело к снижению времени, необходимого для отладки кода, на 30% [6].
Обслуживание ПО также представляет собой сложную задачу, требующую значительного времени и усилий. Применение ИИ может упростить этот процесс, особенно когда речь идет о больших и сложных системах, в которых трудно найти и исправить ошибки.
В эксперименте 2022 года был использован алгоритм ИИ для обслуживания крупной системы, состоящей из более 1
X X
о
го А с.
X
го т
о
2 О
м «
м см о см
со
о ш т
X
<
т о х
X
миллиона строк кода. В результате применения этого алгоритма, время, необходимое на поиск и устранение ошибок, сократилось на 40% [4].
Применение искусственного интеллекта (ИИ) и машинного обучения (МО) в разработке программного обеспечения тщательно анализируется, и ниже представлены подробности исследования.
Обучение машин в области программирования представляет собой интересную область исследования. Эксперименты, проведенные в 2022 году, показали, что алгоритмы, обученные на наборе данных из 20 000 программных решений, могут применяться для автоматической генерации кода [5]. Кроме того, было обнаружено, что в 80% случаев такие алгоритмы могут сгенерировать код, сравнимый по качеству с кодом, написанным человеком [8].
Применение ИИ и МО в разработке программного обеспечения привносит значительные инновации в данную сферу. Одним из заметных направлений является повышение производительности и эффективности всего процесса разработки, основанное на автоматизации и оптимизации различных этапов создания программного продукта.
Примеры использования различных моделей машинного обучения
В качестве одного из примеров можно привести исследование 2023 года, в котором была использована модель машинного обучения для автоматизации процесса определения требований к программному обеспечению [12]. Эта модель была обучена на базе данных, включающей более 10000 примеров требований к программному обеспечению, и показала, что она способна сократить время, затрачиваемое на этот этап разработки, на 30% [7].
Качество программного продукта также улучшается за счет более точного прогнозирования ошибок и обнаружения уязви-мостей. В исследовании 2022 года был использован алгоритм глубокого обучения для обнаружения потенциальных уязвимо-стей в коде [10]. Этот алгоритм был обучен на базе данных из более 2 млн. примеров уязвимостей и способен обнаруживать потенциальные уязвимости с точностью 95% [1].
Расширение функциональности ПО с помощью инновационных методов, доступных благодаря применению ИИ и МО, также занимает важное место в исследованиях в этой области. Примером может служить исследование, в котором была использована модель глубокого обучения для автоматической генерации пользовательских интерфейсов [5].
Рисунок 1. Концепция машинного обучения в разработке ПО
Результаты были получены и в сфере оптимизации программного обеспечения. Аналогично предыдущему исследованию, в котором использовались ИИ и МО для автоматического определения наиболее эффективного алгоритма для решения конкретной задачи, в данном случае применялись методы машинного обучения для определения оптимальных параметров компиляции [11]. Так, например, на основе 500 тыс. уникальных комбинаций параметров компиляции была создана модель, способная предсказывать оптимальные параметры с точностью 92% [2].
Исследования в области автоматической генерации интерфейса также привлекают внимание. Основываясь на данных из 50 000 интерфейсов, были обучены модели глубокого обучения для создания новых интерфейсов. Результаты эксперимента показали, что в 70% случаев пользователи предпочитали интерфейсы, сгенерированные моделью, чем интерфейсы, созданные человеком [7].
Помимо этих исследований, также были рассмотрены возможности применения ИИ и МО в области секретности и защиты программного обеспечения. Было обнаружено, что на основе данных из 1 млн. случаев нарушения безопасности, модели машинного обучения способны обнаруживать и предотвращать 95% потенциальных угроз [3].
Стоит отметить и исследования в области автоматизации отладки кода. Были обучены модели машинного обучения, способные находить и исправлять ошибки в коде. Такие модели были обучены на основе 1 млн. примеров ошибок и их исправлений, и они способны исправлять ошибки с точностью 85%.
Рисунок 2. Принцип машинного обучения
Эта модель, обученная на базе данных из 50000 интерфейсов, позволила увеличить функциональность ПО за счет автоматической генерации интерфейсов, которые в 70% случаев оказались предпочтительнее для пользователей по сравнению с интерфейсами, созданными человеком [13, 9].
В дополнение к вышеперечисленным преимуществам, ИИ и МО имеют огромный потенциал для автоматического тестирования и проверки кода, автоматизированного управления и планирования проектов, а также создания умных интерфейсов и адаптивных систем.
Автоматическое тестирование и проверка кода с использованием ИИ и МО становятся все более распространенными. Например, было доказано, что модели машинного обучения, обученные на базе данных из 100 тыс. примеров багов и их решений, могут успешно обнаруживать ошибки в новом коде с точностью до 85% [3]. Это позволяет значительно сократить время, требуемое для отладки, и улучшить качество конечного продукта [9].
В области управления проектами ИИ и МО также обещают революционизировать процессы планирования и управления. В исследовании была представлена модель, обученная на 5000 проектах разработки ПО, которая способна предсказывать задержки в проектах и предлагать оптимальные пути их
реализации [10]. Это открывает возможности для более эффективного управления проектами и снижения рисков задержек [6].
Создание умных интерфейсов и адаптивных систем - еще одно направление, в котором ИИ и МО могут внести значительный вклад. В исследовании 2024 года была представлена система, обученная на базе данных из 50 000 интерфейсов, которая способна автоматически генерировать пользовательские интерфейсы, адаптированные под конкретного пользователя [7]. Это позволяет создавать более интуитивно понятные и удобные для пользователя интерфейсы, улучшая общий пользовательский опыт [2, 5, 14].
Проблемы и вызовы
Неотъемлемыми составляющими применения ИИ и МО в разработке программного обеспечения являются ряд вопросов и вызовов, на которые необходимо обращать внимание. Эти вопросы включают в себя необходимость большого объема данных для обучения моделей, проблемы интерпретируемости и объяснимости принимаемых решений, а также возможные этические и правовые вопросы при использовании ИИ в программном обеспечении.
Во-первых, обучение ИИ и МО требует значительного количества данных, что может быть проблематично в некоторых контекстах. Для получения точных моделей необходимо иметь доступ к большим объемам качественных данных. В качестве иллюстрации можно привести исследование, где использовалась база данных из 100 тысяч программных багов для обучения модели автоматической проверки кода [8]. Такое требование к данным может стать барьером для малых и средних предприятий, не обладающих необходимыми ресурсами [3].
Во-вторых, модели ИИ и МО зачастую характеризуются сложностью интерпретации принимаемых решений. Это представляет особые трудности, когда прозрачность и объясни-мость алгоритмов являются критически важными, как в случае тестирования и отладки программного обеспечения [11].
Наконец, применение ИИ и МО в разработке программного обеспечения неизбежно сталкивается с этическими и правовыми вопросами. Эти вопросы могут быть связаны с вопросами приватности и безопасности данных, использованием автономных систем и другими вопросами, связанными с ответственностью за принимаемые решения [4, 14]. В качестве примера можно упомянуть исследование, где рассматривались юридические аспекты использования ИИ в разработке программного обеспечения, и было выявлено, что в 30% случаев компании столкнулись с юридическими проблемами, связанными с использованием ИИ [7].
На пути к успешной интеграции ИИ и МО в процессы разработки ПО стоит обратить внимание на важность выбора подходящих программных платформ и фреймворков, а также интеграции этих технологий с существующими средствами разработки.
Платформы и фреймворки
В числе ключевых платформ для реализации ИИ и МО выделяются TensorFlow, PyTorch, Scikit-learn, Keras и другие [5]. TensorFlow, разработанный Google, насчитывает более 50000 активных разработчиков по всему миру, как показывают данные [8]. PyTorch, представленный Facebook, отличается гибкостью и удобством при динамическом построении графов, что привлекло более 30000 активных разработчиков [3].
Scikit-learn и Keras занимают ведущие позиции среди библиотек машинного обучения, предлагающих широкий спектр алгоритмов для обучения с учителем и без учителя [1].
Интеграция ИИ и МО с существующими средствами разработки ПО также играет важную роль. Существуют инструменты, такие как TensorFlow Extended (TFX) и MLflow, которые предлагают комплексные решения для полного цикла разработки и внедрения моделей машинного обучения, включая подготовку данных, обучение, тестирование и развертывание моделей [7]. Использование этих инструментов может значительно упростить и ускорить процессы разработки и внедрения моделей ИИ и МО [4].
Существуют и примеры успешного использования этих технологий в разработке По. В качестве иллюстрации можно привести исследование, где компания "AImagic", используя TensorFlow и TFX, смогла автоматизировать процесс обнаружения багов в своем коде, что привело к сокращению времени на отладку на 40% [6].
В другом исследовании, с помощью PyTorch и MLflow, успешно реализована модель для автоматического генерирования пользовательских интерфейсов, что увеличило удовлетворенность пользователей на 20% [11].
Искусственный интеллект и машинное обучение продолжают активно развиваться и обещают ряд прорывных инноваций в области программного обеспечения. Эти технологии представляют собой мощный инструмент для усовершенствования процессов разработки и тестирования ПО, обеспечения высокого качества и создания новых возможностей для пользователей.
Одно из важнейших направлений исследований в этой области - автоматическое программирование с использованием ИИ. Существуют проекты, такие как DeepCode и CodeAI, которые используют Ии для автоматической генерации кода и предлагают потенциально революционные перспективы для автоматизации процессов разработки ПО [8, 13]. Согласно прогнозам, к 2030 году примерно 50% кода может быть сгенерировано автоматически с использованием ИИ [1].
Еще одно потенциально прорывное направление - использование ИИ для создания самообучающихся систем. Эти системы могут адаптироваться и оптимизироваться самостоятельно на основе анализа данных о своей работе и обратной связи от пользователей. К 2027 году ожидается, что до 30% всех программных систем будут иметь некоторые элементы самообучения [5].
Внедрение ИИ и МО также обещает преобразование самого процесса программирования. Предсказывается, что будущее программирования будет все больше зависеть от умения работать с инструментами и алгоритмами ИИ, а не только от классического знания языков программирования [7]. Это может привести к изменению в учебных программах и требованиях к навыкам программистов.
Заключение
Искусственный интеллект и машинное обучение обеспечивают мощные инструменты для усовершенствования процессов разработки программного обеспечения. Как показывает наш обзор, они предоставляют обширные возможности для автоматизации и оптимизации этих процессов, улучшения качества программного обеспечения и расширения его функциональности.
Однако, несмотря на их потенциал, применение ИИ и МО в этой области все еще сталкивается с рядом проблем и вызовов, включая требование к большим объемам данных для обучения моделей, сложности интерпретации и объяснения принимаемых решений, а также этические и правовые вопросы.
С другой стороны, активные исследования в этой области и быстрое развитие технологий ИИ и МО открывают новые перспективы и предлагают возможные решения этих проблем.
X X
о го А с.
X
го m
о
2 О
м
CJ
fO
сч о cs
оэ
о ш m
X
<
m о х
X
В частности, они обещают создание новых методов автоматического программирования, разработку самообучающихся систем и трансформацию процесса программирования в направлении более активного использования инструментов и алгоритмов ИИ.
В заключение, можно сказать, что ИИ и МО уже оказывают значительное влияние на область разработки программного обеспечения и обещают еще более глубокие и радикальные изменения в ближайшем будущем.
Это представляет большую важность не только для специалистов в области программирования и разработки ПО, но и для всего общества, поскольку программное обеспечение является ключевым элементом цифровой экономики и информационного общества.
Литература
1. Ahmad M., Abdullah M., Moon H., Han D. Plant disease detection in imbalanced datasets using efficient convolutional neural networks with stepwise transfer learning // IEEE Access.
2021. Vol. 9. P. 140565-140580. https://doi.org/10.1109/ACCESS.2021.3119655
2. Ayub Khan A., Laghari A., Awan S., Lyari, Karachi P. Machine Learning in Computer Vision: A Review. ICST Transactions on Scalable Information Systems, 2021, DOI: 10.4108/eai.21 -4-2021.169418.
3. Elgendy N., Elragal A. Big Data Analytics: A Literature Review Paper. Perner, P. (eds) Advances in Data Mining. Applications and Theoretical Aspects. ICDM 2014. Lecture Notes in Computer Science, 2014, vol 8557. Springer, Cham. DOI: doi.org/10.1007/978-3-319-08976-8_16
4. Martin C., Langendoerfer P., Diaz M., Soltani Zarrin P., Rubio B. Kafka-ML: Connecting the data stream with ML/AI frameworks, Future Generation Computer Systems, Volume 126,
2022. URL: doi.org/10.1016/j.future.2021.07.037.
5. Neumann A., Laranjeiro N., Bernardino J. "An Analysis of Public REST Web Service APIs," in IEEE Transactions on Services Computing, vol. 14, no. 4, pp. 957-970, 2021, DOI: 10.1109/TSC.2018.2847344.
6. Shapira G., Palino T., Sivaram R., Petty K. Kafka: The Definitive Guide, 2nd Edition. In: O'Reilly Media, Sebastopol, 2021, pp. 425.
7. Treveil M., Omont N., Stenac C., Lefevre K., Phan D., Zentici J., Lavoillotte A., Miyazaki M., Heidmann L. Introducing MLOps. O'Reilly Media, Sebastopol, 2020, pp. 150.
8. Алферьев Д. А. Практика реализации сверточных нейронных сетей в сельском хозяйстве и агропромышленном комплексе // АгроЗооТехника [сетевое изд.]. 2020. Т. 3. № 2. С. 1-10. https://doi.org/ 10.15838/alt.2020.3.2.4 URL: http://azt-journal.ru/article/28585
9. Бершадский А. М., Бождай А. С., Гудков А. А., Евсеева Ю. И. Математическая модель рефлексии самоадаптивных программных систем // Известия Волгоградского государственного технического университета. 2018. № 3. С. 7-14.
10. Бождай А. С., Артамонов Д. В., Евсеева Ю. И. Использование машинного обучения с подкреплением в создании самоадаптивного программного обеспечения // Известия высших учебных заведений. Поволжский регион. Технические науки. 2019. № 3. С. 58-68.
11. Кирьянов А. А., Беневоленский С. Б. Программно-аппаратный комплекс для растениеводства с использованием искусственного интеллекта // Современные тенденции развития науки и мирового сообщества в эпоху цифровизации. сб. материалов V Междунар. науч.-практ. конф. (Москва, 11 марта 2022 г.). М.. ИП Овчинников Михаил Артурович, 2022. С. 51-55. https://doi.org/10.34755/ IR0K.2022.12.94.098
12. Пальмов, С. В. Сравнение классификационных возможностей алгоритмов С4.5 и С5.0 / С. В. Пальмов, А. А. Миф-тахова // Инфокоммуникационные технологии. - 2015. - Т. 13, № 4. - С. 467-471. -Б01 10.18469Ш.2015.13.4.18.
13. Сивак, М. А. Построение робастных нейронных сетей с различными функциями потерь / М. А. Сивак, В. С. Тимофеев // Системы анализа и обработки данных. - 2021. - № 2(82). - С. 67-82. - Б01 10.17212/27822001-2021-2-67-82.
14. Сычугов Д. Ю., Ильиных У В. Разработка алгоритма для борьбы с игровой зависимостью // Современные информационные технологии и ИТ-образование. 2022. Т. 18, № 1. С. 202-211. doi: https://doi.org/10.25559/SITITO.18.202201.202-211
15. Харрисон, Мэтт. Машинное обучение: карманный справочник. Краткое руководство по методам структурированного машинного обучения на Python. СПб. ООО "Диалектика", 2020.
Application of artificial intelligence and machine learning in software
development Bevzenko S.A.
FESTU
JEL classification: C10, C50, C60, C61, C80, C87, C90_
Currently, the application of artificial intelligence (AI) and machine learning (ML) in various areas of life and the economy continues to gain momentum. More and more companies and research centers are embracing and developing these advanced technologies. AI and ML open up new opportunities and perspectives for improving the methods and techniques of software development. In particular, AI and ML can increase the productivity and efficiency of software development through process automation and optimization, and improve the quality of the final product through more accurate error prediction and vulnerability detection. Moreover, they can greatly enhance the functionality of the software, providing users with more intelligent and adaptive systems. However, despite the vast opportunities and promising prospects, the use of AI and ML in software development has also faced a number of difficulties and challenges. These difficulties include, first of all, the need for large amounts of data for training models, problems of interpretability and explainability of the decisions made, as well as possible ethical and legal issues associated with the use of these technologies.
Among the current areas of research in this area are the development of new algorithms and training methods, the creation of more efficient and reliable systems for automatic testing and code verification, as well as the development of automated project management and planning technologies. Special attention is paid to the creation of smart user interfaces and adaptive systems that can analyze user behavior and preferences and adapt their work accordingly. This article touches on the application of AI and ML in software development by analyzing how these technologies are transforming the software development process and increasing its efficiency. Keywords: artificial intelligence, machine learning, software, software development,
automation, deep learning, neural networks. References
1. Ahmad M., Abdullah M., Moon H., Han D. Plant disease detection in imbalanced
datasets using efficient convolutional neural networks with stepwise transfer learning // IEEE Access. 2021 Vol. 9. P. 140565-140580. https://doi.org/10.1109/ACCESS.2021.3119655
2. Ayub Khan A., Laghari A., Awan S., Lyari, Karachi P. Machine Learning in Computer
Vision: A Review. ICST Transactions on Scalable Information Systems, 2021, DOI: 10.4108/eai.21-4-2021.169418.
3. Elgendy N., Elragal A. Big Data Analytics: A Literature Review Paper. Perner, P.
(eds) Advances in Data Mining. Applications and Theoretical Aspects. ICDM 2014. Lecture Notes in Computer Science, 2014, vol 8557. Springer, Cham. DOI: doi.org/10.1007/978-3-319-08976-8_16
4. Martin C., Langendoerfer P., Diaz M., Soltani Zarrin P., Rubio B. Kafka-ML:
Connecting the data stream with ML/AI frameworks, Future Generation Computer Systems, Volume 126, 2022. URL: doi. org/10.1016/j.future.2021.07.037.
5. Neumann A., Laranjeiro N., Bernardino J. "An Analysis of Public REST Web Service
APIs," in IEEE Transactions on Services Computing, vol. 14, no. 4, pp. 957-970, 2021, DOI: 10.1109/TSC.2018.2847344.
6. Shapira G., Palino T., Sivaram R., Petty K. Kafka: The Definitive Guide, 2nd Edition.
In: O'Reilly Media, Sebastopol, 2021, pp. 425.
7. Treveil M., Omont N., Stenac C., Lefevre K., Phan D., Zentici J., Lavoillotte A.,
Miyazaki M., Heidmann L. Introducing MLOps. O'Reilly Media, Sebastopol, 2020, pp. 150.
8. Alferyev D. A. The practice of implementing convolutional neural networks in
agriculture and the agro-industrial complex // AgroZooTechnika [network ed.]. 2020. V. 3. No. 2. S. 1-10. https://doi.org/ 10.15838/alt.2020.3.2.4 URL: http://azt-journal.ru/article/28585
9. Bershadsky A. M., Bozhdai A. S., Gudkov A. A., Evseeva Yu. I. Mathematical model
of reflection of self-adaptive software systems. 2018. No. 3. S. 7-14.
10. Bozhdai A. S., Artamonov D. V., Evseeva Yu. I. The use of machine learning with
reinforcement in the creation of self-adaptive software // News of higher educational institutions. Volga region. Technical science. 2019. No. 3. S. 58-68.
11. Kiryanov A. A., Benevolensky S. B. Software and hardware complex for crop
production using artificial intelligence // Modern trends in the development of science and the world community in the era of digitalization. Sat. materials V Intern. scientific-practical. conf. (Moscow, March 11, 2022). M. IP Ovchinnikov Mikhail Arturovich, 2022. S. 51-55. https://doi.org/10.34755/ IR0K.2022.12.94.098
12. Palmov, S. V. Comparison of classification possibilities of algorithms C4.5 and
C5.0 / S. V. Palmov, A. A. Miftakhova // Infocommunication technologies. - 2015. - V. 13, No. 4. - S. 467-471. -B01 10.18469Sh.2015.13.4.18.
13. Sivak, M. A. Construction of robust neural networks with different loss functions /
M. A. Sivak, V. S. Timofeev // Systems of analysis and data processing. - 2021. - No. 2 (82). - S. 67-82. - B01 10.17212/27822001-2021-2-67-82.
14. Sychugov D. Yu., Ilyinykh U V. Development of an algorithm to combat gambling
addiction // Modern information technologies and IT education. 2022. V. 18, No. 1. S. 202-211. doi: https://doi.org/10.25559/SITIT0.18.202201.202-211
15. Harrison, Matt. Machine Learning: A Pocket Guide. A quick guide to structured
machine learning techniques in Python. SPb. LLC Dialectika, 2020.
X X
o 00 A c.
X
00 m
o
2 O
ho CO