1/08/2007

Коридорное тестирование

Коридорное тестирование - это процедура, при которой вы выбегаете в коридор, хватаете первого попавшегося человека и заставляете его попользоваться программой, которую вы только что написали. Если вы проделаете эту процедуру на пяти разных людях, вы получите 95% иноформации о проблемах с удобством использования в вашей программе.

Хороший дизайн пользовательского интерфейса - это не так сложно, как вы думаете, и очень важно, если вы хотите, чтобы пользователи покупали ваш продукт и были им довольны.

Самый важный момент, касающийся пользовательского интерфейса, - это то, что вы, показывая свою программу горстке людей (фактически 5-6 человек уже достаточно), очень быстро узнаете, какие проблемы у них возникали. Прочитайте статью Джекоба Нильсена (Jakob Nielsen), в которой он объясняет, почему так происходит. Даже если у вас не хватает опыта в создании пользовательского интерфейса, но при этом вы проводите коридорное тестирование, которое ничего не стоит, то с каждым разом интерфейс будет становится всё лучше и лучше. ...

Как подкупить программиста

Компиляция - это одна из последних задач, которую всё ещё нельзя мгновенно выполнить на домашнем компьютере. Если процесс компиляции занимает у вас больше нескольких секунд, купите себе самый последний продвинутый компьютер. Это сэкономит ваше время. Если на компиляцию уходит 15 секунд, программисты умрут со скуки или переключатся на чтение блога, на что уйдут часы рабочего времени.

Программиста легко подкупить, предоставив ему самое новейшее и продвинутое оборудование. Этот способ мотивации обойдётся вам гораздо дешевле, чем выплата конкурентноспособной зарплаты.

Выдающиеся команды не мучают своих разработчиков. Даже небольшой сбой, вызванный маломощноым оборудованием, нервирует и раздражает программистов. А раздражительный программист - это непродуктивный программист. ...

Причина неудач Netscape

Программное обеспечение, созданное без спецификации, обычно оказывается плохо спроектированным и планы со сроками выходят из под контроля. Подобная ситуация образовалась в Netscape, где первые четыре версии превратились в такую неразбериху, что руководство глупо решило выбросить весь код и начать снова. В последствии они делали подобные ошибки с проектом Mozilla, создав монстра, который вышел из под контроля и только спустя несколько лет добрался до стадии альфа-версии. ...

Web браузер Netscape 5.0 вышел почти с двухгодичным опозданием. От части, из-за их самоубийственной ошибки: они выбросили все свои исходные тексты и начали сначала. Та же ошибка что и обрёкшая Ashton-Tate, Lotus, и Apple MacOS стать хламом истории софта. Netscape увидели как распространение их браузера шагнуло от около 80% до около 20%, и всё это время они ни чем не могли ответить конкурентам, потому что их ключевой продукт был разобран на 1000 кусков, так что нельзя было выявить ни каких контуров (was disassembled in 1000 pieces on the floor and was in no shape to drive anywhere). Это единственное плохое решение, более чем что-либо другое, было той ядерной бомбой которой Netscape сами себя сдули как ветром. (Jamie Zawinski - всемирно известная истеричка располагает подробностями). ...

Microsoft Word - это был "смертельный бой"

Самая первая версия Microsoft Word для Windows была проектом типа "смертельный бой". Работа над ней повисла навечно. Вся команда вкалывала, не покладая рук, и при этом выпуск откладывался снова, и снова, и снова, и стресс был просто невыносимым. Когда эту чёртову штуку всё-таки выпустили с задержкой в несколько лет, Microsoft отправил всю команду в отпуск в Мексику и провёл серьёзный анализ.

Вскрытие показало, что менеджеры проектов так упорно придерживались сроков, что разработчикам приходилось гнать во весь опор и писать ужасный код, потому что исправление ошибок не входило в общий план действий. Не было даже попытки вести счёт ошибкам. Как раз наоборот. Говорят, что один программист, который должен был написать код для вычисления высоты строки, просто написал "return 12;" и стал ждать сообщения об ошибке - написаная им функция не всегда правильно работала. План работ был больше похож на список функций, проверка которых переводила их в ранг ошибок. Такой подход получил название "метода бесконечных дефектов".

Чтобы справиться с этой проблемой, Microsoft повсеместно стал внедрять "метод отсутствия дефектов". Большинство программистов в компании посмеивалось. Выглядело это так, будто они могли сократить количество ошибок по приказу начальства. В действительности же термин "отсутствие дефектов" трактовался следующим образом. В любой момент времени наиболее важным является исправление ошибок до написания нового кода. ...

11/15/2006

Используйте фаззинг

Фаззинг (fuzzing) – это метод тестирования, который был разработан для поиска ошибок, связанных с ненадежностью. Почти каждая ошибка или уязвимость, связанная с синтаксическим анализом файлов, была найдена либо просто случайно, либо с помощью фаззинга.
Cинтаксический анализ сложных структур данных – это сложная задача, сложный код будет иметь ошибки. Вы должны тестировать всякий код, который проводит синтаксический анализ файлов и сетевого трафика. Программа Майкрософт под названием «Жизненный цикл разработки безопасности» (SDL, Security Development Lifecycle) очень подробно говорит о том, что это значит для форматов файлов.

Вы должны тестировать все анализаторы испорченных файлов по 100 000 раз, используя средства фаззинга файлов.

Cредство фаззинга файлов, а также средство фаззинга исходного кода C++ включены в книгу The Security Development Lifecycle (авторы: Michael Howard и Steve Lipner microsoft.com/MSPress/books/8753.asp) ...

Cписок общеизвестных уязвимостей (CVE)

Cписок общеизвестных уязвимостей (CVE) (cve.mitre.org) показывает, что за период 2001-2004 гг. 47 процентов всех уязвимостей безопасности, включенных в CVE, было связано с поступающими в систему данными. Среди самых известных проблем – переполнение буфера, целочисленные арифметические ошибки, вызов сценариев с других веб-узлов и вставка SQL-команд. Сегодня мы видим новые вариации на эту тему, например, вставки кода XPath или вставки в протокол LDAP (Lightweight Directory Access Protocol) ...