ЧЕЛОВЕЧЕСКИЙ ФАКТОР В ПРОГРАММИРОВАНИИ ДЛЯ ЭВМ
М. Вайсер, Б. Шнейдерман, Р. Уиллиджнс, Б. Уиллиджис, Дж. Эл - кертон, К. Симпсон, М. МакКоли, Э. Роланд, Дж. Рут, Т. Роберте, С. Шеп - пард, В. Барфилд, Т.-Ч. Ченг, Э. Маржак, Р. Эбертс, Г. Салвенди, Г.-И. Буллингер, Ф. Корндёрфер, Дж. Шерит, К. Кобаяси.
Влияние поведенческого фактора на процесс разработки систем программного обеспечения является одним из предметов исследования специальной отрасли знаний — психологии программирования, которая занимается изучением поведения человека при работе с ЭВМ и использовании информационных систем. В настоящей главе основное внимание уделяется влиянию поведенческого фактора на процесс создания программного обеспечения, а не его проявлению в получаемом программном изделии, заметному конечному пользователю. Некоторые особенности программных изделий, обусловленные воздействием поведенческого фактора, рассматриваются в гл. 5. Из обзорных работ по психологии программирования следует отметить работы [21, 64, 51, 73].
поведенческий фактор играет значительную роль при создании программного обеспечения. В отличие, например, от автомобилей, «штампуемых» миллионами, программное обеспечение всегда создается вручную, трудом индивидуума. Высокая стоимость программного изделия в большой степени обусловлена интеллектуальными усилиями исследователей, разработчиков, программистов, реализующих проект и осуществляющих его сопровождение; что касается затрат на его производство, то они сравнительно невелики.
Из всех этапов создания программного обеспечения наиболее разработанным является программирование. Остальные этапы — определение спецификаций, проектирование, тестирование, отладка и сопровождение — изучены в меньшей степени. Вот почему настоящий раздел содержит больше сведений о программировании и меньше об остальных этапах. Эти этапы не менее важны, просто менее изучены.
Учет роли поведенческого фактора в приложении к программированию означает в значительной мере получение объективной оценки происходящего. Не следует думать, что нам многое известно о влиянии поведенческого фактора на успешную разработку программного обеспечения. Некоторые аспекты этого влияния, безусловно, известны и последовательно рассматриваются ниже, однако отсутствуют какие-либо гарантии того, что именно эти стороны важнее других, неизученных. Недостает также строгой предсказывающей или хотя бы объясняющей теории поведенческого фактора, хотя имеются интересные идеи и многообещающие попытки ее создания (см. разд. 1.4).
На каждом этапе разработки программного обеспечения требуются высокий уровень знания поставленной задачи и соответствующих проблем ее реализации на ЭВМ, а также профессиональные навыки решения подобных задач. Процесс создания программного обеспечения весьма изменчив и поэтому непредсказуем. Из-за различия личностных качеств наблюдается исключительное разнообразие результатов при решении сходных задач разными исполнителями. Одному исполнителю может потребоваться 10 или 20 недель для выполнения работы, которую другой завершит в течение одной недели [19]. В связи со значительными различиями субъектов - исполнителей (подтверждаемыми повторными измерениями) оказывается предпочтительным применение методов планирования эксперимента.
Влияние опыта и знаний субъекта с трудом поддается оценке. Не обнаружено четкой зависимости между стажем работы программиста >и оценками его производительности. Более явно прослеживается зависимость производительности труда ^т способностей конкретных исполнителей (см. разд. 1.6).
Задача получения надежной информации относительно того, что же делают программисты в процессе работы, является ключевой при анализе влияния поведенческого фактора на процесс создания программного обеспечения. Некоторые методы получения такой информации рассматриваются ниже. 1.1.1. Самоанализ и протокольный анализ
Простейшим методом получения информации о процессе программирования является так называемый самоанализ, когда экспериментатор, или субъект исследования, указывает, ка-
Таблица 1.1. Приемы самоанализа
Видео - или звукозапись
«Размышления вслух» с записью или без нее Анализ «движений карандаша» Регистрация нажатий клавиш Регистрация используемых команд
Ким образом он изучает задачу, составляет « отлаживает проГрамму или использует программное обеспечение в процессе работы. К сожалению, самоанализ выполняется каждым исполнителем индивидуально, а выводы, сделанные одним человеком, часто не принимаются другими. Расхожие прибаутки о различных привязанностях и наклонностях программистов могут служить достаточным основанием, чтобы убедить подавляющую часть исследователей в невозможности применения результатов самоанализа к прогнозированию реакции большинства пользователей. В то же время самоанализ — наиболее продуктивный способ получения новых идей при индивидуальном творчестве программиста и спокойном размышлении над задачей (табл. 1.1). Интроспективные суждения, основанные на опыте разработки и использования систем, а также на опыте связанной с этим преподавательской работы, играют существенную роль в. появлении новых идей.
Интроспективные эксперименты могут проводиться путем опроса группы субъектов с целью получения оценок использования ими при разработке программ таких приемов, как структурированное расположение текста программы, организация комментариев, выбор мнемонических имен переменных, разработка блок-схем алгоритмов, применение методов модульного построения программ и отладочных средств. Такие целенаправленные исследования помогают понять некоторые стандартные приемы, используемые программистом при работе: выбор коротких «ли длинных имен переменных, меток или комментариев к операторам программы и имен модулей или программных комплексов. Как только удается описать стиль работы одного из программистов, становится возможным проверить, насколько полезны используемые им приемы и обучить им остальных исполнителей. Если же какой-либо из приемов становится общеупотребительным, опытные программисты начинают утверждать, что следовали ему неявно на протяжении десятилетий, но без четко сформулированного правила; в этом случае обсуждение теряет общность, а обучение затрудняется.
Вариантом самоанализа является метод протокольного анализа, когда экспериментатор или субъект имеет рукописную или отпечатанную запись осознанного процесса обдумывания задачи. Непрерывная запись процесса или расшифровка стенограммы может быть просмотрена на досуге или проанализирована для подсчета частоты появления отдельных слов, установления первого и последнего вхождения определенного слова или схем поведения и групп таких схем. В работе [43] обсуждаются способы применения этого метода, называемого автором «размышлением вслух».
Автор работы [82] опубликовал некоторые протоколы, связанные с решением нескольких известных задач (например, задачи о девяти ферзях), вместе с интересными наблюдениями и гипотезами. С целью построения модели процесса познания при разработке программного обеспечения выполнен экстенсивный анализ протоколов составления программ [14] при использовании возможностей манипуляции строками текста на ЭВМ. Для прослеживания процесса разработки программ ■ квалифицированным программистом и программ истом - новичком использован метод протокольного анализа [1]. Авторы работы [34] воспользовались методом «размышления вслух» для изучения процесса познания в программировании.
Самоанализ приемлем, если в качестве субъекта выбран способный мыслящий программист; получаемые в этом случае наблюдения представляют определенный интерес. Отсутствуют, однако, какие-либо гарантии того, что другие программисты будут вести работу аналогично или что тот же самый субъект будет действовать подобным образом завтра. Анализ протоколов применительно к большому числу субъектов исследования затруднителен, требует значительных временных затрат и потому расточителен.