Giter Site home page Giter Site logo

kgenprog's People

Contributors

a3636tako avatar dependabot[bot] avatar h-matsuo avatar hnyma avatar hrtwt avatar keigo01 avatar kusumoto-lab avatar mtj0928 avatar raedion avatar ryokoizuta avatar shinsuke-mat avatar t45k avatar tanimon avatar tt-kuma avatar ty-v1 avatar yoshikihigo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kgenprog's Issues

GeneratedJDTAST#getPrimaryClassNameの実装

stubが残っているので #86 でヌルポ.

// GeneratedJDTAST.java L31
@Override
public String getPrimaryClassName() {
  // TODO Auto-generated method stub
  return null;
}

担当者は arima/matsumoto どっち?
自分で割り振って作業してください

FQNにSourceFileフィールドを追加

FQNからSourceFile名への変換に必須.

ProjectBuilder.build()の中の処理として,FQNを生成しつつSourceFile名へのマッピングをメモしておく.

TargetProjectの再検討

TargetProjectの持つべき要素が足りておらず,テスト実行で困っている.例えば,TargetProjectの中身が以下だとして,

sourceFiles: ["../example01/src/jp/kusu/X.java"]      //便宜上相対パスに.絶対パスでも可
testFiles:   ["../example01/src/jp/kusu/XTest.java"] 

どこがプロジェクトのルート(../example01)で,どこがソースディレクトリ(src)か区別できない.テスト実行ではソースコードの限定名(jp.kusu.X)で処理するので,上記の区別が必須.

そもそも TargetProjectの情報 ∋ .classpathの情報 + .projectの情報 であるべき.よって最低限以下を追加すべき.

  • ルートディレクトリへのパス
  • ソースコードディレクトリへのパス(複数)
  • JUnitのバージョン

JUnitのバージョンはひとまずどうでも良い.各種パスをどう表現するを考えたい.TargetProjectは複数クラスに依存しており,さらにCLI(=UI)を左右する要因になるので,きちんと考えるべき.

javaファイルセパレータの調査と検討

プラットフォームに依存しないセパレータの書き方(使い方)を考えるべき.
例えば,

String path1 = "src/jp/a.java";
String path2 = "src" + File.separator() + "jp" + File.separator() + "a.java";

この例だと,後者がプラットフォーム非依存だが視認性が低すぎる.
一方,前者はこういうケースで問題が起きる.

String path1 = "src/jp/a.java";
assertEquals(path1, new File(path1).toString()); // 第二引数側がOSによって変化する.winでfailする.

そもそもの問題は「生Stringを扱っている」という点.
あらゆるString型のpathは,FileやPath等のクラスにラップして使うという前提を満たせるのであれば,

File file1 = new File("src/jp/a.java");
File file2 = new File("src" + File.separator() + "jp" + File.separator() + "a.java");

どちらでも問題はない.むしろ前者が見やすい.

kgenprogにおいては,基本的にString型pathは生で使わずにSourceFileクラス等でラップして使う.
よってSourceFileクラスが / を解釈してくれるべき.

一般的にはどうするのが正解か?調べるべき.
コメント求む.

junit.jarの追加

対象プロジェクトに付属しているテストコードをコンパイルおよび実行するために必要なjunit.jarを追加する必要がある.

CIとの連携

せっかくテスト書いてるので,Travis CI等のSaaS CIと連携させるべき.
緊急性は皆無.

TestExecutorMainのバグ

なんやねんこれ

final TestExecutor executor = new TestExecutor(
  new URL[] { new URL("file:./example/example01/_bin/") }); // TODO

木構造遺伝子の実装

現在の実装方法(リストに保存)に加えて、木構造の遺伝子を実装する。
β版の必須項目ではない。

テストの世界で例外を適切に処理

テストの世界は完全に例外無視で実装されているので,異常系の挙動がゴミ.
α完成後にやる予定.

そもそもKGenProg全体の方針として,例外や異常系をどのように扱うかを皆で相談して方がよさそう.

TargetProjectの持つSourceとTestの再検討

現在はこれ.

TargetProject.SourceFiles = ["BuggyCalculator.java", "BuggyCalculatorTest.java"];
TargetProject.TestFiles   = ["BuggyCalculatorTest.java"];

こうあるべきでは.

TargetProject.SourceFiles = ["BuggyCalculator.java"]
TargetProject.TestFiles   = ["BuggyCalculatorTest.java"]

「TargetProjectのデータ構造がどうあるのが自然か」という議論.
影響はProjectBuilderとTestProcessBuilderの2つ.

main起動時のconfigの検討

main起動の方法が引数で渡すだけでなく,configでどかんと渡したい.

// 引数で実行
$ main -s example01/src/main/java/ -t example01/src/test/java ...
// configで実行
$ main --config kgenprog.conf

configの中身や書式は要検討.

BuildResultsの生成

BuildResultsにビルドの結果を保持させる.

内部フィールド.

boolean isBuildFailed;
List<FQN> targetFqns;
List<FQN> testFqns;
Path outDir;
List<Path> classFiles;

使い方

final BuildResults br = new ProjectBuilder(targetProject).build(outDir);

題材プロジェクトの追加

修正対象の題材プロジェクトを追加する.
題材にmathXX等を使っても良いがライブラリ依存等が多くやっかい.
もっとシンプルな題材がほしい.

要件

  • シンプル,素,依存が少なくビルドが容易
  • 単体テストが用意されている
  • わかりやすいバグがある
  • そのバグがAPRで修正可能

GA変異経緯の理解方法の検討

可視化するとか.
GAによってじわじわ直る様を用意に理解できる方法を考えたい.

AOP的な開発者になってほしい.
全体象を眺めてほしい.

ProjectBuilderのテスト追加

テスト足したほうがよいですね.
Variantありビルドはともかく,初期ソースコードのビルド成否は確認すべき.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.