別の言い方をすれば、失敗することのないコードを作成しました。心臓モニター、水質検査、経済の基礎、ミサイルの軌道、またはスペースシャトルのO2濃度を扱うプロジェクトに携わった人々からの意見を聞きたいと思います。
この種のコードを書くためにどのように準備しましたか:方法論的、知的、そして感情的に?
編集
担当者の問題が人々の返信を妨げている場合に備えて、このwikiにマークを付けました。この問題については、これまで以上に多くの視点があると思いました。
別の言い方をすれば、失敗することのないコードを作成しました。心臓モニター、水質検査、経済の基礎、ミサイルの軌道、またはスペースシャトルのO2濃度を扱うプロジェクトに携わった人々からの意見を聞きたいと思います。
この種のコードを書くためにどのように準備しましたか:方法論的、知的、そして感情的に?
編集
担当者の問題が人々の返信を妨げている場合に備えて、このwikiにマークを付けました。この問題については、これまで以上に多くの視点があると思いました。
私はそこで説明されていることに個人的には関わっていませんが、この記事があなたの質問の精神に貢献することを願っています: 彼らは正しいものを書きます。
病院で使用する血圧測定器のドライバーを書きました。「失敗」した場合、患者は予定された時間に血圧をチェックされません。彼の血圧が異常である場合、(より大きなシステムでは)アラームはトリガーされません。このようなイベントは、臨床的に重要である可能性があります。
私のアプローチは、非作業環境で仕様/ドキュメントを徹底的に読み (すぐにコーディングを開始する誘惑を避けるため)、それから職場でもう一度読むことでした。その後、考えられる状態とアクションを紙にまとめ、アルゴリズムの「フローチャート」を作成し、現実世界で発生する可能性のあるすべての「悪いイベント」 (ケーブルが抜かれたり、バッテリーが切れたりするなど) に注釈を付けました。最後に、それぞれ異なるメカニズム (FSM など) を使用して 3 回ドライバーを書き直し、それらの結果を比較しました。反復するたびに、まだ発見していない弱点を特定することができました。3回目の書き直しは「公式」の結果でした。各反復を同僚と確認しました。
感情的な準備は、考えられないことが起こった場合、少なくとも私は故意に怠慢ではなく、単に無能であると自分自身に納得させることで構成されていました (古い「私はただの人間だ」という言い訳)。;-)
本当に答えではありませんが、:
レーザー眼科手術装置用の組み込み制御ソフトウェアを作成している友人がいます。自身がレーザー眼科手術を受けたときは、必ず自社のシステムを利用する眼科に通っていた。私はこの男に大きな憧れを持っています。私がこれまでに書いたソフトウェアの中で、自分の視覚を信頼できるほど品質のレベルが高かったものは思い浮かびません。
私は、MRI 装置へのコンピューター・インターフェースを作成しました。単なる記録管理であるため、エンド ユーザーを傷つける可能性はありませんでしたが、誤った診断を行ったり、重要な情報を省略したりする可能性がありました。
テスト、たくさんのテスト。
単体テスト、中レベルおよび高レベルのテスト。可能なすべての入力の組み合わせをシミュレートします。また、ハードウェア自体を使った大量のテスト。テストは、完全かつ系統的な方法で行う必要があります。書くよりもテストに多くの時間がかかるはずです。
エラー報告
すべてのエラーは報告され、明白である必要があります。そうしても特許が損なわれない場合は、すぐに失敗してください。
積極的に人を生かしている何かの場合、事態はさらに悪化します。決して機能を停止してはなりません。失敗した場合は、再起動して試行を続ける必要があります。ハードウェアに障害が発生した場合に備えて、内部の冗長化も必須です。
間違った会社で働くことは、本当に難しい状況になる可能性があります。しかし、物事がうまくいっていて、十分な資金があり、解放圧力が高くなければ、非常にやりがいのある仕事をすることができます。
現在、診療所や病院から医療費請求事務所の医療患者情報を取得するシステムの基本コードに取り組んでいます。品質を確保するために、小規模なクライアントと長い慣らし期間から始めていますが、最終的には、このコードは、さまざまな施設の多数のクライアントからの多種多様なレポート形式 を安全に処理する必要があります。
それはあなたの例と完全に同じ規模ではありませんが、悪い間違いは間違った人に請求されたり、正しい人に古い住所に請求されたり(信用報告書をねじ込んだり)、個人情報の盗難にさらされる可能性があります。致命的。そうそう、それは医者がそれほど早く給料をもらえないことを意味するかもしれません。これは、特にビジネスの観点からも重要ですが、データの保護と整合性と同じクラスではありません。
NASA でスペースシャトル用のコードを作成するために使用されたプロセスのクレイジーな話を聞いたことがあります。コードの各行には、テスト、完全な改訂履歴などとともに、約 10 ~ 20 行のドキュメントがあります。バグが見つかるたびに、コードが評価されて修復されるだけでなく、コードの記述手順全体、コマンド全体チェーンなどをレビューして、「そもそもこのバグが含まれる原因となったプロセスで何が問題だったのか?」という質問に答えます。
MRI 装置や血圧計ほど重要なものはありませんが、オンライン ギャンブル プロバイダーで働いていたときに、Blackjack の書き直しを依頼されました。ブラックジャックは断然最も人気のあるオンライン ゲームであり、このソフトウェアには数百万ドルが費やされました (実際に実行されました)。
サーバーとクライアントとは別にゲーム エンジンを作成し、テスト駆動開発を使用して、想定どおりの結果が得られるようにしました。また、プレイできるコンソール出力を備えたラッパー「サーバー」もありました。テキスト版のブラックジャックをプレイするのはあまり楽しくも簡単でもないので、これは実際には実際のサーバー インターフェイスを模倣したという点でのみ役に立ちました (「あなたは 10 を引きます。あなたは今 10 と 6 を持っていますが、ディーラーは 6 を持っています。 [bsd] >")
ゲームはまだいくつかのサイトで実行されており、私の知る限り、何年にもわたってプレイした後も金銭的なバグはありませんでした.
私の最初の「本当の」ソフトウェアの仕事は、定位脳手術を計画するための GUI アプリを作成することでした。テスト、テスト、テスト... 正式な方法はまったくなく、エンジニアリングスタイルの考えであり、若いプログラマーがそれを実行しているだけです。彼らがソフトウェアを使用してレーザーでロボットアームを制御することについて話し始めたとき、深刻な工学的方法が整っていないので、私は少し心配になり、より多くのオフィスの土地に向かった.
私は、バリ島の地方政府の文化および観光部門向けの情報システム アプリケーションを作成しました。これは、いくつかの観光目的地にインストールされ、文化、地図、宿泊施設などに関する広範な情報を提供します。
それが失敗した場合、おそらく観光客は最も必要とする適切な情報を得ることができなかったか、ブルッカーにだまされたか、どこかで迷子になりました:)