?

Log in

No account? Create an account
Previous Entry Share Next Entry
hornet
a_lamtyugov

И -- по следам горячей дискуссии...

Ну что, дорогие товарищи? Украсим мой журнал трехзначным числом комментариев? До того рекорд у меня был, если память не изменяет, 95 штук.

То, что я напишу, может показаться многим из вас очень наивным. Пожалуйста, примите во внимание тот факт, что я полностью отошел от программистской работы больше десяти лет назад и сейчас, соответственно, несколько не в теме.

Итак, новый вопрос.

Может ли и должен ли программист нести ответственность за ошибки в коде, имевшие тяжелые последствия? Грубо говоря, надо ли сажать программистов за ошибки так же, как при Сталине за опечатки сажали наборщиков и корректоров?

Этот вопрос особенно интересен в применении к программированию будущего. Я не в курсе, как сейчас эволюционируют CASE-системы, но полагаю, что непосредственно код создавать тебе уже не придется. Будешь отдавать некие общие указания, и все.

А?

promo a_lamtyugov january 19, 2020 16:27 14
Buy for 100 tokens
Итак, игры, превью и рецензии на которые вы можете прочитать в этом блоге. Сразу говорю, что отдаю предпочтение низкобюджетным инди-проектам, многие из которых находятся в раннем доступе. В принципе, могу написать и про какой-нибудь ААА-тайтл, но это если очень уж сильно зацепило. Кроме того, я не…

  • 1
Может? - может. Закон приняли, вот и может.
Должен? - ну, а простите, если я леса так построю строительные, так что они рухнут и всех угробят?

А в чем разница-то?

В том, что в программировании ошибки неизбежны в принципе.

В отличие от Вашего примера.

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

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

Умножим подобную ошибку на 10 - будет весело.

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

я как-то видел в телевизоре съёмки испытаний системы автомобильной безопасности. там манекены такие сидели в салоне, пристёгнутые ремнями, а автомобиль фигачили об различные поверхности.
я это к чему: если Вашей конторе не хватает денег на манекены для испытаний, то при чём тут программисты?

невозможно.

Невозможно определить виновного. Конкретный программист, допустивший конкретную ошибку не может нести всю ответственность. В правильной современной разработке имеет место быть долгий итеративный процесс по отладке-построению, и претензии могут быть только к фирме целиком - и тестерам, пропустившим (или не сформулировавшим тест) и манагерам (мало ресурсов уделили, не тех людей поставили на критическую точку) и кадровому отделу, взявшему программера, не оттестировав его по GRE CS.
Ну разве что средства разработки будут настолько круты, что программирование м будет заниматься один программист-мутант (см. Gundam Seed), где герой лихо за минуту дописал OS, а потом в свободное время оптимизировал "квантовые подпрограммы". Так он же на запрограммированым собой девайсе и ездил.
А остальное - определяется общественным договором. Нашли идиота программера, готового написать в одиночку систему и взять на себя ответственность вплоть до расстрела (возможно для этого надо еще будет найти подходящие страну и общественный строй) - да, без проблем.

Re: невозможно.

Я вот всецело согласен. Хотел и сам написать, да вот - опередили-с.

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

Пожадничал? Ну, не обессудь. Какова оплата, такова и работа - по большей части.

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

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

А значит, чтобы расстрел был осмысленен — во-первых, код должен быть экстремально важен (даже за ошибки во всяких телекомных приложениях, приводящих к многомиллионным outage-ам, по моим сведениям, программистов не расстреливают :) ), а во-вторых, за него должно быть адекватное вознаграждение.

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

Невозможно определить. Тут уж скорее надо наказывать компанию, которая не провела надлежащий уровень тестирования.

Это значит "нет". Верно?

Зависит от области применения программ.

Сажать тогда уж, надо тестеров или менеджеров проекта. Человека который допустил ошибку в коде, сажать бессмысленно, т.к. это действительно неизбежно.




А что такое тяжелые последствия?

Бывают такие: в одном заполярном городе одна котельная и из-за ошибки в программе управления тамошними котелками город оказывается ранней весной без тепла. Так что ИМХО может и должен.

Хотя в этом случае основную ответственность ИМХО несут люди подписывающие акт о передаче системы в промышленную эксплуатацию.

PS Тот раз всем повезло. ;)

дичь

есть постановщики
есть конструкторы
есть кодеры
есть тестировщики

есть стандарты на софт

есть повышенные требования к софту?
д.б. оговорена ответственность за

ответственность всё равно несут принимавшие сотрудники заказчика
вирусы ситуация другая немного

НУ почти все написали, кажется...

1. Заказчик - ОТЛИЧНО ЗНАЕТ что ему надо, обеспечивает соответствующее вознаграждение (жизнь, например =)) и ПОСТАНОВКУ ЗАДАЧИ
2. Проектировщики - Проект
3. Кодеры - кодинг
4. Менеджеры - эффиктивное управление, "отбой" варианто "хотим еще вчера и дешевле"
5. Тестеры - 100% тестирование (со стороны заказчика и исполнителя соответственно)
6. Заказчик - подпись о приемке

А теперь.. АВАРИЯ, етить... Разбор, какой пункт привел к ошибке? ТОму и по шапке (но программеры все равно вывернуться =)) Хотя есть 2 пункта.... очень "веселых" - если пункт 6 выполнен, ВИНОВАТ ЗАКАЗЧИК. Точка. Если надо найти "Крайнего" - то ЭТО БУДЕТ ТОТ, кто не сможет ЗАНЫКАТЬСЯ.
Есть и еще один вариант - АВРАИЯ?? ВСЕХ ПОД РАССТРЕЛ, На том свете разберуться.
И Еще один... АВАРИЯ??? "Ну, все же люди, избежать ошибок невозможно..."

Вот так вот. Человек - скопище противоречий.
ЗЫ. Все ИМХО... на десятилетнем опыте, однако =)

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

"сажать" - слишком резкая мера.

но насчет некоего денежного штрафа - вполне.
случай с "Ил-2 Штурмовик:ЗС", когда по всей стране продали лицензионные дорогие диски, а они оказались нерабочими - очень показательный.

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

Технологическую сторону тут подробно осветили. Освещу юридическую - как оно есть сейчас.

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

Остаются ошибки - суть деяния неумышленные.

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

Лекгомысленность: если лицо предвидело возможность наступления общественно опасных последствий своих действий (бездействия), но без достаточных к тому оснований самонадеянно рассчитывало на предотвращение этих последствий. Т.е. если я пишу программу и _сознательно_ забиваю болт на некую проверку, предполагая, что "вот уж эта ситуация в жизни никогда не случится" - то меня следует сажать. Под легкомысленность подпадает и преступная халатность - т.е. когда не просто мог предвидеть последствия, но и обязан это был делать по своей должности.

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

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

С ответственностью компаний немного проще. При разработке серьезных систем они, как правило, в силу своих договорных обязанностей ДОЛЖНЫ предвидеть возможные последствия, т.е. обеспечить надлежащее тестирование, процедуры разработки и т.п. Так что если прибор или программа в оговоренных ТЗ условиях выдали неправильную реакцию - компания может и будет отвечать за последствия, в т.ч. в лице своих руководителей персонально.

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

Анекдот в тему

Товарищ Сталин был большой любитель кино.
И лично смотрел каждый новый фильм перед тем как пустить фильм в прокат.
Однажды ему показывают новую картину про то как на одной из совецких
строек орудовал шпион-диверсант...
Сталин посмотрел кино и говорит: "С точки зрения идеологии фильм не
выдерживает критики... поэтому надо расстрелять режиссера, сценариста,
всех актеров, занятых в съемке, всю массовку и весь киноперсонал..."
Главный режиссер с бледным как простыня лицом: "Товарищ Сталин, может
быть внести изменения в сценарий??? Допустим, шпион проникается духом
совецких рабочих, перевоспитывается и становится передовиком???"

Сталин подумал, затянулся трубкой и говорит: "... ну или так..."


В общем, belonesox всё правильно написал, а city_rat дополнил, по существу сказать больше нечего. В жизни же гораздо чаще поступают "или так".

  • 1