Непсихологические тесты Крис Касперски ака мыщъх Спецвыпуск: Хакер, номер #053, стр. 053-060-4 У тебя программа работает, а у пользователя - нет. Что делать?! Для начала - собрать информацию о конфигурации его компьютера ("Панель управления->Администрирование->Управление компьютером->Сведения о системе"). К сожалению, установить виновника таким путем сходу не удастся. Может, там вирус сидит и вредительствует. Или глючит какой-нибудь драйвер. Но, имея несколько отчетов от различных пользователей, в них можно выявить некоторую закономерность. Например, программа не идет на таком-то процессоре или на такой-то видеокарте. Другая возможная причина - утечка ресурсов. Утечки возникают всякий раз, когда программа злостно не освобождает то, что постоянно запрашивает. Чаще всего приходится сталкиваться с утечками памяти, но ничуть не хуже утекают перья, кисти, файловые дескрипторы и т.п. В общем, практически любые объекты ядра, USER и GDI. Тестер, работая с программой непродолжительные отрезки времени, может этого и не заметить (особенно если у него стоит Windows NT/2000/XP, в которой ресурсы практически неограниченны), но при "живой" эксплуатации у пользователей появляются огромные проблемы. Сначала легкое замедление быстродействия системы, затем конкретные тормоза, переходящие в полный завис, и, наконец, rеset, сопровождаемый колоритным матом. Отладочные библиотеки, входящие в состав компилятора Microsoft Visual C++, легко обнаруживают большинство утечек памяти. В сложных случаях приходится прибегать к верификаторам кода или динамическим анализаторам наподобие NuMega Bounds Checker. Но высшей инстанцией является эксперимент. Запусти "Диспетчер Задач Windows NT" и некоторое время поработай с тестируемой программой. Вкладка "Процессы" отображает текущие счетчики дескрипторов, размер выделенной памяти и т.д. (по умолчанию видны лишь некоторые из них, зайди в меню "Вид"->"Выбрать столбцы" и взведи все галочки). Если какой-то счетчик неуклонно увеличивает свое значение после некоторых операций - это утечка. Для исследования работоспособности программы в условиях катастрофической нехватки ресурсов (памяти, дискового пространства) Microsoft включила в состав Platform SDK утилиту Stress.exe, снабдив ее иконкой танцующего мамонта. Корректно спроектированное приложение должно выживать при любых обстоятельствах. Обломали с выделением памяти из кучи? Переходи на резервный источник (стек, секция данных). Освободи все ненужное, но любой ценой сохрани все данные! Всегда сохраняй при старте программы минимально необходимое количество памяти "про запас", а потом используй его как НЗ. То же самое относится и к дисковому пространству. |