paper_scichina_2019/sciscn_manuscript.tex.sav

745 lines
52 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

%-----------------------------------------------------------------------
% 中国科学: 信息科学 中文模板, 请用 CCT & LaTeX 编译
% 请作者注意: 在整篇文章中, 不要使用任何改变文章版式的命令, 谢谢.
%-----------------------------------------------------------------------
\documentclass{SCIS2015cnauthor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 作者附加的定义
%%% 常用环境已经加载好, 不需要重复加载
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{epstopdf}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 开始
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Authors do not modify the information below
%%% 作者不需要修改此处信息
\ArticleType{20truemm}{论~~~文}{}
\Year{2016}
\Vol{44}
\No{1}
\BeginPage{1}
\EndPage{?}
\DOI{xxxxxxxx}
\ReceiveDate{xxxxxxxx}
\AcceptDate{xxxxxxxx}
\OnlineDate{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 标题部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 标题 \title{正文标题}{引用的标题}
\title{基于群智的软件开发群体化方法与实践}{基于群智的软件开发群体化方法与实践}
%%% 英文题目, 只有第一个单词的首字母大写, 其余单词非专有名词全部小写
\entitle{Crowd-based Software Development Method and Practice}
%%% 通信作者 \author[number]{姓名}{{abc@xxxx.xxx}}
%%% 一般作者 \author[number]{姓名}{}
%%% 使用带圈标号 \ding{172},\ding{173},\ding{174},\ding{175},\ding{176}
\author[\ding{172}\ding{173}]{王涛}{{taowang2005@nudt.edu.cn}}
\author[\ding{172}]{尹刚}{}
\author[\ding{172}]{余跃}{}
\author[\ding{172}]{张洋}{}
\author[\ding{172}]{王怀民}{}
%%% 英文作者, 每行一个, []中写地址编号(1,2,3等), 与中文对应
%%% 姓的拼音字母全部大写, 名的拼音首字母大写
%%% 通信作者 \enauthor[number]{AAA BbbCcc}{{abc@xxxx.xxx}}
%%% 一般作者 \enauthor[number]{AAA BbbCcc}{}
%\enauthor[1,2]{AAA BbbCcc}{{abc@xxxx.xxx}}
%\enauthor[2]{AAA BbbCcc}{}
%%% 地址 \address[number]{地址, 城市 邮编}
\address[\ding{172}]{国防科技大学计算机学院 并行与分布处理重点实验室, 长沙 410073}
\address[\ding{173}]{复杂系统软件工程湖南省重点实验室, 长沙 410073}
%%% 英文地址, 每行一个, []中写地址编号(1,2,3等), 与中文对应, 需要写国家
%%% \enaddress[number]{Address, City {\rm 000000}, Country}
%\enaddress[1]{Address, City {\rm 000000}, Country}
%\enaddress[2]{Address, City {\rm 000000}, Country}
%%% 项目资助信息
%%% 国家高技术研究发展计划 (863计划) (批准号: 0000000, 0000000, 00000000) 和
\Foundation{国家重点研发计划 (批准号: 0000000, 0000000, 00000000) 资助项目}
\Foundation{国家自然科学基金 (批准号: 61432020)}
%%% 页眉中的作者信息 \AuthorMark{第一作者等}
%%% 若只有一个作者去掉"等"
\AuthorMark{王涛等}
%%% 引用中的作者信息 \AuthorCitation{第一作者, 第二作者, 第三作者, 等}
%%% 少于三个作者去掉"等"
\AuthorCitation{王涛, 余跃, 张洋等}
\maketitle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 摘要和关键词
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 中文摘要
\abstract{
互联网技术的发展对软件开发技术、运行形态和服务模式都产生了前所未有的影响,以开源和众包为代表的大规模群体协作实践所蕴含的群体智能机理为网络时代的软件开发带来重大启示。本文以开源和众包大规模实践为案例,凝练提出了以大众化协同、开放式共享和持续性评估为核心的群智软件开发机理,并从群体协作基础环境、群体协作机制模型和群体协作支撑技术三个方面深入讨论基于群智的群体化软件开发服务环境涉及的关键要素、当前的开源实践以及未来的发展思路,为网络环境下基于群智的群体化软件开发提供思考和借鉴。
}
%%% 英文摘要
\enabstract{This paper studies the OSS ...}
%%% 中文关键词, \keywords{...\quad ...\quad ...\quad ...\quad ...}
%%% 多个关键词之间用\quad隔开
%%% 要求5-8个, 请尽量补充EI数据库中的受控词为关键词, 谢谢!
\keywords{开源\quad 众包\quad 群智\quad 群体化开发\quad 大众化协同\quad 开放式共享\quad 持续性评估}
%%% 英文关键词, \enkeywords{..., ..., ..., ..., ...}
%%% 非专有名词全部小写, 与中文对应
\enkeywords{Open Source, Crowdsourcing, Crowd Wisdom, Crowds Developmet, Crowd Collaboration, Open Sharing, Continuous Evaluation}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 正文部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{引言}
互联网的发展对软件开发技术、运行形态和服务模式都产生了前所未有的影响\cite{1},软件逐渐从面向传统领域的、以计算机为中心的信息化载体,发展成为以网络为中心、与经济社会文化创新性融合的国家性甚至全球性基础设施,软件系统的复杂度持续增长、需求持续变化、系统持续演化,软件开发的关注点从过去研发相对独立的软件产品向构建多种元素相互依赖持续演化的软件生态转变,经典的自动化和工程化软件开发方法局限性日益凸显\cite{2,3}。
兴起于20世纪90年代的开源软件通过互联网将分布于世界各个角落的软件开发者和用户等联接起来在少数核心人员的协调下利用业余时间共同协作打磨出诸如Linux、Hadoop 等众多商业级软件产品,获得了巨大的成功\cite{4}。2006年杰夫.豪在《连线》杂志上首次提出了众包的概念\cite{5}其核心思想是通过互联网将过去由公司或者机构中特定雇员执行的工作任务以自由自愿的方式外包给大范围的开放大众去完成并在Amazon的Mechanical Turk平台、海量图像识别等领域得到大规模应用和实践。
开源与众包模式在不同的领域取得了巨大的成功,两者在本质上都是对大规模群体协作中开放共享与群体协同核心理念的具体实践,对互联网环境下的软件开发产生了深刻的影响:从生产者的角度,大规模的软件开发业余爱好者由被动的用户变为主动的参与者;从生产工具的角度,软件开发工具由过去的昂贵且不智能变得更加平民化和智能化;从生产资料的角度,由过去组织内部封闭独占的软件资产扩展到全互联网开源共享的智力作品;从生产方式的角度,由过去的资源独占封闭开发转向现在的资源共享协同创作;从生产组织的角度,由封闭大企业的强组织生产管理模式向开放大社区的弱组织创新引导模式转变。这种变化的本质是由过去的专业人员完成工业化软件生产向大众群体共同参与、软件创作生产相融合的转变。
分析和研究开源与众包实践中背后所蕴含的基于互联网的大规模群体协作核心机理,将其中涌现的自由群体协作行为转化为为自觉的群体化协作模型,探索创作与生产相融合、人类智能与机器智能相融合的软件开发新方法(本文将其概括为基于群智的群体化开发方法),将为解决经典软件开发方法面临的难题提供新的途径和机遇。
本文以开源和众包实践为研究对象,深入分析基于群智的大规模群体协作模型和关键机制,构建基于群智的群体化开发环境,以期为互联网环境下的软件开发提供新的理论指导和技术支持。本文内容组织如下:第二部分分析介绍了开源、众包与群智;第三部分深入阐释了群体化开发方法的大众化协同、开放式共享和持续性评估三要素;第四部分从群体协作基础环境、协作机制模型以及协作支撑技术三个层面详细阐述了基于群智的群体化软件开发环境;第五部分介绍了开源软件开发中的群体化实践;第六部分总结全文并展望未来工作。
\section{开源、众包与群智}
开源软件是指一种源代码可以自由获取、修改和传播的计算机软件其思想植根于学术共同体的知识共享传统以及建立在该传统之上的对学术声誉的追求和尊重。开源软件的发展是一个群体参与不断扩大、组织协同不断演变的过程。早期的开源主要是黑客团体之间朴素的、下意识的行为参与者之间通过邮件等工具进行协同。随着个人计算机的快速发展以Richard Stallman为代表的开源倡导者则发起了自由软件运动发明了GPL等自由软件许可证试图保护开发者创新自由。这一阶段的开源开始吸引大量专业开发者的参与并出现了Apache、Linux等开源社区。为了更好的平衡开放理念和商业利益业界开始探索开源新模式并在1998年的开源峰会上提出了“开源软件”的概念和定义。开源软件奉行更为宽容和友好的许可证制度因此得到更多的支持吸引了大量专业开发者、业余爱好者以及商业公司的加入开源运动进入迅猛发展阶段。随着开源软件的不断发展越来越多的商业软件公司开始认识到开源模式在提高软件创新能力和降低软件成本等方面的巨大潜力通过建立开源社区、参与开源开发甚至主动贡献开源项目等方式更为积极主动的参与开源引导开源社区探索平衡开放理念和商业利益的新模式以及群体协作新机制\cite{6},开源软件与商业软件进入融合发展的新阶段。开源软件在发展过程中逐渐形成了一种利用大众群体智慧进行软件开发的开放协作开源模式,实现了高效率高质量的创新软件开发\cite{7}。
众包是一种分布式的问题解决模式,即公司或者机构通过互联网将任务公开发布出去,利用大范围志愿者的创意和技能去解决问题\cite{8}。众包模式的基本流程一般由管理者任务请求者首先将问题分解为细粒度的任务然后通过互联网对外公开发布在一定激励机制的驱动下大量具有相应技能的志愿者群体任务完成者申领任务、协同或者独立完成并提交给任务请求者任务请求者汇聚和评估任务完成者的结果实现问题的解决。众包根据大众参与的形式可以分为协作式众包和竞赛式众包。协作式众包所需要解决的任务通常是需要参与者共同协作才能完成且完成任务的大众通常没有物质的奖励回报reCAPTCHA和Wikipedia 是协同式众包的典型案例\cite{9,10}竞赛式众包所需解决的任务通常是由个人或者小团体独立完成然后通过竞争方式评估任务最佳解决方案且完成任务最佳的个人或者团体会得到相应的奖励Amazon 的Mechanical Turk平台以及InnoCentive平台都是典型的竞赛式众包平台\cite{11,12}。众包模式在投票系统、信息共享系统、游戏系统以及创新系统中都得到广泛应用\cite{13}。
开源与众包的核心思想是一致的,即通过互联网汇聚和联接大规模的志愿参与者,借助群体智慧的力量,通过协作完成单独依靠个人或者计算机难以实现的任务\cite{14}。但是两者之间也存在很大的差异性和互补性。
\begin{itemize}
\item 在模型出发点上:开源源于参与者对知识共享和技术创新追求,更多的是一个协同创作模型;众包则源于企业降低问题解决成本的实际需求,更多的是一个商业生产模型。
\item 在大众参与机制上:开源主要依靠参与者的兴趣爱好和个体需求吸引大众自愿参与,缺乏足够的激励机制,对参与者创新利益的保护不足;众包则通过采用一系列激励机制,吸引开放大众的主动参与,并通过奖励回报实现对参与者利益的保护。
\item 在任务特点上:开源需要解决的通常是问题边界不清楚、难以有效细分的复杂创新型任务,这一类任务通常具有动态变化、多因素交织的特点;众包擅长解决的则是规模较大但是边界清楚、可以分解为大量独立子问题的任务,这一类任务通常具有重复性或者机械性的特点。
\item 在任务解决上:开源软件开发不是一次性,而是一个持续迭代演化的过程,除非软件停止开发和运维,否则任务就不会停止,参与大众之间以协作为主,竞争为辅,在相应机制的支持下共同协作完成;众包任务通常是一次性的,有明确的截止期限,参与大众之间以竞争为主,协作为辅,完成任务后通过竞争方式产生最优解决方案并获得回报\cite{15}。
\end{itemize}
\begin{figure}[!t]
\centering
\includegraphics{../figures/1.eps}
\cnenfigcaption{开源、众包与群智}{Open Source, Crowdsourcing and Crowdcreating}
\label{fig1}
\end{figure}
众创的核心思想是,在继承开源与众包的汇聚群体智慧核心理念的基础上,将开源创新模型与众包商业模型有机结合起来,借鉴众包的商业模型激励和加速开源创新,借鉴开源的创新模型推动众包的可持续创新,通过构建高效的群体协作机制推动创作与生产的融合,通过构建有效的激励回报机制推动创新与创收的融合,从而实现技术创新与商业利益之间的有效平衡,如\ref{fig1}所示。
\section{基于群智的群体化开发方法}
开源和众包的成功实践表明,通过互联网联接起来的大规模群体,在特定环境支持下能够爆发远超个体能力的群体智能,给网络时代的软件开发带来了重大启示。基于众创的群体化开发方法将开源与众包的群体协作思想与机制和传统软件开发的工程化生产思想与机制结合起来,包括三项核心要素:大众化协同、开放式共享和持续性评估。
\begin{itemize}
\item 大众化协同
自由松散的开源和众包活动释放出了惊人的生产力,大规模外围群体的参与是重要基础。互联网环境下参与边界的开放性以及协作任务的分解极大的降低了参与门槛,使得参与群体高度异质,真正成为大众化参与的群体协协同。将传统面向“专业程序员”扩展到“面向多样化群体”,实现外围群体与核心团队之间的大众化协同是群体化开发方法的核心要素之一。
\item 开放式共享
资源共享与复用是提高软件开发效率和质量的重要途径。互联网环境下可共享资源不再处于封闭、静止状态,而是存在结构异质、来源多样、高度分散且快速增长的特点。将互联网上“碎片化、无序”的原生资源转变为“聚合、有序”的共享资源,实现大范围的开放式资源共享,是群体化开发方法的核心要素之二。
\item 持续性评估
群体化软件开发是一个不断迭代演化的过程,对开发过程和参与实体的持续准确评估是确保软件向预期方向演化的重要保证。互联网环境下的参与个体、共享资源以及协作任务都处于动态演化中。将传统的单一维度的静态分析转变为多各维度的动态量化度量,实现对软件开发参与实体的持续性评估是群体化开发方法的核心要素之三。
\end{itemize}
在群体化开发过程的不同阶段都需要群体之间的群体协同、资源共享与目标评估。群体化开发过程包括参与个体、协作任务和协作资源三类参与实体,大众化协同、开发式共享和持续性评估围绕这三类参与实体相互交织并随软件的迭代演化不断发展的,如\ref{fig2}所示。
\begin{figure}[!t]
\centering
\includegraphics{../figures/2.eps}
\cnenfigcaption{项目迭代演化中的群体化方法}{The crowd methods in continuous evolution of software}
\label{fig2}
\end{figure}
\subsection{面向协作任务的大众化协同}
软件开发是一种智力密集型的群体协同活动\cite{16},群体协同机制对软件开发效率和质量有重要影响。群体协同既存在于核心参与者之间,也发生在大众参与者以及核心参与者和大众参与者之间。参与协作的群体围绕任务建立直接或间接关联,形成以任务为中心的大众化协同,如\ref{fig3}所示。
\begin{figure}[!t]
\centering
\includegraphics{../figures/3.eps}
\cnenfigcaption{面向协作任务的大众化协同}{Collaborative task oriented crowd collabotation}
\label{fig3}
\end{figure}
群体化软件开发需要实现软件创作与软件生产的有机结合。其中,软件创作通常是由创作群体的灵感和创意驱动,而软件生产则是由预先定义明确的用户需求驱动。在群体化软件开发的创作与生产过程中,主要包括三类典型任务:
第一类是问题表述完全清楚,即不仅能够给出求解结果的逻辑判断,而且还可以给出求解问题的分拆方法或分拆结果,群体协同需要解决的是分拆后的子问题,软件回归测试是典型的此类任务;第二类是问题表述清楚,即能够给出求解结果的逻辑判断,但求解问题的(分拆)方法或(分拆)结果还不清楚,群体协同需要解决的是问题求解方法或者分拆问题的方法,软件缺陷修复是典型的此类任务;第三类是问题表述并不清楚,即不能给出求解结果的逻辑判断,不同的人对问题及其结果可能产生不同的理解,但人们对问题的理解有共同基础,对不同理解的部分能够设法交流并相互影响,群体协同需要解决的任务是对问题的共同理解或清晰表述,软件创意需求的获取是典型的此类任务。
针对不同的任务特点需要相应的群体协同模型。2016年Pietro等科学家在《科学》杂志上发表文章对群体智能进行了深入分析提出了任务分解模型、工作流模型以及问题求解生态系统模型三类群体协同模型\cite{17},对群体化软件开发中的大众化群体协同具有重要参考意义。其中,任务分解协作模型主要针对具有大量需要重复性处理且处理规则和处理过程相对简单的子任务的一类问题,参与群体对等,个体之间的协作过程简单;工作流协作模型主要针对定义清楚但是难以拆分,且子任务间存在关联依赖的一类问题,参与群体具有不同角色,个体之间的协作过程较为复杂;问题求解生态系统模型主要针对动态变化、多因素交织且需要参与者高度协调才能完成的问题,参与群体角色多样化,个体之间围绕任务经历多次迭代演化,协作过程非常复杂。
在群体化软件开发过程中三类问题广泛存在且相互交织某类问题拆分后的子问题可能变成了另外一类典型问题Pietro等总结的协同模型给出了重要参考针对群体化开发过程中的不同问题可以借鉴单个或者多个模型来协同解决。
\subsection{面向协作资源的开放式共享}
软件开发是一个多样化群体协作的过程,涉及到软件代码、知识信息等大量不同资源的分享\cite{18}。“敝帚自珍”式的资源封闭独占会导致协作群体内大量的重复劳动,极大的降低群体协作效率。核心参与者与大众参与者通过互联网进行资源的主动发布和便捷获取,实现协作群体内资源的透明化和开放式共享,将有效的降低群体协作开销,提高群体协作效率,如\ref{fig4}所示。
\begin{figure}[!t]
\centering
\includegraphics{../figures/4.eps}
\cnenfigcaption{面向协作资源的开放式共享}{Collaborative resources oriented open sharing}
\label{fig4}
\end{figure}
互联网技术的发展为资源的开放式共享提供了基础条件。协作开发过程中产生的软件源代码、缺陷报告等过程数据,软件运行日志、软件维护记录等运维数据,软件技术报告、软件使用评论等反馈数据等都以前所未有的透明方式通过互联网发布出来,任何参与者都可以通过互联网免费获取协作开发所需要的共享资源。
但与此同时,这些共享资源也呈现出高度分散、类型多样、高速增长、不断演化的特征,资源的高效分享需要解决资源的发布、管理与获取等问题。群体化开发中的资源共享需要认知到“互联网即资源库”的理念,将传统软件构件库的“封闭、静态”个体管理模式转变为网络条件下的“开放、动态”的群体汇聚模式,为互联网上“无序、分散”的原生态软件资源提供“有序、聚合”的资源组织模式,实现以资源为中心的开放式共享。
\subsection{面向协作实体的持续性评估}
软件开发是一个持续迭代演化的过程\cite{19},这一过程中的协作实体,主要包括参与个体、协作任务以及协作资源,同样都处于动态变化过程中。脱离演化过程的静态和孤立的分析将导致片面、不准确的判断,需要从联系和发展的视角对参与实体进行持续性评估,确保群体化开发向预期目标演化,如\ref{fig5}所示。
\begin{figure}[!t]
\centering
\includegraphics{../figures/5.eps}
\cnenfigcaption{面向协作实体的持续性评估}{Collaborative entity oriented continuous evaluation}
\label{fig5}
\end{figure}
\begin{itemize}
\item 面向协作参与者的持续性评估
群体协作的参与者个体之间在文化背景、专业技能等方面都存在巨大的差异性,这种差异性会对群体协作产生很大的影响\cite{20}。同时,这些参与者并非一成不变,而是随着参与时间、参与环境等不断变化。通过对参与者的协作历史、跨社区的协作行为以及不同的行为模式等进行持续的关联分析,构建多维度的参与者评估模型,从而对参与者进行准确的角色定位和任务分派。
\item 面向协作任务的持续性评估
软件开发过程中的协作任务通常是不断迭代的,且不同协作任务之间紧密联系相互影响,对协作任务的持续性评估是确保项目开发顺利推进的重要保证\cite{22}。开发者和用户等对协作任务的反馈是进行有效评估的重要数据来源,通过大众反馈结合专家知识可实现对任务完成情况、任务优先级以及后续任务规划等进行持续有效的评估。
\item 面向协作资源的持续性评估
共享的协作资源具有来源广泛以及高度碎片化等特征,其质量和可信度对开发质量和效率具有很大的影响,需要进行持续有效的评估\cite{23}。一方面,这些资源在发布共享的过程中已经积累了大量的使用和评价信息,基于这些数据构建基于大众反馈的评估模型;另一方面,相同的协作资源可能存在不同的来源和表述,通过资源溯源以及多源对比等方法实现对协作资源的持续性评估。
\end{itemize}
\section{基于群智的群体化开发环境}
群体化开发需要将自由动态、高度分散的大规模群体有效组织起来,实现高效协作,离不开相应环境的支撑。本文提出了基于群智的群体化软件开发环境,如\ref{fig6}所示。
\begin{figure}[!t]
\centering
\includegraphics{../figures/6.eps}
\cnenfigcaption{基于众创的群体化开发环境}{Crowd Development Environment based on CrowdCreating}
\label{fig6}
\end{figure}
基于群智的群体化开发环境主要包括群体协作基础环境、群体协作机制模型以及群体协作支撑技术三部分。其中,协作基础环境是面向所有项目,协作机制模型则是面向具体项目或项目集,协作支撑技术提供具体的技术支撑。协作机制模型的约束和引导、基础协作环境的影响以及相应支撑技术的支持,共同形成了软件的群体化开发环境,实现对大规模群体协同创作的支持。
\begin{itemize}
\item 群体协作基础环境
在大规模群体协作中,每一个参与者都处于一个开放互联的协作环境中\cite{24},这种协作环境会对其中的开发者群体之间的协作产生潜移默化的影响。
\item 群体协作机制模型
群体协作机制及模型包括大规模群体的组织机制、激励机制以及协作模型三部分。其中,组织机制对项目内群体间协作提供行为规则和流程约束,激励机制对大众群体的参与提供相应激励,协作模型则为群体间高效协作提供可供参考的协同方案。本文第三章的群体化开发方法中对群体化开发的三大核心机理进行了详细阐述,可针对任务特点构建以大众化协同、开放式共享与持续性评估为一体的群体协作模型,实现群体间高效协同、透明分享与准确评估。
\item 群体协作支撑技术
在大规模参与的群体化协作背景下,群体协作支撑技术主要包括以参与者为中心的大众化协同支撑技术、以资源为中心的开放式共享支撑技术和面向动态演化的持续性评估支撑技术。
\end{itemize}
\subsection{群体协作基础环境}
群体协作基础环境是大规模参与者共同协作进行软件开发的基础环境,可以分为两个层面,一个是面向整个社区项目的宏观协作环境,这一协作环境不因开发者或者开源项目的不同而不同;另外一个是项目或者开发者所处的局部协作环境,这一协作环境会随着项目或者开发者的不同而变化。
\begin{itemize}
\item 宏观协作环境
在开源发展过程中形成了以Apache为代表的精品式协作社区、以SourceForge为代表的集市式协作社区和以GitHub为代表的社交化协作社区等典型的宏观协作环境。Apache 社区瞄准精品项目,具有严格的准入门槛,且项目之间存在紧密关联\cite{29}SourceForge面向大众群体提供项目托管服务群体参与不受限项目之间相对独立\cite{27}GitHub则将社交机制纳入软件开发提供了一个更为社交透明的协作环境\cite{28}。宏观协作环境会对参与群体规模以及群体间协作效率等产生较大影响正因为如此大量流行的开源项目如Ruby On Rails、Hibernate、phpadmin 等纷纷从传统的开源托管平台如SourceForge 上迁移至GitHub社区\cite{30}Apache社区也有70\% 的项目在GitHub上创建了镜像以吸引用户的关注。
\item 局部协作环境
在宏观协作环境之上开发者以及项目相互关联形成了项目生态、参与者生态等将相关项目或者参与者连接起来形成以项目或者参与者为中心的局部协作环境。其中项目生态是指项目间由于复用、扩展等关联而形成的软件生态系统如Apache社区中的项目复用依赖生态\cite{29}参与者生态是指开发者之间由于社交联系而形成的生态系统如GitHub中开发者之间由于Follow、Star等关系形成的生态\cite{31}此外开发者之间、开发者与项目之间以及项目与项目之间也可构成紧密联系的生态如ruby项目中开发者、ruby的gem包以及他们之间的关联形成的ruby生态系统\cite{32}。局部协作环境会对参与群体的协作产生直接的影响。
\end{itemize}
\subsection{群体协作机制模型}
在群体化开发环境中,群体协作机制模型主要包括协作组织机制、激励机制以及协作模型。其中,群体组织机制定义了群体间协作的基本规则和流程规范,群体激励机制实现对参与群体的有效激励,群体协作模型则提供了可参考的群体协作方案。
\begin{itemize}
\item 组织机制
互联网环境下的群体化软件开发,既需要充分发挥每个参与者个体的主观能动性,创造超越个体的群体智能,也需要对参与大众进行一定的约束和引导,从而保证全局发展符合预期方向。
强组织机制在传统工业生产中发挥了巨大作用,能够保证生产环节的进度和质量,但是强约束方式限制了个体主观能动性的发挥。弱组织机制则在互联网环境下得到广泛应用,能够有效激发大众参与的积极性和创造力,但是松散的机制难以确保整体目标的推进和实现。两者之间既有较大差异,又具有很大的互补性具的对比如\ref{tab1}所示。
\begin{table}[!t]
\footnotesize
\cnentablecaption{强组织与弱组织}{The comparison between strong and loose organization}
\label{tab1}
\tabcolsep 10pt %space between two columns. 用于调整列间距
\begin{tabular*}{\textwidth}{ccc}
\toprule
& Strong organization & Loose organization \\\hline
Expected Target & Very Specified & Not Specified\\
Evaluation Method & The degree to match the overall expectation & The degree to exceed individual expectation\\
Restriction Way & What can do & What can not do\\
Restriction Degree & Strong restriction on behaviors & Weak restriction on behaviors\\
Subjective Initiative & Individual initiative are constrained & Individual initiative are high\\
\bottomrule
\end{tabular*}
\end{table}
开源开发逐渐形成了一种类似“洋葱”结构的“小核心-大外围”的的群体参与组织结构\cite{33}实现了强组织规则与弱组织机制的融合。在这种结构下小核心通常是项目的创始人及少量的核心参与者通常具有层次结构清晰、职责划分明确、规则约束很强的特点。大外围通常是大量的外围开发者、用户以及其他利益相关者具有参与边界开放、参与者数量众多、角色多样、组织松散的特点。在强组织规则下小核心决策了项目生产的技术路线、方向和推进进度等在弱组织规则下大外围在小核心的引导下积极参与项目具体任务的解决以及创作创意的贡献等。通过这种小核心大外围的组织结构实现了群体化强组织与弱组织的有机融合有效推动了项目的发展。Linux操作系统内核以及外围生态圈是这种组织结构的典型代表。
\item 激励机制
开源和众包模式下的参与者通常是利用自己的业余时间志愿参与其中,他们可以参与长期贡献也可能随时退出,如何吸引大规模群体积极参与和持续贡献需要有效的激励机制。
开源软件开发中的激励机制以声誉机制为主。在Linux、Apache等项目中设定了不同的参与者角色对于不同角色的参与者赋予不同级别的权限如提交缺陷、提交代码、合并代码、发布软件等激励参与者积极贡献从而获得更高等级的参与权和决策权\cite{26}在StackOverflow社区中构建了以积分和权限相结合的声誉机制参与贡献越多、问答质量越高的用户积分越高同时具有的权限越高\cite{34}
在众包协作中的激励机制以物质奖励为主。在Amazon的Mechanical Turk平台任务发布者给每个任务设定相应的标价完成任务的参与者能够获得相应的奖金\cite{11}。在激励机制的设计中,物质奖励的额度设定会对参与者的多少以及任务完成质量产生很大的影响\cite{35}。
基于区块链的知识产权共享长效激励机制。
\end{itemize}
\subsection{群体协作支撑技术}
群体化开发的协作基础环境、协作机制模型的实现离不开相应技术的支撑。为了提高群体协作效率,学术界和工业界对此开展了广泛研究,本节围绕协同、共享与评估分别介绍相应的支撑技术。
\begin{itemize}
\item 大众化协同支撑技术
大规模群体协作广泛存在于自然界,如蚁群觅食、蜂群筑巢等生物活动,并形成了以环境为媒介的基于环境激发效应的昆虫群体间间接协同\cite{36}。在群体化软件开发过程中,逐渐形成了以任务为媒介的群体间间接协同以及基于社交机制的群体间直接协同等典型研究技术和实践工具。
(1) 以任务为媒介的群体间间接协同技术:
在软件项目层面参与者之间通过项目规划、任务指派等方式实现以任务为媒介的群体间间接协同。Yu以及Kim等学者研究了缺陷严重性预测方法对开发任务优先级进行规划\cite{37,38}Naguib以及Xuan等人则提出了任务分派方法等\cite{39,40}。在GitHub等开源社区项目管理者利用Milestone机制对阶段性任务进行规划\cite{41}基于pull-request、持续集成等机制实现子任务结果的汇聚。在开发任务层面开发者之间通过版本控制工具实现细粒度的开发过程协同\cite{42};利用邮件列表、缺陷管理等工具实现针对具体任务的交互沟通\cite{43}等。
(2) 基于社交机制的群体间直接协同技术:
社交网络技术的发展对软件开发的群体协同产生了很大的影响以GitHub为代表的开源开发社区将Follow、@等社交机制融入协作开发过程。Yu等人研究了GitHub中参与者之间的Follow关系网络发现群体间存在团组、星型等多种不同的协同模式\cite{44}Zhang等人则分析发现@机制的应用有效降低了pull-request的处理延迟\cite{45}。此外watch机制、Star机制等能够帮助参与者建立与其他开源项目和参与者等之间的直接联系\cite{46},实现群体间的直接协同,提高了大规模开发者群体间的协同效率。
\item 开放式共享支撑技术
互联网已成为开放的共享资源库,大规模资源的结构化组织管理、扁平化联接、检索与推荐等已成为网络环境下资源聚合、管理与获取的重要手段。
(1) 基于标注的大规模资源管理技术
通过给共享资源标注类别或者社会化标签是互联网环境下大规模资源有效组织管理的重要方法。在学术界,研究人员提出了基于支持向量机、潜在语义索引、概率主题模型等技术的软件自动分类方法【\cite{47,48,49}Xia、Wang等人提出了标签自动标注方法实现大规模软件资源的组织\cite{50,51}。在工业界SourceForge社区定义了层次化的类别体系由项目管理者提交项目时选择所在类别实现对社区内项目的层次化组织OpenHub、StackOverflow等社区则设计了社会化标签机制允许注册用户给项目添加标签从而借助群体标注实现对大规模资源的组织。
(2) 基于联接的大规模资源聚合技术
基于联接的方式能够将高度分散于不同社区的碎片化资源有效连接起来,实现信息、资源的高效汇聚和共享\cite{52}。Correa 等人通过调查问卷和设计实验定量和定性的分析了跨社区链接对加快资源共享的重要作用\cite{53}Wang等人提出了跨社区缺陷与问答讨论自动连接的方法\cite{55}Bacchelli和其他一些研究者则提出了基于信息检索、文本分析等不同的方法将邮件讨论与代码实现、API 与示例代码、API文档与互联网资源以及源代码实体关联起来的方法\cite{56,57},实现关联资源的有效聚合,加速资源的共享。
(3) 基于检索与推荐的大规模资源获取技术
开放共享资源的大规模性使得群体协作中所需资源的准确定位面临巨大挑战研究学者在在资源检索与推荐方面进行了深入研究。Sushil 等学者通过软件源代码、软件描述的分析以及其他搜索引擎的聚合,构建了相应的软件代码相关资源的检索系统\cite{58,59},文献\cite{60,61,62}等则利用上下文信息以及文本分析等技术构建面向软件开发的互联网知识资源的检索与推荐系统。
\item 持续性评估支撑技术
持续性评估是群体协作有效推进的重要保障,针对群体协作中的群体参与者、协作任务以及共享资源,都需要相应持续评估技术的支撑。
(1) 面向参与者的持续评估技术
群体协同中参与者的技术能力、兴趣关注点等方面会对协作效率和质量产生很大的影响学术界和工业界提出了一系列的相关技术来进行度量和评估。Nguyen、Ma等学者通过对参与者在开源协同开发社区中的历史开发行为和社交行为分析评估开发者的技术能力\cite{63,64}Zhou\cite{65}等人则提出了基于开发行为的能力量化方法,对参与者随项目发展的能力成熟度进行持续评估。开发者在知识分享社区中的参与活动从另一个角度反映了开发者的能力,文献\cite{66,67,68}】等通过分析参与者在知识社区交流讨论行为实现对其技术水平和潜在能力的评估和预测。
(2) 面向协作任务的持续评估技术
开发任务的准确评估直接影响到项目的开发质量和开发进展缺陷修复是软件开发过程中的重要开发任务缺陷优先级的准确预测是推动项目快速发展的重要环节。Hooimeijer 等人\cite{69}基于大规模缺陷样本利用统计分析方法设计了缺陷报告质量分析模型Lamkanfi等学者\cite{70,71}分别采用分类算法、神经网络、网络中心度等方法对软件缺陷的优先级进行预测和评估Yu\cite{72}等人研究了持续集成技术在协作任务评估中的作用。在众包实践中,则主要通过专家评估、多人对比等方式实现对任务完成情况的评估\cite{73}。
(3) 面向共享资源的持续评估技术
互联网环境下共享资源存在质量层次不齐等问题对共享资源的准确评估对群体协作至关重要。为给群体协作提供高质量的可复用开源资源Lavazza和Bauer等人\cite{74,75} 通过静态代码分析方法对开源软件质量进行评估。Rudzki 等人\cite{76}则设计实现了一个包括活跃度、代码审阅、文档支持、软件社区和成熟度等多个维度的开源软件质量评估框架。Zou 等人\cite{77}等人则从用户角度入手提出了一种基于互联网用户评论的软件质量度量方法。在知识分享社区通过构建完善的评估机制对其中的资源进行有效的评估。例如在StackOverflow中采用用户点赞、评分的机制通过聚合大量阅读者的评分实现对资源的持续评价\cite{34}。
\end{itemize}
\section{开源软件的群体化开发众创实践}
开源软件的开发过程是一个“大众参与创作”的群体协作过程全球最大的开源社区GitHub以分布式版本控制工具Git为基础并将协同、共享及评估机制融入其中利用Pull-Request模式进行社会化协作开源项目开发可以看做是软件开发群体化方法的具体实践。
在GitHub中软件开发的基本流程是核心开发团队在互联网上发布项目初始版本激发大众化群体体验、给出使用反馈并提出需求创意吸引外围开发者参与开发并贡献代码最后由核心开发团队评估汇聚外围贡献、规划决策发展方向及任务进度并推动进入到下一轮的迭代演化\cite{78},具体如\ref{fig7}所示:
\begin{figure}[!t]
\centering
\includegraphics{../figures/7.eps}
\cnenfigcaption{GitHub中的群体化软件开发流程}{The crowd software development process in GitHub}
\label{fig7}
\end{figure}
GitHub中的开源项目形成了一种核心开发团队主导、大众化群体参与的协作组织。核心开发团队是项目主导者在社区发布项目初始版本分析大众反馈评估大众贡献决策项目进度与发展方向大众化群体积极参与以多种形式如反馈使用体验、提出个体需求、提交贡献代码、参与审阅流程等进行贡献。随着参与人在项目中的活跃程度及贡献的变化可以获得不同的角色和管理权限。
在Pull-Request 协同机制的支持下众多的外围开发者自发地承担起了大量原本由核心开发者完成的开发任务用户一键“派生”fork任何一个感兴趣的代码仓库形成自己独立的分支并通过“合并请求”的方式Pull-Request回馈贡献形成了一种自组织的众包协同开发模式用户能自由地“关注”watch流行的软件项目、与敬仰的极客高手成为“好友”follow并将个人历史开发活动与社交动态透明化的共享自发地形成了协同微社区在微社区内交流创意、共享成果所有的社区用户都可自由参与项目相关讨论、审阅他人贡献、评估他人反馈等。同时GitHub也提供了持续集成测试等构建了统一标准化的审理流程以进行持续性的评估。
\section{结论}
开源和众包的迅速发展和广泛实践给互联网环境下的软件开发带来了重大启示,本文在探究开源众包实践背后所蕴含的群体协作核心机理的基础上,突破传统自动化和工业化方法的局限,凝练了以大众化协同、开放式共享和持续性评估为核心要素的基于众创的软件开发群体化方法,提出了以协同、共享和评估技术为支撑,融合群体协作基础环境、协作机制模型的群体化开发众创环境,实现创作与生产、创新与创收的融合与平衡,为互联网环境下的软件开发提供重要的支撑。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 致谢, 非必选
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\Acknowledgements{致谢.}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 补充材料说明, 非必选
%%% 有补充材料时请添加补充材料说明, 例如图S1~S5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\Supplements{图S1$\sim$S5.}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 参考文献, {}为引用的标签, 数字/字母均可
%%% 文中上标引用: \upcite{1,2}
%%% 文中正常引用: \cite{1,2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{thebibliography}{99}
% 专著
% 作者名. 书名. 版次(第一版不用列出). 出版社所在城市名: 出版社名, 出版年份. 起止页码
\bibitem{1}Yang F Q, Lu J, Mei H. Internetware technology system: an architecture-centric approach. Sci China Ser E-Inf Sci,2008, 38: 818828 [杨芙清, 吕建, 梅宏. 网构软件技术体系: 一种以体系结构为中心的途径. 中国科学 E 辑: 信息科学, 2008,38: 818828]
% 期刊
% 作者名. 文章题目(用小写字母). 期刊名, 年份, 卷号: 起止页码
\bibitem{2}Lehman M M, Belady L A. Program Evolution Processes of Software Change. London: Academic Press, 1985
\bibitem{3}Li D Y. Software engineering in Internet age. China Comput Federation Lett, 2009, 35: 712 [李德毅. 网络时代的软件工程. 中国计算机学会通讯, 2009, 35: 712]
\bibitem{4}Raymond E S. The Cathedral \& the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary. Sebastopol: OReilly, 1999
\bibitem{5}Howe J. The rise of crowdsourcing[J]. Wired magazine, 2006, 14(6): 1-4.
\bibitem{6}Lerner J, Tirole J. Some simple economics of open source[J]. The journal of industrial economics, 2002, 50(2): 197-234.
\bibitem{7}DiBona C, Stone M, Cooper D. Open sources 2.0: The continuing evolution [M]. ” OReilly Media, Inc.”, 2005
\bibitem{8}Brabham D C. Crowdsourcing as a model for problem solving an introduction and cases[J]. Convergence: the international journal of research into new media technologies, 2008, 14(1): 75-90.
\bibitem{9}Von Ahn L, Maurer B, McMillen C, et al. recaptcha: Human-based character recognition via web security measures[J]. Science, 2008, 321(5895): 1465-1468.
\bibitem{10}Kittur A, Kraut R E. Harnessing the wisdom of crowds in wikipedia: quality through coordination[C]//Proceedings of the 2008 ACM conference on Computer supported cooperative work. ACM, 2008: 37-46.
\bibitem{11}J. Heer and M. Bostock. Crowdsourcing graphical perception: using mechanical turk to assess visualization design. In Proceedings of the 28th international conference on Human factors in computing systems, CHI 10, pages 203212, New York, NY, USA, 2010. ACM.
\bibitem{12}Hagel J, Brown J S. The next wave of open innovation: How innocentive aims to exploit sophisticated technology and networking capabilities to connect problems with their potential solvers[J]. BusinessWeek. com, April, 2009, 8.
\bibitem{13}Yuen M C, King I, Leung K S. A survey of crowdsourcing systems[C]//Privacy, Security, Risk and Trust (PASSAT) and 2011 IEEE Third Inernational Conference on Social Computing (SocialCom), 2011 IEEE Third International Conference on. IEEE, 2011: 766-773.
\bibitem{14}Jeff H. Crowdsourcing: Why the power of the crowd is driving the future of business[J]. Crown Business, New York, 2008.
\bibitem{15}Chawla S, Hartline J D, Sivan B. Optimal crowdsourcing contests[J]. Games and Economic Behavior, 2015.
\bibitem{16}Strubing J. Designing the working process: what programmers do besides programming. In: Gilmore D J, Winder R L, Detienne F, eds. User-Centered Requirements for Software Engineering Environments. Berlin: Springer, 1994. 8190
\bibitem{17}Michelucci P, Dickinson J L. The power of crowds[J]. Science, 2016, 351(6268): 32-33.
\bibitem{18}Wang H M, Yin G, Xie B. Research on network-based large-scale collaborative development and evolution of trustworthy software. Sci China Ser E-Inf Sci, 2014, 44: 1-19.[王怀民, 尹刚, 谢冰, 等. 基于网络的可信软件大规模协同开发与演化. 中国科学: 信息科学, 2014, 44: 1-19]
\bibitem{19}Wang H, Ding B. Growing construction and adaptive evolution of complex software systems. Sci China Ser E-Inf Sci, 2014: 1-3.[王怀民, 吴文峻, 毛新军, 等. 复杂软件系统的成长性构造与适应性演化. 中国科学: 信息科学, 2014, 6: 743-741]
\bibitem{20}Zhou M, Mockus A. Growth of newcomer competence: challenges of globalization[C]//Proceedings of the FSE/SDP workshop on Future of software engineering research. ACM, 2010: 443-448.
\bibitem{21}Hong Mei, Gang Huang, Tao Xie. “Internetware: A Software Paradigm for Internet Computing,” IEEE Computer, vol.45, no.6, 2012, pp.26-31.
\bibitem{22}Wang H, Yin G, Li X, et al. TRUSTIE: A Software Development Platform for Crowdsourcing[M]//Crowdsourcing. Springer Berlin Heidelberg, 2015: 165-190.
\bibitem{23}Rudzki J, Kiviluoma K, Poikonen T, et al. Evaluating quality of open source components for reuse-intensive commercial solutions [C]. In Software Engineering and Advanced Applications, 2009. SEAA09. 35th Euromicro Conference on. 2009:1119.
\bibitem{24}Zhou M, Mockus A. Does the initial environment impact the future of developers?[C]//Proceedings of the 33rd International Conference on Software Engineering. ACM, 2011: 271-280.
\bibitem{25}Roberts J A, Hann I H, Slaughter S A. Understanding the motivations, participation, and performance of open source software developers: A longitudinal study of the Apache projects[J]. Management science, 2006, 52(7): 984-999.
\bibitem{26}Fielding R T. Shared leadership in the Apache project[J]. Communications of the ACM, 1999, 42(4): 42-43.
\bibitem{27}Robles G, Gonzalez-Barahona J M. Geographic location of developers at sourceforge[C]//Proceedings of the 2006 international workshop on Mining software repositories. ACM, 2006: 144-150.
\bibitem{28}Dabbish L, Stuart C, Tsay J, et al. Social coding in GitHub: transparency and collaboration in an open software repository[C]//Proceedings of the ACM 2012 conference on Computer Supported Cooperative Work. ACM, 2012: 1277-1286.
\bibitem{29}Bavota G, Canfora G, Di Penta M, et al. The evolution of project inter-dependencies in a software ecosystem: The case of apache[C]//2013 IEEE International Conference on Software Maintenance. IEEE, 2013: 280-289.
\bibitem{30}The Long Death of Project Hosting Sites. http://www.drdobbs.com/web-development/the-long-death-of-project-hosting-sites/240169394. Accessed: 2016-04-28.
\bibitem{31}Wu Y, Kropczynski J, Shih P C, et al. Exploring the ecosystem of software developers on github and other platforms[C]//Proceedings of the companion publication of the 17th ACM conference on Computer supported cooperative work \& social computing. ACM, 2014: 265-268.
\bibitem{32}Kabbedijk J, Jansen S. Steering insight: An exploration of the ruby software ecosystem[M]//Software Business. Springer Berlin Heidelberg, 2011: 44-55.
\bibitem{33}Nakakoji K, Yamamoto Y, Nishinaka Y, et al. Evolution patterns of open-source software systems and communities[C]//Proceedings of the international workshop on Principles of software evolution. ACM, 2002: 76-85.
\bibitem{34}Mamykina L, Manoim B, Mittal M, et al. Design lessons from the fastest Q\&A site in the west [C]. In Proceedings of the SIGCHI conference on Human factors in computing systems. 2011: 28572866.
\bibitem{35}Mason W, Watts D J. Financial incentives and the performance of crowds[J]. ACM SigKDD Explorations Newsletter, 2010, 11(2): 100-108.
\bibitem{36}Grasse P. P. La reconstruction du nid et les coordinations inter-individuelles chez Bellicositermes natalensis et Cubitermes sp. La theorie de la stigmergie: Essai dinterpretation du comportement des termites constructeurs. Insectes Sociaux, 1959, 6:4181.
\bibitem{37}Lian Yu, Wei-Tek Tsai, Wei Zhao, Fang Wu: Predicting Defect Priority Based on Neural Networks. ADMA (2) 2010: 356-367.
\bibitem{38}Kim S, Ernst M D. Which warnings should I fix first? In Proc. the 6th ESEC-FSE, Dubrovnik, Croatia, September 2007, pp.4554.
\bibitem{39}Hoda Naguib, Nitesh Narayan, Bernd Brügge, Dina Helal: Bug report assignee recommendation using activity profiles. MSR 2013: 22-30.
\bibitem{40}Jifeng Xuan, He Jiang, Zhilei Ren, Weiqin Zou: Developer prioritization in bug repositories. Proceedings of the 2012 International Conference on Software Engineering, (ICSE 2012): 25-35.
\bibitem{41}Salo R. A guideline for requirements management in GitHub with lean approach[J]. 2014.
\bibitem{42}Brindescu C, Codoban M, Shmarkatiuk S, et al. How do centralized and distributed version control systems impact software changes?[C]//Proceedings of the 36th International Conference on Software Engineering. ACM, 2014: 322-333.
\bibitem{43}Serrano N, Ciordia I. Bugzilla, ITracker, and other bug trackers[J]. Software, IEEE, 2005, 22(2): 11-13.
\bibitem{44}Yu Y, Yin G, Wang H, et al. Exploring the patterns of social behavior in github[C]//Proceedings of the 1st International Workshop on Crowd-based Software Development Methods and Technologies. ACM, 2014: 31-36.
\bibitem{45}Yang Zhang, Huaimin Wang, Gang Yin, Tao Wang, Yue Yu. Exploring the Use of @-mention to Assist Software Development in GitHub. The Seventh Asia-Pacific Symposium on Internetware, Wuhan, China, 2015.
\bibitem{46}Lee M J, Ferwerda B, Choi J, et al. GitHub developers use rockstars to overcome overflow of news[C]//CHI'13 Extended Abstracts on Human Factors in Computing Systems. ACM, 2013: 133-138.
\bibitem{47}McMillan C, Linares-Vasquez M, Poshyvanyk D, et al. Categorizing software applications for maintenance[C]//Software Maintenance (ICSM), 2011 27th IEEE International Conference on. IEEE, 2011: 343-352.
\bibitem{48}Kai Tian, Meghan Revelle, Denys Poshyvanyk, Using latent dirichlet allocation for automatic categorization of software, 6th IEEE International Working Conference on Mining Software Repositories, 2009, 163 166.
\bibitem{49}Wang T, Wang H, Yin G, et al. Mining software profile across multiple repositories for hierarchical categorization[C]//2013 IEEE International Conference on Software Maintenance. IEEE, 2013: 240-249.
\bibitem{50}Xia X, Lo D, Wang X, et al. Tag recommendation in software information sites[C]//Proceedings of the 10th Working Conference on Mining Software Repositories. IEEE Press, 2013: 287-296.
\bibitem{51}Wang T, Wang H, Yin G, et al. Tag recommendation for open source software[J]. Frontiers of Computer Science, 2014, 8(1): 69-82.
\bibitem{52}Gómez C, Cleary B, Singer L. A study of innovation diffusion through link sharing on stack overflow[C]//Proceedings of the 10th Working Conference on Mining Software Repositories. IEEE Press, 2013: 81-84.
\bibitem{53}Correa D, Lal S, Saini A, et al. Samekana: A Browser Extension for Including Relevant Web Links in Issue Tracking System Discussion Forum[C]//Software Engineering Conference (APSEC), 2013 20th Asia-Pacific. IEEE, 2013, 1: 25-33.
\bibitem{54}Vasilescu B, Filkov V, Serebrenik A. StackOverflow and GitHub: Associations between software development and crowdsourced knowledge[C]//Social Computing (SocialCom), 2013 International Conference on. IEEE, 2013: 188-195.
\bibitem{55}Wang H, Wang T, Yin G. Linking Issue Tracker with Q\&A Sites for Knowledge Sharing across Communities[J].
\bibitem{56}Bacchelli A, Lanza M, Robbes R. Linking e-mails and source code artifacts [C]. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering. 2010: 375384.
\bibitem{57}Subramanian S, Inozemtseva L, Holmes R. Live API documentation[C]//Proceedings of the 36th International Conference on Software Engineering. ACM, 2014: 643-652.
\bibitem{58}Bajracharya S, Ossher J, Lopes C. Sourcerer: An internet-scale software repository [C]. In Proceedings of the 2009 ICSE Workshop on Search-Driven Development-Users, Infrastructure, Tools and Evaluation. 2009: 14.
\bibitem{59}Yin G, Wang T, Wang H, et al. OSSEAN: Mining Crowd Wisdom in Open Source Communities[C]//Service-Oriented System Engineering (SOSE), 2015 IEEE Symposium on. IEEE, 2015: 367-371.
\bibitem{60}Gottipati S, Lo D, Jiang J. Finding relevant answers in software forums [C]. In Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering. 2011: 323332.
\bibitem{61}Brandt J, Dontcheva M, Weskamp M, et al. Example-centric programming: integrating web search into the development environment [C]. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems. 2010: 513522.
\bibitem{62}Bacchelli A, Ponzanelli L, Lanza M. Harnessing stack overflow for the ide[C]//Proceedings of the Third International Workshop on Recommendation Systems for Software Engineering. IEEE Press, 2012: 26-30.
\bibitem{63}Nguyen T T, Nguyen T N, Duesterwald E, et al. Inferring developer expertise through defect analysis[C]//Software Engineering (ICSE), 2012 34th International Conference on. IEEE, 2012: 1297-1300.
\bibitem{64}Canfora G, Di Penta M, Oliveto R, et al. Who is going to mentor newcomers in open source projects?[C]//Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering. ACM, 2012: 44.
\bibitem{65}Zhou M, Mockus A. Developer fluency: Achieving true mastery in software projects[C]//Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering. ACM, 2010: 137-146.
\bibitem{66}Sinha V S, Mani S, Gupta M. Exploring activeness of users in QA forums[C]//Proceedings of the 10th Working Conference on Mining Software Repositories. IEEE Press, 2013: 77-80.
\bibitem{67}Pal A, Harper F M, Konstan J A. Exploring question selection bias to identify experts and potential experts in community question answering[J]. ACM Transactions on Information Systems (TOIS), 2012, 30(2): 10.
\bibitem{68}Surian D, Liu N, Lo D, et al. Recommending people in developers' collaboration Network[C]//Reverse Engineering (WCRE), 2011 18th Working Conference on. IEEE, 2011: 379-388
\bibitem{69}Hooimeijer P, Weimer W. Modeling bug report quality[C]//Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering. ACM, 2007: 34-43.
\bibitem{70}Lamkanfi A, Demeyer S, Gigery E, Goethals B. Predicting the severity of a reported bug. In Proc. the 7th Working Conference on Mining Software Repositories, Cape Town, South Africa, 2010: 110.
\bibitem{71}Kim S, Ernst M D. Which warnings should I fix first? In Proc. the 6th ESEC-FSE, Dubrovnik, Croatia, September 2007, pp.4554.
\bibitem{72}Vasilescu B, Yu Y, Wang H, et al. Quality and productivity outcomes relating to continuous integration in GitHub[C]//Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering. ACM, 2015: 805-816.
\bibitem{73}Snow R, O'Connor B, Jurafsky D, et al. Cheap and fast---but is it good?: evaluating non-expert annotations for natural language tasks[C]//Proceedings of the conference on empirical methods in natural language processing. Association for Computational Linguistics, 2008: 254-263.
\bibitem{74}Bauer V, Heinemann L, Hummel B, et al. A framework for incremental quality analysis of large software systems[C]//Software Maintenance (ICSM), 2012 28th IEEE International Conference on. IEEE, 2012: 537-546.
\bibitem{75}Lavazza L, Morasca S, Taibi D, et al. Predicting OSS trustworthiness on the basis of elementary code assessment[C]//Proceedings of the 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement. ACM, 2010: 36.
\bibitem{76}Rudzki J, Kiviluoma K, Poikonen T, et al. Evaluating quality of open source components for reuse-intensive commercial solutions[C]//Software Engineering and Advanced Applications, 2009. SEAA'09. 35th Euromicro Conference on. IEEE, 2009: 11-19.
\bibitem{77}Zou Y, Liu C, Jin Y, et al. Assessing Software Quality through Web Comment Search and Analysis [M] // Zou Y, Liu C, Jin Y, et al. Safe and Secure Software Reuse. Springer, 2013: 2013: 208223.
\bibitem{78}Yu Y, Wang H, Yin G, et al. Reviewer Recommendation for Pull-Requests in GitHub: What Can We Learn from Code Review and Bug Assignment?[J]. Information and Software Technology, 2016.
% 论文集
% 作者名. 文章题目. In: 编者名, eds. 论文集名称. 出版社所在城市名: 出版社名, 出版年份. 起止页码
%\bibitem{5}Polito V S. Calmodulin and calmodulin inhibitors: effect on pollen germination and tube growth. In: Mulvshy D L, Ottaviaro E, eds. Pollen: Biology and Implication for Plant Breeding. New York: Elsevier, 1983. 53--60
% 会议论文集 (必须是正式出版的, 否则只能作为脚注)
% 作者名. 文章题目. In: Proceedings of 会议名称. 出版社所在城市名: 出版社名, 出版年份. 起止页码
% 作者名. 文章题目. In: Proceedings of 会议名称, 会议地点, 会议年份. 起止页码
%\bibitem{6}Dmtriev V. Complete tables of the second rank constitutive tensors for linear homogeneous bianisotropic media described by point magnetic groups of symmetry and some general properties of the media. In: Proceedings of IEEE MTT-S IMOC' 99. Berlin: Springer, 2000. 435--439
% 学位论文
% 作者名. 文题. 学位. 学校所在城市名: 学校名, 年份
%\bibitem{7}Wang X M. Study on Data Visualization Methods and Related Techniques for Clustering. Dissertation for Ph.D. Degree. Beijing: Tsinghua University, 2006 [王晓明. 面向聚类的数据可视化方法及相关技术研究. 博士学位论文. 北京: 清华大学, 2006]
% 技术报告
% 作者名. 报告名. 报告编号. 年份
%\bibitem{8}Phillips N A. The Nested Grid Model. NOAA Technical Report NWS22. 1979
% 专利文献
% 作者名. 专利国籍, 专利号
%\bibitem{9}Plank C J, Posinski E J. US Patent, 4 081 490, 1978-02-15
% 使用手册
% 作者名. 手册名及版本号, 年份
%\bibitem{10}Wang D L, Zhu J, Li Z K, et al. User Manual for QTKMapper Version 1.6, 1999
\end{thebibliography}
%\bibliography{internetware2014}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 附录章节, 非必选
%%% 自动从A编号, 以\section开始一节
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{appendix}
%\section{appendix1}
%\end{appendix}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 自动生成英文标题部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeentitle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 主要作者英文简介, 数量不超过4个
%%% \authorcv[照片文件名]{姓名}{英文介绍}
%%% [照片文件名]请提供清晰的一寸浅色背景照片, 宽高比为 25:35
%%% {姓名}与英文标题处一致
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\authorcv[]{}{}
\authorcv[]{}{}
%\vspace*{6mm} % 调整照片行间距
\authorcv[]{}{}
\authorcv[]{}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 补充材料, 以补充材料形式作网络在线, 不出现在印刷版中
%%% 自动从I编号, 以\section开始一节
%%% 可以没有\section
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{supplement}
%\section{supplement1}
%\end{supplement}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 本模板使用的latex排版示例
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 章节
\section{}
\subsection{}
\subsubsection{}
%%% 列表
\begin{itemize}
\item Aaa aaa.
\item Bbb bbb.
\item Ccc ccc.
\end{itemize}
%%% 定义、定理、引理、推论
%%% []中的名称可以省略
\definition[定义名]{定义内容.}
\theorem[定理名]{定理内容.}
\lemma[引理名]{引理内容.}
\corollary[推论名]{推论内容.}
%%% 若使用定理样式的其他前缀
%%% 在 "作者附加的定义" 处加入\newtheorem命令, 例如
%%% "定理" 是由以下命令定义的
\newtheorem{theorem}{定理}
%%% 单图
%%% 可在文中使用图\ref{fig1}引用图编号
\begin{figure}[!t]
\centering
\includegraphics{fig1.eps}
\cnenfigcaption{中文图题}{Caption}
\label{fig1}
\end{figure}
%%% 并排图
%%% 可在文中使用图\ref{fig1}、图\ref{fig2}引用图编号
\begin{figure}[!t]
\centering
\begin{minipage}[c]{0.48\textwidth}
\centering
\includegraphics{fig1.eps}
\end{minipage}
\hspace{0.02\textwidth}
\begin{minipage}[c]{0.48\textwidth}
\centering
\includegraphics{fig2.eps}
\end{minipage}\\[3mm]
\begin{minipage}[t]{0.48\textwidth}
\centering
\cnenfigcaption{中文图题1}{Caption1}
\label{fig1}
\end{minipage}
\hspace{0.02\textwidth}
\begin{minipage}[t]{0.48\textwidth}
\centering
\cnenfigcaption{中文图题2}{Caption2}
\label{fig2}
\end{minipage}
\end{figure}
%%% 并排子图
%%% 需要英文分图题 (a)...; (b)...
\begin{figure}[!t]
\centering
\begin{minipage}[c]{0.48\textwidth}
\centering
\includegraphics{subfig1.eps}
\end{minipage}
\hspace{0.02\textwidth}
\begin{minipage}[c]{0.48\textwidth}
\centering
\includegraphics{subfig2.eps}
\end{minipage}
\cnenfigcaption{中文图题}{Caption. (a) Subfig1 caption; (b) subfig2 caption}
\label{fig1}
\end{figure}
%%% 算法
%%% 可在文中使用 算法\ref{alg1} 引用算法编号
\begin{algorithm}
\footnotesize
\caption{算法标题}
\label{alg1}
\begin{algorithmic}
\REQUIRE $n \geq 0 \vee x \neq 0$;
\ENSURE $y = x^n$;
\STATE $y \Leftarrow 1$;
\IF{$n < 0$}
\STATE $X \Leftarrow 1 / x$;
\STATE $N \Leftarrow -n$;
\ELSE
\STATE $X \Leftarrow x$;
\STATE $N \Leftarrow n$;
\ENDIF
\WHILE{$N \neq 0$}
\IF{$N$ is even}
\STATE $X \Leftarrow X \times X$;
\STATE $N \Leftarrow N / 2$;
\ELSE[$N$ is odd]
\STATE $y \Leftarrow y \times X$;
\STATE $N \Leftarrow N - 1$;
\ENDIF
\ENDWHILE
\end{algorithmic}
\end{algorithm}
%%% 简单表格
%%% 可在文中使用 表\ref{tab1} 引用表编号
\begin{table}[!t]
\footnotesize
\cnentablecaption{表题}{Caption}
\label{tab1}
\tabcolsep 10pt %space between two columns. 用于调整列间距
\begin{tabular*}{\textwidth}{cccc}
\toprule
Title a & Title b & Title c & Title d \\\hline
Aaa & Bbb & Ccc & Ddd\\
Aaa & Bbb & Ccc & Ddd\\
Aaa & Bbb & Ccc & Ddd\\
\bottomrule
\end{tabular*}
\end{table}
%%% 换行表格
\begin{table}[!t]
\footnotesize
\cnentablecaption{表题}{Caption}
\label{tab1}
\def\tabblank{\hspace*{10mm}} %blank leaving of both side of the table. 左右两边的留白
\begin{tabularx}{\textwidth} %using p{?mm} to define the width of a column. 用p{?mm}控制列宽
{@{\tabblank}@{\extracolsep{\fill}}cccp{100mm}@{\tabblank}}
\toprule
Title a & Title b & Title c & Title d \\\hline
Aaa & Bbb & Ccc & Ddd ddd ddd ddd.
Ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd.\\
Aaa & Bbb & Ccc & Ddd ddd ddd ddd.\\
Aaa & Bbb & Ccc & Ddd ddd ddd ddd.\\
\bottomrule
\end{tabularx}
\end{table}
%%% 单行公式
%%% 可在文中使用 (\ref{eq1})式 引用公式编号
%%% 如果是句子开头, 使用 公式(\ref{eq1}) 引用
\begin{equation}
A(d,f)=d^{l}a^{d}(f),
\label{eq1}
\end{equation}
%%% 不编号的单行公式
\begin{equation}
\nonumber
A(d,f)=d^{l}a^{d}(f),
\end{equation}
%%% 公式组
\begin{eqnarray}
\nonumber
&X=[x_{11},x_{12},\ldots,x_{ij},\ldots ,x_{n-1,n}]^{\rm T},\\
\nonumber
&\varepsilon=[e_{11},e_{12},\ldots ,e_{ij},\ldots ,e_{n-1,n}],\\
\nonumber
&T=[t_{11},t_{12},\ldots ,t_{ij},\ldots ,t_{n-1,n}].
\end{eqnarray}
%%% 条件公式
\begin{eqnarray}
\sum_{j=1}^{n}x_{ij}-\sum_{k=1}^{n}x_{ki}=
\left\{
\begin{aligned}
1,&\quad i=1,\\
0,&\quad i=2,\ldots ,n-1,\\
-1,&\quad i=n.
\end{aligned}
\right.
\label{eq1}
\end{eqnarray}
%%% 其他格式
\footnote{Comments.} %footnote. 脚注
\raisebox{-1pt}[0mm][0mm]{xxxx} %put xxxx upper or lower. 控制xxxx的垂直位置