web-dev-qa-db-ja.com

プロジェクトで自動生成されたコードを検出するにはどうすればよいですか?

私は、ソフトウェアプロジェクトの下請け業者を管理する中規模の半政府組織で働いています。私たちの請負業者の1人が、最近契約したプロジェクトの「ソースコード」を提出しました。私はコードが自動生成されていると強く思います。これは、いくつかの理由で私を悩ませます(それらのいくつかは以下でも言及されています ソースコード生成はアンチパターンですか? )。例えば。:

  • 手作業で作成した場合、コードは思ったよりもずっと大きいと思います
  • したがって、このコードを維持することははるかに困難になります
  • これは実際にはソースコードではないため、コメントはまったくありません(またはトークンのみ、役に立たないコメント)。コードベースの意味のある構成(たとえば、ライブラリなど)を作成するための努力は明らかに行われていません。人間のメンテナにとって意味がある
  • 請負業者は、ソースコードを私たちに引き渡す義務を回避する方法として、また将来の保守契約を保護する目的でもこれを使用しています(または、少なくとも実際のアクセス権を持たない他の入札者よりも有利です)ソース)。

請負業者はまた、生成されたソースに人工的なランダム性を注入する巧妙な作業を行って、これが手動で記述されたという印象を与えています。

私の雇用主/納税者は、はっきりと証明できない何か賢いことをしたと賭けて、あいまいな赤い線の上を進んで進んで行く悪意のある下請業者にだまされていると感じています。

これが他のソフトウェアによって自動的に生成されたことを検出して証明する方法はありますか?

3
humblemike

あなたの会社がソースコードだけでなく、将来自分でコードを変更したい場合に備えてコードを説明するためのいくつかの用語も含む契約を結ぶのに十分賢いことを願っています。

それはあなたに請負業者に監査を依頼する機会を与えるかもしれません、そこであなたの誰かが彼らと一緒に数時間か1日のペアプログラミングをします。そのようなセッションはかなり啓発的であるべきです。

契約に(少なくとも、将来の契約については)GPLの条項に類似した条項を そのライセンスの下で公開する必要があるソースコードを(= /// =)記述することも良い考えかもしれません 。それはそれをそれを変更するための作業の好ましい形式として定義します( こちら を参照)。

したがって、提供されたソースが後でシステムを維持するのに効果的ではない場合、これは契約違反と見なされる可能性があります。

3
Doc Brown

私たちのチームは最近似たようなものを持っていました、そして私たちの救いは私たちの企業が請負業者とであった契約でした。通常、その契約には SonarQube などのツールを使用したコードの品質に関する条項があり、それが私たちの救いでした。契約には、コードの品質に関する条項があり、生成されたすべてのボイラープレートは、品質の問題を通過しないように作成されました。その後、請負業者は元のコードを私たちに送信する必要がありました。

4
Balbu

これが他のソフトウェアによって自動的に生成されたことを検出して証明する方法はありますか?

私はコードがかなり反復的であると想定しています。これは生成されたコードではありませんが、あなたがそれを説明する方法と一致します。

この種のコードを生成する方法は2つ考えられます。

  1. 社内のcodegenツールとその入力を作成(またはライセンスなど)します。生成されたコードを少しランダム化して配信します。
  2. 有能な開発者に1つまたは2つの初期ケースを記述させ、それらの開始ケースをコピーして貼り付けることにより、インターンでいっぱいの部屋に仕様のセクションを断片的に実装させます。

SCM履歴の監査を依頼できない限り、2つのコードからを区別するための信頼できる方法は考えられません。請負業者にとって、どちらがより妥当であるか、またはより安価であるかを推測することさえ本当にしたくありません。いくつかの問題は、本当に怠惰なコピー貼り付けに向いています。

私はちょうどコードからを上に述べました、なぜなら代替は彼らがライセンスしたcodegenツールを見つけるか、それについて告げる内部告発者を見つけることです。

いずれの場合でも、つまりdoがコードが生成されたことを何らかの方法で証明したとしても、ビジネスケースはその品質にあり、そのレベルの品質がどのように達成されたのかではありません。


PS。コード生成は間違いなくnotアンチパターンですが、実際のソースの代わりに生成されたコードを確実に配信(またはコミット)しますis

4
Useless

コード生成には正当なケースがありますが、Wordドキュメントと同等のものがHTMLとして保存されている場合、実際に探しているのは、なんらかのコード品質測定です。

私の経験では、これを自動化する方法は本当にありません。入力したもの(推奨のSonarQubeなど)は、基準を可能な限り低いレベルに自動入力するだけで回避できます。

///
// this method Retrieve Foos
/// 
public List<Foo> RetrieveFoos()

請負業者と協力して、ソース管理を所有し、ステージ1からのコードレビューに関与していることを確認してください。しかし、これはあなたがこれを耕作したいのか、それとも家に残したいのかという疑問を本当に抱きしめます。

プロジェクトを送信するのではなく、契約プログラマーを雇ってあなたの下で働かせることもできます。おそらく外部企業は、コード生成を使用することでより早く達成できると感じており、これは価格に反映されています。

2
Ewan