kusumotolab / kgenprog Goto Github PK
View Code? Open in Web Editor NEWA High-performance, High-extensibility and High-portability APR System
License: MIT License
A High-performance, High-extensibility and High-portability APR System
License: MIT License
see https://github.com/kusumotolab/kGenProg/wiki/20180606-meeting
--root-dir
オプションを追加したにも関わらず,rootDir
を使用していない.
@Deprecated
な rootDir
を指定しない TargetProject
のコンストラクタを呼び出している.
example/README.mdに一覧を書く?
TargetSourceFileとTestSourceFileを作る.
ストロングな型でAPIを呼び出したい.
テスト派:FQN + 行番号
GA派:ファイルパス+ASTノード
言葉がぜんぜん違う.どうあるべきか.
共通言語でできないか.
stubが残っているので #86 でヌルポ.
// GeneratedJDTAST.java L31
@Override
public String getPrimaryClassName() {
// TODO Auto-generated method stub
return null;
}
担当者は arima/matsumoto どっち?
自分で割り振って作業してください
FQNからSourceFile名への変換に必須.
ProjectBuilder.build()の中の処理として,FQNを生成しつつSourceFile名へのマッピングをメモしておく.
TargetFQNとTestFQNを作る.
see #57
この issue がちゃんと通知されていればおk
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のバージョンはひとまずどうでも良い.各種パスをどう表現するを考えたい.TargetProjectは複数クラスに依存しており,さらにCLI(=UI)を左右する要因になるので,きちんと考えるべき.
プラットフォームに依存しないセパレータの書き方(使い方)を考えるべき.
例えば,
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クラスが /
を解釈してくれるべき.
一般的にはどうするのが正解か?調べるべき.
コメント求む.
対象プロジェクトがresources読み込む場合,rootDirに移動しないと正しく動作しない.
対象プロジェクトに付属しているテストコードをコンパイルおよび実行するために必要なjunit.jarを追加する必要がある.
せっかくテスト書いてるので,Travis CI等のSaaS CIと連携させるべき.
緊急性は皆無.
なんやねんこれ
final TestExecutor executor = new TestExecutor(
new URL[] { new URL("file:./example/example01/_bin/") }); // TODO
現在の実装方法(リストに保存)に加えて、木構造の遺伝子を実装する。
β版の必須項目ではない。
テストの世界は完全に例外無視で実装されているので,異常系の挙動がゴミ.
α完成後にやる予定.
そもそもKGenProg全体の方針として,例外や異常系をどのように扱うかを皆で相談して方がよさそう.
Args4J を利用
とりあえず今は簡単のためStringだが,ourDirはPathの方が良い
#49 の後
Location location = GeneratedSourceCode.solve(fqn, lineNumber);
// イメージ
see #38
- projectBuilder.build(outDirPath);
+ projectBuilder.build(targetProject.getInitialVariant());
#45
案外ヘビーっぽい
現在はこれ.
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 -s example01/src/main/java/ -t example01/src/test/java ...
// configで実行
$ main --config kgenprog.conf
configの中身や書式は要検討.
BuildResultsにビルドの結果を保持させる.
内部フィールド.
boolean isBuildFailed;
List<FQN> targetFqns;
List<FQN> testFqns;
Path outDir;
List<Path> classFiles;
使い方
final BuildResults br = new ProjectBuilder(targetProject).build(outDir);
レーベンシュタイン距離だと内部クラスがあるときにバグる
修正対象の題材プロジェクトを追加する.
題材にmathXX等を使っても良いがライブラリ依存等が多くやっかい.
もっとシンプルな題材がほしい.
要件
Locationは抽象的すぎる.ファイルのLocationにも見えてしまう.
可視化するとか.
GAによってじわじわ直る様を用意に理解できる方法を考えたい.
AOP的な開発者になってほしい.
全体象を眺めてほしい.
ログを表示するための --verbose
オプションを CLI に追加する
各種ビルドツールに合わせてTargetProjectを勝手に初期化させたい.
build.gradle (gradle)
pom.xml (maven)
build.xml (ant)
.classpath & .project (eclipse)
.iml & .idea/ (intellij)
テスト足したほうがよいですね.
Variantありビルドはともかく,初期ソースコードのビルド成否は確認すべき.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.