实证软件工程的代表著作,由该领域的几位顶级专家共同编著,通过使用可控的实验,介绍软件工程的实证研究方法。适合高校软件工程专业或方向的本科生、研究生,以及软件领域的研究人员和软件行业的从业人员学习和参考。
首部以描述如何系统地进行和评估软件工程实验为主要内容的著作。
书中不仅包括对实验及其步骤的完整讲述,还包含对案例研究及系统文献综述的详细介绍。
“这次改版包含了新的章节和例子,更加巩固了其作为软件工程领域设计、构造、执行和评估实验的首本著作的地位。本次改版将使本书更加有价值。它将成为所有博士研究生必读的书籍,每位学者的书架上都应该备上一本以备查阅。”
Michael Oudshoorn, Computing Reviews, 2012年10月
“这本书是一个里程碑,它使得我们能够依此训练从事软件工程实验的研究者和从业者。”
Victor R. Basili, 马里兰大学
“改版中新增的和修改的部分非常好地反映了经验软件工程这一领域的成熟。”
Anneliese A. Andrews, 丹佛大学
“本次改版与2000年出版的著作同名,详细阐述了软件工程研究中的各种方法。它以教科书的方式呈现,使得其非常适合作为研究生的导论课程或者本科生四年级课程的教材。从业者和专家也能将此书作为使用更加深奥的方法的起点而从本书受益……总而言之:非常推荐从大学三年级以上学生到资深研究者/从业者使用。”
L. Benedicenti, Choice, 第50卷第9期,2013年5月
内容介绍
与其他科学与工程学科相似,软件工程需要一个建模、实验和学习的循环。在评价及选择不同的方法、技术、语言和工具时,实验对于所有的软件工程师而言都是非常有价值的工具。
本书的目的是通过受控实验为学生、教师、研究人员及从业者介绍软件工程中的经验研究。介绍实验时采用了过程视角,将描述的焦点放在进行实验时需要执行的步骤上。全书分为三个部分:第一部分介绍了实验中用到的一些理论和方法的背景知识;第二部分包括五个章节,分别介绍了实验的五个步骤:确定范围、计划、操作、分析与结果展示。第三部分完整展示了两个案例。附录中提供了课后作业与统计方面的资料。就整体而言,本书不仅为经验型研究(特别是实验)提供了不可或缺的信息,而且还介绍了案例研究、系统文献综述和问卷调查等方法。本书是作者们2000年出版一书的修改版。另外,还增加了大量的新内容,如关于系统文献综述及案例研究的介绍。
本书是自包含的,能够作为需要学习软件工程经验研究的本科生或研究生的教材。提供的练习及作业能够促进理论与实践相结合。研究人员也能从本书中获得收益,学到如何进行经验型研究;同时从业者也可以在其公司引入新的方法或技术时将之作为指导如何评价这些方法和技术的作业指南。
前
作者简介
克拉斯·沃林(Claes Wohlin)
瑞典布京理工学院软件工程方向教授、瑞典皇家工程科学院成员、IEEE资深会员。他的研究兴趣包括软件工程经验方法、软件过程与软件质量。
佩尔·鲁内松(Per Runeson)
瑞典隆德大学软件工程方向教授,IEEE资深会员。他的研究兴趣包括软件测试与质量评估方面的经验型研究以及相应的研究方法。在此之前,他还曾担任工业界的咨询专家。
马丁·霍斯特(Martin H?st)
瑞典隆德大学软件工程方向教授。他的研究兴趣包括软件质量及软件过程改进,以及软件工程中的经验型研究方法。
马格纳斯力 C. 欧尔松
(Magnus C. Ohlsson)
位于瑞典马尔默市的系统验证股份公司的质量保证专家,专注于过程改进。他主要的兴趣领域是确认与验证,强调通过开发过程的每一步高效地达到合适的质量。
比约恩·雷格尔
(Bj?rn Regnell)
瑞典隆德大学软件工程方向教授。他的研究兴趣包括软件需求工程、软件产品管理和软件工程经验型研究。
安德斯·韦斯伦
(Anders Wesslén)
瑞典爱立信公司资深系统架构师。他关注于系统级架构、系统设计和需求。
后
译者简介
张莉
北京航空航天大学计算机学院/软件学院教授,博士生导师,中国计算机学会软件工程专委会委员及教育专委会副主任委员。教育部软件工程专业教学指导委员会委员,全国工程专业学位研究生教育指导委员会软件工程领域协作组组长。研究兴趣包括:软件工程(系统设计、软件重用、领域/系统建模、经验软件工程等)。
王青
博士,研究员,博士生导师,现任中国科学院软件研究所副总工程师。主要研究方向包括:软件过程、软件质量保障、需求工程、知识工程等。目前主要社会兼职为中国电子学会云计算专家委员会委员,全国信息技术标准化委员会软件质量测试工作组(SAC/TC28/SC7/WG1)副组长,以及CMMI认证授权的主任评估师。主持和承担了多项国家重点/重大项目和国内外重大合作项目,获得国家及省部委科技进步奖10余次。担任ESEIW/ESEM2015(ACM国际经验软件工程与度量会议)大会主席,是IST、JSS等国际期刊审稿人。
彭蓉
武汉大学计算机学院软件工程国家重点实验室软件工程方向教授,博士生导师。中国计算机学会软件工程专委会及服务计算专委会委员。研究兴趣包括:软件工程(特别是需求工程)、服务计算及可信计算。
宣琦
博士,浙江工业大学信息工程学院副教授,曾赴加州大学戴维斯分校及香港城市大学从事博士后及访问研究,任中国计算机学会软件工程专委会委员。研究兴趣包括:开源软件库数据挖掘,社交网络数据挖掘,复杂系统建模及优化。在计算机软件工程领域A类会议及美国物理评论等国际知名期刊上发表学术论文30余篇,主持国家自然科学基金多项。
你是否曾经有过对不同的软件工程方法或技术进行比较评估的需求?本书介绍了一种用实验对软件工程中的新方法和新技术进行评估的方法。实验对于那些参与评估不同方法、技术、语言和工具,并从中加以选择的所有软件工程师而言是一种极具价值的工具。
你或许是一个软件从业者,在将软件正式引进单位之前,希望能对其采用的方法和技术进行评估。你也可能是一个研究者,希望将新的研究成果与已有的研究成果进行比较,从而为新的思想提供科学基础。你或许是一个老师,认为在软件工程中基于经验学习的知识对学生来说至关重要。当然,你也可能是一个软件工程专业的学生,希望学习一些方法使软件工程成为一门科学,以及在比较不同的方法和技术时能够获得定量化的数据。本书将就如何成功实现这些目标提供相关的指导和案例。
软件工程与科学
“软件工程”这一术语诞生于1968年,该领域目前仍处于发展阶段。在过去一段时间,科技的发展和宣传式研究驱动着软件工程的发展。所谓的宣传式研究是指,我们发明和引入的新方法、新技术大都是基于市场营销和理念,而非科学的结果。在某种程度上,这也是可以理解的,因为信息社会本身也是在过去的几十年中逐步建立的。但是,从长远来看,如果我们想拥有我们所开发软件的控制权,这又是不可接受的。控制来源于我们希望在使用新的方法、技术、语言和工具之前首先对它们进行评估。而这也将有助于我们把软件工程转变成一门真正意义上的科学。在审视“我们必须把软件工程变成科学”这个问题之前,让我们先来看看其他领域是怎么看待科学的。
在西蒙·辛格(Simon Singh)博士的“费马大定理”中[160],对科学进行了讨论,总结如下:在科学中,物理现象通常是在假说的基础上提出的。我们观察现象,如果观察到的现象与假说相一致,它将成为假说成立的证据;而另一方面,假说也应该能够帮助预测其他的现象。实验对于验证假说,尤其是对于验证假说的预测能力,是极为重要的。如果新的实验支持某一假说,则我们就有更多的证据支持这一假说。随着证据的增加和增强,假说会被广泛接受,从而成为一种新的科学理论。
科学的要点就是通过经验研究进行假设检验,然而,当前软件工程领域的大部分研究却并不是按照这个方式来进行的。尽管如此,相比于10年前,如今通过实验对新的研究方案进行评估和验证的需求却达到了更高层次的水平。经验研究通常包括调查、实验和案例研究。因此,本书的目的是介绍和促进经验研究在软件工程中的应用,其中我们尤其重视实验的方法。
本书的目的
本书主要为学生、教师、研究者和从业者介绍针对软件工程的实验方法学和经验评估方法。主要目标是提供关于在软件工程中如何进行实验来评估方法、技术和工具的指导方针,虽然其中也会穿插其他经验性方法的简短介绍。我们将从过程的角度来介绍实验,重点将关注执行实验所必须经历的操作步骤。该过程可推广到其他类型的经验研究,但本书的关注点仅限于实验和准实验。
写作本书是为了支持我们所常经历的需求:使软件工程的研究更加具有实验特色。现在已有一些相关的书籍,它们或者以十分笼统的方式来介绍该课题,或者只关注实验的某些特别的部分,且大部分都集中在实验的统计方法上。虽然这些都很重要,但目前仍然缺乏从过程角度来阐述实验的书籍。此外,我们几乎找不到介绍软件工程实验学的相关书籍。事实上,在本书最初版本出版之前的确不存在这样的书。
本书的范围
本书主要关注软件工程中的实验学,即通过实验来评估方法、技术等。本书提供了一些关于广义经验研究的信息:包括案例研究、系统文献综述和调查法。目的是对这些不同的经验研究方法做些简要的说明,使读者能够初步了解并将它们与实验相结合。
书中的各章涵盖了软件工程领域执行实验过程中不同的操作步骤。此外,关于软件工程经验研究的例子也贯穿整书。能向软件工程师说明经验研究和实验能够在软件工程中成功应用这一点对本书而言非常重要。本书包含两个实验的例子。引入这些例子是为了说明具体的实验过程以及如何将软件工程中的实验进行报告。我们的目的是使这些研究能成为未来软件工程经验研究的良好例子和灵感来源。本书注重实验,但不仅限于实验,即我们也提供其他的方法,比如案例研究和调查法。换句话说,当可以使用实验这样的研究策略时,我们就没有必要再求助于不包含定量数据的宣传研究和市场营销策略。
针对的读者
本书的目标读者大致上可以分为以下四类。
学生可以将本书作为软件工程中侧重于评估的实验导论。本书适合作为强调经验研究的软件工程领域本科生或研究生的教科书。本书包含的习题和项目任务可以帮助读者将更多的理论素材与实际应用相结合。
教师如果觉得软件工程课程需要引入更多的经验研究,则可以在他们的课程中使用这本书。本书适合作为该领域的入门教程。虽然我们建议同时参考统计学的导论课程,但本书的各部分内容亦足以互相支撑,从而形成一个统一的体系。
研究者可以在本书中学到更多关于如何进行经验研究的知识,并把它们作为自身研究的重要组成部分。此外,我们的目标是:当研究者在进行经验研究时,也可以回到本书,将之作为一份检查单进行逐项检验,同样也可以收获颇丰。
从业者可以将本书作为一份“食谱”,用于在引进新方法和新技术时对它们进行评估。可以学习如何将经验研究用于日常工作,比如在计划改变开发流程时,可以使用经验研究方法来评估利弊,进而提出建议。
概要
本书主要分为三个部分,其概要总结在表1中,该表还给出了本书与最初版本之间的相互对应关系。第一部分中,第1章总体介绍了经验研究领域的研究进展,将广义的经验研究和狭义的实验方法均纳入软件工程的研究内容之中;第2章总体上讨论了经验策略(包括调查法、案例研究和实验),特别从软件工程的角度阐述了经验研究的内容;第3章简要介绍了度量理论和应用;第4章概述了如何进行系统文献综述以及如何将几个经验研究中的结果进行综合分析;第5章给出了案例研究概述,将其作为相关类型的经验研究;第6章则通过引入广义实验过程,重点关注实验部分。
表1本书结构
标题 修订版本 原始版本 主要更新
第一部分背景
引言 1 1
经验策略 2 2 关于重现、综合分析、技术转移和伦理学的新章节
度量 3 3 关于实践中度量的新章节
系统文献综述 4 10① 新章节
案例研究 5 新章节
实验过程 6 4
第二部分实验过程的步骤新的运行例子
确定范围 7 5② 改编术语
计划 8 6
操作 9 7
分析与解释 10 8
归档与展示 11 9 重大修改
第三部分实验示例
实验过程说明 12 11
视角间真有差异吗 1 3 新章节
附录
练习A 1 3 将理解型练习移到每一章
统计表BA
① 命名为调查,从不同的视角。
② 命名为定义。
第二部分中,每个实验步骤单独列为一章。其中,第7章主要讨论如何确定实验范围;第8章介绍实验计划;第9章讨论了实验操作;第10章给出了分析和解释实验结果的若干方法;第11章则讨论了实验的归档和展示。
第三部分包含两个实验例子。其中,第12章中的例子用于说明实验过程。第13章中的例子则用于说明如何将软件工程实验整理到论文中。
本书将一些练习和数据放在附录A中,而将一些统计表放在附录B中。这些统计表为本书中的一些例子提供支持。更多更全面的类似统计表在大多数统计类书籍中均可以找到。
练习
本书的练习分为四类。第一类在本书第一部分和第二部分中每章(第1~11章)的结尾,其他三类则在附录A中,包括:
理解型练习每章最后的5个问题包含最重要的知识点,其目标是确保读者理解最重要的概念。
训练型练习这些习题提供了实践实验的机会。特别地,这些习题可以用于分析实验相关数据并回答实验相关问题。
回顾型练习此练习是针对第12~13章中给出的实验例子的。其目的是回顾已提出的一些实验。在读过文献中的一些实验后,你会发现大多数实验都会有一些问题,主要是因为在软件工程中进行实验时存在着继承问题。我们提出了自己的一些研究例子,而不是简单评论他人的工作。在我们看来,这些研究例子在已发表的实验类型中具有代表性,自然也会有各自的长处和短处。
任务型练习这些习题用于说明如何使用实验进行评估。这些任务是一些可以在学校或公司的课堂内进行的学习例子,它们只针对一些能够通过简单实验就可以解决的问题。这些任务既可以在读过本书之后完成,也可以在阅读此书时解答。后者提供了一个在阅读本书时可以随时练习的机会。作为替代方案,我们建议老师在自己的专业领域内制定一项任务,此任务可以作为例子用于说明整书每章中提出的概念。
计算机\软件工程
标题语:
• 这是一本首次以描述如何系统地进行和评估软件工程实验为主要内容的书。
• 本书作者是由一组经验丰富的研究人员和从业者组成的团队,他们在经验型研究方面有着超过八年的丰富经历。
• 本书不仅包含着对实验及其步骤的完整讲述,还包含了对案例研究及系统文献综述的详细介绍
评论:
“这次改版包含了新的章节和例子,更加巩固了其作为软件工程领域设计、构造、执行和评估实验的首本著作的地位。(……)本次改版将使本书更加有价值。(……)它将成为所有博士研究生必读的书籍,每位学者的书架上都应该备上一本以备查阅。” (Michael Oudshoorn, Computing Reviews, 2012年10月)
“这本书是一个里程碑,它使得我们能够依此训练从事软件工程实验的研究者和从业者。” (Victor R. Basili, 马里兰大学, 马里兰州, 美国)
“改版中新增的和修改的部分非常好的反应了经验型软件工程这一领域的成熟。” (Anneliese A. Andrews, 丹佛大学 , 科罗拉多州, 美国)
“本次改版与2000年出版的著作同名,详细阐述了软件工程研究中的各种方法。它以教科书的方式呈现,使得其非常适合作为研究生的导论课程或者本科生四年级课程的教材。从业者和专家也能将此书作为使用更加深奥的方法的起点而从本书收益……”总而言之:非常推荐从大学三年级以上学生到资深研究者/从业者使用。(L. Benedicenti, Choice, 第50卷第9期,2013年5月)
内容介绍:
与其他科学与工程学科相似,软件工程需要一个建模、实验和学习的循环。在评价及选择不同的方法、技术、语言和工具是,实验对于所有的软件工程师而言都是非常有价值的工具。
“软件工程中的实验”一书的目的是通过受控实验为学生、教师、研究人员及从业者介绍软件工程中的经验研究。介绍实验时采用了过程视角,将描述的焦点放在进行实验时需要执行的步骤上。全书分为三个部分:第一部分介绍了实验中用到的一些理论和方法的背景知识;第二部分包括五个章节,分别介绍了实验的五个步骤:确定范围、计划、操作、分析与结果展示。第三部分完整的展示了两个案例。附录中提供了课后作业与统计方面的资料。就整体而言,本书不仅为经验型研究,特别是实验,提供了不可或缺的信息,而且还介绍了案例研究、系统文献综述和问卷调查等方法。本书是作者们2000年出版一书的修改版。另外,还增加了大量的新内容,如关于系统文献综述及案例研究的介绍。
本书是自包含的,能够作为需要学习软件工程经验研究的本科生或研究生的教材。提供的练习及作业能够促进理论与实践相结合。研究人员也能从本书中获得收益,能够学到如何进行经验型研究;同时从业者也能在其公司引入新的方法或技术时将之作为指导如何评价这些方法和技术的作业指南。
(美)克拉斯·沃林(Claes Wohlin) 佩尔·鲁内松(Per Runeson) 马丁·霍斯特(Martin Host) 马格纳斯力 C. 欧尔松(Magnus C. Ohlsson) 比约恩·雷格尔(Bjorn Regnell) 安德斯·韦斯伦(Anders Wessl·n) 著:作者简介:
克拉斯•沃林(CLAES WOHLIN),布莱金技术学院软件工程方向教授、瑞典皇家工程科学院成员、IEEE资深会员。他的研究兴趣包括软件工程经验方法、软件过程与软件质量。
佩尔•鲁内松(PER RUNESON),瑞典隆德大学软件工程方向教授,IEEE资深会员。他的研究兴趣包括软件测试与质量评估方面的经验型研究以及相应的研究方法。在此之前,他还曾担任工业界的咨询专家。
马丁•霍斯特(MARTIN HÖST),瑞典隆德大学软件工程方向教授。他的研究兴趣包括软件质量及软件过程改进,以及软件工程中的经验型研究方法。
马格纳斯力 C. 欧尔松(MAGNUS C. OHLSSON),瑞典马尔默System Verification AB的质量确保专家,专注于过程改进。他主要的兴趣领域是确认与验证,强调通过开发过程的每一步高效地达到合适的质量。
比约恩•雷格尔(BJÖRN REGNELL),瑞典隆德大学软件工程方向教授。他的研究兴趣包括软件需求工程、软件产品管理和软件工程经验型研究。
安德斯•韦斯伦(ANDERS WESSLÉN),瑞德隆德意法-爱立信(ST-Ericsson)公司资深系统架构师。他关注于系统级架构、系统设计和需求。
张莉 王青 彭蓉 宣琦 译:暂无简介
自软件工程成为一级学科以来,关于软件工程的研究方法得到了更多、更广泛的重视。软件工程领域日益需要一本这样的教材。
任何学科的发展都依赖于对这个学科所要解决的基本问题的理解。每个学科解决问题的能力都会随着领域经验的提高而提高。其基本方法是把经验封装到模型中,并基于实验、经验证据和反馈来验证并确认模型的正确性。对知识的封装可以让我们站在更高的抽象层次上理解我们的问题空间和解决空间,并通过应用反馈和学习知道哪些方法行之有效。这是一种在很多领域都适用的方法,譬如物理、医学、制造业等。这是一个建模、实验、学习和再建模的闭环。软件工程也是一门实验科学,我们必须从应用中学习并改进我们对软件工程世界的理解。经验软件工程(Empirical Software Engineering)就是这样一种方法。
2012年在Lionel Brand教授等人的帮助下,北京航空航天大学开始在研究生中开设这门课程,后来得知很多学校都已经或者正在准备开设“经验软件工程”课程,但是都苦于没有合适的中文版教材。计算机学会(CCF)软件工程专委会成立“经验软件工程学组”时,与会老师进一步表达了这一愿望。经过仔细考虑,我们选择了Claes Wohlin等撰写的《Experimentation in Software Engineering》这本教材,并由来自北京航空航天大学的张莉、中国科学院软件研究所的王青、武汉大学的彭蓉、浙江工业大学的宣琦组成了翻译小组,在机械工业出版社华章分社的协助下开始了本书的翻译。
Empirical在英文中是指“经验的”或“实证的”。因此,Empirical Software Engineering被译为“经验软件工程”或“实证软件工程”。但在英文中Empirical区别于Experimental,这里的“经验”不单单是人在实践中的主观体验和认知,更强调从实践中获得的客观证据。
《Experimentation in Software Engineering》这本书虽然重点阐述了在软件工程领域如何进行实验研究,但其中首先讨论了为什么要在软件工程领域展开经验研究,之后介绍了主要的经验研究策略、软件工程中常用的经验研究方法,因此,我们认为可以将其作为“经验软件工程”的一本很好的入门教材。建议将本书作为软件工程专业高年级本科生、研究生教材,本书也可供企业工程技术人员使用。
经过近一年的时间,翻译小组多次协调讨论,并就一些问题和原书作者进行了沟通,最终完成了翻译工作。由于这是国内第一本关于经验软件工程的书籍,所以翻译中最大的挑战是术语的翻译。虽然经多次推敲,也难免有不当之处,希望得到大家的指正。
译者
2015年9月10日
出版者的话
中文版序
译者序
序一
序二
最初版前言
前言
致谢
第一部分背景
第1章引言
11软件工程背景
12科学与软件工程
13练习
第2章经验策略
21经验策略概述
22调查法
221调查法的特征
222调查法的目的
223数据收集
23案例研究
231案例研究的安排
232混杂因子和其他方面
24实验
241特征
242实验过程
25经验策略比较
26重现
27软件工程理论
28经验研究的证据汇聚
29软件工程领域的经验主义
291过程变化的经验评估
292质量改进范式
293经验工厂
294目标/问题/度量方法
210基于经验的技术转移
211实验中的伦理学
212练习
第3章度量
31基本概念
311尺度类型
312客观和主观度量
313直接和间接度量
32软件工程中的度量
33实践中的度量
34练习
第4章系统文献综述
41制定综述计划
42实施综述
43撰写综述报告
44映射研究
45综述举例
46练习
第5章案例研究
51案例研究的使用环境
511为何要在软件工程中使用案例研究
512案例研究过程
52设计和计划
521案例研究计划
522案例研究协议
53数据准备和数据收集
531访谈
532观察
533归档数据
534度量标准
54数据分析
541定量数据分析
542定性数据分析
543有效性
55撰写报告
551特点
552结构
56练习
第6章实验过程
61变量、处置、对象和主体
62过程
63总览
64练习
第二部分实验过程的步骤
第7章确定范围
71确定实验范围
72实验案例
73练习
第8章计划
81情境选择
82假设构建
83变量选择
84主体甄选
85实验设计
851实验设计的选择
852通用设计原则
853标准设计类型
86实验工具
87有效性评价
88有效性威胁的详细描述
881结论有效性
882内部有效性
883结构有效性
884外部有效性
89有效性威胁类型的优先级
810实验举例
811练习
第9章操作
91准备
911参与者承诺
912准备实验工具
92执行
921数据收集
922实验环境
93数据确认
94操作举例
95练习
第10章分析与解释
101描述性统计
1011居中趋势的度量
1012离散性的度量
1013依赖关系的度量
1014图形可视化
102数据约简
103假设检验
1031基本概念
1032参数检验和非参数检验
1033检验综述
1034t检验
1035MannWhitney检验
1036F检验
1037配对t检验
1038Wilcoxon检验
1039符号检验
10310方差分析
10311KruskalWallis检验
10312卡方检验
10313模型充分性检查
10314推导结论
104示例分析
105练习
第11章归档与展示
111实验报告的结构
112练习
第三部分实 验 示 例
第12章实验过程说明
121确定范围
1211目标定义
1212范围总结
122计划
1221情境选择
1222构建假设
1223变量选择
1224主体甄选
1225实验设计
1226实验工具
1227有效性评价
123操作
1231准备
1232执行
1233数据确认
124分析与解释
1241描述性统计
1242数据约简
1243假设检验
125总结
126结论
第13章视角间真有差异吗?基于场景的需求文档阅读的进一步实验
131引言
132相关工作
133研究问题
134实验计划
1341变量
1342假设
1343实验设计
1344有效性威胁
135实验操作
136数据分析
1361不同视角的个体表现
1362不同视角发现的缺陷
1363样本空间足够大吗
1364主体经验
137结果解释
138总结和结论
139个体表现数据
1310各视角发现缺陷的数据
13101文档PG
13102文档ATM
附录
附录A练习
附录B统计表
参考文献
索引