1.2. Безболезненность изменений
Как мог бы поступить начинающий программист, столкнувшийся с задачей оформления варианта? Положившись на свою память или же переписав текст старого варианта в записную книжку, он решительно вносит исправления, изгоняя из текста программы старый вариантный фрагмент и вводя на его место новый. Решение предельно простое, но крайне недальновидное.
Его слабость станет очевидной в тот момент, когда потребуется вернуться к версии программы, включающей старый фрагмент. Восстанавливаемый текст старого фрагмента должен быть перенесен в программу из записной книжки или же вовсе из памяти программиста. Наивно было бы полагать, что такие манипуляции с текстом не могут отразиться на работоспособности программы. Повторяя их несколько раз, программист рано или поздно допустит какую-нибудь ошибку, и программа перестанет работать.
Приобретенный таким образом печальный опыт подтолкнет нашего бедолагу к поиску более устойчивых решений задачи оформления варианта. Оценивать их он станет в первую очередь по степени опасности, угрожающей работоспособности старой версии при появлении новой. Предпочтение будет отдано решению, в котором изменения, связанные с оформлением варианта, выполняются наиболее безболезненно для прежней версии программы.
Понятие безболезненности изменений нуждается в более точной формулировке. Бороться в данном случае и можно, и нужно не за незначительность и не за малую вероятность наносимых изменениями повреждений, а за совершенно новое качество: отлаженные ранее версии программы должны гарантированно выходить из всех перипетий «живыми и невредимыми». Таким образом мы приходим к следующему определению.
О п р е д е л е н и е. Метод изменения содержимого программного фонда называется безболезненным, если его применение не может нарушить работоспособность отлаженных ранее версий программы.
Примером практически безболезненного решения задачи оформления варианта может служить выполнение изменений над копией исходного текста, которое будет подробно рассматриваться в следующем разделе. Такой способ имеет определенные недостатки, однако с точки зрения безболезненности он очень неплох. Все прежнее содержимое программного фонда сохраняется в неизменном виде, к фонду лишь добавляется модифицированная копия участка программы, содержащего вариантный фрагмент. Поэтому работоспособность существующих версий программы не может быть утрачена.
Безболезненность выполняемых изменений программного фонда существенна для всех стадий работы с вариантом. Желательно, чтобы безболезненно проходили не только оформление второго варианта некоторого решения, но и требующиеся затем переключения с варианта на вариант, оформление третьего и последующих вариантов, а также завершающая технологический цикл ликвидация вариантности.
Последняя стадия ликвидация вариантности начинается с момента, когда одному из вариантов окончательно отдано предпочтение. Безболезненность выполняемых изменений означает тут, разумеется, не сохранение работоспособности версий программы, использующих отвергнутые варианты, эти версии просто исключаются из программного фонда. Речь идет о безболезненности процесса ликвидации конструкций, которые, возможно, потребовалось ранее ввести в программу для организации работы с вариантами.
Понятие «безболезненность» можно попытаться трактовать и более широко. В частности, может появиться желание распространить его на изменения, связанные с ликвидацией обнаруженных в программе ошибок. Здесь возникают сходные проблемы, так как первейшая заповедь исправляющего ошибку «не навреди», т. е. он должен постоянно думать о том, чтобы от исправления ошибки не пострадали соседние отлаженные ранее части программы.
Существуют, однако, принципиальные отличия, не позволяющие обобщить понятие безболезненности изменений на случай исправления ошибок. Прежде всего, такое обобщение некорректно с формальной точки зрения. Ведь по определению безболезненность требует сохранения работоспособности программы. Тем самым подразумевается, что корректными должны быть как исправленная, так и исходная версии программы. Но исходная программа, по-видимому, неработоспособна, так как содержит ошибку. Поэтому формальное условие безболезненности не выполнено.
Кроме того, для исправления ошибки нередко нужна столь радикальная переделка текста, что от нее нельзя, вообще говоря, требовать безболезненности даже в более узком смысле, т. е. только по отношению к участкам программы, непосредственно не затрагиваемым исправлениями. Напротив, для задачи оформления варианта и для многих других рассматриваемых далее задач развития программы требование безболезненности изменений вполне реалистично и сравнительно легко воплощается в жизнь.
Надо сказать, что и исходные ситуации здесь сильно разнятся. В случае исправления ошибки перед нами неотлаженная программа, хирургическое вмешательство в текст которой совершенно необходимо. При оформлении же варианта программа отлажена, изобретая новый вариант, мы идем «от хорошего к лучшему», и потерять на этом пути работоспособность программы было бы чрезвычайно обидно.
В то же время среди штатных средств, предоставляемых операционной средой, обычно имеется довольно много инструментов для исправления ошибок в программе и нет почти ничего, непосредственно предназначенного для интересующего нас движения «от хорошего к лучшему». Поэтому чаще всего программист вынужден на свой страх и риск обращаться к одному из пришедших ему на ум доморощенных способов организации выполнения такого рода изменений. При подобных обстоятельствах трудно рассчитывать на то, что сделанный выбор окажется удачным.
В справедливости последнего утверждения нам предстоит убедиться, в частности, на материалах этой главы. Далее, в разд. 1.31.7 рассматривается несколько характерных приемов, к которым приходится прибегать, чтобы обеспечить оформление варианта в не приспособленной для этого операционной среде. Заканчивает главу разд. 1.8, где показано, насколько безболезненно и аккуратно оформляется вариант с помощью специализированных системных средств.
|