Специфика создания программного продукта
Например, строители строят дома, пусть разные: многоэтажные, отдельные коттеджи, офисные здания и пр. – однако, весь этот спектр вполне может охватить одна компания. Но все это дома. Строительной компании не приходится строить летающую тарелку, гиперболоид инженера Гарина, луноход, систему мгновенной телепортации и пр. А разработчики ПО, во многом, находятся именно в таком положении.
Велико разнообразие систем, которые создает одна компания, одна команда. Хотя сейчас и намечаются тенденции к специализации рынка разработки ПО, однако, причуды мировой экономики и многие другие причины приводят к тому, что строго специализированных компаний не так много, как хотелось бы. Многие области испытывают большой дефицит отдельных программистов и целых коллективов и компаний, хорошо разбирающихся в их специфике. Примером такой области может служить телевидение, где о данной проблеме открыто говорят на заседаниях различных международных сообществ.
Кроме того, ПО продолжает проникать во все новые и новые области человеческой деятельности, и сформулировать адекватные требования в этом случае вообще оказывается супертрудной задачей.
Но даже если речь идет об одной, определенной области, то процент новых, уникальных черт систем, принадлежащих этой области, высок: по сочетанию пользовательских характеристик, по особенностям среды исполнения и требованиям к интеграции, по распределенности информации о требованиях среди работников компании-заказчика. Все это несет на себе очень большой отпечаток индивидуальности заказчика – персональной или его компании, – сильно связано со спецификой его бизнеса, используемого в этой области оборудования.
Кроме того, существуют трудности в понимании между заказчиком и программистами, а еще – в изменчивости ПО (требования имеют тенденцию меняться в ходе разработки).
В итоге, далеко не очевидно, что та система, которую хочет заказчик, вообще может быть сделана. Трудно найти черную кошку в темной комнате, особенно если ее там нет. Или то, как поняли и воплотили задачу разработчики, окажется удобным, востребованным на рынке.
Ошибки и разночтения, которые возникают при выявлении требований к системе, оказываются одними из самых дорогих. Требования – это то исходное понимание задачи разработчиками, которое является основой всей разработки.
Несколько слов о трудности взаимопонимания заказчика и разработчиков. Здесь сказывается большой разрыв между программистами и другими людьми. Во-первых, потому, что чтобы хорошо разобраться, какой должна быть система автоматизации больницы и система поддержки химических экспериментов – надо поработать в соответствующей области достаточное время. Или как-то иным способом научиться видеть проблемы данной предметной области изнутри. Во-вторых, сказывается специфичность программирования как сферы деятельности. Для большинства пользователей и заказчиков крайне не просто сформулировать точное знание, которое необходимо программистам. На вопрос, сколько типов анализов существует в вашей лаборатории, доктор, подумав, отвечает - 43. И уже потом, случайно, программист уточнил, а нет ли других типов? Конечно, есть, ответил доктор, только они случаются редко и могут быть в некотором смысле, какими угодно. В первый же раз он назвал лишь типовые. Но, конечно же, информационная система должна хранить информацию обо всех анализах, проведенных в лаборатории….
Теперь чуть подробнее об изменчивости ПО и ее причинах.
- Меняется ситуация на рынке, для которого предназначалась система или требования к системе ползут из-за быстро сменяющихся перспектив продажи еще неготовой системы.
- В ходе разработки возникают проблемы и трудности, в силу которых итоговая функциональность меняется (видоизменяется, урезается).
- Заказчик может менять свое собственное видение системы: то ли он лучше понимает, что же ему на самом деле надо, то ли выясняется, что он что-то упустил с самого начала, то ли выясняется, что разработчики его не так поняли. В общем, всякое бывает, важно лишь, что теперь заказчик определенно хочет иного.
Нечего и говорить, что изменчивость требований по ходу разработки очень болезненно сказывается на продукте. Авторы сталкивались, например, с такой ситуацией, что еще не созданную систему отдел продаж начинает активно продавать, в силу чего поступает огромный поток дополнительных требований. Все их реализовать в полном объеме не удается, в итоге система оказывается набором демо-функциональности….