Беседы о программировании

 

Нельзя оставлять опасные предметы там, где дети могут их достать. Об этом знают все взрослые. Однако опытным родителям свойственно более тонкое ощущение возможной опасности, чем остальным людям. Поэтому, оценивая качество разработки и документации любых программных систем особой важности, мы должны будить в себе этот родительский "комплекс".

 

На эту мысль меня натолкнула ошибка в защите антивирусной программы InocuLAN 1.01 для Windows NT фирмы Cheyenne Software. Проблема обнаружилась во время тестирования продукта в Тестовом центре PC Week Labs, и Кен Филлипс написал об этом статью. Продукт в процессе инсталляции регистрировал на NT-серверах привилегированного пользователя с неограниченным сроком действия и легко определимым паролем (никоим образом не оповещая владельца о том, что сделано).

 

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

 

Для разработчика недостаточно раскрыть, какие допущения будет делать его программа. Есть еще один принципиально важный момент. Надо ответить на основной вопрос: "А что в остальных случаях?"

 

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

 

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

 

Развлечения ради пройдитесь по коду и проверьте, сможете ли вы найти все допущения, безмятежно в него встроенные, при том, что о них ничего не сказано в документах. Я не говорю уж о том, что они когда-либо были подтверждены реальными тестами. Те, кто давно меня читает, вспомнят мой любимый анекдот, вернее, событие из моей жизни, когда документ электронной почты "скручивался в трубочку" так, что его правая граница оказывалась левей левого поля, что приводило к бесконечной разбивке на страницы, когда Microsoft Word пытался вставить одну страницу текста в отрицательный объем.

 

Вы и сами можете оказаться в подобной ситуации. И что, это говорит о нашей готовности к сильно распределенным архитектурам? Когда Internet-машины станут править миром при помощи Java, появится больше шансов, что сделанные разными пользователями допущения будут создавать конфликты.

 

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

 

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

 

Питер Коффи

 

К Питеру Коффи можно обратиться через MCI Mail: 357-1756 или через CompuServe: 72631,113, или Internet 3571756@MCIMAIL.COM.

 

"А что в остальных случаях?" На этот вопрос обязательно отвечают во всех областях, кроме программирования