Category: Software quality

Самая большая ошибка человечества

Самая большая ошибка человечества

     Когда начинались компьютеры (а я уже в те времена уже находился во вменяемом возрасте и ездил в Ленинскую библиотеку (г.Москва) читать журнал Electronics), они были настолько экзотическими устройствами, что программы для них разрабатывали сами пользователи, а профессия разработчика программ называлась «математик-программист». При чём тут математика, никто сейчас понять не может. А пошло это ещё от аналоговых вычислительных машин, которые решали системы интегральных уравнений. Вот там математика была нужна. Вы, наверное, тихо офигеете (кто в теме), но я разрабатывал аналоговый вычислитель на первых интегральных операционных усилителях.

Пока сами пользователи разрабатывали программы, естественно, они сами делали в них ошибки и сами за них расплачивались. Пролетел спутник мимо Луны из-за одной неправильно написанной строчки на Фортране – претензии предъявлять было некому, кроме как себе любимому.

Потом программное обеспечение стало товарным продуктом и его начали продавать. Но всё же, без него можно было обойтись, и поэтому те, кто покупали программы, давали своё добровольное согласие стать подопытным кроликом. За свои же деньги (как я стал им в своё время с Windows 1.0), потому что в лицензионном соглашении оговаривалось условие полного отсутствия какой-либо ответственности разработчика за ошибки в программе. Да, собственно, Windows 1.0 и не работала – это был такой фэйк (фикция) для шибко продвинутых гиков. Разводка на деньги красивой идеей.

Шли годы, и лицензионные соглашения с течением времени изменялись. В сторону нет, не ответственности разработчика за ошибки в программе, а в сторону бесправия пользователя. Сегодняшние лицензионные соглашения уже никто не читает, чтобы не расстраиваться, увидев право производителя поиметь всю информацию пользователя и его самого в особо извращенной форме (см. лицензионное соглашение Windows 10, например).

А что же с ответственностью разработчика? Её как не было, так и нет. А компьютеры, и соответственно, софт для них тем временем стали использоваться не только для ведения электронных таблиц, но и в разных довольно критических для жизни человека местах – для управления энергетикой, оружием, поездами и самолётами. Много раз катастрофы с человеческими жертвами происходили из-за того, что программное обеспечение было слеплено криворукими говнокодерами.

Чуть случается нетипичная ситуация, шаг влево-вправо от инструкции – и софт начинает вытворять с техникой нечто такое, что даже перевод в режим ручного управления уже не поможет. Вот скажите, отказ одного из двух датчиков должен привести к падению самолёта? А ведь это реальность. Программа не рассчитывала на такой поворот событий и стала выдавать пилотам совершенно дикие показания приборов. (В обтекаемых фразах, отредактированных отделом PR, это будет звучать примерно так: «вводящие в заблуждение сигналы включающегося и выключающегося предупреждения о сваливании, противоречащие реальному пространственному положению самолёта, могли стать факторами, значительно затруднившими анализ ситуации экипажем»).

Да те же банковские программы – сколько раз в месяц вы видите предложение срочно обновить приложение из-за «обнаружения критической уязвимости»? Как правило, «критическая уязвимость» есть результат применения Agile (http://bit.ly/2jI4GMJ) и выявляется после того, как со счетов клиентов были украдены сотни миллионов денег.

И что, хоть раз посадили лет на двушечку разработчика или заставили банду говнокодеров компенсировать убытки? Сами знаете, что нет. Потому что в лицензионном соглашении вы сами согласились освободить разработчика от какой-либо ответственности.

Естественно, как и всегда, отсутствие ответственности за чужие потери стимулирует к сокращению затрат на тестирование и разработку методик обеспечения надёжности программ. Майерс с его фундаментальной книгой «Надёжность программного обеспечения» забыт намертво.

И сейчас мы подошли к той критической черте, когда вся наша жизнь определяется софтом, в котором количество ошибок увеличивается с каждым годом геометрически, и критичность сфер применения ПО – тоже. (http://bit.ly/2i9Gd3a)

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

З.Ы.

1. http://bit.ly/2qaqD9P

2. http://bit.ly/1UkOCfB

3. Только для гурманов: http://govnokod.ru

Новая вера или из жизни муравьёв

Новая вера или из жизни муравьёв

     Когда Генри Форд изобрел конвейер (хотя это не он его изобрел), это привело к прорыву в производительности труда. Машины по цене стали доступны для рядового потребителя (средний класс). Оборотная сторона медали: каждый из работников конвейера умел закручивать одну только гайку и выполнять только одну элементарную операцию. Он не представлял себе, как работает автомобиль, из каких частей он состоит и как они между собой взаимодействуют. Сегодня человек становится всё более специализированным существом. Высоко оптимизированным для одной единственной операции. Хорошо это или плохо? Говорят, что для решения проблемы нужно уметь увидеть её с целиком (helicopter view). Способны ли даже тысяча таких рабочих конвейера, собравшись вместе, объединённые сколь угодно эффективной системой коммуникаций, увидеть «автомобиль» целиком, а не как набор определённым образом соединённых деталей? Думаю, что нет. Для этого нужны не только знания, что с чем соединять, куда что прикручивать, но также знания механики, физики, математики, эргономики и других чуждых для них знаний.

Пример, конечно, утрированный. Но на полном серьёзе периодически встречаются высказывания, что «наша программа не имеет алгоритма, она работает по принципам искусственного интеллекта». Что такое искусственный интеллект, и то, что он основан на тех же самых алгоритмах, мало кто понимает. Как и то, что алгоритмы пишут программисты, которые имеют свойство ошибаться. Как и все другие люди. Те, кто писал когда либо программы, знают, что ошибка может оставаться необнаруженной долгие годы, особенно, если нет возможности независимой проверки решений, выдаваемых программой. Предположим, вы купили программу, которая анализирует резюме кандидатов и отправляет в помойку те из них, которые не отвечают заданным вами критериям. Вы свято верите в то, что программа действительно анализирует на соответствие вашим критериям и никак иначе. Скорее всего, это не так, если у вас нет другой, независимо разработанной программы, которая делает то же самое – чтобы сравнить результаты. А у вас её нет, а если бы и была, то вы вряд ли сможете проверить, как она работает во всех режимах. Например, она может прекрасно отбирать по трём критериям, а на четвертый реагировать только в том случае, если термин написан большими буквами.

Это типичная проблема SAP  и других подобных систем.  Пользователь хочет одно, консультант понял кое-что и запрограммировал другое, в результате после 10 неудачных попыток создания разных форм отчётов конечный пользователь оставляет всякую надежду и начинает по-тихой вести табличку в Экселе. Наблюдал это неоднократно, проводя аудиты. И это хорошо, если пользователь обнаруживает ошибку ручным подсчётом, а во многих случаях ошибка остаётся незамеченной. Я встречал даже случаи умышленного мошенничества, в которых SAP использовался как инструмент манипуляций с финансовой отчетностью. А что – идеальное преступление: мало кто понимает, как делаются эти отчёты, да и в случае чего «ошибку» можно списать на дурака-консультанта.

В науке есть такой критерий: если теорию нельзя проверить или представить себе некий эксперимент, который мог бы её опровергнуть, то эта теория считается ненаучной. В неё можно только верить. Или не верить. Как в бога или НЛО. Так вот, мы вступили в принципиально новую эпоху существования человека. Это эпоха веры не в бога, а в безгрешность решений, принимаемых информационными системами. И зависимости от них. Проверить, правильно ли работает программная система резервирования билетов, расчёта прибыли или отсеивания кандидатов мы не можем – значит, остаётся только свято верить в безгрешность систем, принимающих решение об отказе в выдаче вам визы или запуске ракет.

Мы вступили в эпоху, когда компьютеры управляют людьми без права обжалования или аппеляции…

ЗЫ:

1. Человек имеет два варианта в отношении любого нового явления: либо найти ему объяснение исходя из законов природы и логики и научиться им управлять; либо просто придумать непроверяемое объяснение и поверить в него. Во втором случае существует больше вариантов для манипуляции массами – потому что придумать можно всё, что угодно. Например: “Наша биллинговая программа показала, что вы израсходовали за час 6 Гб”. “Но я  вообще не включал телефон!” “Ничего не знаем, наша программа не ошибается” – такой диалог у меня был реальности с одним сотовым оператором на букву М.

2. Про подбор персонала – там действительно уже идёт “война машин”. Рекрутеры получают слишком много резюме, чтобы их просмотреть, и покупают программы, которые отсеивают резюме. Соискатели, наоборот, изобретают методы автоматической подгонки резюме под критерии отбора и веерной рассылки. В результате объемы циркулирующей туда-сюда информации выросли в миллионы раз без какого-либо качественного результата. Робот нашел вакансию – робот адаптировал резюме – робот сделал рассылку – другой робот прочитал- выкинул в корзинку-направил отказ. Рекрутер бъётся об стенку – никого нет, а те кто прошёл все фильтры – полный неадекват. Соискатель не понимает, почему он не может найти работу.

И вот оно – прилетело как доказательство (13.07.2016): “Зарегистрировался очень давно на Superjob в качестве работодателя, аккаунтом не пользовался много лет. Сегодня получил на почту такое письмо: “Вам нужен HR-bot? Закажите его разработку Superjob! Чат-бот от Superjob уже подбирает сотрудников «Связному» в Telegram: в день @Svyaznoyhrbot проводит сотни собеседований и получает десятки контактов. HR-бот не просто задает кандидату вопросы, подготовленные при помощи его будущих руководителей, но и дает обратную связь. Срок разработки и запуска бота после согласования технического задания — 7 рабочих дней.”

И ещё – (19.08.16): “Почта-банку потребуется автоматизация как массового найма, так и профессионального. Это будет достигаться за счет перевода традиционных этапов найма в онлайн-формат. Так, система Skillaz будет использовать автоматическую оценку и сбор резюме с открытого рынка, диалоговые тренажеры, тесты с автоматической оценкой кандидата на психологические и профессиональные навыки, видео- и аудиоинтервью”
(http://www.kommersant.ru/doc/3066680).

3. Сегодня, чтобы выжить, вы должны уметь придумать, как обмануть информационную систему. Для этого надо представить себе того ублюдочного кодера, который выродил этот говнокод, и его образ мышления. По моему опыту, сегодня оно на уровне простейших рефлексов животного уровня мыши или кролика. Скоро будут пользоваться популярностью курсы типа: “Как стать успешным и выжить в современном киберпространстве”.

4. Есть еще одна беда: раньше было принято информировать пользователей об изменениях в программном обеспечении. Типа, вот теперь вы должны делать это так и так. Фильмики снимали, как освоить новизну. На трубе размещали. Ссылочки давали. Вот жисть была! А теперь Вы чувствуете себя как лабораторная мышь – и фактически ею являетесь. Вас никто не спрашивает. Обновления загружаются автоматически, программа начинает работать по-другому. Ваша мышиная задача – найти выход в лабиринте костылей и велосипедов и не сдохнуть от эксперимента внедрения Agile. Впрочем, потери мышки никто не заметит. Вот когда они начнут дохнуть тыщями… хотя и тогда вряд ли что-то произойдет. Ну, закроется один сайт, начнет работать другой. Программеры перетекут туда и будут творить, творить…

5.  Лет эдак 40-50 назад мы знали не меньше, чем сейчас, если считать объем информации. Да, не было мобильных телефонов, интернетов, а телевизор никто не смотрел по причине того, что смотреть там было нечего. Вместо интернета было издательство “Мир”, книги которого надо было заказывать на почте по каталогу и ждать целый год. Но стоили они 1-2 рубля и на зарплату рядового инженера их можно было купить штук 100. Сейчас рядовой инженер для этого должен зарабатывать тысяч триста в месяц. Да он, может, столько и зарабатывает, беда только в том, что инженеров не осталось.

А тогда мы знали, как устроен карбюратор и радиоприёмник, и сами чинили всё, что нас окружало. То есть буквально всё. Весь мир вокруг был понятен и управляем, хотя и не простирался дальше соседней улицы. Сегодня мы можем открыть капот своего авто, глубокомысленно посмотреть на нечто и закрыть. Дай бог знать, куда бензин в неё заливать. Мы знаем очень много – но ни о чём. Телевизор работает потому, что на пульте нажимаем кнопки. Машина едет потому, что нажимаем на педаль – да скоро и этого не нужно будет. Наступает эра невыносимой легкости бытия…

6. Похоже, что развитие телекоммуникаций несовместимо с развитием разума. Поиск в Гугл заменяет нам учебники и годы труда на их изучение – стоит только набрать запрос. Правда, проверить правильность результата поиска никак не получится. Не всегда получится и понять смысл ответа. Но ведь это неважно. Вот и учёные обнаружили: развитие коллективного разума чревато сокращением интеллектуальных способностей у отдельно взятого индивида. Нейронные структуры, отвечающие за обучение, память и восприятие, у ос, живущих в одиночестве развиты намного сильнее, чем у тех, что проживали малыми группами или в сложных колониях. В последнем случае, осы и овсе оказывались намного «глупее» своих собратьев-одиночек. http://www.ecobyt.ru/news/3481/

Статья про пчёл подтверждает тезис о том, что появление коллективного разума приводит к деградации индивидуального, что мы и видим сейчас в окружающей действительности. Лишите современного человека доступа к поисковикам в интернет, и проверьте его знания – его индивидуальный разум. И вы увидите, они очень невелики и в основном о том, какие кнопки на каком девайсе нажимать, чтобы получить еду.

А может быть, муравьи, пчёлы – это и есть цивилизации прошлых эпох, достигшие совершенства в своих коммуникациях? Когда коллективный разум окончательно победил индивидуальный?

7. “Да, обезьяньи высказывания просты — обычно в них от двух до пяти слов, — а словарный запас небогат. Самые продвинутые активно используют 400–500 слов, хотя понимают гораздо больше (впрочем, в пиджин-инглише всего около 600самостоятельных, несоставных слов — и это полноценный человеческий язык, на котором выходят газеты и вещают радиостанции).”(http://bit.ly/29W8Pa3). Мне тут вспомнилась статья о результатах последних вступительных экзаменов в МГУ? http://bit.ly/29JPb4f

8. А вообще искусственный интеллект отличается от натурального точно так же, как надувная женщина отличается от настоящей:)

Ковбои на костылях

Ковбои на костылях

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

Да, мы все знаем, что одобрямс Минздрава стоит некую сумму, права пилотов продаются за некую другую сумму, а купить независимого аудитора можно за третью. Для очень независимого аудитора из большой четверки это дороже, для маленькой, но гордой аудиторской фирмочки – дешевле. Всё это понятно. Но сейчас речь не об этом.

Существует огромная сфера деятельности, от которой каждый из нас зависит ежедневно, полностью и бесповоротно, но в которой нет никаких, даже призрачных гарантий того, что вы получаете безопасный и соответствующий заявленным характеристикам продукт. Это – программное обеспечение. То, что с ним происходит, можно описать словами “Дикий запад”. Или “Полная ж..а”. Кому что нравится.

Доски объявлений хэдхантеров заполнены объявлениями типа: “Срочно нужен программист, умеющий разбираться в чужом коде”. Честно говоря, я бы поостерегся пользоваться программой, разработанной такой фирмой. Сам пишу код помаленьку, до сих пор, по служебной необходимости, для себя; в прошлой жизни занимался качеством программного обеспечения и понимаю: это уже конец, если не сказать хуже. Это означает, что прежний программист встал и ушёл, документации на код никакой нет, проект горит – будем вставлять костыли. А через месяц ЗБС-банк радостно сообщает: “Мы разработали новое онлайн приложение для Андроид!” И в этот момент как-то не по себе становится. А вот и последние новости подоспели: “Неизвестные хакеры взломали счета 100000 пользователей ЗБС-банка. Украдены стопятьсот миллионов рублей”.

Казалось бы, логика простая: если какой-то продукт используется большим количеством людей для выполнения критичных функций, он должен проходить независимый аудит. И не только и не столько он, сколько процесс его разработки. Даже кастрюля, которую вы покупаете на кухню, имеет сертификат соответствия. Везде оно так и есть, кроме как в разработке программ. Как-то уж так повелось, что никто не знает, каким образом рожден некий говнокод, который управляет нашими кошельками, автомашинами, самолётами, системами отопления в доме, наконец.

Я вот седьмой год сражаюсь с агрегатом фирмы IVT, который вроде бы предназначен для геотермального отопления моего дома. Это такой у меня личный майн кампф. Борьба идёт явно не в мою пользу. Один раз меняли ему мозги. Не помогло, потому что у него их оказалось явно больше, чем у меняльщиков. Летом он устраивает в доме 30-градусную жару, зимой – бодрящий холод. А тут вдруг решил, что всё, хватит, покрылся льдом и через аварийный клапан залил пару комнат. Пришлый умелец, он же serviceman (по-ихнему), разводит руками. Поразводил, поразводил на новый кран и уехал.

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

ЗЫ.

Разработчики по снимают с себя всякую ответственность (вспомните, какие “лицензионные соглашения” Вы принимаете). Там разве что нет права поиметь вас в ж… Хотя надо почитать – наверняка есть:) Представьте себе, вы садитесь в самолёт, а вам на подпись дают бумагу, что вы принимаете на себя все риски, что самолёт не долетит, долетит не туда, багаж потеряется и так далее:) Я бы предложил ввести даже не сертификацию, а хотя бы аудит (с чего-то надо начать), чтобы пользователь получал вместе с программным продуктом ссылку на заключение аудитора. А стандарты у всех могут быть внутрифирменные. То же самое, как сейчас проводят аудит финансовой отчётности.