开放源代码软件成熟度评估 作者: 陈越 开源中国社区 智诚创想科技有限公司
开放源代码软件成熟度评估 目录 目录.........................................................................................................................................................................1 概述.........................................................................................................................................................................2 开源软件成熟度评估的目标和价值.....................................................................................................................2 开放源码软件成熟度评估目标.....................................................................................................................2 开放源代码软件成熟度评估的价值.............................................................................................................3 开放源代码软件成熟度评估体系.........................................................................................................................4 开放源码软件成熟度评估体系架构.............................................................................................................4 开放源代码软件质量特征.............................................................................................................................5 开放源代码软件成熟度评估属性.................................................................................................................6 评估属性的概念.....................................................................................................................................6 评估属性的选取原则.............................................................................................................................6 开源软件成熟度评估案例.....................................................................................................................................8 Heartbeat软件成熟度评估报告......................................................................................................................8 Heartbeat软件介绍..................................................................................................................................8 Heartbeat架构描述..................................................................................................................................9 Heartbeat软件代码质量评测报告........................................................................................................13 软件测试...............................................................................................................................................16 Heartbeat易用性研究............................................................................................................................17 Heartbeat可用性性研究........................................................................................................................17 社区及项目组织...................................................................................................................................17 License问题...........................................................................................................................................18 软件成熟度评估...........................................................................................................................................18 软件成熟度属性定义与量化...............................................................................................................18 Heartbeat软件成熟度评估结论............................................................................................................20 总结.......................................................................................................................................................................21 参考.......................................................................................................................................................................21 附录.......................................................................................................................................................................21 Heartbeat软件代码质量评测报告:............................................................................................................21 第1页 共30页
开放源代码软件成熟度评估 概述 21世纪的计算机世界是丰富多彩的,不仅计算机硬件性能有了质的飞跃,计算机软件在功能性、复杂度上都是以前无法比拟的。尤其是互联网及网络应用的出现,极大的丰富了人们的计算机应用,拓展了应用的领域,将应用水平提高到一个崭新的水平。对于复杂应用,如何来保障应用软件的质量,如何评估那些纷繁复杂的应用系统呢。人们进行了多方面的探索,形成了众多软件成熟度评价模型。中国也为此颁布了软件质量国家标准GB-T8566--2001G,从而指导软件开发者和使用者正确的评价一个软件的质量及其应用的成熟度。那么,对于开源世界,我们如何看待,又如何正确评价一个软件的成熟度状况呢。 我们知道,软件成熟度评估的最终目标是帮助软件的可持续发展,并为用户应用提供必要的技术参考。开放源代码软件成熟度评估也不例外。我们通过软件的成熟度评估,形成全面的涉及技术、应用、法律等层面的评价报告,帮助那些正在或潜在的开源软件使用者准确的了解软件的技术特性和应用特性,从而为他们选择适合自身需求的开源软件提供参考。同时报告中涉及的大量评测数据,为开源软件的开发者提供帮助,促进他们有效的改善软件在技术方面和使用方面的质量,使软件不断成熟和可持续的发展。 开放源代码软件由于开发模式和运作模式的独特性,其软件带有鲜明的特点。开放源码软件成熟度评估的方法需要我们在实践中不断的探索。我们将提出一些基本的原则和方法,并建立我们自己的评估体系和计算模型。 开源软件成熟度评估的目标和价值 开放源码软件成熟度评估目标 实现开源软件技术架构与技术路行的评估参考。 开放源代码软件与传统非开放源码软件的重要不同点在于其技术方案和源代码的开放性。因此,开放源码软件的质量评估的一个重要目标是分析软件的技术架构和技术路线,得出软件在架构的合理性、技术路线的可行性、技术的先进性等方面的评估看法,使得评估能够从宏观上,从技术上对软件的成熟度给出相应的评价。 实现开源软件代码质量与可信程度的评估参考 开放源码软件对于评估人来说最大的好处是,可以直接阅读分析软件的代码,通过这一最直接的方式,我们可以得出准确的、公正的判定。因此,提供对代码质量和代码可信度的检测是开放源码评估中的重要环节。 实现对开源软件易用性与可用性的评估参考 软件易用性和可用性的评估是任何软件成熟度评估中重要的指标,是我们实现开源软件 第2页 共30页
开放源代码软件成熟度评估 成熟度评估所要实现的重要目标之一。该目标的实现,对于评估的实际参考价值的多少非常重要,是用户及其系统集成商重点关注的内容。 实现开源软件应用成熟度和应用支持的评估参考 软件应用的成熟度以及软件商业或非商业应用的支持力度能够从侧面反映软件的发展状态。在开源软件中,应用越广泛,社区支持或商业支持越好的软件能够吸引更多的参与者,反过来能够更好的促进软件的发展。所以,开源软件成熟度评估所要达到的一个重要目标是提供软件应用与支持的公正评价。 实现对开源软件法律问题及法律风险的评估 由于开放源代码软件可能采用多种版权协议,某些软件有可能或有潜在的可能性涉及其它版权协议或技术专利等问题需要我们加以评估,是否会对软件的发展形成正面的或负面的影响。 开放源代码软件成熟度评估的价值 为最终用户或应用与服务提供商提供开放源代码软件成熟度参考。 开放源代码软件成熟度评估的意义在于,它可以向那些希望在自己的计算机环境中使用开源系统或开源软件的用户,或是那些希望采用开源软件来构造系统集成解决方案的应用服务供应商提供帮助。帮助他们选择自身需要的开源软件,帮助他们在软件的功能性、安全性、可靠性等方面综合考虑与权衡,向他们的客户提供更贴切的服务。 为开放源代码软件开发者提供针对软件开发的技术、管理和需求方面的参考。 由于开源软件成熟度评估自身的特点,使得评估对软件设计者和开发者具有很高的参考价值。我们知道,开源软件评估中的重要特点就是对软件技术架构和技术路线的分析和评价,以及对源代码的质量和可信度进行评测。因此,评估的结果无论从宏观上还是微观上都会对软件开发起到促进作用。 为开放源码软件的推广、应用提供合理化建议。 开放源码软件的应用与推广需要众多参与者的共同努力。开放源码软件成熟度评估通过对在软件项目现有的组织形式、开发模式、运营模式及社区参与和商业参与等多个层面上的分析比较,找出软件在应用推广与支持上的问题和不足,相应提出一些合理化建议,帮助开源软件健康的、可持续的发展。 第3页 共30页
开放源代码软件成熟度评估 开放源代码软件成熟度评估体系 开放源码软件成熟度评估体系架构 从开源软件发展模式和运作模式的角度上来看,我们如何定义符合开源软件发展规律的软件成熟度评估体系,评估的方法和过程又与传统软件的成熟度评估过程有什么不同呢。我们来分析一下开源软件与传统商业软件在开发模式和运作模式上有什么异同点。首先,我们看到开源软件和传统软件都重视用户的体验,重视用户需求,都将软件可靠性、可用性、安全性等软件公共特性作为软件开发与应用的标准特性。因此,开源软件成熟度评估应该将那些普世的软件价值纳入评估体系当中。同时开源软件又具有某种独特性,软件源代码公开,为人们能够从技术的层面分析软件创造了条件;软件的推广与维护在适当企业的参与情况下主要依赖软件社区的支持,这就使软件更加贴近使用者,从而形成了一种独特的发展模式。 因为这些不同,开放源码软件成熟度评价体系中也出现了一些不同点,传统的软件评估体系中很少考虑对软件源代码和软件社区建设评价,对技术架构的分析也主要使依据软件提供者的描述,具有某种不准确性。传统的软件评估体系也很少考虑软件的支持和用户的反馈对于该软件质量的影响,因为这往往很难把握,缺乏评估的参考依据。在开源软件中,程序的下载量、社区的活跃度、支持企业的数量都可以反映出用户的参与程度,从而反映软件的发展能力和质量保证。归根结底开源软件的发展是开发者和使用者共同完成的。以上这些特性造就开源软件成熟度评估中,在评估的标准、属性的定义和评测过程都会又新的内容。以下是我们开源软件成熟度评估的整体架构,对架构中各部分的说明,我们将在之后的章节中分别描述。 图 开源软件成熟度评估体系架构 开源软件和传统商业软件在软件成熟度评估的方法上有重要的不同。传统软件由于无法了解软件内部的情况,软件的评测主要依赖与黑箱测试的方法。开源软件在这方面有明显的 第4页 共30页
开放源代码软件成熟度评估 好处。评测人员可以深入分析软件的架构和技术特点,亲自或使用代码评测软件来对程序进行分析,能够发现程序中隐藏的代码错误,分析代码的复杂度、耦合性等程序特性,给开发者提供非常有价值的技术参考,帮助开发者有效提高软件的开发质量。这一点是开源软件质量评估中最大的优势之一。 开放源代码软件质量特征 按照软件质量国家标准GB-T8566--2001G,软件质量可以用下列特征来评价: a. 功能特征:与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。 b. 可靠特征:在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性。 c. 易用性特征:由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。 d. 效率特征:与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。 e. 可维护特征:与进行指定的修改所需的努力有关的一组属性。 f. 可移植特征:与软件从一个环境转移到另一个环境的能力有关的一组属性。 其中每一个质量特征都分别与若干属性相对应。 在开放源代码软件的质量评估中,除了要考虑以上一般性软件质量特性外,我们还应看到,由于开放源码软件开发模式和商业模式的独特性,一些重要的软件自身或非自身因素也必须加入到评估的标准中来。 a. 技术架构:开放源代码软件与传统非开放源码软件的重要不同点在于其技术方案和源代码的开放性。因此,开放源码软件的质量评估的一个重要方法是分析软件的技术架构和实施方案,从技术上剖析软件设计质量。技术设计的好坏不仅影响到软件成形后的质量,也是软件是否能够吸引更多参与者的重要因素。 b. 代码质量:开放源码软件对于评估人来说最大的好处是,可以直接阅读分析软件的代码,通过这一最直接的方式,我们可以得出准确的、公正的判定。因此,对代码质量的检测是开放源码评估中的重要环节。 c. 开发模式(代码管理(提交方式,管理工具),组织模式,测试):传统软件的开发模式是封闭的,对外一般是不可见的,使我们不从了解软件的开发过程。开放源码软件开发过程的开放性使我们能够通过了解分析软件开发过程的各种指标,从另一方面论证软件的质量。 d. 社区建设:由于典型的开放源码软件是依托于社区而建立并发展的,所以社区建设和社区参与就成为衡量该软件开发活跃程度,软件应用支持的重要标准,也能够从侧面反映出软件开发质量。 e. 商业支持:开放源码软件发展初期有较少的商业参与。随着开放源码软件的不断发展壮大,吸引了越来越多企业的注意力,软件在商业环境中也得到了越来越多的使用。从众 第5页 共30页
开放源代码软件成熟度评估 多开放源码软件发展的历程中不难看出,商业公司对一个开源软件在资金、技术、应用支持等方面的支持都会对该软件的发展起到重要影响。而且,从商业应用而来的需求反馈也会成为软件进步的动力。因此,该特性也是一些开源软件质量评估中应该考虑的。 f. 法律问题:由于开放源代码软件可能采用多种版权协议,某些软件有可能或有潜在的可能性涉及其它版权协议或技术专利等问题需要我们加以评估,是否会对软件的发展形成正面的或负面的影响。 开放源代码软件成熟度评估属性 评估属性的概念 通过上一章对开放源码软件成熟度评估特征的介绍,我们看到,较之于传统的商业软件,开放源码软件有许多重要的独特性。因为我们能够直接分析软件的技术架构;阅读软件程序代码;了解软件开发的全过程,使我们能够内在的分析与软件开发质量相关的方方面面,从而较为准确的把握软件的内在质量。结合传统的评估标准,我们能够得到一份更全面更准确的软件成熟度评估报告。 根据上一章所描述的开放源码软件质量特征,我们提出与之相适应的属性定义方案。在评估的实施当中,定义适当的软件质量属性是评估是否能够准确、公正、均衡的进行的重要一环。软件成熟度属性是指软件在成熟度评估中某一方面具体的某种特性,它反映该软件在这一评估点上表现的好坏,对所有属性的综合考虑将会得出该软件成熟度的评价值。这一计算过程我们将在之后的“评估模型”章节中讨论。为了能够使阅读者更好的厘清各种成熟度属性,我们将把各类软件成熟度属性划分为内在属性和外在属性分别加以描述。特别需要指出的是,我们所列的各种软件成熟度属性类及其相关的属性是开源软件成熟度评估中的一般属性,如果需要针对某一类特殊软件的特殊情况,可以定义自己的附加属性类和属性。 评估属性的选取原则 选择合适的指标体系并使其量化是软件成熟度测试与评估的关键。评估属性可以分为定性指标和定量指标两种属性。理论上讲,为了能够科学客观地反映软件的质量特征,应该尽量选择定量指标。但是对于大多数软件来说,并不是所有的质量特征都可以用定量指标进行描述,所以不可避免地要采用一定的定性指标。 在选取评估属性时,应该把握如下原则: a. 典型性 能够反映此类评估软件的某种共同特性的属性应该成为一个指标进入评价体系中。 b.可测性 即能够定量表示,可以通过数学计算、平台测试、经验统计等方法得到具体数据的属性应该进入评估体系。 第6页 共30页
开放源代码软件成熟度评估 c.简明性 即易于被各方理解和接受。 d.完备性 即选择的指标应覆盖分析目标所涉及的范围。 e.客观性 即客观反映软件本质特征,不能因人而异。应该注意的是,选择的评估指标不是越多越好,关键在于指标在评估中所起的作用的大小。如果评估时指标太多,不仅增加结果的复杂性,有时甚至会影响评估的客观性。指标的确定一般是采用自顶向下的方法,逐层分解,并且需要在动态过程中反复综合平衡。因此,属性的定义要考虑均衡性的原则,即各类属性的定义粒度要一致,尽量不以某个评估人员对某类属性的熟悉程度来确定属性定义的多少。 第7页 共30页
开放源代码软件成熟度评估 开源软件成熟度评估案例 根据以上描述,我们初步制定了一个适合于开放源代码软件成熟度评估的评价体系和实施方法。接下来我们将通过两个案例说明我们的评价体系是如何工作的。我们选取两个软件进行评估,分别是OpenOffice和Heartbeat。这两个软件,前者面向于桌面应用,提供完整的办公处理软件,是开源领域中这类软件中的佼佼者。后者为面向服务器的高可用集群软件,在服务器领域和商业环境中有广泛的应用。从这些软件的案例评估当中可以看到,我们的评估体系会对不同类别的软件做针对性判别,从而得出基于该类软件的可比较的评估结果。 技术架构分析和代码评测是开源软件成熟度评估中最重要、也是区别于传统商业软件评估最有特色的部分。我们将做重点说明。其中,代码评测的结果我们在附录中做完整的发布。 Heartbeat软件成熟度评估报告 Heartbeat软件介绍 Heartbeat是Linux-HA开源项目发布的高可靠应用环境集群服务的核心软件。从1998年创建以来到现在, 历经,, 等多个版本,在全球开源HA领域具有举足轻重的知名度, 应用日益广泛, 并且得到了众多主流Linux操作系统厂商的支持。在Linux-HA中heartbeat负责节点健康信息检测、可靠的节点间通讯和集群管理等工作。它拥有一个高度可定制的软件体系结构,安全的通讯保障机制和广泛的跨平台移植性。 早期,heartbeat主要被设计用来配置双机热备功能的系统软件。系统由两台服务器构成,一台为工作服务器,另一台为备份机。该软件通过心跳检测协议在两台服务器间通讯,检测系统的健康状况。当工作服务器down机时,软件会自动检测到,并将原来工作机上的相关服务转移到备份机上,从而对外达到服务不间断的能力。随着高可用系统技术的不断发展,以及Linux下对高可靠应用机器软件的需求,软件创始人Alan Robertson联合一些其它社区技术人员重新设计了软件架构,成功的扩展了原有软件的功能和结构,使它能够不断满足用户新的需求。新增加的功能中包括提供多于两个节点集群的支持,系统应用的健康检测,网络连接的健康检测,STONITH设备的支持等功能,还提供了一组集群管理工具。 可以说,Heartbeat的产生和发展是一个典型的Open Source软件的案例。该软件所应用的体系架构OCF(Open Cluster Framework)就是开源社区合作的结晶,并努力使其成为一个非排他的国际标准。在开发当中更体现了开放源代码软件发展的特点,开发者分布在美国、欧洲、日本和中国。开发者平时通过email、mail list、IRC进行交流,每年还会有一些定期或不定期的会议讨论项目的主要事项。项目采取CVS系统进行代码管理,项目有专门的CVS管理者,代码开发经过几次代码规范行动,程序质量较好,并有较好的代码注释。Heartbeat项目有一个完善的服务网站,用户和第三方开发者几乎可以从网站上找到所有他们需要的信息,包括下载该软件。软件的信息能够即时更新,使用帮助文档较丰富,更新比较即时,但文档的组织还不够清晰。对于第三方开发者或希望加入该社区的开发者,mail 第8页 共30页
开放源代码软件成熟度评估 list是他们最好的工具,该项目中mail list的活跃程度很高,大多数问题都能得到即时有效的解答。Mail list按照使用者和开发者进行了简单分类。近年来,该项目得到了越来越多厂商的重视和支持,尤其是IBM对该项目进行了直接的人员支持。在市场化方面,国内外已有的多个HA软件都是基于该软件构造的,其中包括: RedHat Cluster, Redflag HA系统等。该软件本身也被应用的了许多商业领域。不难看出,正是由于该软件具有良好的技术架构设计和应用前景,才不断推动社区和厂商的参与,使之成为一个优秀的开放源代码软件。 Heartbeat架构描述 Heartbeat软件的架构设计基本遵循OCF(Open Cluster Framework)的技术规范,着眼于将软件发展成为一个开放的集群体系,软件按照OCF规范的要求定义了一系列集群技术组件模块,初步实现了应用机器的基本功能。接下来我们将列出软件中的主要模块。 第9页 共30页
开放源代码软件成熟度评估 图 Heartbeat软件架构设计图 Heartbeat软件的主要组件模块: heartbeat – 强认证通讯模块。Heartbeat能够相对可靠的在小于妙时间内检测到任何节点的失败事件。通过使用低延迟补丁程序,时间还会更小。Heartbeat拥有一层API,它们提供诸如集群内通讯、发送和接受数据给集群节点、配置查询、状态查询等服务。 CRM - 集群资源管理器 - 集群资源管理器是(CRM)Linux-HA的大脑。它维护资源配置、决定什么资源应该在哪里运行、怎样从当前状态迁移到他们应该运行的状态另外,它监督LRM来完成所有的事情。CRM与系统中的每个组件交互: 使用心跳来通信 它从CCM接收成员关系更新 它从LRM接收或向LRM发送通告消息。 它告诉Stonith守护程序什么时候复位和给谁复位 它使用日志守护程序来做日志 实际上,PE、TE和CIB能被看作是CRM的组件。 PE - CRM策略引擎 - 策略引擎的最初目标是从当前状态计算转换图。这个转换图考虑了资源的当前位置和状态、节点的可用性和当前的静态配置(也称为CurrentClusterState). TE - CRM转换引擎 - 转换引擎通过PE来有效的生成转换图 – 它计算集群下一阶段的状态,列出集群应该采取的动作,并通过向远端节点的LRM发送执行指令从而启动或停止相应的资源。 CIB – 集群信息库。CIB是一个对集群资源和节点信息进行自动备份的数据库,这些信息将供CRM模块使用。这些信息包括诸如依赖性关系的静态数据,更多的是有关资源在哪里运行和他们的实时状态的动态信息。所有CIB中的信息都以XML格式存储。为此,我们声明了一个定义当前所有CIB管辖的信息的DTD文件。许多CRM的特性可以通过阅读该DTD文件来了解。 CCM - 维护集群成员的一致性 – 提供集群成员连通的信息一致性服务。它保障了一个统一的成员信息中的某个节点以和自身实际信息相符和的方式与其它节点通讯。该模块实现了OCF成员关系API和SAF AIS成员关系API两种接口方式。通常计算集群的成员关系只需小 第10页 共30页
开放源代码软件成熟度评估 于1秒的时间。 LRM - 本地资源管理器 - 本地资源管理器基本上是一个资源代理抽象。它直接通过CRM来启动、停止和监管资源。 Stonith - 守护进程 - 提供节点复位服务 logd - 非阻塞的日志记录守护进程 申请时,未能办理登机手续,与它在其指定的时间,有兴趣参加的人士,通知及(据推测)的复苏而采取的行动。这个守护进程是一个简单,因为我们可以使,所以它可以成为最可靠的组件在系统中。很多linux哈系统组件配合到它,但并不普遍,使在外地写本。它将登记制度看门狗定时器,如果要求这样做。 apphbd - 应用级看门狗定时器服务 - 应用心跳守护进程是一个为个别HA-aware应用提供看门狗定时器设施的一般服务。当应用在它们规定的时间登记失败,将通知相关组件,也许还会恢复刚才采取的行动。这个守护进程很简单,因为我们可以构建它,所以它是系统中最可靠的组件。很多Linux-HA系统组件跟它连接,但在本文中它并没有被普遍使用。如果申请的话,它将登记系统看门狗定时器。 恢复管理器 - 应用恢复服务 - 当一个进程没有心跳或异常退出时,将由apphbd通知恢复管理器守护进程,然后采取行动杀死并重启应用。 体系架构 Heartbeat成功开发的关键在于拥有一个坚固的了、灵活的、可靠的通用软件架构。所有主要模块都建立在这个架构之上。 该架构有若干关键组件: 一个灵活的通用插件机制。 非阻塞的IPC层 避免使用线程技术 使用Glib mainloop作为统一的事件调度(分发)和事件处理方法。 节点间的高度一致性和集成性。 PILS – 插件和接口加载系统 第11页 共30页
开放源代码软件成熟度评估 PILS作为一个通用插件加载系统,在Linux-HA项目中被广泛使用。它给软件带来巨大的灵活性和能力,并尽可能简化核心系统的大小。它改善了那些使用插件机制的子系统的结构,并减少Linux-HA在宿主系统上的资源使用。 插件机制一般不提供给非核心组件使用。当前使用插件机制的领域有:通讯模块、认证模块、STONITH,资源代理模块、压缩模块和apphbd的通告方法。 IPC 库,所有进程间通讯都使用一个非常通用的IPC库,通过使用一个灵活的排队策略它提供了进程间的非阻塞访问机制,同时包含了集成的流控制能力。目前这一IPC API使用UNIX (Local) Domain sockets技术实现。它还包含了在进程间认证和授权的方法,该方法能够移植到大多数支持POSIX标准的系统上。 集群Plumbing库,该库是一系列非常有用的功能函数的集合,它为众多模块提供各种服务。其中主要包括: 压缩功能API 非阻塞日志API 不间断运行服务的内存管理功能 统一信号处理 – 允许信号作为mainloop事件工作。 Core dump管理工具 – 在各种环境中以统一的方式捕获core dump信息 子进程管理 – 一个进程的非正常中断将导致模块发起一个可定制的death-of-child消息。 Realtime management – 设置或取消进程的高优先权。 64-bit HZ-granularity时间操作 (longclock_t) 出于安全目的的用户ID管理 – 主要针对那些需要root用户权限的进程。 集成了Mainloop的IPC,文件描述符,信号等事件处理。这意味着所有这些不同的事件源会被统一的管理与分发。 集群测试系统 集群测试系统(CTS)是heartbeat开发中低错误率的主要保障。简单说CTS在一个集群系统中进行自动的随机压力测试。在实践中我们证明它是一个非常有效的工具。它工作的基本策略是: beat the software to death. 这种测试有时也称为Bamm-Bamm测试。 使用Glib Linux-HA项目广泛的使用了Glib库第二版,特别是mainloop事件处理架构上更是如此。而对mainloop架构的使用使得集群内的许动工作变得更容易,更统一。同时它可以使我们避免使用线程机制所带来的移植性和调试上的困难。 分析结论 本软件虽然由C语言写成,但程序的构造多参考面向对象的设计。整个程序架构完整,结构灵活,可移植性较强。软件的设计者不仅为用户停工了丰富的功能,而且在各个层面都 第12页 共30页
开放源代码软件成熟度评估 为程序的可扩展性和部署的灵活性留下接口。对核心的扩成可以使用插件机制;对功能的扩充可以使用HBC架构,而该架构的进程间通讯基于网络协议,从而可以方便的将部署从进程间扩展为节点间。在软件的应用层面上,用户可以通过加入自定义系统脚本,使软件部署适应各种部署环境和应用策略。 软件的配置完全依赖于修改配置文件,没有配置工具。软件的设计中可能由于历史的原因,资源切换和改变事件有多个切入点,不利于系统的扩展和灵活应用(即一个单一的事件处理入口对软件是必要的)。系统的设计中,在从Partition故障中回复的动作设计的不够灵活,过于简单,也没有为扩充留下相应的接口或介入点。 Heartbeat软件代码质量评测报告 评测工具介绍 市场上有多种软件质量分析软件,但大多数都价格昂贵,并且一般分析软件的性能很难支持大规模的代码量。我们与智诚创新科技有限公司合作,通过该公司提供的Klocwork静态分析软件对heartbeat进行系统的代码分析,按级别整理分析结果,找出代码缺陷和安全漏洞,提高heartbeat的软件质量。 该软件的主要功能有: 软件缺陷检测 提供多角度的各种缺陷类型分析。自动化的缺陷检测功能易于使用,定制灵活,具有图形化的构建和报表管理图形界面,拥有先进的消息过虑器,强大的学习调整知识库。Klocwork能够分析C/C++和Java代码,生成代码问题报告。 安全漏洞检测 软件安全性时软件质量中一个重要的、并越来越收到重视的方面。Klocwork安全漏洞分析基于其先进的软件缺陷分析能力,分离出单独的安全漏洞和违反推荐的安全代码的缺陷程序。 软件架构分析 通过架构分析能够使设计人员及开发人员重新认识他们对该软件的架构理解,并结合代码分析进行功能强大的影响分析,帮助开发人员找出软件的架构可能会对高质量代码的开发有何种影响。 软件度量分析 搜集统计软件的代码信息,比如,文件数,代码行数,代码复杂度,继承或循环数量等。帮助开发者和维护着宏观上掌握程序开发的复杂度,便于有针对性的进行代码管理。 可定制的代码分析 第13页 共30页
开放源代码软件成熟度评估 许多组织有自己独特的编码标准、安全策略和质量目标。可利用klocwork为一些特殊问题的分析进行单独定制,用户也可以编制自己的扩展检查器来完成特定任务。 开发人员IDE集成 klocwork可以和现在大多是主流的IDE开发环境集成,在开发的早期及时发现可能的代码漏洞从而有效降低开发成本。 代码评测报告摘要: Summary: Project name: heartbeat Build name: build_1 Created on: Oct 31, 2007 Files analyzed: 531 Lines of code (Source LOC): 124,534 Defects Overview Defects Overview: Number of defects 192 Defect Density: Header File Problems Overview: Number of defects 1,648 Defect Density: Security Vulnerabilities Overview: Number of defects 47 Defect Density: .38 Dependent Headers Overview: Number of dependent header files: 142 Unnecessary Compile Expansion Overview: Unnecessary compile expansion: 539,192 Compile expansion before include optimization: 4,393,144 Compile expansion after include optimization: 3,853,952 第14页 共30页
开放源代码软件成熟度评估 System Complexity Overview: Complexity (function average): Complexity (per file peak averaged across system): Number of highly complex functions: 362 Number of files with highly complex functions: 103 Project configuration details: Creation date: Oct 31, 2007 Creation time: 1:55:39 PM Software Intelligence Engine version: Number of filter files used: 0 Project name: heartbeat Build name: build_1 Total lines of code (Source LOC): 124,534 Total lines of comments (in c/c++ files): 37,739 Total number of files analyzed: 531 Total number of defects: 1,887 Total number of entities: 24,674 Total number of relationships: Total number of functions / methods: 3,695 Total number of classes / types: 1,520 Error Distribution 第15页 共30页
开放源代码软件成熟度评估 Type # % Null pointer may be dereferenced 4 Result of function that may return NULL 164 will be dereferenced Suspicious dereference of pointer in 2 function call before NULL check Memory Leak - possible 2 Pointer may be dereferenced after it was2 positively checked for NULL Null pointer may be passed to function 1 that may dereference it Null pointer will be dereferenced 2 Result of function that can returnNULL 12 may be dereferenced Suspicious dereference of pointer 2 before NULL check Warning Distribution Type # % Inconsistent Case Labels 1 评测分析 通过对heartbeat模块的分析,我们得出评测结论。代码的整体风格统一,格式工整,总体质量较好。程序结构复杂度合理,出现较多的问题主要是代码中潜在的对NULL对象的引用。注释方面,注释丰富,每个程序文件有基本说明,某些重要的代码有详细解释,给社区参与创造了较好的代码环境。 软件测试 Heartbeat项目没有专门的Quality Assurance组织,但项目中有几位成员主要负责软件的测试。在网站上无专门的用户报告错误或参与测试的页面,错误的报告主要通过Mail List和IRC进行。项目提供了一个批处理自动测试环境和一些工具供测试者使用,可以方便的对软件的主要模块进行自动仿真测试。此外,IBM等一些公司也有专门人员帮助测试和 第16页 共30页
开放源代码软件成熟度评估 开发。 Heartbeat易用性研究 Heartbeat无图形配置、使用、监控环境。软件的主要配置和管理靠修改配置文件进行,不过,软件提供了一些功能丰富的命令行工具,这也是服务器软件的一般做法。软件的部署和配置非常灵活,缺点是缺乏好的监控工具。 Heartbeat可用性性研究 在Linux-HA中heartbeat负责节点健康信息检测、可靠的节点间通讯和集群管理等工作。它拥有一个高度可定制的软件体系结构,安全的通讯保障机制和广泛的跨平台移植性。 首先,通过上面对heartbeat架构设计的介绍我们不难看出,heartbeat是一个可定制、可扩展的软件模组。我们可以通过编写自己的插件模块扩展诸如通讯、认证等功能。由于插件系统高效、安全的特性并能够和软件核心紧密的集成,所以可以有效支持一些核心应用的扩展。同时对于核心外围应用的扩展,heartbeat定义了一整套Client Application应用架构,用户只要书写自己的HBC(Heartbeat Client)程序,就可以讲用户定制的新功能集成到整个集群系统中。Heartbeat中的许多模块本身就是通过这种方式在系统中运行。此外,软件提供了灵活的脚本和配置文件,用户可以灵活的配置系统,或将自己的脚本加入到系统运行中去。 Heartbeat提供了一些认证机制,例如:MD5,SHA等,通过这些认证保障软件通讯的可靠性和节点身份的真实性。当然,Heartbeat并不提供通讯数据的高强度加密,这一功能它有赖于系统的其它网络安全加密模块来完成。 此外,Heartbeat具有良好的跨平台移植性。程序的开发和书写遵守Posix标准等国际标准,所依赖的第三方库,如glib、libnet,也都有较好的平台可移植性。所以,heartbeat可以被移植到大多数类Unix系统和Mac系统。从heartbeat邮件列表的统计中可以看出,当前稳定的版本平台除Linux外主要还有FreeBSD和Solaris。另外,windows操作系统不在该软件的支持范围内。 社区及项目组织 Heartbeat项目是一个典型的服务器端开源软件,项目由几位在HA应用集群领域活跃的软件作者主持,项目借助网络,如Mail List,IRC,论坛等工具进行交流,吸引大量参与者参与开发、测试、书写应用文档。同时,项目也吸引了一些公司的支持与参与。该项目在实际环境中有大量应用,一些企业也将其作为自己解决方案的一部分,提供了许多应用案例,取得大量反馈意见,极大的推动了该软件的应用与发展。 第17页 共30页
开放源代码软件成熟度评估 License问题 For libraries, which talk to the core modules via IPC or sockets or fork/exec, they and the header files needed to interface to them should be LGPL. For plugins which are intended to be reusable, they should be licensed LGPL. This probably includes most plugins. Core code which is not part of a public interface should be licensed GPL. 软件成熟度评估 软件成熟度属性定义与量化 ID Class Name Weight 01 技术架构设计 4 02 代码质量 4 03 软件易用性 1 04 软件可用性 4 05 项目建设与管理 2 06 项目的活跃程度 4 07 项目测试情况 2 08 软件应用支持 4 09 软件法律问题 1 以下为各属性类的属性定义: ID Class Name Entry Weight Value Memo 01 技术架构设计 合理性4 4 02 技术架构设计 可扩展性 3 5 03 技术架构设计 可移植性 2 4 04 05 06 ID Class Name Entry Weight Value Memo 01 代码质量 代码错误率 4 4 第18页 共30页
开放源代码软件成熟度评估 02 代码质量 代码可读性 4 5 03 代码质量 代码复杂度 2 4 04 05 06 ID Class Name Entry Weight Value Memo 01 软件易用性 易理解性 2 3 02 软件易用性 易学习性 2 3 03 软件易用性 易操作性 4 4 04 05 06 ID Class Name Entry Weight Value Memo 01 软件可用性 完备性3 4 02 软件可用性 正确性 4403 软件可用性 可靠性4 5 04 软件可用性 安全性 2305 06 ID Class Name Entry Weight Value Memo 01 项目建设与管组织架构 2 2 理 02 项目建设与管开发管理 4 4 理 03 项目建设与管网站建设 3 4 理 04 05 ID Class Name Entry Weight Value Memo 01 项目的活跃程版本发布周期 2 4 度 02 项目的活跃程软件下载量 3 4 度 03 项目的活跃程交流机制 4 4 度 04 第19页 共30页
开放源代码软件成熟度评估 05 ID Class Name Entry Weight Value Memo 01 项目测试情况 测试方法(工3 4 具) 02 项目测试情况 测试人员 4 4 03 项目测试情况 测试反馈 2 3 04 05 ID Class Name Entry Weight Value Memo 01 软件应用支持 社区支持度 4 4 02 软件应用支持 企业支持度 3 5 03 软件应用支持 应用成熟度 3 4 04 软件应用支持 书籍或文档指23新版本中文较南 少 05 ID Class Name Entry Weight Value Memo 01 软件法律问题 软件版权协议 4 4 02 软件法律问题 专利与纠纷 1 3 03 04 05 Heartbeat软件成熟度评估结论 按照我们的开放源代码软件评估体系计算模型的公司进行计算,最终该软件的评估值为: 第20页 共30页
开放源代码软件成熟度评估 总结 通过对开源软件成熟度评估体系的描述,以及我们应用该评价模型进行的两个试验案例。证明了评估模型的正确性和实用性,为我们今后从事开源软件评估工作奠定了基础。 参考 Alan Robertson “Linux-HA Heartbeat System Design” Linux-HA Project “Linux-HA Intra-Cluster Communications” Alan Robertson “PILS: A Generalized Plugin and Interface Loading System” 郑人杰 殷人昆 陶永雷 “实用软件工程.第一版” 清华大学出版社, 1997 参考书 “软件业ISO9000质量体系的建立和认证” 路广 “深入了解” Karin van den Berg “Finding Open options An Open Source software evaluation model with a case study on Course Management Systems” 附录 Heartbeat软件代码质量评测报告: 第21页 共30页
开放源代码软件成熟度评估 第22页 共30页
开放源代码软件成熟度评估 第23页 共30页
开放源代码软件成熟度评估 第24页 共30页
开放源代码软件成熟度评估 第25页 共30页
开放源代码软件成熟度评估 第26页 共30页
开放源代码软件成熟度评估 第27页 共30页
开放源代码软件成熟度评估 第28页 共30页
开放源代码软件成熟度评估 第29页 共30页