курсовая работа. Учебное пособие по дисциплине технология разработки программного обеспечения специальность Программирование в компьютерных системах
![]()
|
Глава 19. Коллективная разработка ПО 1. Особенности больших программных проектов Можно выделить 12 свойств или характеристик ПИ, оказывающих основное влияние на процесс его создания: функция, размер, эффективность, практичность, устойчивость к сбоям аппаратуры (восстанавливаемость), корректность (правильность), график разработки (ограниченное время), людские ресурсы, материальные ресурсы, в том числе инструментальные средства, стоимость, архитектура, документация. Рассмотрим каждое из этих свойств подробно. То, что ПО должно выполнять определенную функцию в соответствии со своими спецификациями, означает, что в процессе его разработки должны быть предусмотрены операции, удостоверяющие, что разрабатываемое ПИ будет выполнять именно ту функцию, которая требуется заказчику, а не какую-нибудь иную функцию. Необходимо также предусмотреть и разработать методы и процедуры, демонстрирующие заказчику, что разработанное ПИ соответствует своему функциональному назначению. Эффективность использования ресурсов ЭВМ является также одной из важнейших характеристик ПО и не только с позиции экономики. Очень часто разрабатываемое ПО является частью некоторой системы обработки данных, в свою очередь являющейся подсистемой некоторой технической или коммерческой системы. В этом случае требования эффективности ПИ предполагают не только оптимальное использование вычислительных ресурсов, но и эффективность методов, реализованных данным ПО. Практичность или легкость использования пользователем представляет собой одно из главных качеств, характеризующих процесс эксплуатации ПО. Любая программа должна сохранять работоспособность в случае сбоев аппаратуры или искажения входных данных. Особенно это свойство имеет существенное значение для программно-аппаратного обеспечения и систем реального времени. Как обеспечить в ПО устойчивость к сбоям аппаратуры,— специальными программными средствами или различными механизмами ее перезапуска — вот, пожалуй, один из основных вопросов, стоящих перед разработчиком ПИ при решении проблемы устойчивости. Вероятность того, что в больших программных проектах никакое, даже исчерпывающее тестирование, не может обнаружить всех ошибок, достаточно велика. Даже верифицированная программа может содержать ошибки, если они имеются в ее спецификации. Все это говорит о том, что проблема обеспечения корректности (правильности) ПО может быть разрешена в значительной степени технологическими средствами, т. е. должна быть объектом тщательного проектирования. Выступая составной частью некоторой системы обработки данных, создание которой ограничено некоторыми сроками, ПО также проектируется в условиях ограниченного времени. Как справедливо отмечают многие разработчики больших программных систем, время является тем ресурсом, которого всегда не хватает. Именно время, как правило, представляет собой определяющий критерий, доминирующий практически над всеми другими характеристиками ПИ, так как приходится выдерживать график разработки всей системы, в которую ПИ входит как составная часть. Каждое ПО создается некоторым коллективом программистов, работающих в течение определенного времени. Количество пресловутых человеко-месяцев, необходимых для разработки ПО, является сегодня, пожалуй, единственной и общепринятой характеристикой трудоемкости разработки ПО. Создание любого ПО невозможно без использования того, что называется инструментально-технологическим обеспечением разработки ПО. Таким образом, каждое ПО характеризуется не только трудовыми, но и материальными ресурсами, необходимыми для его создания. Одной из важнейших (и сегодня единственной) интегральной характеристикой ПИ является стоимость в денежном выражении. Разработка архитектуры ПО представляет собой ответственный этап, определяющий, в конечном счете, многие характеристики ПИ. Архитектурные свойства ПИ оказывают большое влияние на сам процесс разработки ПИ, однако дело тут не столько в выборе различных способов декомпозиций и модуляризации, сколько в возможности предусмотреть пути будущей модификации создаваемого ПИ. Документированность ПИ является, пожалуй, основной характеристикой, облегчающей сопровождение и модификацию ПИ. Даже из поверхностного анализа всех этих двенадцати характеристик видно, что воплотить любую из них в ПИ возможно только за счет ухудшения остальных, например, сжатые сроки разработки ПИ приводят, как правило, к неэффективным по быстродействию и неэкономным по памяти программам, малая, заниженная стоимость разработки, ухудшает практически все остальные показатели ПО и т. п. Все это показывает, что разработка ПИ представляет собой процесс постоянного разрешения всевозможных конфликтных ситуаций при попытках воплотить в ПО, если не все сразу, то, по крайней мере, группу противоречивых характеристик одновременно. То, что при этом эффективность принимаемых решений во многом определяется целевой установкой, видно из поучительного эксперимента, суть которого состояла в следующем: пяти бригадам программистов было дано одно и то же задание, однако при этом были поставлены различные цели по достижению эффективности. После выполнения задания группой экспертов была проведена оценка выполненной работы. Безусловно, на основе этого примера нельзя делать выводы о том, какой цели следует придерживаться при разработке ПО. Задачей эксперимента было прежде всего показать, что, подчиняя процесс разработки ПИ достижению одного какого-нибудь критерия, мы обязательно ухудшим остальные характеристики ПИ. Каждую из множества целей, которые стоят перед разработчиком ПИ, можно отнести к одному из трех компонентов: программотехнике, человеческим факторам и управлению ресурсами. Сравнение эффективности работы бригад программистов по целям в решении задач
1. Оптимизировать затраты труда14 4 5 3 17 2. Оптимизировать длину программы 2 1 2 3 5 3 3. Оптимизировать объем требуемой памяти 5 2 1 4 4 6 4. Получить читабельную (ясную) программу 4 3 3 2 2 14 5. Добиться четкости выходных данных 3 5 5 1 1 15 ______________________________________________________________________________________________________ Если говорить о методологической стороне достижения перечисленных целей, то наиболее полно и подробно разработана программотехника, включающая в себя методы проектирования, программирования, тестирования и верификации программ, что же касается остальных компонентов, то они менее изучены, однако, в последнее время, благодаря бурной индустриализации программистской деятельности, интенсивно развиваются. 2. Коллективный характер разработки программного обеспечения. Бригада главного программиста Коллективный характер разработки ПИ вызван не только большим объемом и сложностью разрабатываемого ПО, но и потребностью создания высококачественного ПО, как правило, отчуждаемого от программиста-разработчика. В этом случае необходим контроль за методами, сроками и стоимостью разработки. Именно коллективный характер разработки программ и превращение последних в продукцию производственно-технического назначения привели, в конечном счете, к созданию индустрии программного обеспечения. Основной особенностью коллективного характера разработки ПИ является наличие определенной структуры такого коллектива, в котором каждый его член четко представляет свою роль и обязанности в рамках выполнения конкретного проекта, а также осведомлен о локальных и глобальных целях, поставленных перед данным проектом. Структура программистского коллектива предполагает существование руководителя проекта, т. е. лица, несущего полную ответственность за успешное завершение всего проекта. Однако прежде чем перейти к анализу структур коллективов, разрабатывающих крупномасштабные проекты, рассмотрим пример, обосновывающий структуру программистского коллектива на самом низком уровне иерархии. Пусть объем проектируемого ПИ оценивается в 50000 строк (исходных команд), а производительность одного программиста примем равной 5000 строк в год. Пусть, далее, срок разработки данного ПИ ограничен двумя годами. Тогда, очевидно, для создания такого ПИ достаточно пяти программистов. Однако, поскольку составные части ПИ (модули) взаимосвязаны, то при их создании программисты должны взаимодействовать между собой. Пусть время, затраченное на взаимодействие с каждым коллегой, обходится каждому программисту в 250 строк/год, тогда в соответствии со схемой их взаимодействия, представленной на рис. 1 а, производительность каждого программиста составляет только 4000 строк/год. Таким образом, для реализации проекта в 5000 строк в течение двух лет необходимо уже не пять, а восемь программистов, производительность каждого при этом составляет только 3250 строк/год. Так как для успешной работы такой группы необходим руководитель, то окончательно имеем группу из девяти человек, производительность каждого при этом будет составлять всего 3000 строк/год . Хотя приведенный пример и носит иллюстративный характер, так как производительность труда программистов, оцениваемая числом строк в единицу времени, по данным Дж. Фокса может различаться на 2 порядка, он, тем не менее, отражает суть проблемы, называемой «коммуникационным взрывом». В настоящее время существуют методы ограничения влияния коммуникационного взрыва и повышения производительности труда программистов. Одним из таких методов является организация работ в группе по принципу хирургической бригады — бригады главного программиста. Как правило, главный программист — это высококвалифицированный специалист с хорошими организаторскими способностями. Его производительность может в несколько раз превышать производительность остальных членов бригады. Возглавляя бригаду, он одновременно является и техническим руководителем проекта. В состав бригады могут входить также администратор, старший программист и библиотекарь. Поддерживая тесную связь с главным программистом, старший программист разрабатывает наиболее сложные компоненты ПИ, осуществляя при этом взаимодействие с остальными членами бригады. На рис. 1в приведена схема взаимодействия в бригаде главного программиста, состоящей из пяти человек. Так как и главный программист, и старший программист являются высококвалифицированными специалистами, производительность которых может значительно превышать 5000 строк/год, средняя производительность в такой бригаде также может превышать 5000 строк/год по сравнению с 4000 в предыдущем примере. Включение в бригаду администратора, занимающегося распределением времени, размещением исполнителей и другими административно-хозяйственными вопросами, не является обязательными и справедливо только при разработке больших программных проектов. ![]() Рис 1. Разработка программного обеспечения группой программистов: а— из 5 человек, б — из 9 человек, в — бригадой главного программиста из 5 человек Что касается оптимальной численности бригады главного программиста, то большинство специалистов единодушны в том, что число членов бригады должно быть равным 7±2. Как отмечалось выше, бригада главного программиста является ячейкой низшего уровня структуры программистского коллектива. Для разработки больших программных проектов одной бригады явно недостаточно, необходима более сложная организационная структура. Относительно небольшое число организационных принципов существенно отличает структуру разработки большого программного проекта от общепризнанной структуры промышленного производства.. Рассмотрим основные компоненты этой схемы более подробно. 1. Руководство определением требований. 2. Отдел или группа руководителя программного проекта (в некоторых организациях эта служба называется руководством заказа) следит за всеми экономическими, организационными и хозяйственными вопросами, в том числе за вопросами материально-технического обеспечения. 3. Непосредственно проектирование возглавляется главным архитектором проекта и его службой. Главный архитектор не заменяет и не подменяет руководителя проекта. Его функции ограничиваются научно-технической стороной разработки, т. е. наиболее творческой составляющей создания ПИ. 4.Отдел разработки ПО состоит из описанных выше бригад главного программиста, которые в случае необходимости могут группироваться по отдельным подсистемам или иным компонентам ПИ. Руководитель отдела обеспечивает оперативное управление всеми этими бригадами программистов. 5.Служба управления конфигурацией представляет собой коллегиальный орган, в который входят руководитель проекта, руководитель разработки, главный архитектор и руководитель требований к ПИ. Собираясь периодически на своих заседаниях, служба конфигурации обсуждает все предполагаемые изменения, результаты тестирования и т. п. Этим достигается полная информированность руководителей разработки ПИ о текущем состоянии проекта и всевозможных изменениях в будущем. 6. Группа или отдел качества (надежности) создается на самом раннем этапе разработки ПИ. Она является самостоятельным подразделением, чем обеспечивается большая объективность тестирования и оценки качества. ![]() Организационная структура разработки программного обеспечения Следует отметить, что решающее влияние на процесс проектирования и организацию коллективной работы программистов оказывает выбранная модель проектирования – модель быстрой разработки приложений (RAD), классический жизненный цикл, экстремальное программирование (ХР). Подробно эти модели представлены ранее, в главе, посвященной жизненному циклу программ, стратегиям и моделям конструирования программного обеспечения. 3. Психологические факторы при формировании программистских коллективов Любой общности людей присущ определенный психологический климат, который устанавливается внутри этой общности (группы, коллектива) в зависимости от характера взаимоотношений между людьми, господствующего настроения, удовлетворенности работой. От того, каков психологический климат, в сильной степени зависит эффективность труда, результаты трудовой деятельности. В свою очередь на психологический климат влияют личность руководителя, методы управления, традиции самого коллектива и т. д. Неблагоприятный психологический климат, сформировавшийся в результате недоучета психологических факторов при формировании коллектива, низкая культура управления приводят к служебным конфликтам. Последние резко снижают эффективность труда. На разрешение конфликтных ситуаций и после-конфликтные переживания затрачивается до 15% рабочего времени, снижается производительность труда. Особенно болезненно конфликтные ситуации отражаются на работе творческих коллективов, в том числе, и коллективов программистов. Психологические исследования убедительно показали, что отрицательные психологические факторы значительно чаще приводят к конфликтам, чем, например, профессиональная некомпетентность. Причинами конфликтов являются: в 52% случаев — неправильные действия руководителя; в 33% случаев — психологическая несовместимость сотрудников; в 15% случаев — профессиональная некомпетентность и другие недостатки подбора и расстановки кадров. Если же учесть, что под неправильными действиями по отношению к подчиненным понимаются невнимание к сотрудникам, неуместные публичные сообщения об их недостатках и промахах и т. д., в результате чего 40—50% подчиненных в течение 2—3 месяцев работают хуже; что не использование возможности публично заслуженно поощрить работника в 87% случаев приводит к тому, что этот работник не улучшает свою работу, т. е. не полностью реализуются его потенциальные возможности; а также учесть, что при подборе и расстановке кадров психологические аспекты также играют важную роль, то становится понятным, что примерно в 90% случаев причиной конфликтных ситуаций, существенно снижающих эффективность работы, является неучёт психологических факторов. Особенно это относится к общностям людей, характеризуемым высоким уровнем образованности и самосознания сотрудников, к которым относятся программистские коллективы. Изложенное составляет далеко не полный перечень примеров и аргументов, демонстрирующих необходимость учета психологических аспектов при формировании программистских коллективов и управления ими. Формирование производственной группы — процесс сложный. Основу его составляет анализ деятельности, которой будет заниматься группа. С этой целью изучается весь производственный цикл на предприятии, определяется место рассматриваемой группы в технологическом процессе, ее основные цели и задачи. Всю эту информацию можно получить благодаря изучению основной документации предприятия и её плановых заданий. Следующий этап после анализа деятельности группы - установление её организационной структуры. Она определяется величиной группы, разделением функций и организацией взаимосвязи между членами коллектива. Центральным звеном процессов установления организационной структуры коллектива является распределение обязанностей внутри группы, т. е. предоставление каждому члену коллектива такого положения в группе, которое более полно соответствовало бы его профессиональным возможностям, личностным обязанностям и выбранному им типу коммуникативного поведения. Профессионализм человека находится в тесной связи с его личностными особенностями. Психологические исследования показали, что эффективность деятельности у лиц с ярко выраженной подвижностью нервной системы и у тех, кто характеризуется инертностью нервных процессов, оказалась на одинаковом уровне в силу того, что «инертные» выработали определенный индивидуальный стиль деятельности, который позволял уделять большее внимание профилактике используемых средств, и это способствовало успешной деятельности, в то время как другие выдавали больше продукции благодаря высокой скорости в работе. Оптимальное сочетание профессионально значимых качеств характерно для сработанности производственных коллективов. Существенное влияние на сработанность коллектива, взаимную совместимость оказывают личностные качества работников. Установлено, что совместимость выступает как сходство одних черт партнеров и контраст других. При этом сходными чаще всего являются те характеристики, которые базируются на врожденных особенностях индивидов (например, обусловленные свойствами нервной системы), а обусловленные воспитанием (интересы, характер) — контрастны. В психологии разработано большое количество методик, выявляющих личностные особенности членов коллектива. Сопоставив их, можно судить о степени совместимости или несовместимости участников деятельности. | Данные по психофизиологической совместимости можно получить с помощью анкетных методик. Одной из таких методик, например, является «опросник темперамента» Яна Стрелляу, предназначенный для изучения свойств нервной системы на уровне деятельности. Определив тип темперамента человека, можно судить о его совместимости с людьми, характеризуемыми другими типами: «Холерики достаточно коммуникабельны, хотя и уступают в этом сангвиникам. Обычно стараются играть роль лидеров. Плохо уживаются с меланхоликами и другими холериками. Меланхолики склонны к уединению, а в реакциях общения напоминают формы коммуникативного поведения флегматиков, не стремятся к лидерству, более легко уживаются с флегматиками и сангвиниками» К анкетным методикам также относится «личностный опросник» Г. Айзенка , который определяет такие факторы личности, как интроверсия, экстраверсия и нейротизм. Опросник предполагает существование взаимосвязи между индивидуально-типологическими особенностями высшей нервной деятельности и свойствами личности, хотя эта зависимость и не является абсолютной. Вводя в опросник шкалу нейротизма, автор предложил разделение типов не только по экстраверсии — интроверсии, но и стабильности. Шкала стабильности получила название нейротизм. «Нейротизм — понятие, близкое к эмоциональной лабильности, неуравновешенности, тревожности. Чем ниже индекс нейротизма, тем личность более эмоционально устойчива, менее тревожна». Для экстраверсии, определяемой с помощью методики, характерно общительное, активное, оптимистическое, самоуверенное поведение; для интроверсии — поведение необщительное, пассивное, вдумчивое, спокойное. Человеку с высшим показателем неустойчивости свойственно поведение под влиянием настроения — вспыльчивое, в то время как устойчивым индивидам — спокойное, беззаботное, надежное, непринужденное. По данным исследования наибольшую устойчивость межличностной привлекательности испытывают пары: интроверт — интроверт и интроверт — экстраверт. Наиболее часто испытывают взаимное неприятие пары экстраверт — экстраверт. Межличностную привлекательность скорее будут испытывать лица, имеющие одинаково пониженную экстраверсию, нежели одинаково повышенную экстраверсию. В психологии в последнее время интенсивно разрабатываются активные методы обучения, направленные не только на повышение квалификации специалистов, но и на преодоление негативных сторон взаимоотношений, выявленных в исследовании социально-психологического климата производственных коллективов. Отличительной чертой активных методов является то, что обучение проводится в ситуациях, максимально приближенных к реальности. Весьма перспективным в отношении регулирования социально-психологического климата в группе и коллективе является применение видеотренинга. Использование этого метода может существенно облегчить решение следующих задач: адекватное распределение функций в группе в соответствии с индивидуальными особенностями и профессиональной специализацией; выработка умений, навыков совместной деятельности, организации эффективных взаимодействий; координирование совместной деятельности; решение проблемы совместной деятельности. Социально-психологический тренинг является ярким представителем активных методов обучения. Он формирует у человека способность управлять стилем своего поведения за счет осознания того, как он воспринимается окружающими, какие действия провоцируют их симпатию или антипатию и т. д. В тренинге используется ряд упражнений, одним из них является «слепое доверие». Обучаемая пара разбивается на поводыря и «слепого».Во время прогулки поводырь обеспечивает партнеру переживание самых разнообразных ситуаций. Затем партнеры меняются местами. Это упражнение дает возможность пережить собственную беспомощность, ответственность за безопасность другого. В тренинге воспроизводятся сложные ситуации человеческого взаимодействия, общения. Затем в групповой дискуссии выявляются допущенные ошибки и вырабатываются альтернативы. Вырабатывается умение ориентироваться в социально-психологических процессах в группе, выявляются барьеры, мешающие целостно проявлять себя во взаимодействиях. Отрабатываются навыки решения групповых задач, навыки активного слушания, эффективные способы решения конфликтных ситуаций. Тренинг можно сочетать с организационно-деятельностными играми, которые помогают выявить общую ситуацию в коллективе и возможности ее минимизации. Организационно-деятельностные игры помогают программировать деятельность коллектива в целом, прогнозировать его работу. Они весьма эффективны при решении различных профессиональных задач. И тренинг, и организационно-деятельностные игры не имеют определенного алгоритма. Организовать и провести эти формы работы могут лишь специалисты, которые в зависимости от целевой установки заказчика определяют программу игры или занятий по тренингу. Резюмируя изложенное, можно сделать вывод, что процесс формирования производственного коллектива и обеспечения эффективности его работы с учетом психологических факторов включает следующие этапы: анализ деятельности; формирование организационной структуры; стабилизация отношений. Приведенный обзор результатов различных исследований показывает, что вопросы эффективности групповой деятельности в настоящее время пока еще разработаны далеко не в полной мере: отсутствуют четкие рекомендации, касающиеся фактически всех составляющих эффективности для различных видов деятельности и различных условий; многие вопросы трактуются неоднозначно; нет четких оценочных критериев. Если говорить об оптимизации разработки программных изделий, повышения эффективности и, в частности, улучшения совместимости в коллективах разработчиков, следует отметить, что подобные задачи, по крайней мере, как это следует из исследования литературных источников, в полном объеме еще не решались. Это вызывает и определенный интерес к рассмотрению данной проблемы, и несомненные трудности. Намечая программу дальнейших работ, следует кратко остановиться на главных направлениях исследований. Исходным шагом, по-видимому, как и в любых исследованиях такого рода, должен быть психологический анализ деятельности групп программистов, предусматривающий выявление типов решаемых задач на разных этапах разработки программных изделий, анализ соотношения продуктивных и репродуктивных ее компонентов, профессионально важные качества специалистов, осуществляющих разработку, традиционные принципы формирования групп и их руководства, условия работы и пр. В дальнейшем, применяя уже существующие и, возможно, вновь разработанные методики исследования, необходимо провести в полном объеме изучение всех перечисленных выше аспектов в целях выдачи наиболее адекватных рекомендаций. Очевидно, в полном объеме психологические особенности формирования коллектива проявляются в такой модели конструировании, как экстремальное программирование (ХР - процесс), поскольку именно там предъявляются особые требования к профессионализму, доверию, способности работать в коллективе. (ХР-процесс описан достаточно полно в главе, посвященной стратегиям и моделям конструирования программного обеспечения). |