なぜ複雑なシステムでは障害が発生しやすいのか
医療や輸送、発電といった複雑なシステムでは、大きな障害が発生することがあります。
複雑なシステムで障害が発生しやすい理由をシカゴ大学医学部教授のリチャード・クック氏がまとめています。
How Complex Systems Fail
https://how.complexsystems.fail/
一般的に、複雑なシステムにおける大規模な障害は、複数の小さな不具合が積み重なることで引き起こされています。
しかし、これらの不具合を完全に取り除くことは不可能だとクック氏は語ります。
システムの設計時には、限られた時間の中で求められる要件を満たしたシステムを設計することが求められます。
そのため、目立った障害を引き起こす大きな不具合は設計段階で取り除くことができますが、目立った障害を起こさない小さな不具合はシステムに残り続けてしまいます。
これらの小さな不具合を取り除くには、長い時間と多額の費用が必要です。
(以下略、続きはソースでご確認下さい)
Gigazine 2021年01月04日 06時00分
https://gigazine.net/news/20210104-complex-system/
引用元: ・【システム】なぜ複雑なシステムでは障害が発生しやすいのか [すらいむ★]
で、終わり、だよねぇ
だよねえ。
で終わってた
中身がないな
単純なら障害が発生し難い
昔からの常識だ
>>7
だな。常識だわ。
つまり、複雑大規模なシステムは当然ながら多数の部品から構成されている。
それら1つ1つの故障発生確率があるが、直列部品の非故障率の積が全体の
非故障率になる。 たとえば電力網では、発電所・送電線・変電所のいずれか1つが
故障したら停電になる。 それぞれの非故障率が99%であったら、全体としては
0.99×0.99×0.99= 0.97 で97%まで信頼性は下がる。
デスマーチでコードレビュー全ステップやるの無理だろ
デバッグしないからだよ
今、デバッグしてるのがどんな奴らで
どのようなデバッグしてるか知ってるか?
デバッグを専門にやってる奴らが
プログラムからバグを一つ残らず駆逐する事をせず
最初に期間を決めて、その期間が過ぎたら
”仕事はコレで終わりましたwww”
って風にデバッグしてるからだよ
当然の事として不具合は必ず起こるのだよ
保守を仕事にしてる俺らにしてみりゃ
”契約で決めた期間、一生懸命頑張りました
だからひとまずコレで終わりとします”
なんて仕事はした内に入らない
保守の方は大変ですね
金がかかるからだよ
法的要件を知らなかったためにプログラムに含まれなかったロジックも、法的要件を満たすこととする場合はバグだよ。
プログラムばっかり見てても絶対にバグはなくならないから、バグのないプログラムは無いって言われるわけで。
抽出目標はそういうことにも目を向けるきっかけになるから、悪いやり方とは思わない。
デバッグしてもバグは残る
一口にバグと言ってもコードだけでなくインフラや要件と組合わさり膨大な条件になる
保守やってるのにそんなこともわからないの?
やったこともないくせに偉そうにw
今の経済システムも政治システムも複雑だよね。障害とか発生してる?
してるな
ロボット等で自動制御できない
>>1
> How Complex Systems Fail
> なぜ複雑なシステムでは障害が発生しやすいのか
「なぜ」 why なんて言ってない。how 「どのように」だ。
このスレのレスもなぜを前提にしておかしなことになってる
そもそも仕様が完璧であるという保証などどこにもない。
崇高な理念で概念設計された新機軸のシステムほど、あちこちの整合性をとるのが大変。
プログラムがハードウェアやOSや言語レベルから
すべてトランズアクションをベースにして構築されたら良いかもしれない。
必ずロールバックできる。何か処理を1段階するたびにプログラムで検証を行う。
さらに、ある条件(法則)が満たされるべきことを宣言しておくと、
トランズアクションのステップ単位でその条件が満たされているかをチェックして、
それが成立しなければ、ロールバックして、条件の成立が破れていることを
伝えて、システムが対処処理に入るためのプログラムルーチンに移行する。など。
もちろん、処理の実行速度はとても低下するだろう。
しかし現状のプログラミング言語によるプログラムの現実は、
ある処理が行われるコードのピースが、満たすべき条件を本当に満たす処理に
なっているのかは、プログラマの想像力だけによって支えられており、
机上でデバックをするにしても、テストデーターはすべてを尽くすことは
できない。論理的に正当な証明が伴わなければ、「上手く行かない場合が存在しない」という”悪魔の証明”は無理だが、そこはプログラマの直感だけに頼って
いるので、だいたいうまくいく、たいていうまくいく、といったプログラムコード
が納期に間に合わせるためもあって、適当に書かれて動かされているのが現実だ。
よく使われるOSのコードといえども千行に1つを越えるバグの密度があるのが
普通であり、デバイスドライバーの類いのコードまで入れたら1億行あるなどと
噂されているWindowsのコードなどどれだけ地雷が埋まっているか分かったもの
ではない。OSが地雷を秘めているのに、その上に開発された基礎ルーチンや
アプリケーションコードが完璧に動作する保証もないし、それらのルーチンや
アプリケーションにもバグが埋まっている。そうして、デバイスのハードや
ファームにもバグがあるし、通信や電源も完璧に動作するばかりではない。
むしろ通信はエラーがあってあたり前のものである。チェックサムだけで
100%完璧ということはない。僅かながら間違って伝わる確率は常にある。
チェックしてロールバックする機構を入れるとそいつもバグを踏む事になる
インターネットにヒントが隠されています。
インターネットは巨大なシステムで、たびたび障害が発生しますが
全面的なダウンは登場以来一度もないのです。
なぜか?
実はインターネットはアメリカの軍が戦時に敵の攻撃を受け
一部が破壊されても全体は機能し続けることが出来る様な
システムとして設計したのです。
文字通りネットワークでありどこかが壊れても即時に別の経路に
切り替えることが出来ます。
生存性の高いシステムが必要であれば
そのようなシステムを設計すれば良いのです。
それは可能なのです。
設計思想はダウンしない方向だけど、現実の実装・運用は思想通りじゃないからな
22: 名無しのひみつ 2021/01/04(月) 13:35:24.79 ID:5aJiML5G
複雑になればなるほどバグに遭遇する確率が増えるから。
複雑に考えすぎる事になるぞ
数時間でいつも破綻するな、
英単語100個暗記だけ という単純学習計画ならたいてい達成
勉強が暗記することなら、それはまず失敗する
なぜならマルチタスクを組むことで緊張がかかり
アドレナリンとノルアドレナリンが放出される
これは運動にはいいけど、暗記をかなり阻害する作用がある
あれ企業体質や補助支援システムに社会的組織として破綻し続けてるだけ
コスト掛けたくないってこと。言わせんな
当たり前だろ!
って言いたくなったけど、パイバスラインとか切替号機とかどこ行ったの?
障害は発生してもいいんだよ。というか必ず発生するのだから障害前提で考える
障害が発生しても動き続けるシステムを持てばよい
東証みたいなアホなシステム体制では無くね
動き続けるように設計されたはずのものが止まるとめんどくさいぞ
計算間違えながら動き続けるくらいならさっさと止まってくれた方がいい場合もあるけどな
IT業界って結局は地頭のよさで決まっちゃうんだよな
仕様とかSQLとか複雑さが増す度に倍々で難易度が上がっていく。
本やネットでいくら勉強しても、複雑なシステム固有の問題には地頭のよさがないと対応出来ない。
でも、そういう人って絶対数が少ない。
大手ITで6割、中小だと3割いるかどうか
で、不運な能力不足の人が、そういう複雑なシステムの担当リーダーになった時にプレッシャーで潰れて鬱になって脱落していく
SESの場合、いつでもそういう現場に放り込まれるリスクがある
そんで、組まされた部下が使えない人だったら鬱までまっしぐら
クーラーは30年前のが現役なのに
シンプルにするのがモジュール化
プログラミングならさらにオブジェクト化とかまである
それで保守で欠陥やバグがあっても局所化で対応時間を短縮する
システムが単純で造りが頑丈、使いやすいし、製造しやすい。
それは単純なシステムより複雑だからだよ
なんで?