---
# System prepended metadata

title: B4奥原：研究打ち合わせ

---

1.コードの進化とテストの関係
2.自動プログラム修正・テストの自動生成
3.GPT-4 コード翻訳
4.クローンネタ

webアプリケーション
https://ieeexplore.ieee.org/abstract/document/6567821?casa_token=EMDicnwFQ-EAAAAA:nkrDcQouWQGpEUb0Mk3g6kUe2zx3Hz52m7Qv314Kn28642rzLpihxJ8o73v6eNTzhezFO0_C2xoG

## 12/10 中間発表
- 研究の目的
  - 企業コードを調べるはやめるのありでは？
  - php のフレームワークララベルにおけるクローン
- ストーリーを作る
  - なんで検出を行うのか
  - phpが少ない
  - フレームワーク
- LCSはクローンなのか
- グラフの説明ちゃんとする。
  - グルーピング
  - 何が読み取れるのか
- スライドをちゃんと作る
  - 口頭での説明が多すぎる
  - ウォーターホールモデルいらないのでは？
  - なくても良い
- modelとモデルなどの表現の混在

https://link.springer.com/chapter/10.1007/978-3-319-32467-8_47
コードクローン検索手法の調査
https://www.jstage.jst.go.jp/article/jssst/39/3/39_3_47/_article/-char/ja/
クローン分類しゅほう
https://ieeexplore.ieee.org/document/809750

# 1001 中間発表
- PHP全体にするのか
- フレームワークを使用しているのかしていないによる違いについて説明できるといい
https://github.com/cartalyst/sentry_
- 範囲を狭くして深いことをするのか
    - クローンとして判定されたメソッド同士について編集者が同じなのかを調べる
- 色々なプロジェクトについて調べて、プロジェクトの分布等について調べられたら良いのか
- フレームワーク起因によるものなのかを判定できるのか
- スライドのタイトルが同じところを気を付ける

- 1人目: 奥原さん
    - 松下先生
        - 調査対象のコード量は？
            - メソッドは1,500
        - 規模が小さいわけではない？
            - OSSよりも大きい
        - 企業名を出すことはできる？
            - 今確認中
            - コードを丸々出さなければ大丈夫
            - 実例を出すことができる
        - Larabelを使っている他のアプリケーションはあるのか？Larabelの場合にたまたまその結果になったと突っ込まれたときに答えられる？
            - Larabelについてはある程度の規模があり、githubを使っているものをあげた
            - 余裕があればその他も見たい
    - 神田先生
        - 最終的な目的としては、何がメイン？
            - 企業が開発したシステムにおけるコードクローンを調査したい
            - それがたまたまWebアプリだった？
            - Web企業でフレームワークを使うと、開発効率は向上するが、保守性が下がると思うので、それを調査したい
            - タイトルを決めるときに、今のタイトルだと何がメインなのか絞るのが難しそう
        - コードクローンを見つけたときに、フレームワークによるものか見分けられそうか？
            - 手作業になりそう
        - ここがReact、ここがそうじゃないというのは結構曖昧
        - フレームワークによるものか、そうでないかは判定基準を定めておいた方が良い
    - 肥後先生
        - 他のOSSのPHPのプロジェクトも、フレームワークを使っている・使っていないでクローン数が変わるのか
        - クローンになっているメソッドを見つけたときに、同じ開発者によるものかどうかを調べられそうか？
            - 大丈夫
    - LCSの部分を見つけるツールは？
        - 自分で作る

# 0929 意味のないクローンを省く
https://sel.ist.osaka-u.ac.jp/lab-db/betuzuri/archive/575/575.pdf
![image](https://hackmd.io/_uploads/HymQRRQCA.png)




```
line 778:54 no viable alternative at input 'if ($this->{$col} && isset(self::Q2_LABELS['
line 778:54 no viable alternative at input 'isset(self::Q2_LABELS['
line 778:54 missing ';' at '['
line 778:66 mismatched input ')' expecting ';'
line 779:40 missing ';' at '['
line 793:54 no viable alternative at input 'if ($this->{$col} && isset(self::Q4_LABELS['
line 793:54 no viable alternative at input 'isset(self::Q4_LABELS['
line 793:54 missing ';' at '['
line 793:66 mismatched input ')' expecting ';'
line 794:40 missing ';' at '['
line 810:40 missing ';' at '['
```


# ララベル　オープンソース
https://qiita.com/acro5piano/items/8dc4597e12d9050c0708

# 先行研究調査
- Reactフレームワークとコードクローン
- https://sel.ist.osaka-u.ac.jp/lab-db/Bthesis/archive/170/170.pdf
- 

# 8/5 研究打ち合わせ
- webフレームワーク　Laravelにおけるコードクローン

前提
- webフレームワークによって開発はしやすい
- フレームワークに標準で備わっている機能が多く存在するため短期間の開発には向いている
- 長期的に見た場合には要件定義等を確実に行なっていない短期間の弊害が出やすい可能性
- 決まりきった書き方である程度書けば動く
-> コードクローンは必然的に増える？

研究内容
- クローンの原因がフレームワークを使用したことによるものなのか。そうであればもっと洗練させた書き方などがないのか
    - これをどうやって判定させるかが課題
- バージョンアップによって進化しているのか(書き方が洗練されているのか)
    - 問題点：バージョンをまたがるようなプロジェクトを見つけるのが大変な可能性
    - 同じ動作でも複数の書き方が存在しているので何を持って良いと判断するか

現状と当面の目標
- phpのプログラムにおいてクローン部分が検出できるようにする
- 構文木の作成自体はできているが、一部構文定義が足りないところが存在
- if文の括弧などをifと紐付けて処理できるようにする

- 先行研究
- 既存研究に対して
- オープンソースに対しても実験を行えるように
- 1月(鹿児島)か3月(奄美)に発表

---
　python pip
https://github.com/antlr/antlr4-tools

https://github.com/antlr/grammars-v4/blob/master/php/README.md

# LCSの実装
```
delimiters=[" ", ",", "\n", "\t", "(", ")", "{", "}", ";", ":", "=", "=>", "->"],
```

## １回目の出力
- アロー演算子による一致が目立つ->tokenとして切り分けないように変更

## 2回目
- lcsを二つのメソッドのうち長さが短い方を分母として率を計算
https://github.com/Jamese-P/clone_detect/blob/master/output_20240704194351.json
```
  {
    "method1": "Mypage/Contract.delivery_update",
    "method2": "Buyer/Register.view_claim",
    "lcs": 14,
    "lcs_percent": 0.7,
    "lcs_string": "public function ( ) { return ( ) ( ( ) ) ; }"
  },
```
- 基本的な構文や括弧のみによって一致率が上がってしまっているものもある
- 一致した文字列が元の文字列でどれくらい隣り合っているかを数値化したい
    - 復元時に一致している文字列から次に一致するまでの文字列までの長さを数える、それの平均値を出す->高いほど一致率が低い(間に無駄なトークンを含んでおりクローンではない可能性が高い)


# 2024/06 以前

- フレームワークにおけるコードクローンの調査
- 

プルリクエスト型開発への統合を目的としたコードクローン修正支援システム CLIONE*
https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=571

### 読んでみる：コードクローンの自動集約に基づく削減可能なソースコード行数の測定
https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=565
- 参照わたしでパラメータを渡す
    - そのパラーメーラーへの代入を考えているからであり、そのような場合はリファクタリングしない方がいい気がする
- 新たな一つのクラスに集約したメソッドを定義
    - 継承関係などに考慮しきれていない
- クローン凝集後に実行するテストとはどのようなものなのか

### Evosuite
https://www.evosuite.org/
- tutorial 3までのコマンドを実行して正常に動作することは確認
- どのオプションで何ができるかを理解しきれていない

### クローン
NIL: Large-Scale Detection of Large-Variance Clones
https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=567

機能等価メソッドデータセットを利用した
LLM によるコードクローン検出の精度向上
https://sel.ist.osaka-u.ac.jp/lab-db/betuzuri/archive/1288/1288.pdf
- メソッドとして完全に機能が同じメソッドのデータセットとメソッドの一部のみが等価のデータセットを用いて実験
- 後者は精度の向上があまり見られなかった

### メソッド追跡
https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=516
- oracleとは？
- finergit

### 機能等価メソッドデータセット作成
https://sel.ist.osaka-u.ac.jp/lab-db/betuzuri/archive/1271/1271.pdf


