5.4 «Достаточно хорошее» программное обеспечение
5.4 «Достаточно хорошее» программное обеспечение
Определение приоритетов требований, обсуждавшееся выше, может быть одним из способов, помогающих безнадёжному проекту двигаться в «разумном» направлении. Для достижения успеха вовсе не обязательно реализовывать все требования; будет «достаточно хорошо», если мы сможем реализовать требования, которые «необходимо выполнить», и приемлемое количество требований, которые «следует выполнить».
Существует, однако, ещё один аспект в разработке ПО, порождающий трудности в безнадёжных проектах: неявно подразумеваемое требование достижения идеального качества. Обычно оно выражается в терминах количества дефектов (ошибок), но может быть также выражено в терминах переносимости, независимости от платформы, гибкости, сопровождаемости и других «стей». Даже в «нормальных» проектах достаточно трудно удовлетворить всем этим требованиям, а в безнадёжных проектах сделать это просто невозможно. Вместо этого проектная команда должна придти к решению – и по возможности согласовать его с акционерами и заинтересованными лицами – относительно того, какое качество является достаточно хорошим.
Важность такого решения объясняется тем, что достижение абсолютного качества съедает все ресурсы проекта – особенно время. Если вы хотите разработать сертифицированную, не содержащую ошибок программу и математически доказать её корректность, на это потребуется время. Это может также потребовать более высокого уровня таланта и способностей, чем те, которыми располагает проектная команда. Кроме того, одному или более участникам команды придётся расходовать дополнительную энергию, следовательно, они не смогут работать над другими задачами. Короче говоря, выполнение таких требований, как надёжность, переносимость и сопровождаемость, невозможно без компромиссов, и это необходимо учитывать в процессе определения приоритетов требований.
Командам безнадёжных проектов приходится сталкиваться с такой неприятной реальностью лицом к лицу, поскольку альтернатива – «совершённое» ПО, которое не будет готово даже тогда, когда пройдут все мыслимые сроки. Лучше всего, когда команда с самого начала проекта настроена прагматично на создание достаточно хорошего ПО, однако, мой опыт, к сожалению, говорит о том, что многие обычные разработчики ПО соглашаются с понятием достаточно хорошего ПО только тогда, когда упираются в тупик – например, когда оказываются в кризисном положении за месяц или два до окончания проекта.
Вплоть до этого момента времени они выражают своё недовольство: «Как вам понравится, если мы будем использовать ваш „достаточно хороший“ подход применительно к ПО ядерного реактора или системы управления воздушным движением?» Разумеется, я отвечу, что мне это совсем не нравится; и, если кто-нибудь вздумает затеять безнадёжный проект для создания такого рода высоконадёжных приложений, тогда я просто перестану летать на самолётах и буду держаться как можно дальше от предприятий с ядерными реакторами. С другой стороны, нам обычно и не приходится сталкиваться с безнадёжными проектами такого рода; скорее, это может быть кадровая система на ядерном предприятии или система резервирования авиабилетов. Это, конечно, не означает, что кадровые системы и системы резервирования авиабилетов должны работать со сбоями, однако все же непосредственные последствия этих сбоев будут не столь серьёзны.
В любом случае, совершённая надёжность, сопровождаемость, переносимость и т.д. не являются необходимыми, практичными или даже желательными в большинстве безнадёжных проектов. В самом деле, достичь такого совершенства невозможно даже в «нормальных» проектах, хотя в этом случае мы можем позволить себе установить планку своих стандартов гораздо выше, поскольку не связаны такими жёсткими ограничениями на время, бюджет и людские ресурсы. Что же касается безнадёжных проектов, то пользователям в действительности нужна система, которая достаточно дешева, достаточно производительна, обладает достаточными возможностями, достаточно устойчива и будет готова достаточно скоро – вот в чем заключается их определение «достаточно хорошего» ПО.
Почему же нам не удаётся создать «достаточно хорошее» ПО? Это обычно объясняется совокупностью следующих причин:
7) Мы стремимся определять качество только в терминах дефектов, не задумываясь о других его аспектах – которые, с точки зрения пользователя, включают, например, готовность к определённой дате.
8) Мы предполагаем, что малое количество дефектов равносильно лучшему качеству, и полагаем, что пользователь всегда предпочитает такое качество – хотя существуют обстоятельства, когда пользователь готов пойти на компромисс и примириться с некоторыми ошибками в обмен на более скорое завершение работы или возможность продукта работать на различных программных/технических платформах и др.
9) Мы стремимся определить требования к качеству (дефектам) один раз, в самом начале проекта, и зафиксировать их, хотя обстоятельства могут измениться в течение проекта не один раз.
10) Мы так долго твердили, что процессы являются критически важными, что при этом зачастую забываем об их «нейтральности» – дурак, вооружённый процессами и средствами, все равно останется дураком. Невозможно обеспечить качество, если просто слепо следовать всем деталям методологии структурного анализа или рекомендаций SEI-CMM.
11) Мы рассматриваем обеспечение качества как процесс, укладывающийся в жёсткую схему, заданную в начале проекта раз и навсегда (или, что ещё хуже, для всех проектов во всей компании).
12) Мы недооцениваем нелинейный характер зависимостей между такими ключевыми параметрами проекта, как численность персонала, плановые сроки, бюджет и количество дефектов – все эти аспекты в безнадёжных проектах являются ключевыми.
13) Мы игнорируем динамику процессов: запаздывания, циклы обратной связи и т.д. Например, большое количество сверхурочной работы в течение данной недели может выразиться в повышении продуктивности и прогрессе в работе над проектом в целом; но, с другой стороны, оно может повлечь за собой большее количество ошибок на следующей неделе (о которых конечные пользователи и высшее руководство могут ничего и не узнать), которые снизят продуктивность работы (в терминах конечных результатов) и, может быть, даже отбросят проект назад.
14) Мы игнорируем такие факторы, как моральное состояние команды, адекватные условия для работы и др.
Каким же образом мы сможем создать «достаточно хорошее» ПО? Как отмечает James Bach [3], для этого требуется несколько вещей:
15) Утилитарная стратегия – искусство количественного анализа и максимизации чистого выигрыша в неопределённых ситуациях – обобщает идеи системного анализа, управления рисками, экономики, теории принятия решений, теории игр, теории управления и нечёткой логики.
16) Эволюционная стратегия – рассматриваемая не только по отношению к жизненному циклу проекта, но также к людям, процессам и ресурсам.
17) Героические команды – не Могучие Гениальные Программисты, а обычные умелые специалисты, способные к эффективному сотрудничеству.
18) Динамическая инфраструктура – противоположность бюрократии и засилью политики. Высшее руководство уделяет необходимое внимание проектам, уделяет внимание положению на рынке, предупреждает и разрешает конфликты между проектами, и становится на сторону проекта в случае конфликта между ним и бюрократами.
19) Динамические процессы – процессы, поддерживающие работу в эволюционирующей среде. Динамический процесс, в свою очередь, является часть идентифицируемого мета-процесса и всегда может подвергаться изменениям.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Саженец 2. Компьютеры/Программное обеспечение (КП «A-»)
Саженец 2. Компьютеры/Программное обеспечение (КП «A-») Самая известная мне территория находится в области компьютеров и программного обеспечения, включая Интернет. Не удивительно, что Интернет оказался одной из самых торных дорог к миллионам. Я где-то слышал, что за
Программное обеспечение: то же
Программное обеспечение: то же Все программное обеспечение держите в определенном месте. Независимо от того, это загрузочный диск для нового оборудования или отдельные программы, храните их в одном месте. Конечно, их можно объединить с родственными подкатегориями
Программное обеспечение для управления проектами
Программное обеспечение для управления проектами Ориентированное на специалистов программное обеспечение для управления проектами под названием «Microsoft Project» представляет собой мощную программу, способную одновременно размещать и отслеживать задачи, а также
Программное обеспечение распознавания речи
Программное обеспечение распознавания речи С помощью программного пакета распознавания речи вы можете надиктовывать материал в микрофон, а компьютер будет преобразовывать вашу речь в текст. В настоящее время в программном обеспечении такого рода недостатка не
Программное обеспечение презентаций
Программное обеспечение презентаций Если вам часто приходится создавать презентации, то такие программные продукты, как «Microsoft Power Point» или «Corel Presentations» не только сэкономят вам время, но и значительно усилят производимый презентацией эффект. Освоение этих прикладных
Программное обеспечение настольной редакцианно-издательской системы
Программное обеспечение настольной редакцианно-издательской системы С дальнейшим развитием текстовых редакторов роль НРИС (Настольная редакционно-издательская система — Прим. пер.) значительно снизилась, но они продолжают находить применение там, где требуется
Приложение 3 Программное обеспечение для объемного планирования продаж и операций
Приложение 3 Программное обеспечение для объемного планирования продаж и операций Нам часто задают вопрос: «Какое программное обеспечение большинство компаний использует для объемного планирования продаж и операций?»Ответ простой: Excel или другие программы работы с
Оборудование и программное обеспечение
Оборудование и программное обеспечение Выбору оборудования для профессиональной кухни можно было бы посвятить отдельную книгу, потому здесь мы затронем лишь несколько принципиально важных элементов оснащения
Программное обеспечение – это не только автоматизация...
Программное обеспечение – это не только автоматизация... В настоящее время, наверное, уже и не встретишь бухгалтера, который выполнял бы свои обязанности без помощи компьютера и соответствующего программного обеспечения. Причем речь идет не о Windows, Microsoft Office, Internet Explorer и
7.9.1. Что включает в себя программное обеспечение
7.9.1. Что включает в себя программное обеспечение Всё программное обеспечение можно разделить на:? бэк-офис,? фронт-офис,? специализированные программы и драйвера.Бэк-офис это собственно учётные программы. Они являются, безусловно, основным программным обеспечением. К ним
«Общественное программное обеспечение» культуры исполнения
«Общественное программное обеспечение» культуры исполнения Рэм. Сколько вы видели совещаний, где, казалось бы, все присутствующие согласны с предлагаемыми мероприятиями, но в результате так ничего и не происходит? На таких совещаниях не ведется здоровой дискуссии,
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Существует огромный, почти сбивающий с толку выбор пакетов прикладных программ, обеспечивающих хранение данных и создание отчетов. Компании, производящие программное обеспечение, постоянно изменяют и развивают свои продукты и между делом
Программное обеспечение
Программное обеспечение Мы отобразили сети первого, второго и третьего уровней для отобранных фирм, используя пакет анализа сети UCINET[91]. Для визуализации этих сетей мы использовали программу визуализации NodeXL[92]. Когда сети были слишком велики, особенно когда дело дошло
Глава 14 Программное обеспечение
Глава 14 Программное обеспечение Существует огромное количество компьютерных программ, предназначенных для проектирования интерьеров. Некоторые из них универсальны и позволяют сделать весь проект – и чертежи, и визуализации, и спецификации, – а другие имеют более