Обзор возможности интеллектуальной поддержки программного обеспечения и обучения программированию

Обзор возможности интеллектуальной поддержки программного обеспечения и обучения программированию

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

Авторы публикации

Рубрика

Информационные технологии

Журнал

Журнал «Научный лидер» выпуск # 1 (3), Январь ‘20

Поделиться

Прогресс в методологии разработки программного обеспечения был достигнут как минимум в двух направлениях. «Классическая» линия проистекает из разработки более систематических методологий анализа и проектирования и их возможной поддержки со стороны различных инструментов, например, CASE-технологии. Линия «научной фантастики» берет свое начало в стремлении к автоматическому программированию, которое пыталось исключить любое прямое присутствие человека-программиста в процессе формирования программы. Таким образом, в то время как последний пытался ограничить роль человека ролью источника спецификации (человек выступал создателем процедуры автоматического программирования), первый не пытался увидеть роль машины больше, чем роль машины (инструмент, ограниченный пассивным выполнением некоторых нетворческих задач). С такой точки зрения наиболее вероятно, что ни одна из этих линий не использовала или даже не пыталась использовать весь имеющийся потенциал. Конечно, существует широкий спектр возможных направлений исследований, сочетающих идеи обоих этих направлений.

Набор методов и инструментов, предлагающих компьютеризированную поддержку разработчикам программного обеспечения, охватывает также многие очень важные практические достижения. В процессе формирования программы стоит не только перевод ее высокоязычной формулировки в исполняемый код, но и создание текста программы, манипулирование сохраненной формой в компьютере, ее обслуживание и т. д. Таково понятие редактора, управляемого синтаксисом [3]. Эти сервисы были доступны не только с помощью «автономных» общих инструментов, таких как редакторы, но и в более или менее интегрированной форме, сосредоточенной обычно вокруг определенного языка программирования, такого как Basic или Lisp. Случай Lisp был особенно значительным. Сама природа Лиспа как функционального языка, реализованного посредством интерпретации, определенной в самом Лиспе, позволяет относительно легко определять и реализовывать манипуляции с текстами на языке Лисп, включая его оценку в специальных режимах. В такие системы программирования на Лиспе были включены сложные утилиты, например, INTERLISP. Предоставляя доступ к инструментам, поддерживающим практически все рутинные, нетворческие части задачи программиста в единообразной манере, такие системы становились средами программирования.

Недавно был описан результат работы над проектом Programmer's Apprentice - прототип системы представления знаний и рассуждений, названный Cake [5]. Он служит для поддержки разработки наукоемких, эволюционирующих, интеллектуальных помощников для разработки программного обеспечения. (Таким образом, это мета-инструмент разработки).

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

В области компьютерной инженерии программного обеспечения (CASE) многие исследования ориентированы на учет последних достижений в области инженерии знаний. Работа под названием «проект ASPIS», которая основана на идее явного представления используемых методов (знания мета-уровня), а также знаний предметной области (знания уровня объекта).

С другой стороны, есть и другие проекты, в которых нет явной привязки к какой-либо специальной технике искусственного интеллекта. Проект PROSPECTRA основан на строгой методологии разработки правильных программ ADA. Программы разрабатываются на основе исходной формальной спецификации требований в процессе пошагового преобразования. Поскольку спецификация выражена формально, правильность дизайна может проверяться на протяжении всего процесса. Цель проекта – сделать разработку программного обеспечения инженерной дисциплиной. Проект надеется предоставить не только последовательную методологию, но и всестороннюю поддержку.

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

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

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

Как только база знаний, относящаяся к определенной проблеме, создана и является достаточно полной в некотором подходящем смысле, ее можно рассматривать как модель этой области. Таким образом, он может служить источником знаний для тех, кто мало о нем знает и / или желает узнать о нем. Теперь ситуация обратная по сравнению с описанной выше: проблема заключается в человеческом обучении [2].

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

1- какие знания (языки, навыки, методы) следует выбрать для усвоения обучающимся (содержание)

2- какое представление знаний подходит для усвоения учащимся (форма)

3- какой подход к процессу обучения (метод)

По указанным направлениям проделана большая работа. Психологические аспекты учебного процесса, необходимые для изучения элементарного программирования изучаются [5]. Ищется альтернативный метод, то есть более «традиционный» подход к обучению, основанный на правилах, с акцентом на активное участие учащегося в решении проблем с самого начала.

Среди нескольких недавних исследовательских проектов, направленных на разработку интеллектуальных обучающих систем для обучения программированию, следует упомянуть, по крайней мере, следующие: Lisp Tutor [4] для ознакомления с программированием на Lisp и PROUST для проблемы программирования. Программный анализ, который основан на выводе правдоподобного процесса проектирования.

PROUST – это система, которая анализирует программы Pascal новичков, которые могут содержать «ошибки». Предполагается, что программы принадлежат к ограниченному классу, неявно заданному доступными знаниями. Анализ основан на восстановлении намерений из спецификаций проблемы, данных программисту, и из самой анализируемой программы. Система автоматически выводит неалгоритмическое описание программы. Описание основано на так называемых планах и стратегиях. Таким образом, анализ фактически представляет собой сравнение предполагаемых функций и структур с фактическими.

База знаний по программированию включает следующие основные виды: цели, планы и код. Цели возникают из специфики проблемы. Чтобы получить реальный программный код, применяются правила преобразования, а также так называемые «правила мопса» (объясняющие известные ошибки). Таким образом, система «знает» об обычных способах, которыми новички допускают ошибки при решении указанной проблемы. Используя описанные знания, PROUST ищет реализации данной спецификации, свидетельства которые есть в реальной программе. Затем он может не только распознать ошибку, возникающую в программе, но и выдвинуть гипотезу о неправильном представлении программиста, которое к ней привело.

Lisp Tutor [3] шаг за шагом следует за учеником во время формирования программы. Таким образом, в отличие от PROUST, который получает синтаксически правильную законченную программу, игнорируя фактические промежуточные шаги, но имея возможность их реконструировать, Lisp Tutor присутствует и знает каждый шаг, который привел к окончательной программе. Фактически каждый шаг – это применение правила. Это происходит из предположения, лежащего в основе теории когнитивной психологии [5], что когнитивные функции могут быть представлены как части производственных правил. Lisp Tutor предлагает довольно обширную базу знаний в области программирования, выраженную в виде правил. Он внимательно следит за действиями каждого учащегося в процессе формирования программы и вмешивается, как только обнаруживает ошибку. Для этого доступны также «глючные» варианты правил. Дальнейшие исследования, связанные с результатами этого проекта, были проведены, например, с использованием аналогии.

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

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

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

Список литературы

  1. Великоруссов Ю.А., Крылов Б.А. Автоматизация процесса программирования // Научно-технический вестник информационных технологий, механики и оптики. 2007. №40. URL: https://cyberleninka.ru/article/n/avtomatizatsiya-protsessa-programmirovaniya (дата обращения: 26.01.2021).
  2. Вичугова А.А. Автоматизация процесса разработки программного обеспечения: методы и средства // Прикладная информатика. 2016. №3 (63). URL: https://cyberleninka.ru/article/n/avtomatizatsiya-protsessa-razrabotki-programmnogo-obespecheniya-metody-i-sredstva (дата обращения: 26.01.2021).
  3. Bhansali, S, and Harandi, M.T. “Syathesis of UNIX Programs Using Derivational Analogy.” Machine Learning, 10, No.1 (1993).
  4. Bma, P. " Teaching Prolog Techniques.” Computers und Education, 20, No.t(1993), 111-117.
  5. Navrat, P. and Rozinajova, V. "Making Programming Knowledge Explicit." Computers and Education, 21, No.4 (1993), 281-299.

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

Прием материалов
c по
Осталось 2 дня до окончания
Размещение электронной версии
Загрузка материалов в elibrary