Время — деньги. Создание команды разработчиков программного обеспечения - Эд Салливан
Шрифт:
Интервал:
Закладка:
Задачи — это основные строительные блоки плана, они являются представлением конкретной работы, которую нужно сделать. В общем верно, что легче следить за ходом выполнения небольших задач. Кратко и точно сформулированные задачи позволяют быстро обнаружить отставание от плана. Если задачу нельзя завершите за 1-2 недели, её следует разбить на две или больше меньших задач. Исполнение плана, составленного из долгосрочных задач, труднее контролировать.
При составлении списка задач обязательно нужно учитывать их взаимосвязи в рамках проекта. Например, зная, как одни задачи зависят от других, можно расположить их в нужной последовательности, причём ключевые задачи всегда должны завершаться в первую очередь. Нужно выяснить, сколько времени займёт каждая задача. Это можно сделать, оценив время, необходимое для выполнения некоторой задачи (т.е. выдвинув обоснованное предположение о сроках). Поскольку для формулирования требований, конструирования интерфейса и реализации выбранной технологии сделано уже довольно много, должно быть накоплено достаточно информации, чтобы точно и без особых затруднений оценить срок для выполнения той или иной задачи. Если точно оценить время исполнения ключевых задач невозможно, вы, вероятно, провели недостаточно экспериментов, исследований и работы с прототипом.
Оценка должна учитывать всю работу, необходимую для выполнения задачи. Например, специалисты по ПО должны оценить суммарное время конструирования низкоуровневой структуры, а также реализации, отладки и блочного тестирования программы. Специалисты по обучению пользователей должны оценить, какое время потребуется на написание, рецензирование, редактирование и правку их материалов. Хотя каждый участник команды самостоятельно оценивает срок завершения своей части работы, его оценку всегда должен проверить ведущий специалист в соответствующей области. На основе этих оценок рассчитывается время реализации проекта, поэтому следует быть уверенным в цифрах.
Со временем вы увидите, что ваши оценки становятся все точнее, особенно при работе над аналогичным продуктом с использованием те же самых технологий. Обязательно проанализируйте задачи, на которые ушло значительно больше времени, чем ожидалось. чтобы понять, почему в оценку вкралась ошибка.
Полнота планаНе совершайте ошибку, планируя лишь разработку самой программы: план должны отражать все аспекты проекта.
• Разработка
Часть плана, регламентирующая разработку ПО, должна отводить достаточно времени на разработку, блочное тестирование и отладку всех функций программы. Команде разработчиков следует выделить дополнительное время на анализ результатов работы тестировщиков и материалов, подготовленных группой по обучению пользователей. Не исключено, что разработчикам также понадобиться время для анализа результатов специалистов по инженерной психологии и технологов.
• Тестирование
Этот раздел должен давать достаточно времени для создания планов и сценариев испытаний, а также для тестирования самой инфраструктуры. План испытаний должен выделять добавочное время на тестирование ПО после окончания каждого промежуточного этапа работы.
• Обучение пользователей
Здесь должно даваться достаточно времени на создание документации, электронной справки и учебника по работе с программой. На редактирование потребуется дополнительное время, которое также нужно учесть. И не забывайте проводить разбор технических особенностей ПК с участниками команды.
• Работа инженерных психологов
Отведённого здесь времени должно быть достаточно для разработки детальной конструкции пользовательского интерфейса и его оценки. Выделите также время на оценку графических материалов продукта, внутренние и внешние испытания пользовательского интерфейса, и проверку документации. Кроме того, в плане должно быть время для проверки первоначального впечатления от продукта.
• Работа над выпуском
Времени, запланированного в этом разделе, должно хватить для создания системы сборки ПО, разработки установочной процедуры, для конфигурирования и сопровождения системы управления исходным текстом.
• Зависимость от внешних факторов
План должен в полной мере учитывать возможную зависимость проекта от внешних факторов и предусматривать выделение дополнительного времени в случае необходимости. К таким факторам относятся поставки и использование ПО от сторонних разработчиков, доступность оборудования и даже расширение штата или получение поддержки от других групп.
Параллельная разработкаОдна из основных идей этой книги может быть сформулирована так: параллельная реализация всех аспектов проекта повышает эффективность цикла разработки. Для её воплощения прекрасно подходит план проекта. При этом целью является реализация функций ПО путём интеграции различных задач по разработке, тестированию, обучению пользователей, инженерной психологии и работе над выпуском ПО.
Рассмотрим пример. Разработчики должны реализовать функции, соответствующие командам «Создать клиента», «Изменить клиента», «Удалить клиента». Как только эти функции станут готовы и появятся в ежедневной сборке ПО, команда тестировщиков должна испытать их и дать отзыв о качестве реализации этих функций. В то же время группа специалистов по инженерной психологии должна оценить пользовательский интерфейс с точки зрения его соответствия стандартам эргономики, практичности и задачам разработки. Группа по обучению пользователей должна привести описание этих функций к окончательному виду и дать отзыв о качестве их реализации и интеграции.
У параллельной разработки масса преимуществ. Во-первых, она концентрирует усилия всей команды, что позволяет как можно скорее завершить разработку набора функций. Это создаёт у участников команды ощущение срочной целенаправленной работы и (я на это надеюсь) успеха проекта уже на ранних стадиях его реализации. Кроме того, она позволяет сохранять синхронность работы команды в течение всего процесса разработки, так как все её члены обсуждают и решают одни и те же проблемы. Во-вторых, поскольку вся команда сосредоточена на разработке одних и тех же функций, можно будет намного раньше понять, действительно ли завершена функция или пока написан только её исходный текст, страдающий от недостатка качества интеграции и мало пригодный к использованию. Задача в том, чтобы заставить команду как можно скорее создавать надёжно работающие функции, чтобы не возвращаться к проблемам, давно считавшимся решёнными. Не правда ли, было бы очень неприятно получить сюрприз в виде плохого качества или недостатков в реализации функций, считавшихся законченными уже несколько недель, или месяцев тому назад.
Баланс ширины и глубины охвата в работе над проектомСледует так упорядочивать задачи при создании плана, чтобы группы работали по всему фронту проекта, а не над отдельными его частями. Короче, не ограничивайтесь реализацией какой-либо одной части системы, игнорируя остальные. Например, работая над приложением для размещения заказов через Web, не составляйте план так, чтобы сначала был разработан пользовательский интерфейс, затем реализована прикладная логика, и лишь потом — весь код для работы с базой данных. Даже при наличии детальных спецификаций структуры, поочерёдное решение всех задач обернётся кошмаром при их интеграции, поэтому надо работать над всеми частями системы одновременно. Сосредоточьтесь на решении задачи, которая позволит ввести простой заказ, сохранить его и вывести подтверждение. Такой подход позволит сразу создать комплексное решение, пригодное для тестирования и объединяющее все необходимые программные подсистемы проекта.
Контекст функцийЧасто в ответ на вопрос о планах от разработчика можно услышать такое: «Сначала нужно обновить менеджер ресурсов поддержкой 32-разрядных идентификаторов, потом изменить алгоритм анализа индекса PRODUCT ID, чтобы разрешить дублирование записей, а затем переписать обработчик ошибок, чтобы поддерживалась многопоточностъ». Каждый из этих пунктов вполне допустим, как элемент работы программиста, однако следует удостовериться, что все они находятся в контексте функций программы или не выходят за рамки её требований. В контексте некоторой функции задачу разработчика можно сформулировать, например, так: «организовать поддержку печати из диалогового окна ввода заказа» или «обеспечить возможность ввода нескольких заказов одновременно». Более узкая сосредоточенность также полезна для других разработчиков команды, поскольку им важно знать, когда некоторые функции станут доступны, а не срок завершения задач, необходимых для реализации этих функций. Когда план чётко определяет срок завершения всех функций или требований, остальные участники команды могут быть уверены, что их работа завершится в параллели с другими задачами.