Какой самый важный кусок кода вы написали и как вы к нему подошли? - PullRequest
7 голосов
/ 06 октября 2008

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

Как вы подготовились к написанию такого кода: методологически, интеллектуально и эмоционально?

Редактировать

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

Ответы [ 9 ]

5 голосов
/ 06 октября 2008

Я написал драйвер для устройства измерения артериального давления для использования в больнице. Если это «не удается», пациент не будет проверять свое кровяное давление в назначенное время; если его кровяное давление является ненормальным, сигнал тревоги (в большей системе) не сработает. Такое событие может быть клинически значимым.

Мой подход состоял в том, чтобы полностью прочитать спецификацию / документацию в нерабочей среде (чтобы избежать соблазна сразу начать кодирование), а затем снова прочитать ее на работе. После этого я подытожил возможные состояния и действия на бумаге и «составил блок-схему» алгоритма, а также прокомментировал все возможные «плохие события» в реальном мире (отсоединение кабелей, отмирание батарей и т. Д.). Наконец, я написал и переписал драйвер три раза, каждый с различными механизмами (например, FSM), и сравнил их результаты. Каждая итерация помогла мне выявить слабости, которые я еще не обнаружил. Третьим переписыванием стал «официальный» результат. Я проверял каждую итерацию со своим коллегой.

Эмоциональная подготовка состояла в том, чтобы убедить себя в том, что если произойдет немыслимое, по крайней мере, я не был преднамеренно небрежным - просто некомпетентным (старое оправдание «я всего лишь человек»). ; -)

5 голосов
/ 06 октября 2008

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

3 голосов
/ 07 октября 2008

Не совсем ответ, но:

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

3 голосов
/ 06 октября 2008

Я написал компьютерный интерфейс для МРТ машины. У него не было шансов нанести ущерб конечному пользователю, поскольку это было просто управление записями, но потенциально оно могло поставить неправильный диагноз или опустить важную информацию.

Тесты, много-много тестов.

Юнит-тесты, тесты среднего и высокого уровня. Имитация всех возможных комбинаций ввода. Также большое количество испытаний с самим оборудованием. Тестирование должно быть выполнено полным и методичным способом. На тестирование должно уйти гораздо больше времени, чем на написание.

Сообщение об ошибке

Все ошибки должны сообщаться и быть очевидными. Если патенту не помешает это сделать, быстро потерпите неудачу.

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

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

2 голосов
/ 07 октября 2008

Я слышал сумасшедшие истории о процессах, которые использовались для написания кода в НАСА для космических кораблей. Каждая строка кода содержит около 10-20 строк документации, вместе с тестами, полной историей изменений и т. Д. Каждый раз, когда обнаруживается ошибка, проверяется и исправляется не только код, но и вся процедура написания кода, вся команда. цепочка и т. д. проверяется, чтобы ответить на вопрос: «Что случилось неправильно в нашем процессе, что позволило этой ошибке быть включенной в первую очередь?»

2 голосов
/ 06 октября 2008

Сейчас я работаю над некоторым базовым кодом для системы, которая извлекает информацию о медицинских пациентах из клиник и больниц для медицинского биллинга. Мы начинаем с меньшего клиента и продолжительного периода взлома, чтобы обеспечить качество, но в конечном итоге этот код должен надежно обрабатывать большое разнообразие форматов отчетов от множества клиентов на разных объектах.

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

1 голос
/ 07 октября 2008

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

если это не удастся, то, вероятно, туристы не смогут получить нужную информацию, в которой они больше всего нуждаются, обмануться посредниками или потеряться где-то:)

1 голос
/ 07 октября 2008

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

0 голосов
/ 07 октября 2008

Хотя нет ничего более важного, чем аппарат МРТ или монитор артериального давления, я действительно решил переписать «Блэкджек», когда работал на провайдера онлайн-гемблинга. Блэкджек - безусловно, самая популярная онлайн-игра, и миллионы долларов собирались пройти через это программное обеспечение (и сделали).

Я написал игровой движок отдельно от сервера и клиента и использовал Test Driven Development, чтобы убедиться, что то, что я предполагал, получилось в результатах. У меня также был «сервер» -обертка, который имел консольный вывод, который позволял мне играть. На самом деле это было полезно только потому, что имитировал реальный интерфейс сервера, поскольку играть в текстовую версию блэкджека не очень весело или просто («Вы рисуете 10. У вас есть 10 и 6, а у дилера 6 показ. [bsd]> ")

Игра все еще запускается на некоторых сайтах, и, насколько мне известно, после долгих лет игры у нее никогда не было финансовых ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...