Непсихологические тесты Крис Касперски ака мыщъх Спецвыпуск: Хакер, номер #053, стр. 053-060-6 Основной недостаток fprintf в том, что при аварийном завершении программы часть телеметрической информации необратимо теряется (буфера остались несброшенными). Если же их сбрасывать постоянно, скорость выполнения программы ощутимо замедляется. Записывай телеметрию в разделяемую область памяти, а при возникновении сбоя сохраняй в файл протокола из параллельного процесса. Так будут и волки сыты, и овцы целы. Заключение Поиск ошибок не прекращается никогда! Даже когда продукт умирает, какие-то его компоненты используются в следующих версиях и в них вылезают новые баги. Ошибки так же неисчерпаемы, как и атом! Они образуют толстые многолетние наслоения, из-за которых руки чешутся и просятся в бой с ними, но начальство строго-настрого запрещает трогать. Это можно сравнить с притиркой механизма. По мере своего взросления модули все дальше и дальше уходят от первоначальных спецификаций. Теперь, чтобы написать совместимую функцию, необходимо тщательно проанализировать исходный код "старушки", постоянно ломая голову над вопросами "это баг или так задумано?" Основное правило разработчика гласит: не трогай того, что и так работает. Забавно, но многие фирмы предпочитают "документировать" ошибки, экономя на их исправлении. В Базе Знаний или руководстве пользователя авторитетно заявляется: "Туда ходить не надо, кто не послушался - сам виноват". Возможности, которые так и не удалось отладить, но которые нельзя заблокировать или изъять, просто не документируются. Все ими пользуются (еще бы! самая "вкусность" продукта сосредоточена именно здесь), у всех все падает, но никто не может предъявить претензию, потому что никому ничего и не обещали. Так что тестирование программного обеспечения - это не только инженерия, но еще политика и маркетинг. Выживает не тот, чей продукт лучше, а тот, кто правильно его "позиционирует". В конечном счете, любую ошибку можно превратить в достоинство. Верификаторы кода языков С\С++ Самый простой верификатор - это утилита lint, входящая в штатный комплект поставки большинства *nix-систем. Ее возможности сильно ограничены, а версия для Windows распространяется только на коммерческой основе. Достойная альтернатива lint'у - открытый проект CLINT, распространяемый в исходных текстах, которые можно скачать с сервера сообщества "кузницы": http://sourceforge.net/projects/clint. Еще мощнее SPLINT, нацеленный на автоматизированный поиск переполняющихся буферов и прочих программистских ошибок, которые не находят lint и CLINT. Это серьезный, хорошо документированный продукт, распространяющийся в исходных текстах на некоммерческой основе, уже скомпилированный под Windows, Linux, Solaris и FreeBSD (CLINT поставляется только в исходных текстах, с которыми еще предстоит повозится). Лежит здесь: http://lclint.cs.virginia.edu. |