Найти в Дзене
Компьютерные науки

Повторное использование ошибочного исходного кода для поддержки начинающих программистов в задачах отладки (Background)

Оглавление

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

https://cdn.pixabay.com/photo/2014/09/03/05/09/matrix-434033__340.jpg
https://cdn.pixabay.com/photo/2014/09/03/05/09/matrix-434033__340.jpg

3.1. Подходы к начальным данным в контексте отладки.

Это исследование тесно связано с вычислительным мышлением в контексте образования [40]. Коммутационное мышление направлено на повышение индивидуальной способности анализировать и решать различные проблемы. Решения представлены в форме, которая может быть выполнена агентом обработки информации (т.е. человеком, машиной, комбинацией человека и машины) [45]. Все эти фреймворки подчеркивают необходимость нового подхода к обучению отладке, который рассматривается не только как задача поиска дефектов. Способность к отладке - это сложный многогранный набор навыков, требующий умения разделять и преодолевать анализируемую проблему, чтобы определить местоположение неисправности, прежде чем ее устранять. Наконец, при идентификации места повреждения способность к выполнению коррекции требует, как видно из [18], навыков анализа и синтеза программ, а также подтвержденных и подчеркнутых в ряде исследований [25,30,34] диктовок отладки для студентов и начинающих программистов и важности обучения их индивидуально определенным подходам. В частности, в [25] определена специальная структура, показывающая категории знаний, необходимые для эффективной отладки.

Позднее, в [30], авторы использовали эту структуру для критического обзора существующих инструментов отладки и пришли к выводу, что они более полезны для экспертов-отладчиков в качестве поддержки во время сеансов отладки, чем для студентов, которые хотят учиться и улучшать свои отладочные возможности: доменные знания, системные знания, процедурные знания, стратегические знания и опыт. Во время отладки разработчик оперативно применяет это различное знание, уменьшая проблемное пространство до тех пор, пока неисправность не будет выявлена. К таким знаниям относится способность выполнять несколько видов деятельности: (i) создание проблемного пространства; (ii) выявление и диагностика неисправности; (iii) генерация и проверка решений; и (iv) запоминание предыдущего опыта. Это требует новых подходов, которые учитывают специфические аспекты отладки. В частности, основная проблема, с которой сталкиваются учащиеся, когда они пытаются построить проблемное пространство, чтобы идентифицировать место неисправности, связана со взрывом поискового пространства: в реальном контексте набор программных элементов (и их взаимосвязей), которые должны быть рассмотрены и для которых учащийся должен выполнить правильный анализ, может быть действительно огромным. Как следствие, учащиеся часто расстраиваются из-за бесконечных сеансов отладки, когда усилия тратятся впустую, глядя на неправильную часть системы. В этих условиях, когда они не в состоянии отличить правильные и неправильные предположения, это мешает им учиться и строить полезные знания из своих отладочных сессиях.

Этот процесс обучения должен быть направлен на поощрение и повышение качества обучения в ходе выполнения задач. Существуют три основные особенности отношений, которые помогают продвигать обучение в условиях, когда сложность является препятствием для успешного построения знаний. Первая составляющая требует высококачественного взаимодействия между учеником и экспертом (т.е. человеком-инструктором или, как в нашем случае, хорошо обученной системой поддержки). Вторая особенность требует, чтобы обучение происходило в зоне проксимального развития обучающегося [44]. Третья особенность требует, чтобы эшафот (т.е. поддержка и руководство со стороны эксперта) постепенно модулировался по мере того, как учащийся становится более прозорливым. Иными словами, суппорт и руководство, предоставляемое учащемуся, подобны строительным данным - они обеспечивают "адаптируемую и временную" опору на время строительства здания.

3.2 Анализ данных.

Анализ Dataflow необходим для изучения взаимосвязи данных между компонентами кода. В контексте предложенного подхода необходимо определить, какие переменные имеют прямую или косвенную связь - от сайта, где произошел сбой. Для выполнения анализа потока данных мы использовали IFDS-фреймворк для решения межпроцедурных конечных задач дистрибутивного подмножества [39]. Анализ прослушанной программной системы включает в себя вычисление полного контекстно-чувствительного межпроцедурного управляющего графа потока (ICFG). ICFG [39] - это направленный граф, в узлах которого представлены основные (или составные) утверждения, а по краям - пути потока управления в компьютерной программе. При наличии набора графов потока управления, ICFG может быть получена путем добавления между операциями (т.е. методами и функциями) промежуточно-процедурных ребер, которые могут быть использованы для проведения нескольких видов анализа исходного кода, а также для построения доминаторных деревьев [29]. Дерево доминаторов (ДТ) - это компактное и удобное представление отношений доминирования (и строгого доминирования) между узлами управляющего графа. Узел DT доминирует над всеми своими потомками в дереве, и сразу же доминирует над всеми своими детьми. При нашем подходе, мы используем DT, чтобы найти на ICFG путь, который ведет от узла отказа к бугну. Зная этот путь, последующий анализ данных может быть ограничен только теми программными элементами, которые связаны с ним посредством отношений потока данных, и, следовательно, может представлять собой причину ошибки.

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