【行之有效】实证软件工程研究方法
- 一、实证研究
- 二、实证软件工程
- 2.1 系统化文献评价
- 2.2 调查研究
- 2.2.1 数据收集
- 2.2.2 抽样
- 2.3 案例研究
- 2.3 实证研究效度
一、实证研究
实证研究(Empirical Research)方法是一种与规范研究(Normative Research)方法相对应的方法,它是基于观察和试验取得的大量事实、数据,利用统计推断的理论和技术,并经过严格的经验检验,而且引进数量模型,对社会现象进行数量分析的一种方法,其目的在于揭示各种社会现象的本质联系。相比规范研究方法,实证研究方法主要进行定量分析,依据数据说话,使其对社会问题的研究更精确、更科学。
实证研究⽅法不仅包括调研(Survey)、案例研究(Case Study)、实验(Experiment)、民族志(Ethnography)为代表的⼀级研究,还包括系统化文献评价(Systematic Literature Review)二级研究,以及在此基础上发展而来的三级研究(Tertiary Study)。实证类研究方法强调科学严谨性和研究的实⽤性,旨在缩小研究与实践之间的差距 。
具体内涵参展该博客到底什么是实证研究?
实证研究方法(Empirical Methods) 上世纪末已被应用于医学、物理学、心理学以及社会科学等领域,Basili 等人于 1986 年率先将实验方法引入软件工程 ,开启了实证软件工程的先河;直⾄至2004年,Kitchenham 等人在==第 26 届国际软件⼯程大会(ICSE)==上率先提出了循证软件⼯程(Evidence-based Software Engineering, EBSE)的概念。
二、实证软件工程
实证软件⼯程(Empirical Software Engineering),也称为经验软件工程,是⼀种通过收集、评估、整合与分析相关的实证证据来帮助决策软件工程实践、技术和工具的研究方法。
近年来,国内也有越来越多的高校开始将实证软件⼯程纳入课程体系,中国计算机学会(CCF)软件工程专委会更是专门成立了经验软件工程学组。这都反映了实证类研究在软件工程领域的重要性。
2.1 系统化文献评价
系统化文献评价(Systematic Literature Review, SLR),也称为系统化评价(Systematic Review,SR) 是循证软件工程 EBSE 最受欢迎的方法之⼀。自从2004 年 Kitchenham 等人提出 EBSE 的概念,SLR 方法在软件⼯程领域研究⼈员中关注度倍增,⼀方面所发表的⾯向软件⼯程领域不同主题的 SLR 数量近年来持续快速增长,数量增长之快以至于很多研究⼈员开始针对特定主题的问题开展三级研究(Tertiary Study),即关于 SLR 的系统化文献评价;另⼀方面,除了将 SLR 应⽤在软件⼯程领域的研究,学术界也致力于改进提升 SLR 本⾝
的方法论,比如提供用于系统化⽂献评价过程中⼀级研究质量评估的策略设计方法。
系统化文献评价是⼀种从所有相关研究中提取证据并进行评估分析与解释以回答特定的研究问题、现象和兴趣的方法 ,其主要⽬标是确保整个评价过程是系统的、可复制的和客观全⾯的。SLR 还通过⼀系列的保障措施力求减⼩传统(随意)文献评价(Traditional Literature Review, TLR)中的误差。
软件工程领域 SLR 研究数量的激增驱动研究人员设计操作指南来为软件⼯程领域的 SLR 使⽤者提供方法层⾯的支持,比如目前发表的 SLR 普遍采用的是 Kitchenham 等⼈于 2007 年发布的操作指南以及其在 2016 年对该指南给出的修订版 ;另外还有研究者报告了其在应⽤ SLR 方法的过程中学到的经验教训以达到知识共享的目的 。Kitchenham 等人给出的修订版的操作指南,将整个 SLR 研究分为三个阶段,具体如下:
- 计划阶段:系统化文献评价的第⼀阶段的任务是制定研究计划(Protocol),计划阶段涉及三个重要活动,即指定研究问题(Research Question,RQ)、撰写 Protocol、评估 Protocol。⼀般情况下,Protocol 的主要内容包括该系统化⽂献评价的研究背景和目的、研究问题、研究方法等。其中研究方法涉及了系统化文献评价⼯作执行的几个核心步骤,即文献检索(检索策略、检索关键词和数据库)、文献筛选标准、文献质量评估标准、数据抽取策略、数据整合与分析方法等。高质量的 Protocol 制定需要在有丰富的系统化文献评价工作经验的专家或导师的指导下进行,且经过团队成员的多轮评审和讨论优化,以确保将研究过程偏差对研究结论偏差的影响降到最低。
- 执行阶段:本阶段需要依据上⼀阶段制定的计划开始执行,执行过程中发⽣的任何分歧或变动(如意外情况下计划修改)都需要记录在案。计划执行阶段包含了五个活动,即文献识别、文献筛选、文献质量评估、数据抽取、数据整合与分析。具体来讲,研究小组成员⾸先根据 Protocol 中的⽂献。检索策略进行文献的识别,尤其是自动化检索中需要使⽤定义的检索关键词或变体在目标文献数据库中进⾏检索,该步可以得到初步的文献集合;然后再使用设置好的筛选标准和策略对得到的文献集合进行选择,选择的方法⼀般根据文献的标题、摘要甚至全文阅读来判断是否符合筛选标准,从而决定该文献的取舍;接下来是对筛选得到的相关文献集合依据评估标准进行质量评估,从而确保入选的文献质量;继而由研究人员对文献进行精读,以抽取 Protocol 定义的数据类型相关的信息(证据);最后,研究人员使用特定的方法(定量或定性)对抽取的证据进行整合分析,以支撑Protocol 中定义的研究问题的回答。
- 文档化阶段:该阶段需要生成正式的研究报告或论文,以汇报整个系统化文献评价⼯作的过程和研究成果。
2.2 调查研究
调查研究(Survey Research)是实证软件⼯程中常用的⼀种研究⽅法,也称为调研,其旨在从⼤量样本 (⼈或⽂档) 中系统化地收集证据,然后基于证据整合分析得出结论,继而普适推广到样本所属全体(Population)。
调研通常是⼀种在同⼀时间或相近时间所做的回顾性的研究,其具体执行方式取决于研究的目的和要回答的研究问题。根据研究目的的不同,可以将调研分为三种类型,即描述型(Descriptive)、解释型(Explanatory)和探索型(Explorative)。描述型调研的目的是对总体情况进⾏断⾔以确定关于某些属性的分布情况,而不关心分布的原因,比如在⼀种新技术或编程语言使用⼀段时间后评估对于软件开发产⽣的影响,再比如探究软件开发组织中使⽤最广泛的版本控制工具有哪些;解释型调研是为了对某些感兴趣的现象及其属性进行解释,典型的实例是开发人员倾向于使用某⼀种技术的原因;而探索型调研通常作为预研究来为之后的详尽研究做准备,其⼀般采用松散的问卷从总体中抽样调查,该类型的调查关注未来研究中需要考虑的新问题,而非基础问题的解决,调研的结果将用于之后的详尽研究。调研过程中两个重要方面是数据收集和受访者抽样,这两方面直接影响了研究结果的普适性,是二级研究中考虑是否使用以及如何使用调研方法得到的研究结果时重点关注的问题。
2.2.1 数据收集
调研的数据收集⽅式有很多种,包括观察(Observation),其中最为常用的两种⽅式是问卷(Questionnaire)和访谈(Interview)。
- 问卷:调研可以通过纸质或在线问卷的形式开展,具体来讲是将包含⼀系列需要调研对象回答的问题的问卷以及问卷的说明(纸质或网站链接)发放出去,由研究⼈员收集调研对象填写好的问卷并进行整合分析。基于问卷的调查研究在软件⼯程领域中应⽤较为普遍,原因是其可以从⼤量的样本处快速地获取证据,覆盖⾯⼴且调查过程标准化,成本相对较低。尤其是软件⼯程领域具有全球分布性,如果想要获取对于某个问题的全⾯理解或与地域有关的因素分析,可以考虑使⽤基于问卷的调研。但是其缺点是回复率较低,缺乏⼀定的弹性,由于问卷问题是提前编制好的,⽆法根据受访者反馈实时调整来发现更有价值的⽅向,因此这要求研究者对于要调研的问题具有较好的理解,在问卷编制过程中尽可能考虑到影响问卷质量的因素并加以处理。
- 访谈:访谈是除了调查问卷之外的另⼀种吧比较常用的调研数据收集方式。与前者不同的是,访谈不需要被调研的对象自己填写问卷,⽽是通过语音或面对面访问的方式从受访者处直接询问关于某些问题的答案或看法。访谈的形式主要分为三种,即结构化访谈、半结构化访谈和非结构化访谈。结构化访谈要求受访者采样和访谈过程高度标准化和结构化,所有受访者被提问的问题、顺序和方式都是⼀致的,半结构化访谈对于访谈问题进行⼀定程度的控制,而非结构化访谈则完全不对问题进⾏控制,只是围绕调研主题让受访者自由讨论。其中,半结构化的访谈在软件⼯程领域中的应用比较普遍,其更加适用于探究⼀些初步发现的原因(如与 “为什么” 相关的研究问题)。相对于问卷调研,访谈具备即时性、⾼回复率和灵活性,研究者可以通过受访者的回答实时地获得关于某个问题的答案,且可以根据回答的情况实时调整整个访谈过程,以获取与研究主题相关的更有价值的数据;但是其缺点是的耗时且成本高,无法在大范围内使⽤,如果操作不当,受访对象容易受研究者的主观引导而造成研究结果的偏差。无论是基于问卷还是访谈的调研,需要借助预先制定的问题列表,也称为工具(Instrument)。工具中涉及的问题类型主要有两种,即封闭性问题和开放性问题,区别在于是否预先设定问题可能的答案。封闭性问题要求受访者从预设的答案中选择⼀个或多个,主要⽤于定量分析;而开放性问题则通常用于收集⽀持描述或探索型调研的数据,其结果分析往往需要依赖特定的定性分析⽅法。
2.2.2 抽样
数据收集方式只是调研过程中的⼀个关键因素,⽽影响调研结果的另⼀个关键因素是对受访者总体进⾏抽样。抽样指的是从研究对象的总体中抽取⼀部分具有代表性的样本进⾏研究与分析,根据这部分样本的研究结果推断研究对象总体的特征的⼀种⽅法。抽样开始之前首先需要确定调研面向的受访者总体是什么,也称为 “抽样框”,即可以代表总体并可以从中抽取样本的框架,在抽样调查中起到至关重要的作⽤。但是通常情况下,尤其是在软件⼯程领域,定义抽样框的成本较⾼,且抽样框中识别具有代表性的样本具有⼀定的挑战性。目前主要有两种策略方法来解决调研中的抽样问题,分别是概率抽样和非概率抽样,具体含义和优缺点分析如下 :
- 概率抽样:概率抽样(Probabilistic Sampling),也称为随机抽样,指的是在抽样过程中,根据随机原则抽选样本,保证总体中每个样本被抽选的概率相同的⼀种抽样方法。概率抽样主要有四种类型,即简单随机抽样、系统(等距或顺序)抽样、分层(类型)抽样和整群抽样,其中简单随机抽样是最完全的概率抽样,也是应⽤最为⼴泛的抽样方法。概率抽样的理论基础是概率论和数理统计,因此可以通过概率计算来控制抽样误差,排除研究者主观因素的影响,基于调查结果也可以对总体的某些特征进⾏估计,此外,概率抽样还可以通过⼀定的策略重点获得不同层次/特征类型(如年龄阶段或兴趣相同)的样本的信息。概率抽样的弊端问题是相对于同等规模的⾮概率抽样成本⾼且耗时长。
- 非概率抽样:非概率抽样(Non-Probabilistic Sampling)是与概率抽样相对的但又不可缺少的⼀种抽样⽅法,其不依赖于随机原则,而是基于研究者的主观经验判断或特定的原则来从总体中抽选样本。常⽤的策略有便利抽样(Convenience Sampling)、立意抽样(Purposive Sampling)和雪球式抽样(Snowball Sampling)。便利抽样指的是研究者抽选最容易接触或联系到的样本作为研究对象,以节省成本和时间;⽴意抽样指的是研究者根据对研究对象总体的判断和了解抽选最能提供所需数据(即最有代表性)的样本,这通常要求研究⼈员具备深厚的背景知识和经验;雪球式抽样指的先确定小范围的与研究课题相关性比较高的样本,然后通过其关系网络滚雪球式的向外延伸并确定更大范围的样本。总体来讲,尽管非概率抽样从理论上来讲没有概率抽样严谨,但其成本低、耗时短等特性对于某些不追求精确度的调研类型具有较⾼的吸引⼒,尤其是探索性的研究,某些研究也会将概率抽样和⾮概率抽样这两者结合起来使⽤。但该⽅法也存在缺点,由于其不依赖于随机概率原则,因此也⽆法估计出抽样误差,同时也⽆法通过抽样的指标推断总体的情况。根据本⽂的研究⽬的,结合实际情况,最终采⽤了便利抽样的策略,开展了基于深度访谈的调研,来探究微服务化拆分技术的企业实践模式。
2.3 案例研究
案例研究(Case Study)是⼀种最初被广泛⽤于心理学、社会学和政治学等领域的、以探究这些领域中个人、社会和政治现象的相关知识的研究方法 。关键在于软件开发是人类有组织的大规模智力活动,其中人的智力因素占主导作⽤,这就导致软件⼯程学科需要研究人的社会属性。案例研究本质上是⼀种观察(Observation)研究,是在我们无法对研究对象实施有效控制的条件下进行的⼀种妥协。由于软件开发的利益相关者可以小到个人,大到团队和企业组织,也可能会涉及到政治和社会问题,换句话说,软件工程是⼀个多领域交叉的学科,这意味着软件工程领域中很多问题都适合使⽤案例研究的方法来解决。软件工程中,被研究的对象和它所处的环境⼀般没有严格的界限,通常有很多种因素会影响某个软件工程活动的结果。按照案例研究的定义,对于相关现象的研究可以在特定的上下文内开展,尤其适合当现象和它的上下文之间的界限不明显的时候。因此,近些年来,案例研究方法开始逐渐被引入软件工程领域,具体领域包括软件系统和相关制品的开发和维护,研究问题涉及探究软件⼯程师和利益相关者在不同的条件下如何进行软件系统的设计、开发及维护 。
开展案例研究主要分为五个主要的过程:
1)案例研究设计:定义研究目标、案例选择、研究问题,设计案例研究计划。
2)数据收集准备:设计数据收集方法和过程计划草案,常⽤的数据收集方法有访谈、观察、文档化数据收集和指标收集。
3)收集数据:对所研究的案例执行所设计的数据收集计划。
4)数据分析:使用合适的方法分析所收集的不同类型的数据 ,如对于定量数据,使用统计分析、相关性分析、预测模型的开发和假设检验等方法分析;对于定性数据可以使用编码(Coding)等技术分析。
5)展示和报告:通过⼀定的形式来展示案例研究的结果。
可以发现,上述五个过程和前面提到的实证研究⽅法的过程类似,如系统化文献评价和调查研究。但案例研究是⼀个更为灵活的研究方法,在研究的各个过程中可能会存在大量的迭代,如数据收集分析可以反复进行,如果收集的数据不足以支持分析,则会反过来进行额外的数据收集工作。案例研究中有⼀点会影响方法使用的灵活性,那就是案例研究在⼀开始就需要制定明确的研究⽬标和问题,如果研究问题发生变化,那将会变成⼀个新的研究,而不是当前研究的调整。
2.3 实证研究效度
效度(Validity)指的是⼀项研究其结果的有效性或可靠性,而影响实证研究可靠性和有效性的潜在风险称为效度威胁(Threats To Validity,TTV)。
在实证软件工程研究方法中效度是需要充分考虑的问题,通过不同类型的效度和效度威胁分析可以帮助研究者从不同层⾯建立对研究结果的科学理解,典型的效度主要包含以下⼏种 :
- 构造效度:构造效度(Construct Validity)指的是研究设计在多大程度上可以很好地解决研究问题,解释某种理论构思、术语或假设。本质上来讲,构造效度关心的问题是每个特征的测量背后是否足够的理论⽀持,并且被测量的特征之间存在合理的关系。构造效度要求对于某个概念术语或理论构思结构要严谨、完整,尽量采用多种方法和多维指标分析和研究理论构思,从而避免单⼀变量的效度问题。
- 内部效度:内部效度(Internal Validity)衡量的是在多⼤程度上研究结论与研究的属性之间存在因果或相关关系。内部效度⾼表示研究结果不会受到除了待研究属性之外的其他属性的影响⽽变得不确定,换句话说,待研究属性的变化是决定研究结果的唯⼀因素,使得研究结果的解释具备唯⼀性。影响内部效度的因素主要有主试因素、被试因素、历史、成熟或⾃然发展、选择、测验、统计回归等。因此,要提高实证研究的内部效度,需要排除其他变量的影响,防⽌除待研究变量之外的其他变量成为影响研究结果的不确定性因素。比如调研方法中通过随机抽样来控制受访者的样本,从⽽避免因为主观选择偏向而导致的内部效度问题;另外在系统化文献评价的过程中,数据抽取和整合工作与内部效度紧密相关,该阶段甚至整个系统化文献评价过程中引入的偏差都可能会影响研究结果,对内部效度造成⼀定的威胁。
- 外部效度:外部效度(External Validity)表示的是研究结果的普适化程度,其关注的是研究结果是否有代表性,或者是否可以在其他类似场景中被复制和重现,又或者脱离研究场景后研究结果是否还成立以及成立的程度。影响外部效度的因素主要有被试者和主试者特征、研究的操作程序、变量定义与测试方法等。⽽提⾼外部效度的关键措施是做好抽样,抽样的工作涉及被试者、研究背景、工具、程序、方法等,以消除和控制影响外部效度的因素。内部效度之于外部效度是必要但不是充分条件,内部效度高的研究,其结果不⼀定具有普适性。对于⼆级研究来讲,可以通过初级研究涵盖的范围来评估其外部效度⾼低。
- 结论效度:结论效度(Conclusion Validity)关系到多⼤程度上可以得到关于数据分析⽅法与实证研究(尤其是实验)结果之间联系的结论。系统化⽂献评价研究中对应的是数据整合分析对研究结论的⽀持程度.