コードとソフトウェアインテリジェンスレイヤーを連携させる

ソフトウェアインテリジェンス:コードと意思決定の間にある、欠けていたレイヤー

あらゆる大企業は、完全に理解していないソフトウェア上で業務を遂行している。例えば、40年間同じCOBOLコアで取引処理を行ってきた金融機関。15バージョン、3世代の開発者を経てロジックが蓄積された生産スケジューリングシステムを採用している製造業者。コードの動作以外にはどこにも存在しない業務ルールをポリシー管理システムに組み込んでいる保険会社。これらの組織は無知なわけではなく、チームは熟練した経験豊富な人材で構成されている。しかし、ソフトウェアは個々の開発者の理解をはるかに超える規模に成長し、ドキュメントは誰も気づくずっと前からコードの更新に追いついていなかったのだ。

ソフトウェアインテリジェンスとは、このギャップを埋める学問分野であり、技術です。それは、ソフトウェアシステム、その構造、依存関係、動作、品質、リスクを体系的に分析し、その分析結果をエンジニアリングチーム、アーキテクト、ビジネス意思決定者が活用できる実用的な知識に変換する能力です。従来のソフトウェアツールはコードの実行時に何が起こるかを教えてくれますが、ソフトウェアインテリジェンスはコードの内容、構成、接続関係、変更時に何が壊れるかを教えてくれます。それは、システムを運用することと、システムを理解することの違いです。

所有するすべてのデータ構造を検索する

SMART TS XL すべてのデータ間の関連性をマッピングすることで、チームは品質上の問題がユーザーに到達する前に発見できます。

もっと詳しく知る

ソフトウェアインテリジェンスとは何か?

ソフトウェアインテリジェンスとは、ソフトウェアシステムを体系的に分析し、構造、動作、品質に関する洞察を生み出すことで、エンジニアリング上の意思決定、リスク管理、戦略立案に役立てる手法です。静的コード分析、依存関係マッピング、影響分析、視覚化を組み合わせることで、ソフトウェアシステムの内部構造を、チーム、ツール、そしてシステムの内容を正確に把握することに依存する組織プロセスにとって理解しやすいものにします。

この用語は、文脈によって異なる意味を持ちます。ビジネスインテリジェンスツールでは、「ソフトウェアインテリジェンス」とは、顧客によるソフトウェア製品の使用方法、機能採用率、ユーザーフロー、エラー率に関する分析を指す場合があります。AIや機械学習の文脈では、「インテリジェントソフトウェア」とは、自律的に動作を適応させるシステムを指します。この記事で取り上げるエンタープライズITおよびソフトウェアエンジニアリングの文脈では、ソフトウェアインテリジェンスとは、開発チームがコードベース、プログラム、依存関係、データフロー、ビジネスロジック、および変更に伴うリスク状況を深く自動的に理解できるようにする分析機能を具体的に指します。

ソフトウェアインテリジェンスとビジネスインテリジェンス

ビジネスインテリジェンスは、ビジネスデータ、取引、顧客、収益、業務などを分析し、企業が何をしているのかについての洞察を提供します。ソフトウェアインテリジェンスは、ソフトウェアコード、プログラム、モジュール、依存関係、スキーマ、ワークフローなどを分析し、ソフトウェアシステムの内容と動作についての洞察を提供します。

次元ビジネス·インテリジェンスソフトウェアインテリジェンス
分析対象ビジネスデータ(取引、イベント、指標)ソフトウェア構造(コード、依存関係、スキーマ)
プライマリ出力ダッシュボード、レポート、KPI依存関係マップ、影響分析、コードメトリクス
誰が使うのかビジネスアナリスト、経営幹部ソフトウェアエンジニア、アーキテクト、ITマネジメント
重要な質問に回答その企業は何をしているのか?このソフトウェアには何が含まれていて、どのように接続するのですか?
実行時ライブビジネスデータを継続的にソースコードベース、オンデマンド、または継続的に
企業価値運用の可視性エンジニアリングリスク管理と変更管理

ソフトウェアインテリジェンスとインテリジェントソフトウェア

これら2つの用語は、同じ語彙を使用しているため、しばしば混同されます。ソフトウェアインテリジェンスとは、既存のソフトウェアに適用される機能、つまり既に存在するものを分析・理解する能力のことです。一方、インテリジェントソフトウェアは、新しいソフトウェアの特徴であり、AI、機械学習、ルールエンジンなどを用いて適応的に意思決定を行うシステムのことです。

ソフトウェアインテリジェンスプラットフォーム SMART TS XL レガシーCOBOLプログラム、最新のJavaサービス、そしてそれらの中間にあるあらゆるものを含むエンタープライズソフトウェアを分析し、それらのシステムに関する構造的な知識を生成します。これは、AIの意味でのシステムのインテリジェント化ではありません。システムを可読性、つまり可視化、クエリ実行、そして安全な変更を可能にするものです。

ソフトウェアインテリジェンスプラットフォームの構成要素

包括的なソフトウェアインテリジェンスプラットフォームは、5つの分析次元にわたる機能を提供します。これらの次元を組み合わせることで、企業チームは、ドキュメント、開発者の知識、従来の監視方法では得られない、ソフトウェア環境全体に対する包括的な可視性を得ることができます。

静的コード分析

静的コード解析は、ソースコードを実行せずに分析し、品質上の問題、セキュリティ上の脆弱性、コードの臭い、構造的なパターンなどを特定します。実行中のシステムを必要とする動的解析とは異なり、静的解析はソースコード自体を対象とするため、メインフレームシステムで実行されるコード、最新のランタイムツールを持たない言語で書かれたコード、複数の言語で書かれたコードを同時に分析できます。

ソフトウェアインテリジェンスの文脈では、静的コード分析は、コード品質メトリクス(複雑性、重複、保守性指標)、セキュリティ上の発見事項(脆弱性パターン、安全でないコーディング手法、漏洩した認証情報)、および依存関係マッピングと影響分析レイヤーに供給される構造データ(関数定義、変数宣言、モジュール境界)の3種類の出力を生成します。

依存関係のマッピング

依存関係マッピングは、ソフトウェアシステムのあらゆるコンポーネント間の関係を追跡します。どのプログラムが他のどのプログラムを呼び出すか、どのモジュールがどのライブラリをインポートするか、どの関数がどのデータベーステーブルにアクセスするか、どのデータセットがどのプログラムからどのコンシューマーに流れるかなどです。依存関係マップはシステムの構造モデルであり、「これを変更したら、他に何が影響を受けるか?」という問いに答えることを可能にするグラフです。

大規模なエンタープライズシステム、特に複数の言語とプラットフォームにまたがるシステムでは、依存関係マッピングは言語の境界を越える関係性を処理する必要があります。例えば、JavaサービスがDB2テーブルに書き込み、そのテーブルからPythonパイプラインが変換を行うといったケースです。単一言語の依存関係ツールでは、このような言語間の連鎖を把握することはできません。すべての言語を理解し、それらのモデルを統一されたグラフに接続できるプラットフォームだけが、完全なカバレッジを提供できます。

影響分析

影響分析では、依存関係マップを使用して、提案された変更に関する特定の質問、つまり「どのコンポーネントが影響を受けるか」に答えます。変更対象のコンポーネントから始めて依存関係グラフをたどることで、影響分析は、変更対象の要素に直接的または間接的に依存するすべてのモジュール、機能、プログラム、およびデータセットを列挙します。列挙された影響範囲は、テスト計画、変更リスク分類、および変更アドバイザリーレビューの根拠となります。

影響分析を行わない場合、変更の範囲はコードを書いた開発者によって見積もられます。一方、影響分析を行うと、範囲はコードの実際の構造から導き出されます。大規模システムでは、これら2つの見積もりは大きく異なり、その差が本番環境でのインシデント発生の原因となります。

コード全体を対象としたエンタープライズ検索

ソフトウェアインテリジェンスの文脈におけるエンタープライズ検索とは、ソフトウェアシステムのあらゆる要素、あらゆる関数、あらゆる変数、あらゆるフィールド定義、あらゆるSQL文、あらゆるプログラム名を、記述言語に関係なく、コードベース全体にわたって数秒で検索できる能力を意味します。汎用IDE検索が1つのプロジェクトと1つの言語を対象とするのに対し、エンタープライズコード検索は、すべての言語にわたるシステム全体を同時に検索します。

エンタープライズ検索は、大規模で馴染みのないコードベースを扱う際の作業体験を一変させます。200個のCOBOLプログラム、50個のJCLジョブストリーム、およびJavaサービスレイヤーを保守するチームに加わった開発者は、何日もかけて手動でコードを読み解くのではなく、検索クエリで必要な情報を見つけることができます。データベーススキーマの変更を計画しているアーキテクトは、動的に構築されたクエリを見落とす可能性のあるリポジトリ横断的なgrepではなく、すべてのプログラムにわたって特定の列を参照するすべてのSQLステートメントを数秒で見つけることができます。

コードの視覚化

コード可視化は、静的解析と依存関係マッピングによって生成された構造データを、システムアーキテクチャ、依存関係、および複雑性の状況を示す図に変換します。手作業で維持するには数週間かかるような図も、コードから自動的に生成されるため、システムの進化に合わせて常に最新の状態を維持できます。

視覚化は、さまざまなユーザー層にそれぞれ異なる形で役立ちます。開発者は、馴染みのないコードを理解するためにコールグラフやデータフロー図を使用します。アーキテクトは、構造変更を計画するためにコンポーネント図や依存関係マップを使用します。ビジネス関係者は、計画段階やコンプライアンスレビュー中にシステム範囲を理解するために簡略化されたフローチャートを使用します。運用チームは、パフォーマンスの問題を診断する際に、リクエストの流れを追跡するためにシーケンス図を使用します。

ソフトウェアインテリジェンスの実践:企業における活用事例

レガシーシステムの近代化

ソフトウェアインテリジェンスの最も高度な応用例は、レガシーシステムの近代化、すなわちCOBOL、PL/I、またはRPGアプリケーションをメインフレーム環境から最新のクラウドネイティブアーキテクチャに移行することです。根本的な課題は移行技術ではなく、知識のギャップにあります。レガシーシステムには、何十年にもわたる文書化されていない変更、明示的なインターフェースではなく共有データによって形成される暗黙的な依存関係、そしてコードの動作の中にのみ存在するビジネスロジックが蓄積されています。

ソフトウェアインテリジェンスは、移行作業を開始する前に、このギャップを体系的に解消します。プログラムインベントリは、対象となるすべてのコンポーネントを特定します。依存関係マップは、それらの接続関係を明らかにします。影響分析は、提案された変更によって何が影響を受けるかを示します。ビジネスロジック抽出は、各プログラムが実際に何をするかを文書化し、移行後のシステムを検証するための仕様を提供します。このような構造的な基盤がなければ、移行は計画段階ではなく、テスト段階や本番環境で、最もコストのかかる予期せぬ問題に直面することになります。

変更管理とリスク評価

大規模なソフトウェア環境においては、変更管理の原則として、提案された変更を承認する前に、その範囲を把握することが不可欠です。ソフトウェアインテリジェンスは、変更諮問委員会が開発者の見積もりではなく、実際のシステム構造に基づいて承認決定を下すために必要な構造的な証拠を提供します。

変更が承認される前に、影響分析によって検証が必要なすべての依存コンポーネントが特定されます。複雑性指標は、変更されたコンポーネントが単純なものか、高リスクのものかを示します。依存関係の可視化は、変更されたコンポーネントがシステムの他の部分とどのように接続されているかを示します。これらを組み合わせることで、非公式な「これで何が壊れると思いますか?」という会話に代わる、エビデンスに基づいた変更影響評価が作成されます。

技術デューデリジェンス

組織が買収、提携、またはコンプライアンス監査の目的でソフトウェアシステムを評価する際、技術的なデューデリジェンスでは、コードベースの客観的な評価、すなわち、品質、保守性、セキュリティ体制、技術的負債、および複雑性の評価が求められます。ソフトウェアインテリジェンスプラットフォームは、この評価を大規模に自動化し、手動レビューでは数週間かかるような構造分析を数時間で実行します。

ソフトウェアインテリジェンスによる技術的デューデリジェンスでは、コードベース全体におけるコード品質指標の分布、セキュリティ脆弱性の密度と深刻度、技術的負債比率と修復コストの見積もり、古くなったライブラリや廃止されたライブラリを含む依存関係の健全性、アーキテクチャの結合度と凝集度指標、デッドコードの割合などが対象となります。これらの指標は、ビジネス上の意思決定に役立つリスク分類と修復コストの見積もりに直接反映されます。

開発者のオンボーディングと知識移転

大規模なソフトウェアシステムを運用するあらゆる組織は、継続的な知識移転という課題に直面しています。経験豊富な開発者が退職したり、他の組織に移ったりする一方で、新しい開発者は、当初から関わっていなかった人には理解できないように設計されたシステムを理解しなければなりません。ソフトウェアインテリジェンスプラットフォームは、構造化されたドキュメントと検索機能を提供することで、この知識移転を容易にします。

不慣れな COBOL プログラムに取り組む新しい開発者は、エンタープライズ検索を使用して特定のフィールドが使用されているすべての場所を検索し、依存関係マップを使用して変更中のプログラムと連携するプログラムを理解し、視覚化を使用してより広範なシステム アーキテクチャにおけるプログラムの位置を確認できます。これらすべてを、この知識を頭の中に持っている同僚にアクセスすることなく実行できます。COBOL の専門家の知識移転の文脈で説明されているように、退職する開発者が持つ暗黙知は、システム内で最も重要でありながら、最も文書化されていない資産であることがよくあります。

継続的な品質監視

ソフトウェアインテリジェンスを、特定の変更の直前だけでなく継続的に適用することで、プロアクティブな品質管理が可能になります。具体的には、品質指標が時間とともにどのように変化するかを追跡したり、複雑性がチームの管理能力を超える速度で増大していることを検出したり、過剰な変更リスクが蓄積しているファイルを特定したり、新しいコードが本番環境に到達する前にセキュリティ脆弱性を導入した場合に警告を発したりすることができます。

CI/CDパイプラインでは、継続的なソフトウェアインテリジェンスによって、開発段階で構造標準を強制する品質ゲートが提供されます。循環的複雑性のしきい値を超える新しい関数はビルドに失敗し、重大な静的解析結果がマージをブロックし、アーキテクチャに循環依存関係を導入する変更はレビューをトリガーします。これにより、品質管理はリリース後の監査から開発中のフィードバックへと移行し、修正コストが最も低い段階で問題を検出することで、品質問題のコストを削減できます。

多様なユーザー層に向けたソフトウェアインテリジェンス

ソフトウェアインテリジェンスの価値は役割によって一様ではなく、異なるユーザーは同じ基礎となる構造分析から異なる種類の価値を引き出す。

職種主な用途キー出力
ソフトウェア開発者見慣れないコードを理解し、依存関係を追跡する呼び出しグラフ、相互参照、コード検索
ソフトウェアアーキテクト計画変更、構造リスクの評価依存関係マップ、影響分析、複雑性ヒートマップ
IT管​​理変更承認、リスク監視影響範囲レポート、品質指標、技術的負債比率
セキュリティチーム脆弱性評価、コンプライアンス静的解析によるセキュリティ上の発見、依存関係の脆弱性データ
ビジネスアナリストシステム範囲の理解、コンプライアンスの証拠簡略化された図、プロセスフロー文書
M&Aとデューデリジェンスコードベース品質評価品質指標、負債比率、リスク分類レポート

認定条件 SMART TS XL ソフトウェアインテリジェンスを提供します

SMART TS XL IN-COMのSoftware Intelligence®プラットフォームは、複数の言語、プラットフォーム、およびテクノロジー世代にまたがるソフトウェア資産を運用するエンタープライズ組織向けに特別に構築されています。ほとんどのソフトウェア分析ツールは単一の言語内で動作しますが、 SMART TS XL COBOL、JCL、Java、Python、.NET、RPG、PL/I、SQLなどを同時に網羅する統合インテリジェンスモデルを構築します。

静的コード分析機能は、環境内のすべてのコンポーネントについて、品質メトリクス、セキュリティ検出結果、および構造データを提供します。アプリケーション依存関係マッピングは、すべてのコンポーネントが他のすべてのコンポーネントとどのように接続されているかを示す、言語横断的な依存関係グラフを構築します。影響分析機能により、このグラフをクエリ可能にします。提案された変更から、影響を受けるコンポーネントの完全なセットを列挙できます。JCL展開機能は、カタログ化されたプロシージャのシンボルパラメータ置換を含むメインフレームジョブ制御言語を解決し、すべてのバッチジョブに関係する実際のプログラムとデータセットを表示します。エンタープライズ検索機能により、統合モデルを検索可能にします。すべての言語にわたるソフトウェア資産のあらゆる要素を数秒で検索できます。コード可視化機能は、依存関係モデルを、あらゆる対象者にシステム構造を伝えるナビゲーション可能な図に変換します。

このプラットフォームは、ソフトウェア資産が個人の完全な理解を超える規模と複雑さにまで成長し、体系的で自動化された、常に最新の構造分析の価値が最大限に高まる環境向けに設計されています。レガシーシステムの近代化を計画している組織、複雑なシステムの変更を管理している組織、技術的なデューデリジェンスを実施している組織、または迅速かつ確実なエンジニアリングを可能にする開発者知識インフラストラクチャを構築している組織にとって、 SMART TS XL それを可能にするソフトウェアインテリジェンス層を提供する。

エンタープライズITにとってソフトウェアインテリジェンスが不可欠な理由

企業組織で稼働するソフトウェアの量は、その管理、ドキュメント作成、開発者の知識、手動コードレビューといった非公式な手法では構造的に不十分なレベルにまで拡大している。ドキュメントは常に不完全で、たいていは古くなっている。開発者の知識は分散していて一貫性がなく、それを保有する人と共に失われてしまう。手動コードレビューは時間がかかりすぎ、レビュー担当者のシステムに対する既存の知識に過度に依存する。

ソフトウェアインテリジェンスは、この構造的な不備に対する体系的な解決策です。開発者の知識を置き換えるのではなく、それを拡張・維持し、個々のメンバーに集中させるのではなく、チーム全員が利用できるようにします。ドキュメントを置き換えるのではなく、コードから直接構造ドキュメントを生成し、コードの進化に合わせて常に最新の状態を維持します。コードレビューを置き換えるのではなく、レビュー担当者が変更を正確に評価するために必要な構造的なコンテキストを提供する自動分析機能を提供します。

ソフトウェアインテリジェンスインフラストラクチャに投資する組織は、複合的なメリットを得られます。あらゆる変更は、見積もりや仮定ではなく、正確な構造モデルに基づいて行われます。あらゆる移行は、断片的な発見ではなく、完全な知識に基づいて計画されます。あらゆる新規開発者は、長年蓄積された暗黙知ではなく、ナビゲーション可能で検索可能なシステム表現に基づいてオンボーディングを行います。意思決定の根拠となる情報が向上するため、エンジニアリング上の意思決定の質も向上します。これこそがソフトウェアインテリジェンスの価値提案であり、複雑なソフトウェア環境を持つ組織が、ソフトウェアインテリジェンスをツールではなくインフラストラクチャとして扱う理由です。