пятница, 25 октября 2019 г.

Кодирование: Ускользающая цель создания безошибочного кода


Данная заметка Дика Вейсингера (Dick Weisinger – на фото) была опубликована 3 октября 2019 года на блоге компании Formtek

Цель создания свободного от ошибок программного обеспечения является недостижимой, по крайней мере, для программ, объём которых превышает несколько сотен строк кода. Это не означает, что мы должны сдаться и прекратить к этому стремиться, раз уж совершенство недостижимо; это просто признание реальности. Иногда ошибки выявляются лишь спустя много лет после первоначального выпуска в свет программного обеспечения. Многие ошибки вообще никогда не будут обнаружены, или о них не будет сообщено, или их просто классифицируют как «известные недостатки».

Например, ошибка шифрования, известная под названием «LogJam» (logjam - затор из брёвен при сплаве леса, в переносном смысле - тупиковая ситуация – Н.Х.) , см. https://www.makeuseof.com/tag/priority-20-year-old-bug-breaks-internet-encryption-tell-browser-affected/ , связанная с реализацией шифрования в широко используемом протоколе TSL (Transport Security Layer), была найдена через 20 лет после того, как программное обеспечение было первоначально создано.

Редактор издания ITWorld Фил Джонсон (Phil Johnson, о нём см. https://www.cio.com/author/Phil-Johnson ) пишет, что «хотя может показаться удивительным, как это ошибка кодирования в часто используемом программном обеспечении может оставаться незамеченной годами, на самом деле это не такое уж редкое явление. По разным причинам ошибки могут оставаться незамеченными, а иногда и просто игнорироваться, в течение довольно длительного времени даже в самых широко используемых и критических частях кода» (см. https://www.csoonline.com/article/3404334/11-software-bugs-that-took-way-too-long-to-meet-their-maker.html ).

Недавно занимающаяся вопросами безопасности компания Eclypsium (см. https://eclypsium.com/2019/08/10/screwed-drivers-signed-sealed-delivered/ ) выявила более 40 драйверов от 20 различных поставщиков оборудования, которые имели серьезные уязвимости. Дефектные драйверы позволяют злоумышленнику получить полный контроль над компьютером. До этого никто даже не удосужился внимательно изучить это важное программное обеспечение. Эти ошибки серьезны сами по себе, но проблема усугубляется тем, что компания Microsoft сертифицировала все эти драйвера! (см. https://www.forbes.com/sites/daveywinder/2019/08/11/critical-windows-10-warning-confirmed-millions-of-users-are-at-risk/#5ec755bf2b51 ).


Исследователь из Университета Пердью (Purdue University) Чау Джеюи (Sze Yiu Chau, см. https://www.cs.purdue.edu/homes/schau/ ) сообщил: «Мы обнаружили проблемы в двух библиотеках TLS с открытым исходным кодом для веб-шифрования. ... Ряд разработчиков решений для «интернета вещей» использует эти продукты ... Мы не знаем, в каких коммерческих продуктах они используются, но статистика показывает, что эти библиотеки скачиваются 20-30 раз в неделю. Для разработчиков, особенно разработчиков прикладных приложений, важно, чтобы всё работало. Они не обязательно разбираются в том, как работает криптография» ( https://www.wired.com/story/rsa-encryption-signature-validation-flaws/ ).

Дик Вейсингер (Dick Weisinger)

Мой комментарий: Вроде бы автор повторяет общеизвестные истины… Однако я сама недавно столкнулась с тем, что эти истины неизвестны достаточно авторитетным специалистам, и это существенно влияет, например, на разработку политик и стандартов. Скажем, некоторые разработчики решений для смарт-контрактов всерьёз исходят из того, что смарт-контракты (разновидность программ) будут безошибочными и, соответственно, процедуры исправления смарт-контрактов если и потребуются, то будут применяться крайне редко.

Вновь возродилась из пепла идея формальной проверки правильности программ, дающей гарантированно правильный результат – на этот раз, в отношении смарт-контрактов. Замечу, что формальные проверки – дело хорошее, нужное и полезное, и они встроены в любой компилятор и интерпретатор кода; но верить в то, что такая проверка никогда не подведёт ничуть не лучше, чем верить в вечный двигатель, особенно когда речь идёт не просто о вычислениях и транзакциях, а о правовой корректности смарт-контрактов…

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

Источник: блог компании Formtek
https://formtek.com/blog/coding-the-elusive-goal-of-bug-free/

Комментариев нет:

Отправить комментарий