Table of Contents
重要なシステムにおけるダウンタイムのコストが高い
航空宇宙、エネルギー、輸送、医療などの分野では、ソフトウェアの故障は単なる不便ではありません。これは、壊滅的な結果につながる可能性があります。例えば、ニューヨーク証券取引所の2015年は、失われた取引で何百万の費用を費やします。しかし、病院の注入ポンプのソフトウェアの不具合は、患者の命を危険にさらす可能性があります。重要なエンジニアリングシステムでは、セキュリティ上の危険、規制上の罰則、および評判の損傷にカスケードすることができます。 再構成は、そのメカニズムが変更されることなく、外部の行動を削減し、新しいリスクを低減する必要があります。
ダウンタイムの最小化のためのコアリファクタリング原則
ミッションクリティカルな環境で効果的な再構築は、次の3つの柱に残ります。[]:], 増分変化], []]]]防御テスト[]]]]]]。 行動保存は、すべてのリファクタリングステップがシステムの観察可能な出力を同一に残すことを保証します。 攻撃性が、各回帰還する可能性は、各々の決定的なテストが低下しません。
安全な再ファクタリングのための重要な戦略
並列ランとシャドウモード
影モードでは、再構成されたコンポーネントは元のシステムと並んで実行され、同じ入力を処理するが、その出力をサイレントに破棄します。 エンジニアは、ライブ操作に影響を与えずに差を検出する結果を比較します。 自信が高ければ、シャドウコンポーネントはプライマリ状態に促進することができます。 この技術は、コアアルゴリズムや補正がパラマウントされるデータ処理パイプラインに特に便利です。
特集 トグル
機能トグル(またはフラグ)を使用すると、構成スイッチの後ろに再ファクタリングされたコードをラップすることができます。 再ファクタリングされたパスは、明示的にオンにされるまで非アクティブのままで、チームが徐々に有効化したり、問題が発生した場合に即座にロールバックする能力を与えます。 重要なシステムでは、トグルは、実行時間の変更から予期しない動作を避けるために、むしろ静的(デプロイメントタイムで設定)すべきです。
カナリアのリリース
カナリア解放は、過半数が安定したバージョンに継続しながら、再ファクタードシステムへのトラフィックの小さな割合を指示します。 このアプローチは、生産負荷の下で現実的な検証を提供します。 カナリアショーが高まるエラー率や遅延を示す場合は、すぐにトラフィックを再ルートすることができます。 物理的な機器を制御するエンジニアリングソフトウェアの場合、カナリアリリースは、ミラーの生産が、ライブ操作から隔離される専用のテスト環境を必要とするかもしれません。
青緑色の展開
青緑色の展開は、同じ環境を2つ維持します。 “青” (現在の安定) と “緑” (再製造). 緑の環境の徹底的な検証の後, トラフィックは、単一の原子操作で青から緑に切り替えられます. 問題が発生した場合, 青への切り替えは、すぐに発生します. この戦略は、状態のないアプリケーションに有効であり、慎重にデータ同期と州のシステムに適応することができます.
計画された維持のWindows
最善の努力にもかかわらず、いくつかの再ファクタリングは、透明に導入することはできません。このような場合には、システム負荷が最も低いときに、定義されたメンテナンスウィンドウの期間のスケジュール変更。窓をステークホルダーに明確に伝え、ロールバック手順が再ヒースされ、文書化されていることを確実にします。ピークの運用期間または重要な期限の直前にすぐに変更を再ファクタリングすることは決してありません。
強力なテストパイプラインの構築
ユニットとインテグレーションテスト
包括的なテストスイートは、重要なシステムには非交渉可能です。 ユニットテストは個々の機能を確認します。統合テストでは、既存のコンポーネントと正しく再構築されたモジュールが相互に作用することを確認します。 のチェックツール を使用して、未テストされたコードパスを特定します。 安全批判的なソフトウェアについては、 フォーム認証] または フォームベースのテスト[FLT:[FLT:] ] を標準でチェックして、標準の動作確認を解除するかどうかを確定します。 [FLT:] は、標準の動作が、 変更されていない動作を確定します。 [FLT: [FLT:] 変更する場合には、 変更された動作が、 変更された動作が、 変更された動作が、 は、 チェックされていない動作が、 チェックされているか? [FLT: [FLT: [FLT: [FLT: [FLT: [FLT: [FLT: [FLT: [FLT: [FLT:] は、 は、 は、 は、
回帰テストと継続的統合
コミットのキャッチエラーを初期に実行する自動回帰テスト。連続統合(CI)パイプラインは、数分でフル回帰スイートを実行する必要があります。重要なシステムの場合、 のパフォーマンス回帰テスト]を実行して、再ファクタリングがタイミングやリソースの使用を劣化させないようにします。 ]]回帰テストスイート]]メンテナンスは、バグを修正するとき、再ファクタリングが再ファクタリングを行う前にテストを追加します。
レジリエンス検証のためのChaos Engineering
チェオスエンジニアリングは、意図的に、それがストレスの下で動作する方法を観察するために、システムに失敗を注入します。 再ファクターコンポーネントに適用し、それは、再構築によって導入された変更または新しい故障モードを持つ仮定を明らかにすることができます。 ]のようなツールChaos Engineeringは、ネットワークのパーティション、リソースの排気、またはトラフィックの突然のバーストをシミュレートすることができます。 この規準は、NetflixやAmazonなどの組織によって採用され、レジリエンスシステムが余裕がないことを確認することができます。
重要なシステム再構築のための実装手順
アセスメント・プランニング
システムアーキテクチャの徹底的な分析から始まります。 よく定義されたモジュールを特定し、高いテストカバレッジを持ち、安全批判的なパスから隔離されています。 依存グラフを使用して、衝撃を理解します。 リスクとビジネス価値によって候補者を再構築するランク。 エンゲージメントドメインの専門家 - ハードウェアの制約、動作条件、および規制要件を知っているエンジニア - 計画を検証します。
バージョン管理とロールバック
変更を再ファクター化することは、変換を記述する明確なコミットメッセージで、別のブランチにコミットしなければなりません。 作業を開始する前に安定したリリースをタグ付けします。 ロールバックプランは、コードの反転だけでなく、データベースの移行や構成の変更を一元化する必要があるだけでなく、詳細にする必要があります。 ステージング環境でロールバック手順を練習して、インシデント中に2番目の性質になります。
ステージング環境
ハードウェア、ネットワークトポロジー、データ量をミラーリングするステージング環境は、安全なリファクタリングに不可欠です。ここでは、フルテストスイートとパフォーマンスベンチマークを実行します。物理的な機械(例えば、ロボットコントローラ、パワーグリッドモニター)とインターフェイスするソフトウェアでは、ステージングには、実際の入力と出力を再現するシミュレーションループが含まれている必要があります。ステージングが通過した後にのみ、すべての基準は、生産に変化が進む必要があります。
監視および観察性
後処理監視は、機能的な矯正と運用健康の両方を追跡しなければなりません。 エラー率のスパイク、レイテンシの増加、およびリソース消費変化の[]を]]]を設定してください。 再ファクタリングされたコードパスを使用して、リクエストに従うために、分散トレースを使用します。 重要なシステムでは、ソフトウェアだけでなく、異常のための接続されたハードウェアを監視します。 少なくとも1サイクルの動作を事前に比較し、後処理メトリックを比較するダッシュボードを維持します。
クリティカルコードの一般的なリファクタリングテクニック
再製造技術が同じように安全であるわけではありません。機械的、可逆的であるものを好みます。
- メソッドを抽出します。 - 読みやすさを改善するために、新しいメソッドにコードのブロックを移動します。抽出されたメソッドが副作用を加えないことを確認してください。
- []変数または関数[の名前を変更します。 実行を変更せずに明確化します。 すべての参照をキャッチするためにIDE-サポートの名前再ファクタリングを使用してください。
- マジックナンバーをシンボル定数に置き換える - メンテナンス中に混乱を引き起こす可能性のあるハードコードされたリテラルを排除します。
- 条件式式を簡素化[ - ガード節やスイッチステートメントに複雑なケースを分解しますが、すべてのブランチの排気テストの後にのみ。
- [パラメータオブジェクト[ - 方法署名の複雑性を減らすためにグループ関連のパラメータを単一のオブジェクトにグループ化します。
各技術は、次なる前に分離、テスト、そして約束で適用されなければなりません。 []]ソフトウェア改善グループの安全クリティカルシステムの再構築に関するホワイトペーパーは、高信頼性環境のための適切なアプローチを選択するための実用的なガイダンスを提供します。
リスク緩和とガバナンス
コード レビューとペアプログラミング
再ファクター化のコミットは、システムに精通した少なくとも2つのエンジニアによって審査されなければなりません。 再ファクター化セッション中にペアプログラミングは、些細な間違いを防ぎ、知識の転送を促進することができます。 見直しは、行動の保全、テストカバレッジ、および再ファクター計画に従順に焦点を合わせるべきです。
エキスパート検証
重要なドメインでは、物理、化学、またはソフトウェアがエンコードする操作ロジックを理解したサブジェクト・マッターの専門家(SME)を含みます。 SMEは、名前変更された変数が、フィールドで広く使用されている省略と対立しているか、または、抽出されたメソッドは、タイミングに敏感なシーケンスで操作を無関係に並べ替える可能性がある。
諮問委員会の変更
より大きな認定システム(例えば、avionics、核原子炉制御)の一部であるソフトウェアのために、任意のコード変更は、変更制御ボードからの承認を必要とする場合があります。 評板は、再ファクタリング計画、リスク評価、ロールバック戦略、および検証の証拠を見直します。 業界の基準(例えば、DO-178C、IEC 61508)に準拠したフォーマットで、リファクタリングアフェラとテスト結果を文書化することで、監査性が保証されます。
コンテンツ
再ファクター化は、それ自体が終わりではありません - それは重要なエンジニアリングソフトウェアを安全に、維持可能、そして弾力性を保つための手段です。 リスクを最小限に抑える増分的な変化、厳格なテスト、および展開戦略を適用することにより、エンジニアはダウンタイムを起こさずに技術的な債務を減らすことができます。 キーは、安全中心的な環境の他の変化と同じ懲戒処分と再ファクターを処理することです。計画的に、テストは、常にロールバックの準備が整っています。 正しく行われると、コードを中断することなく、堅牢なシステムに変形させる。