コードを論理グラフに変換することは可能ですか?
編集:
私が考えているのは、数学は絶対的なものだということです。確かに正しいか間違っているかを判断することができます。しかし、コードの場合、ロジック以外のものがあります。私がやりたいのは、その「何か」を削除して、ロジックをそこにのみ保持することです。
それが可能だ。フローチャートは論理グラフであり、コンピューターで簡単に生成できます。すべてのコード構造には、対応するフローチャート構造があります。
クイック Google が持ち上がった: Code Visual to Flowchart
これが正確に何を意味するのかはわかりませんが、clang 解析コードのような静的アナライザーは、コードが取る可能性のあるすべての分岐を決定し、エラーをチェックします。たとえば、コードが与えられた..
1. if(somefunction()){
2. this_will_break();
3. } else {
4. if(anotherfunction()){
5. printf("%i", str(something));
6. }
7. print("this is fine");
8. }
次のような出力が得られます。
Line 1. Taking true branch.
Line 1. Error: Function this_will_break is not defined
Line 4. Taking true branch.
Line 5. Warning: Function passed incompatible type
これらのパスをグラフ化できる可能性がありますが、なぜそうしたいのかわかりません (実際には何も表示されません)。
似ている可能性のあるもう 1 つのアイデアはGprof2Dot です。これはプロファイリング データを取得し、各関数の実行にかかる時間、どの関数がそれを呼び出したかなどを示す階層的な Graphviz チャートを描画します。
最後に思い浮かぶのは、ShakeやQuartz Composerなどのノードベースのアプリケーションです。これは、「視覚的にプログラミング」する方法であり、次のようなコードを表しますAdd(Blur(MyImage), Blur(AlphaChannel))
。
[MyImage]--->[Blur]----\/
[Add]
/\
[AlphaChannel]----------
これらは論理グラフではありませんが、コードを視覚的に表現する方法であり、おそらくいくつかのアイデアを提供する可能性があります..多分..私が完全に誤解していない限り..
少なくとも逆は可能です。シーメンスの PLC をプログラミングする場合、より一般的なプログラミング形式の 1 つは、グラフィカルにプログラミングする「ラダー ロジック」です。
それとも、クラス図とシーケンス図を使用したリバース エンジニアリングされた UML のようなものですか?
コード自体ほど価値はありません、IMO。意味のある複雑度に達すると、図やグラフ全体を取り込むことは不可能です。そして、効果的にグラフ化できる問題は、努力する価値がありません。
あらゆる種類のグラフィカル表現のデバッガーや単体テストはありません。
写真とデザインの価値は、問題を十分に理解してコーディングできるようになることです。しかし、その点に到達すると、それらを工学図面と同等にすることの限界的な有用性は、努力する価値がないと私は主張します.