Skip to content

实证研究

实证研究(Empirical investigation)采用科学方法(scientific methods),系统地研究软件工程(Software Engineering)现象(phenomena)、工具(tools)、技术(techniques)或流程(processes)。它超越了传闻证据(anecdotal evidence)或直觉(intuition),提供数据驱动的洞察(data-driven insights)。关键原则包括:

  • 选择适当的研究技术(investigation technique)。
  • 清晰阐述研究问题(research question)或假设(hypothesis)。
  • 仔细管理变量(variables)和上下文(context)。
  • 确保研究有意义(meaningful)且符合道德规范(ethically conducted)。

软件工程实证研究中常用的技术包括:

  • 调查(Survey)
  • 案例研究(Case Study)
  • 正式实验(Formal Experiment)

调查(Survey)通过问卷(questionnaires)或访谈(interviews)等方式从样本人群(sample population)中收集数据,以了解过去或现在情况的特征(characteristics)、观点(opinions)或趋势(trends)。它通常是回顾性的(retrospective)。

示例:对多家公司的开发者进行调查,了解不同代码评审实践(code review practices)的采纳率(adoption rates)和感知到的益处(perceived benefits)。对变量的控制程度较低;重点是捕捉当前实践或观点的一个快照(snapshot)。

案例研究(Case Study)是在现实生活背景(real-life context)下对特定现象、项目、团队或组织进行的深入调查(in-depth investigation)。它通常涉及多种数据来源(multiple data sources)(访谈、观察 observations、文档分析 document analysis、度量指标 metrics)。

示例:研究一个软件团队采用[测试驱动开发(Test-Driven Development, TDD)]的经验,记录其过程(process)、遇到的挑战(challenges encountered)、对代码质量的感知影响(perceived impact)以及收集的度量指标(metrics)(例如采纳前后的缺陷率 defect rates)。由于研究发生在自然环境中(natural setting),对变量的控制有限,但它提供了丰富的上下文理解(rich contextual understanding)。

实验(Experiment)是一种受控的研究(controlled investigation),旨在通过操纵(manipulating)一个或多个自变量(independent variables)并观察它们对因变量(dependent variables)的影响来检验特定假设(specific hypothesis),同时控制其他因素(controlling for other factors)。

示例:比较两种不同代码检查技术(code inspection techniques)的缺陷发现效率(defect-finding effectiveness)。两组开发者检查同一段代码;一组使用技术 A(实验组 experimental group),另一组使用技术 B(对照组 control group)。测量每组发现的缺陷数量(因变量)。实验者(experimenter)控制检查的代码、时间限制以及参与者的经验水平(participant experience levels)等因素(通过随机分配 random assignment 或分组 blocking)。

文字描述(替代图像概念):可以用图表(diagram)说明这个谱系(spectrum):调查覆盖范围广(broad reach)但控制程度低(low control)。案例研究提供深度(depth)和上下文,控制有限(limited control)。实验提供高控制度(high control)和因果推断(causal inference),但可能范围有限(limited scope)或设置人工化(artificial settings)。

选择正确的技术取决于:

  • 时机(Timing):事件是过去的(调查、案例研究)还是未来的(案例研究、实验)?
  • 控制(Control):你对变量有多少控制?(低控制 -> 调查/案例研究;高控制 -> 实验)。
  • 可重复性(Replication):情况是否容易重复?(难以重复的情况倾向于案例研究/调查)。
  • 成本与资源(Cost & Resources):实验可能需要大量资源(resource-intensive)。
  • 研究目标(Research Goal):探索(Exploration,案例研究)、描述(Description,调查)、因果解释(Causal Explanation,实验)。

清晰阐述目标至关重要。这通常以可检验的假设(testable hypothesis)(特定预测 specific prediction)或集中的研究问题(focused research question)的形式呈现。

  • 假设示例(Hypothesis Example):‘与传统的开发方法(traditional development approaches)相比,使用测试驱动开发(Test-Driven Development)能够降低发布前的缺陷密度(lower pre-release defect density)。’
  • 研究问题示例(Research Question Example):‘开发者在使用异步编程模型(asynchronous programming models)时面临的主要挑战(main challenges)是什么?‘

理解可能影响结果的因素(变量 variables)至关重要(critical),特别是在以控制为关键(key)的实验中。

  • 自变量(Independent Variables):由研究者操纵的因素(例如,使用的开发技术 development technique used、提供的工具 tool provided)。
  • 因变量(Dependent Variables):测量结果以观察效果(see the effect)(例如,缺陷数量 defect count、任务完成时间 task completion time、代码复杂性评分 code complexity score)。
  • 混淆变量(Confounding Variables):除自变量外可能影响结果(potentially affect the outcome)的因素,需要加以控制或考虑(controlled or accounted for)(例如,开发者经验 developer experience、任务复杂性 task complexity)。

在实验中,通过随机化(randomization)、分组(blocking,将相似受试者分组)或保持条件恒定(keeping conditions constant)等技术实现。在案例研究和调查中,虽然控制有限(limited),但研究者必须仔细记录上下文(carefully document the context)和潜在影响因素(potential influencing factors)。

目标是产生有用的知识(generate useful knowledge)。研究可以服务于多种目的(serve several purposes):

检验关于工具、方法(例如,[敏捷(Agile)]实践)或标准有效性(effectiveness)的主张(Testing claims)。正式实验(Formal experiments)为普遍性(generalizability)提供了更强的证据(stronger evidence),而案例研究/调查可以证实其在特定环境(specific contexts)中的适用性(confirm applicability)。

识别不同属性(different attributes)之间的相关性(Identifying correlations)(例如,代码复杂性越高是否与缺陷率越高相关?团队规模是否影响沟通开销?)。调查和案例研究通常能揭示关系(suggest relationships),而实验可以检验因果联系(test for causal links)。

通过实证研究(empirical studies)评估预测模型(prediction models)(例如,工作量估算模型 effort estimation models)的准确性(accuracy)或开发工具(development tools)的可用性/有效性(usability/effectiveness)(例如,对不同 [用户界面(UI)] 设计进行 A/B 测试(A/B testing)、对 [集成开发环境(IDE)] 功能进行可用性研究(usability studies))。

实证验证(Empirically validating)提出的软件度量指标(proposed software metric)是否实际反映了预期的属性(intended attribute)(如“软件度量验证”章节所述)。这通常涉及将新度量指标与现有度量指标(existing measures)或专家评估(expert assessments)进行关联(correlating the new metric)。

当涉及人类参与者(developers, users)时,必须遵循道德原则(ethical principles must be followed):获取知情同意(obtaining informed consent)、确保保密/匿名(ensuring confidentiality/anonymity)、避免伤害(avoiding harm),并在适当时(where appropriate)提供公平的补偿或利益(providing fair compensation or benefit)。[机构审查委员会(Institutional Review Board, IRB)] 的批准可能是必需的(required)。

实证研究为理解和改进软件工程实践(software engineering practices)提供了严谨的基础(rigorous foundation),推动该领域向基于证据的决策(evidence-based decision making)发展。