|
Оправдывает ли она себя? Сегодня многие программные проекты используют методы, рассматриваемые в этой главе. Поступают сообщения о больших успехах, достигнутых в разработке ^больших, не содержащих ошибок программ. Кроме того, многие специалисты, освоившие методы структурного программирования, сообщают о качественном скачке производительности создания -программ.
При разработке двух успешных проектов были объединены все ■методы структурного программирования и создана так называемая бригада главного программиста (БГП). Структура такой бригады впервые описана Дж. Эроном1*. Первый проект, выполненный тю методу БГП, назывался Super-Programmer Project. Соединение методов структурного программирования с новой организацией талантов дало возможность создавать программы, насчитывающие до 50000 команд, в пять раз быстрее, чем обычно, и почти без
1,) -Ашп J. X),, Software Engineering Techniques, Ed. by Buxton, Randell.
ошибок. После такого успеха организация БГП была усовершенствована в проекте The New York Times. Этот проект был предназначен для создания информационного банка для газеты "Нью-Йорк тайме". Работа заняла 22 мес, на создание проекта было затрачено более 11 человёко-лет. Результатом явилось написание более 83 ООО строк программы.
Система обработки файлов успешно прошла недельное приемное тестирование, и только по истечении 20 мес была обнаружена первая ошибка. В первые 13 мес работы только одна программная ошибка привела к сбою в системе. Программисты системы выдавали в процессе ее создания около 10 000 строк исходной программы и одну ошибку за один человеко-год. Главным программистом обоих проектов был X. Миле. Если вы хотите более подробно изучить проект, обратитесь к работам [3, 4].
Эта ситуация противоположна той, которая имела место, когда проектировалась операционная система OS 360. Система OS 360 разрабатывалась на год дольше намеченного срока, за время создания в ней было обнаружено 1000 ошибок даже после того, как был создан 21 вариант этой системы. Поскольку в OS 360 было так много неполадок и при разработке других больших проектов были подобные затруднения, некоторые группы, создававшие эти проекты, начали анализировать и изучать, что же в действительности делали программисты. Поразительный факт, обнаруженный при анализе нескольких проектов, состоял в том, что в этих больших программных проектах средняя скорость получения отлаженных программ составляла 5—10 команд за человеко-день. Очевидно, это не означает, что программист за весь день закодировал только 5—10 команд. Ведь тогда возникает естественный вопрос: что же он делал оставшуюся часть дня? (Читателям, интересующимся этой проблемой, следует обратиться к книге Брукса, ссылка на которую дана на стр. 62). К сожалению, большая часть времени в проектах значительного объема тратится на связи, переписи программ, тестирование и отладку. И задача состоит в том, чтобы сразу получить правильную программу, так как отладка, очевидно, слишком дорого стоит.
Ядро бригады программистов составляют главный программист, его помощник и библиотекарь программ. Главный программист решает, когда и сколько дополнительных программистов может понадобиться. Если в брагаду нужно включить много программистов, возможно, следует предусмотреть должность служащего, который займется административными, финансовыми и правовыми вопросами, чтобы главный программист мог сосредоточиться только на техническом руководстве. Очень важно, чтобы основная задача главного программиста состояла именно в технической разработке программ.
2.17.1. ОБЯЗАННОСТИ ЧЛЕНОВ БРИГАДЫ
Основная обязанность главного программиста заключается в разработке и составлении программ, и все члены бригады должны сообщать о ходе своей работы непосредственно ему. Главный программист разрабатывает и программирует основные, критические сегменты системы программ и поручает работу над другими сегментами членам бригады. Как только разработка этих сегментов закончена и они включены в систему, главный программист проверяет сегменты, чтобы убедиться в том, что они работают правильно и соответствуют стандартам оформления и структурного программирования. Главный программист принимает все окончательные решения и отвечает за успех проекта.
Помощник главного программиста не уступает по мастерству руководителю и помогает ему в разработке программ. Необходимо участие помощника на каждом уровне работы, так как он должен быть в состоянии осуществить руководство проектом, если это потребуется. В обязанности помощника главного программиста может также входить разработка стратегии и тактики, которых следует придерживаться при создании программ проекта. Это позволяет главному программисту и его помощнику обсуждать основную структуру и проектирование задачи. В то время как главный программист программирует основные критические сегменты, его помощник может готовить данные для тестирования. Славный программист и его помощник проверяют программы друг друга, а также программы, составленные другими членами бригады. Последние в свою очередь читают и разбирают программы, написанные главным программистом, чтобы составить подыгрывающие программы. При такой организации работы по крайней мере два программиста полностью разберут каждую строку разрабатываемой программы.
Библиотекарь программ хранит все записи проекта в библиотеке поддержки разработки (которая описана ниже). В библиотеке хранятся записи, показывающие текущее состояние программ и тестирования. Если в систему добавлены новые или модифицированные модули, библиотекарь поместит новые листинги в подшивку программ и отметит новое текущее состояние системы. Библиотекарь отвечает за хранение всех записей, прогоны программ с тестовыми данными и замену старых подыгрывающих модулей или сегментов новыми. Хотя его значение заключается в том, чтобы другие программисты меньше занимались канцелярской работой, библиотекаря нельзя считать вспомогательным звеном бригады — он ее полноправный член.
Трудно определить положение библиотекаря. Мастерство требуется не только программистам. Нужен кто-то, умеющий взаимодействовать с машиной, инициируя действия системы и обновляя файлы данных. Кроме того, библиотекарь должен справляться с такими секретарскими обязанностями, как типовая документация. Поэтому часто на эту должность назначают человека, владеющего навыками секретарской работы, а затем его обучают необходимой работе на машине. Назначение библиотекаря — выполнение большей части канцелярской работы, входящей в обязанности программистов, что позволяет более эффективно использовать последних. Эта несложная помощь значительно повышает производительность труда бригады.
2.17.2. ДРУГИЕ ЧЛЕНЫ БРИГАДЫ
В зависимости от размера и типа создаваемой системы по мере развития разработки в бригаду программистов включают дополнительных сотрудников. Так как главный программист является основным разработчиком системы, он начинает выполнять свои обязанности раньше всех. Несколько позже приступают к работе два других основных сотрудника — помощник главного программиста и библиотекарь. Однако, если проект большой и необходимы специальные знания по применению аппаратных средств или программного обеспечения, в бригаду вводят дополнительных сотрудников. Как правило, в бригаде не должно быть более семи человек.
Большие программы являются очень сложными структурами. С созданием БГП опытных специалистов используют таким образом, чтобы они принесли максимальную пользу. Использование опытных людей в детальном кодировании программ необходимо при работе с современной операционной системой. Язык управления заданиями, методы доступа к данным, средства системного программирования и языки высокого уровня настолько сложны, что необходимо, насколько это возможно, использовать квалифицированных специалистов при кодировании критических участков проекта. Современное программное обеспечение так сложно и обширно, что для его успешного применения требуются его тщательное изучение и некоторый опыт.
Бригадный подход дает много преимуществ. Во-первых, менее квалифицированные программисты получают возможность участвовать в больших проектах и наблюдать разработку всего проекта. Сотрудничество с квалифицированными специалистами — тремя основными членами бригады — позволяет молодым сотрудни-кам овладеть профессиональными и техническими навыками. Все выполненные работы проверяются опытными программистами. Кроме того, так как молодые члены бригады будут читать главную программу, она будет тщательно проверена. Таким образом, программирование переходит от индивидуального умения к коллективному сотрудничеству, когда каждый анализирует успехи и ошибки как свои собственные, так и других. Среда, в которую попадают молодые сотрудники, способствует овладению профессиональным мастерством и дальнейшему продвижению.
Дж. Вейнберг^ высказывает мысль, что коллективное программирование приведет к разработке лучших программ. Коллективное программирование означает, что все программы являются общим достоянием и проверяются другими членами бригады. Бригадный метод работы обеспечивает высокую степень контроля. Библиотекарь отвечает за получение всех машинных распечаток, хороших и плохих, и за подшивку их в библиотеку поддержки системы, где они становятся частью общего протокола. В отличие от такого метода работы при небригадном программировании плохо составленные программы выбрасывают в мусорную корзину. Это владение всеми программными данными и результатами работы на машине как общественным достоянием, а не личной собственностью отдельных программистов приводит к принципу обезличивания программирования.
2.17.3. НЕКОТОРЫЕ РЕКОМЕНДАЦИИ ПО БРИГАДНОМУ ПРОГРАММИРОВАНИЮ
Очень важно, чтобы главный программист располагал временем и соответствующими полномочиями для осуществления технического руководства проектом. Главные обязанности главного программиста заключаются в следующем:
1) в техническом руководстве — наблюдении за техническим аспектом разработки проекта;
2) в руководстве персоналом — контроле за отчетностью людей и
3) в соблюдении условий контракта — регулировании отношений с заказчиками.
Наиболее важной для успешной разработки проекта является исполнение первой обязанности. Если количество лиц, участвующих в создании системы, больше семи, вопросы взаимоотношения людей отнимают у главного программиста много времени. Этой ситуации можно избежать, либо ограничив число сотрудников, либо введя должность помощника по административно-финансовым вопросам. Если число людей более семи, можно, кроме того, сформировать две бригады. Аналогично этому, если отношения с заказчиком отнимают слишком много времени, следует ввести должность управляющего.
Иногда помощник главного программиста становится вторым лидером. Такой ситуации следует избегать — лидер должен быть один. Если помощник так же опытен, как главный программист, то в следующем проекте можно поменять их ролями. Очень важно, чтобы главный программист имел доверительные отношения со своим помощником, чтобы все проблемы можно было обсуждать в атмосфере взаимного доброжелательства. Существенно также, чтобы у главного программиста была возможность отказаться от помощника, если сложившиеся у них отношения тормозят развитие проекта.
2.17.4. ВОЗМОЖНЫЕ ТРУДНОСТИ
Не вполне ясно, можно ли применять организацию БГП при создании очень больших проектов. По-видимому, БГП имеет смысл использовать при разработке проектов средних размеров, когда один человек в состоянии охватить весь проект. Но если мы рассматриваем проект создания системы, подобной ОБ 360, стоившей 50 млн. долл. и занявшей 5000 человеко-лет, становится ясно, что один программист не может контролировать разработку всего проекта. В этом случае можно использовать уровни БГП, но если количество последних велико и если они должны взаимодействовать друг с другом, эффективность работы может понизиться. Бригады программистов работали успешно над проектами, которые были более чем на два порядка меньше по величине, чем ОБ 360. Методы, хорошо себя проявившие в проектах одного размера, не гарантируют получения хороших результатов при разработке проектов, в сто раз больших по объему. Эта трудная задача для создателей программного обеспечения, но такая же проблема стоит и во многих других областях. С другой стороны, старые методы организации больших программных проектов приводили к таким плохим результатам, что сомнительно, чтобы метод бригадного программирования не дал какого-либо улучшения.
Неясно также, насколько хорошо будут работать БГП при менее благоприятных условиях, чем в этих двух часто цитируемых успешных примерах. Эти два примера не типичны по некоторым причинам. Во-первых, руководитель программистов исключительно квалифицированный специалист. Д-р X. Миле, сотрудник фирмы 1ВМ, имеет большой опыт работы на машинах. Производительность труда программистов может отличаться в 25 раз, поэтому мастерство каждого программиста может стать решающим фактором в успешной разработке проектов. Во-вторых, БГП поддерживалась колоссальными ресурсами 1ВМ. Другие БГП не будут иметь таких преимуществ. В-третьих, организация БГП может не представлять интереса для некоторых лиц или организаций.
Итак^ главному программисту необходимо уметь управлять бригадой, рационально расходовать свое время и обеспечивать техническое представительство перед заказчиком. Он должен вести проект, а также критически оценивать работу других сотрудников бригады. Специалистов, обладающих таким мастерством, найти нелегко. Однако полученные результаты весьма впечатляющи и вызывают большой интерес.
⇐2.16. Кодирование сверху вниз || Оглавление || 2.18. Библиотека поддержки разработки⇒
|