5

ある言語から別の言語へのコンバーターについて言及しているいくつかの記事を読みました。

私はそのような種類のツールの使用について少し懐疑的です。Visual BasicからJavaまたはvsコンバーターについて知っている、または経験がある人はいますか?選ぶべきほんの一例

http://www.tvobjects.com/products/products.htmlは、その点で「世界のリーダー」かそこらであると主張していますが、これを読んだ場合:

http://dev.mysql.com/tech-resources/articles/active-grid.html

そこで著者は次のように述べています。

「MySQLユーザーのコンセンサスは、MS Accessの自動変換ツールは機能しないということです。たとえば、既存のAccessアプリケーションをJavaに変換するツールは、多くの場合、作業の最後の20%を開始するよりも、作業の最後の20%を完了するのに時間がかかる80%の完全なソリューションになります。スクラッチ。"

最初の80%の機能を実装するには80%の時間が必要であり、残りの20%にはさらに80%の時間が必要です。

それで、誰かがそのようなツールを試し、それらが価値があると思ったことがありますか?

4

7 に答える 7

9

試しましたか?いいえ、実際に構築された(複数の)言語コンバーター。

これが私(および私の同僚)がB2スピリットステルス爆撃機用に構築したもので、レガシー言語であるJOVIALでコード化されたミッションソフトウェアを、100%自動変換された保守可能なCコードに変換します。要件の1つは、実際のソースコードを表示できないことでした。冗談抜き。

正解です。コンバージョン率が中程度(たとえば、70〜80%)の場合でも、実際にコンバージョンを達成できれば、コンバージョンを完了するための労力は非常に重要です。B2の場合のように、95%以上を目標とし、もっと頑張るように言われた方がうまくいきます。人々が中高速コンバーターを受け入れる唯一の理由は、より良いコンバーターを見つけることができない(または資金を提供しない!)ため、から始めることを主張し、この方法で変換するのは苦痛かもしれないという事実を受け入れるからです(通常はそうではありません)どれだけかはわかりませんが)実際には、最初から再構築するよりも苦痛は少なくなります。(私はたまたまこの評価に同意します。一般に、大規模なシステムを最初から再コーディングしようとするプロジェクトは失敗し、中程度の高い変換率のツールを使用した変換は、失敗率がそれほど高くありません。)

そこには多くの悪い変換ツールがあります。テキスト文字列の正規表現を実行するPERLコードの山と一緒に叩かれたもの、またはコンパイルユニットのステートメントごとに基本的に1対1でコードを生成するYACCベースのパーサーがあります。前者は、回心を空から落とした人々によって建てられました。後者は、適切なコンパイラのバックグラウンドを持たない善意のエンジニアによって作成されることがよくあります。

非常に悪い例については、COBOLの移行に関するこのSOの質問に対する私の回答を参照してください。レガシーCobol / PL1をJavaに移行した経験。これは、まさに直接のステートメントトランスレータです...「JOBOL」という用語を生み出したものを生成します。

このような高精度の変換率を得るには、高品質のパーサーが必要です。これは、セマンティクスを保持し、ターゲット言語のプロパティや特殊なケースに最適化する高品質の翻訳ルールを構築することを意味します。本質的には、構成可能なコンパイラーテクノロジに相当するものが必要です。私たちが成功する理由、IMHOは、この仕事をするために設計されたDMS SoftwareReengineeringToolkitです。(私は建築家です。私のSOアイコン/バイオをチェックしてください)。

注意深いテストもたくさん役立ちます。

DMSは、対象の言語用のコンパイラのようなフロントエンドを持ち、AST、シンボルテーブル、制御およびデータフローを構築し、グラフを呼び出す機能を備えているため、コンパイラがコードについて知っていることを「認識」します。これは、コンパイラコミュニティが過去半世紀にわたって発明に費やしたコンパイラテクノロジの多くを使用しています。これは、そのようなものが翻訳に役立つことが証明されているためです。

DMSは、アプリケーション全体を一度に読み取り/分析/変換できるため、ほとんどのコンパイラーが知っている以上のことを知っています。ほとんどのコンパイラは、単一のコンパイル単位に固執します。したがって、現在のステートメントだけでなく、アプリケーション全体に依存する変換ルールをコーディングできます。翻訳を改善するために、問題またはアプリケーション固有の知識を追加することがよくあります。これは、言語の特別な機能やライブラリの呼び出しを変換するときによく発生します。ライブラリの呼び出しを特別なイディオムとして認識し、ターゲットライブラリと言語構造の構成の呼び出しに変換する必要があります。

この機能は、トランスレーター(JOVIALトランスレーターなど)またはドメイン固有のコードジェネレーターを構築するために使用されます。

多くの場合、プログラム分析ツール(デッドコード、重複コード、スタイルが壊れたコード、メトリック、アーキテクチャ抽出など)や大量変更ツール(プラットフォーム[言語ではありません]移行、データレイヤーの挿入、APIの置き換え、...)

于 2010-06-12T07:03:35.803 に答える
5

より広いStackOverflow人口を引き付けるタグを持つMS-ACCESSの質問の場合はほとんどの場合そうであるように、答える人々はここで重要な質問を見逃しているように思われます。

Accessアプリケーションを他のプラットフォームに正常に変換できるツールはありますか?

そして答えは

絶対違う

その理由は、UIオブジェクトに同様のモデルを使用する同じファミリのツール(VB6など)には、Accessがデフォルトで提供するものが非常に少ないためです(Accessの連続サブフォームをVB6に変換し、機能を失わないようにするにはどうすればよいですか? )。また、他のプラットフォームはVB6やAccessと同じコアモデルを共有していないため、クリアする必要のあるハードルがさらに高くなります。

引用されたMySQLの記事は非常に興味深いものですが、開発が不十分なアプリに伴う問題と、使用されている開発ツールに伴う問題を実際に混同しています。不正なデータスキーマはAccessに固有のものではなく、[ほとんどの]初心者のデータベースユーザーに固有のものです。しかし、記事はこの問題をAccessに起因しているようです。

そして、スキーマを修正し、MySQLにアップサイジングし、フロントエンドをAccessに維持する可能性を完全に見落としています。これは、この問題への最も簡単なアプローチです。

これは、Accessを取得できない人々に私が期待していることです。彼らは、Accessをセキュリティで保護された大容量サーバーデータベースエンジンのフロントエンドとして問題の優れたソリューションにできるとは考えていません。

その記事では、Accessアプリの変換についても実際には考慮されておらず、それには十分な理由があります。Accessアプリケーションを(どのプラットフォームにも)変換すると主張するすべてのツールは、データのみを変換するか(この場合、アプリをまったく変換しません-morons!)、またはフロントエンド構造をスラブに変換します、AccessアプリケーションとターゲットアプリのUIオブジェクトが1:1で対応しています。

これは機能しません。

Accessのアプリケーション設計はそれ自体に固有であり、他のプラットフォームは同じ機能セットをサポートしていません。したがって、Access機能を、変換されたアプリケーションの元の機能の代わりに機能するように変換する必要があります。私の意見では、これは自動化された方法で実行できるものではありません。

次に、AccessアプリをWebブラウザーにデプロイするために変換することを検討している場合、アプリケーションモデル全体が異なります。つまり、ステートフルからステートレスになります。したがって、サポートされていないいくつかのAccess機能だけでなく、完全に異なるものです。 UIオブジェクトがデータとどのように相互作用するかの基本モデル。おそらく、100%バインドされていないAccessアプリは、比較的簡単にブラウザーベースの実装に変換できますが、そのうちのいくつがありますか?これは、サブフォームをまったく使用しないAccessアプリ(バインドを解除できないため)と、リッチイベントモデルの少数のイベントのみを使用するアプリ(ほとんどはバインドされたフォーム/コントロールでのみ機能する)を意味します。つまり、100%バインドされていないAccessアプリは、Access開発パラダイム全体と戦うものになります。Accessでバインドされていないアプリを作成したいと思っている人は、そもそもAccessを使用するべきではありません。Accessの全体的なポイントはバインドされたフォーム/コントロールだからです。これを排除すると、他の開発プラットフォームに対するAccessのRADの利点の大部分が失われ、見返りとしてほとんど何も得られません(コードが非常に複雑になることを除けば)。

Accessアプリケーションと同じタスクを実行するWebブラウザーにデプロイするアプリを構築するには、アプリケーションのUIとワークフローをゼロから再設計する必要があります。成功したAccessアプリケーションモデルは成功したWebアプリケーションモデルとは正反対であるため、機能する変換や変換はありません。

もちろん、このすべての変更は、Access2010およびSharepointServer 2010 withAccessServicesで行われます。その場合、Accessで(Webオブジェクトを使用して)アプリをビルドし、Sharepointにデプロイして、ユーザーがブラウザーで実行できるようにすることができます。結果は機能的に100%同等(および視覚的に90%)であり、すべてのブラウザーで実行されます(ここではIE固有の依存関係はありません)。

したがって、今年の6月以降、ブラウザーでの展開用にAccessアプリを変換する最も安価な方法は、A2010にアップグレードし、すべてのWebオブジェクトを使用するように設計を変換してから、Sharepointで展開することです。Access Webオブジェクトはクライアントオブジェクトと比較して機能のセットが限られているため、これは簡単なプロジェクトではありません(たとえば、VBAがないため、古いマクロよりもはるかに強力で安全な新しいマクロを学習する必要があります。これは、Accessのレガシーマクロに精通している人にとってはひどい困難ではないように思われるかもしれませんが、Webに展開するための本格的な再設計よりもはるかに少ない作業である可能性があります。

もう1つは、AccessクライアントでもWebブラウザーでも同じであるため、エンドユーザーの再トレーニングが不要なことです(Webオブジェクトのバージョンは元のクライアントのバージョンと同じであるため)。

つまり、変換はキメラであり、ほとんどの場合、努力する価値はありません。実際、私は引用された感情に同意しています(そのソースからの他のコメントに多くの問題がある場合でも)。しかし、私はまた、変換の欲求が誤って導かれ、Accessアプリを上から下に大規模に交換する必要のない、より安く、より簡単で、より良いソリューションを見逃していることにも注意します。データストアとしてのJet/ACEに対する不満は、Accessアプリケーションも置き換える必要があると人々を混乱させることがよくあります。そして、多くのユーザー開発のAccessアプリは、ひどい、保守不可能な妥協点で満たされ、チューインガムとベイルワイヤーでまとめられているのは事実です。

それはそれが簡単だという意味ではありません-それは非常にしばしばそうではありません。私がいつもクライアントに言っているように、古い家を改造するよりも新しい家を建てる方が通常は簡単です。しかし、私たちが古い家を改造する理由の1つは、私たちが失いたくないかけがえのない特性を持っているからです。Accessアプリには、新しいアプリ(古いNetscapeの難問、ペースJoel Spolsky)で失われてはならない多くのビジネスルールとワークフローのモデリングが暗黙的に含まれていることがよくあります。これらのことは、別のプラットフォームに移植しようとしている外部の開発者には明らかではないかもしれませんが、エンドユーザーにとって、アプリが古いアプリと比較して1ペニー離れた結果​​を生成する場合、それらは不幸になります(そしておそらくあるべきです、

とにかく、私はあまりにも長い間歩き回っていましたが、私の意見では、最も些細なアプリ(または変換されるように設計されたアプリ、たとえば100%アンバウンドAccessアプリ)を除いて、変換は機能しません。私はすべて、交換の代わりに改訂する必要があります。

しかし、もちろん、それが私の生計を立てている方法です。つまり、Accessアプリを修正する方法です。

于 2010-06-12T20:49:18.100 に答える
2

言語間変換の成功または失敗に影響を与えるいくつかの問題は、言語の相対的なセマンティックの豊富さと、それらのセマンティックモデルです。

  • C ++からCへの変換は比較的簡単ですが、Cから慣用的なC ++への変換は、手続き型プログラムをOOプログラムに自動的に変換することはほぼ不可能であるため、ほぼ不可能です。

  • JavaからCへの変換は比較的簡単ですが、ストレージ管理の処理は面倒です。Cプログラムがファンキーなポインター演算を実行したり、整数とさまざまな種類のポインター間でキャストしたりした場合、CからJavaへの変換はほぼ不可能になります。

  • 関数型言語から命令型言語への翻訳は非常に簡単ですが、結果はおそらく非効率的で非慣用的です。命令型言語から関数型言語への翻訳は、おそらく最先端の技術を超えています....命令型言語のインタープリターを関数型言語で実装しない限り。

これが意味することは、一部の翻訳者は、次の点で他の翻訳者よりも必然的に成功するということです。

  • 翻訳の完全性と正確性、および
  • 結果のコードの可読性と保守性。
于 2010-06-12T10:07:43.757 に答える
2

絶対にやるべきでないこと、パートIジョエル・スポルスキー

「....彼らは、ソフトウェア会社が犯す可能性のある最悪の戦略的ミスを1つ犯すことによってそれを成し遂げました。

彼らはコードを最初から書き直すことにしました。」

のウェブサイトにMSAccessコンバーターのリストがあります。私が毎日読んでいるAccess関連のニュースグループの投稿で、それらについて良いことを聞いたことがありません。そして、私は毎日たくさんの投稿を読んでいます。

また、Accessには、バインドされた連続フォームやサブフォームなど、他のシステムで再現するための作業が多い、かなりの量の機能があることにも注意してください。必ずしも多くの作業ではありませんが、より多くの作業が必要です。そして、アプリを配布してインストールするときになると、さらに多くの問題が発生します。

于 2010-06-12T21:01:47.843 に答える
1

C#からVisualBasic.NETへの自動コンバーターを使用しました。If Trueいくつかの不要なステートメントを追加することを除いて、それはかなりうまく機能しました。

また、 ShedSkinを使用してPythonからC++に変換しようとしましたが、新しいスタイルの分割がサポートされていないため、機能しませんでした。

于 2010-06-12T07:12:59.463 に答える
0

私はVB6プロジェクトをVB.Netに変換するためのツールを使用しました。これは、おそらくこの種のもののより単純な例の1つになることを願っています。私の経験では、すべてを詳細にチェックする必要があり、半分が欠落しているか間違っていました。

確かに、手動での移行をお勧めします。または、ターゲットとする言語に応じて、コードベースに大幅な改善を加える機会があれば、完全な書き直しを検討します。

マーティン

于 2010-06-12T07:26:31.360 に答える
0

私はコンバーターのために無料で基本的な有料を試しただけです。しかし、主な問題は、変換が完全に成功したことを確信するのが非常に難しいことです。

通常、これらは、コードの各部分を確認するコードセクションを一度に手動で変換するために最もよく使用されます。多くの場合、私の経験では、変換ではなく書き換えがより良いオプションであることがわかります。

于 2010-06-12T08:57:01.150 に答える