汎用教育・学習⭐ リポ 216品質スコア 83/100
software-engineering-research
ソフトウェアエンジニアリングの研究トピックと方法論のガイド
description の原文を見る
Guide to software engineering research topics and methodologies
SKILL.md 本文
ソフトウェアエンジニアリング研究ガイド
主要な専門分野、方法論、データセット、ベンチマーク、トップベニューを含むソフトウェアエンジニアリング研究の展望をナビゲートします。
SE研究の専門分野
| 専門分野 | 主要なトピック | 主要なベニュー |
|---|---|---|
| ソフトウェアテスト | テスト生成、ファジング、ミューテーション・テスト、不安定なテスト | ISSTA, ICST, ASE |
| プログラム解析 | 静的解析、抽象解釈、シンボリック実行 | PLDI, POPL, OOPSLA |
| ソフトウェア保守 | コード・リファクタリング、技術的負債、コード・スメル、進化 | ICSME, MSR, SANER |
| AI/ML向けSE | MLパイプライン・テスト、データ品質、モデル・デバッグ | ICSE-SEIP, FSE |
| SE向けAI | コード生成、バグ検出、プログラム修復 | ICSE, FSE, ASE |
| 分散システム | コンセンサス、フォールトトレランス、スケーラビリティ、マイクロサービス | SOSP, OSDI, EuroSys |
| サイバーセキュリティ | 脆弱性検出、マルウェア分析、プライバシー | IEEE S&P, CCS, USENIX Security |
| SE向けHCI | デベロッパーツール、IDE利便性、コード理解 | CHI, CSCW, VL/HCC |
| 経験的SE | リポジトリマイニング、デベロッパー調査、統制実験 | ESEM, MSR, TOSEM |
SE における研究方法論
統制実験
治療群と対照群を用いた特定の仮説のテスト:
例: AIコード補完はデベロッパーの生産性を向上させるか?
設計:
- 参加者: 60名のプロフェッショナル・デベロッパー
- 治療群: AIコード補完有効なIDE
- 対照群: AIコード補完無効なIDE
- タスク: 難易度が異なる5つのプログラミング・タスク完了
- メトリクス: タスク完了時間、コード正確性、コード行数
- 分析: 参加者をランダム効果とした混合効果線形モデル
妥当性への脅威:
- 内的妥当性: 学習効果(タスク順序を相互釣り合い化)
- 外的妥当性: ラボ環境は実際の開発を反映していない可能性
- 構成的妥当性: 「生産性」は速度+正確性として操作化
ソフトウェアリポジトリマイニング (MSR)
バージョン管理、課題追跡、コードレビュー・システムのデータを分析:
# 例: PyDrillerを使用してコミット・パターンを分析
from pydriller import Repository
repo_url = "https://github.com/apache/kafka"
commit_data = []
for commit in Repository(repo_url, since=datetime(2023, 1, 1),
to=datetime(2023, 12, 31)).traverse_commits():
commit_data.append({
"hash": commit.hash[:8],
"author": commit.author.name,
"date": commit.committer_date,
"files_changed": commit.files,
"insertions": commit.insertions,
"deletions": commit.deletions,
"message": commit.msg[:100]
})
df = pd.DataFrame(commit_data)
print(f"Total commits in 2023: {len(df)}")
print(f"Unique contributors: {df['author'].nunique()}")
print(f"Avg files per commit: {df['files_changed'].mean():.1f}")
ケーススタディ
現実のコンテキストにおける現象の詳細な調査:
ケーススタディ・プロトコル (Yin, 2018に基づく):
1. 研究質問: チームはどのようにマイクロサービスを採用するか?
2. 分析単位: 3社の開発チーム
3. データ源:
- 半構造化インタビュー(各社8〜12件)
- アーキテクチャドキュメント・レビュー
- コミット履歴とデプロイメント・ログ
- ミーティング観察
4. 分析: ケース間比較を伴うテーマティック分析
5. 妥当性: データ源間の三角測量、メンバーチェッキング
主要なデータセットとベンチマーク
コード理解と生成
| ベンチマーク | タスク | 言語 | サイズ |
|---|---|---|---|
| HumanEval | ドキュメント文字列からのコード生成 | Python | 164問題 |
| MBPP | 説明からのコード生成 | Python | 974問題 |
| SWE-bench | 実世界のGitHub課題解決 | Python | 2,294インスタンス |
| CodeXGLUE | 複数のコードタスク | 6言語 | タスク別に異なる |
| BigCloneBench | クローン検出 | Java | 600万クローンペア |
| Defects4J | バグ位置特定と修復 | Java | 835実バグ |
ソフトウェアエンジニアリング・プロセス
| データセット | コンテンツ | ユースケース |
|---|---|---|
| GHTorrent | GitHubイベント・データ(コミット、課題、PR) | MSR研究 |
| Software Heritage | ユニバーサル・ソースコード・アーカイブ | コード進化、出所追跡 |
| Stack Overflow Data Dump | Q&Aポスト、タグ、投票 | デベロッパー知識、NLP |
| CVE Database | 脆弱性レコード | セキュリティ研究 |
| Chrome/Firefox Bug Trackers | バグ報告、パッチ | バグトリアージ、重大度予測 |
研究向け静的解析ツール
# 例: tree-sitterを使用したAST レベルのコード分析
from tree_sitter import Language, Parser
import tree_sitter_python as tspython
PYTHON_LANGUAGE = Language(tspython.language())
parser = Parser(PYTHON_LANGUAGE)
source_code = b"""
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
"""
tree = parser.parse(source_code)
root = tree.root_node
def count_nodes(node, node_type):
"""指定された型のASTノードをカウント."""
count = 1 if node.type == node_type else 0
for child in node.children:
count += count_nodes(child, node_type)
return count
print(f"Function definitions: {count_nodes(root, 'function_definition')}")
print(f"If statements: {count_nodes(root, 'if_statement')}")
print(f"Return statements: {count_nodes(root, 'return_statement')}")
print(f"Function calls: {count_nodes(root, 'call')}")
コード・メトリクス
# 一般的なソフトウェア・メトリクス
metrics = {
"Lines of Code (LOC)": "Total lines (including blanks and comments)",
"Cyclomatic Complexity": "Number of independent paths (McCabe, 1976)",
"Halstead Volume": "Based on operators and operands count",
"Maintainability Index": "Composite of LOC, CC, and Halstead",
"Coupling Between Objects": "Number of other classes referenced",
"Depth of Inheritance": "Levels in class hierarchy",
"Code Churn": "Lines added + modified + deleted per period",
"Comment Density": "Ratio of comment lines to total lines"
}
# radonを使用して循環的複雑度を計算
# pip install radon
import subprocess
result = subprocess.run(
["radon", "cc", "my_module.py", "-s", "-j"],
capture_output=True, text=True
)
print(result.stdout)
トップベニューとインパクト
Tier-1 SEベニュー
| ベニュー | タイプ | 採択率 | フォーカス |
|---|---|---|---|
| ICSE | カンファレンス | 約22% | 広範なSE |
| FSE/ESEC | カンファレンス | 約24% | 広範なSE |
| ASE | カンファレンス | 約22% | 自動化SE |
| ISSTA | カンファレンス | 約25% | ソフトウェアテスト |
| MSR | カンファレンス | 約30% | リポジトリマイニング |
| TOSEM | ジャーナル | -- | 広範なSE (ACM) |
| TSE | ジャーナル | -- | 広範なSE (IEEE) |
| EMSE | ジャーナル | -- | 経験的SE (Springer) |
システムとセキュリティベニュー
| ベニュー | タイプ | フォーカス |
|---|---|---|
| SOSP/OSDI | カンファレンス | オペレーティング・システム、分散システム |
| EuroSys | カンファレンス | システム(ヨーロッパ) |
| NSDI | カンファレンス | ネットワーク・システム設計 |
| IEEE S&P (Oakland) | カンファレンス | セキュリティとプライバシー |
| USENIX Security | カンファレンス | セキュリティ |
| CCS | カンファレンス | コンピュータ・通信セキュリティ |
| NDSS | カンファレンス | ネットワーク・分散システムセキュリティ |
研究ツール・エコシステム
| ツール | 目的 | URL |
|---|---|---|
| PyDriller | Gitリポジトリマイニング (Python) | github.com/ishepard/pydriller |
| Radon | Pythonコード・メトリクス | github.com/rubik/radon |
| SonarQube | 多言語静的解析 | sonarqube.org |
| Understand | コード分析とメトリクス | scitools.com |
| Joern | コード分析プラットフォーム (CPG) | joern.io |
| CodeQL | セマンティック・コード分析 | codeql.github.com |
| tree-sitter | インクリメンタル・パージング・ライブラリ | tree-sitter.github.io |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- wentorai
- ライセンス
- MIT
- 最終更新
- 2026/4/19
Source: https://github.com/wentorai/research-plugins / ライセンス: MIT