用于软件开发的系统和方法

文档序号:6655332阅读:276来源:国知局
专利名称:用于软件开发的系统和方法
技术领域
本申请涉及用于开发和发布软件的基于计算机的方法和系统,更加具体地说涉及便于软件分布式开发的方法和系统。
背景技术
在美国和其它地方,计算机在工作场所和在个人努力中已经变成人们日常生活的一部分。这是因为可对通用计算机进行编程以运行各种软件程序,每个软件程序会提供不同的处理和网络功能。计算机程序设计人员开发计算机代码。一些公司雇用大量的计算机程序设计人员为了公司的利益开发代码。
一个处理方案是雇佣大量的程序设计人员并在“内部”开发软件。虽然这对编程职员提供了相当大的控制,但发现、雇用和维持这种工作人员可能是成本不允许的。另外,随着个体编程人员离开公司,大量的技术和工业知识也随之丢失。可选择的,许多公司通过咨询公司或合同工“外购”他们的程序设计。该方案解除了公司管理单个雇员的负担,然而工作的质量和连贯性可能是令人质疑的,并且对来自许多外部分销商的整合工作的挑战可能也是重大的。

发明内容
组织机构需要获得高质量的软件,同时确保使用适当的质量措施来开发代码。已经提出来用于改进软件开发的技术是代码重新使用和基于子系统的设计。但是即使组织机构采用这种技术,他们仍需要以可担负的起的方式获得高质量的子系统。
总的来说,本发明涉及提供基础设施、过程控制和人力来使用可重复的、结构化模型开发软件,以便将软件开发从专门的、自定义开发行动转变成流线式、可预测制造操作。通常来说,该目标可在一个典型实现过程中可通过将软件设计功能从软件开发功能分离开、提供严格的复核过程并使用竞争模型,由此选择许多分布的、不相关的和有动机的设计或程序。
另外,可雇佣软件开发公司来只执行整个过程的一部分。例如,可雇用顾问公司为解决某一商业需要的应用程序开发功能性规范,或使境外编程机构来构建根据所述规范的软件。已经在每个步骤精确定义了输入和输出的多步骤软件开发制造过程满足严格的质量控制要求,并将每个过程输出编成较大产品的子组件部件的目录,这允许实现灵活性而不会牺牲质量。可在各个点进入(或退出)这种过程,同时开发者的独立性在没有“事务政见”或其它偏袒的情况下允许增强严格的设计和质量分析,这接下来会导致质量非常高(例如,企业级质量)的软件。
在一个方面,用于软件程序例如,组件,应用程序、模块或程序库设计的规范被传送给第一多个开发者,他们在一些情况中在地理上可以是分布的。作为响应,从所述多个开发者的一个子集接收可包括或可不包括诸如用于软件程序的要求文档、活动示图、案例文档、测试案例、原型或UML文档的项的设计。用于对接收的设计进行复核的设计复核过程被推动,并至少部分的基于所述结果,选择一个设计。所述选择的设计被传送给第二多个开发者(其在一些情况中可不同于所述第一多个软件开发者),并响应所述传送的设计,从所述第二多个软件开发者中的每一个接收一个软件程序,其在一些情况中可包括源代码、目标代码或编译代码。推动软件复核过程以对每个接收的程序进行复核,并至少部分的基于其复核选择一个程序。
各个实施例可包括一个或多个下列特征。开发者的技能等级(skill rating)可从开发者在一项或多项编码竞赛中的成绩得出,其可(整体或部分的)保持在线。例如,可至少部分的基于已经获得在一项或多项竞赛中接收的最低等级来选择所述第一多个软件开发者。分派给开发者的等级可从与一个或多个设计或程序相关的分数(整体或部分的)得出。可使一个难度等级与所述软件程序相关,并在一些实施例中,可至少部分的基于与所述设计或程序相关的难度等级来对开发者进行定级。
在传送规范之前,可从请求开发软件程序的实体接收规范的一部分。在一些情况中,可使用在线应用程序例如使用互联网来传送规范。所述方法还可包括对提交了被选择的设计或程序的软件开发者进行奖赏,例如使用金钱奖赏和/或增加的技能等级。
可通过多个复核人员来执行设计复核和/或软件复核过程,所述多个复核人员在一些情况中可能先前已经在一项计算机编程竞赛中进行了定级,并且可能已经获得一个高于预定的最低等级的等级。在多个复核人员参与设计复核或软件复核的情况下,所述设计和/或软件复核过程可包括将来自多个复核人员的每一个的分数汇总成一个总的等级,并可基于该总的分数选择一个设计或程序。所述设计复核过程可包括一项或多项活动,例如读取设计文档、完成复核表格(其在一些情况中可以是在线表格)和标明将要由提交所述设计的软件开发者并入到设计中的改变。可根据复核人员的判断力将所述改变指定为强制性的或选择性的。在一些实施例中,可产生申诉以对分配给一个软件开发者的设计和/或程序的分数进行争辩。可发布所选择的程序,并在一些情况中,可提供对发布的程序的支持。
总体而言,本发明的另一个方面涉及一种分布式软件开发方法。所述方法包括对分布式软件开发团体提供软件开发系统,从一个实体接收产生一个软件程序的请求;和通过所述软件开发团体的至少一个子集使用所述软件开发系统推动开发所述软件程序。所述为开发者提供的软件开发系统包括使用结构化开发方法学推动软件程序开发和测试的软件开发软件;所述结构化开发方法学在一些情况下包括多个阶段,例如规范阶段、设计阶段、开发阶段、测试阶段和支持阶段;与软件开发软件进行通信的通信服务器,用于将软件开发软件发送给分布式软件开发团体;和复核部门,包括一个或多个能够确定所述分布式软件开发团体所开发的软件的质量的编程人员。
各个实施例可选择的包括一个或多个下列特征。软件程序可以是可从组件、应用程序、模块和程序库的组中选择的程序。在一些实施例中,可基于软件开发者参与一个或多个编码竞赛或他们开发的设计和代码来对他们进行定级。为了推动开发过程的分布式性质,软件开发系统的一个或多个组件在地理上可以是分布式的,并且可使用互联网或其它网络来施行发布。作为一个非限制示例,编程人员用于开发计算机代码的客户软件可以是可下载的小程序(例如,java小程序)的形式。
复核部门可包括先前例如在编码竞赛中或通过对他们已经开发的设计和/或代码进行定级的编程人员。可由复核部门通过复核诸如设计文档、源代码、目标代码、编译代码、类定义和方法的项来确定软件的质量。所述开发环境可推动这种诸如设计模型(例如,UML模型)、案例模型和计算机代码的项的开发以及计算机代码的编译和测试。所述方法还可包括从所述软件开发团体的一个子集接收开发的软件程序,并在一些情况下选择将要递送给所述实体的接收程序中的一个或多个。可对提交所述一个或多个选择软件程序的开发者进行补偿,在一些情况中,使用金钱,和在一些情况中通过增加的技能等级。
在另一个方面中,本发明提供一种评估软件程序的计算机化方法。所述方法包括将用于开发软件程序的请求传送给一组软件开发者;并作为响应,从所述软件开发者组的子集中的每一个接收一个候选软件程序和用于测试所接收的候选软件程序的一个或多个测试案例。所述方法还包括使用从所述软件开发者组的子集中的两个或多个接收的测试案例对每个接收的软件程序进行测试;和至少部分的基于测试的结果对接收的候选软件程序进行记分。
各实施例可包括一个或多个下列特征。软件开发者在地理上可以是分布式的,并在一些情况中,可能已经在一项或多项编码竞赛中进行了定级。所述候选软件程序可包括源代码、目标代码、编译代码、类定义、方法、应用程序和组件。所提交的测试案例可包括将用作候选软件程序的输入的样本数据。
在又一个方面中,本发明涉及用于执行刚刚所述的方法的系统。例如,一种用于评估软件程序的功能性的系统包括通信服务器,用于将开发软件程序的请求传送给一组软件开发者,并作为响应,从所述开发者的子集中的每一个接收一个候选软件程序和用于测试所接收的程序的一个或多个测试案例;测试服务器,用于使用从所述软件开发者的子集中的两个或多个接收的测试案例对每个接收的软件程序进行测试;和与测试服务器通信的记分服务器,用于至少部分的基于从测试服务器接收的测试结果对接收的候选软件程序进行记分。
在本发明的该方面的一个实施例中,软件开发者在地理上可以是分布式的,并在一些情况中所述开发者先前已经进行了定级。所接收的候选软件程序可包括源代码、目标代码、编译代码、类定义、方法、应用程序和组件,并且所提交的测试案例可包括将用于候选软件程序的输入的样本数据。
本发明的其它方面和优点通过附图、详细说明和权利要求将变得显而易见,附图、详细说明和权利要求的全部仅仅借助示例阐释了本发明的原理。


在附图中,相同的参考符号通常在不同的图中指代相同的部分。而且,所述附图不一定是按比例绘制的,相反,重点一般是放在阐释本发明的原理。
图1为根据本发明的具有一个服务器的分布式软件开发系统的一个实施例的方框图;图2为根据本发明一个实施例的软件开发域的一个实施例的方框图;图3为表示根据本发明一个实施例的在开发软件程序的过程中所执行的步骤的流程图;图4为表示本发明一个实施例的整体操作的流程图;图5为表示根据本发明一个实施例的使用多个测试案例的提交项产生的软件测试环境的方框图;图6为如图5所示的测试环境的一个实施例的更详细的示图;图7为如图1所示的用于推动软件程序的开发和/或测试的服务器的一个实施例的方框图。
具体实施例方式
参照图1,在一个实施例中,分布式软件开发系统101包括至少一个服务器104,和至少一个客户端108、108’、108”,总的由108指代。如图所示,所述分布式软件开发系统包括三个客户端108、108,、108”,但这仅仅是用于示例的目的,并且可以预期有任何数量的客户端108。客户端108优选的被实现为在个人计算机(例如,带有INTEL处理器的PC或APPLE MACINTOSH)上运行的软件,其能够运行这样的操作系统,例如来自华盛顿雷蒙德的微软公司的MICROSOFT WINDOWS操作系统家族、来自加利福尼亚Cupertino的苹果计算机的MACINTOSH操作系统和各种各样的Unix,例如来自SUN MICROSYSTEMS的SUNSOLARIS、来自北卡罗莱纳州的达勒姆(Durham)的RED HAT公司的GNU/Linus(和其它系统)。也可在诸如智能或哑终端、网络计算机、无线装置、无线电话、信息设备、工作站、小型机、大型计算机或其它计算装置的硬件上实现这种客户端108,可将所述硬件操作为通用计算机或在分布式软件开发系统中仅用作客户端108的专用硬件装置。
通常,在一些实施例中,软件开发者可操作和使用客户端108以加入到各种软件开发活动中。软件开发活动的例子包括但不局限于软件开发项目、软件设计项目、测试软件程序、创建和/或编辑文档、参与编程竞赛等等。还可通过要求软件开发商开发软件的实体(例如客户)来操作客户端108。客户可使用客户端108来复核软件开发商开发的软件、公布用于软件程序开发的规范、测试软件模块、察看有关开发商的信息,以及此处所述的其它活动。还可由作为客户和软件开发商之间的中间人的服务商来操作客户端108。
在各种实施例中,客户计算机108包括网页浏览器116、客户软件120,或二者都包括。网页浏览器116允许客户端108使用网页请求来请求一个网页或其它可下载的程序、小应用程序或文档(例如,从服务器104)。网页的一个示例是包括计算机可执行或可解释的信息、图形、声音、文本和/或视频的数据文件,可对所述数据文件进行显示、执行、播放、处理、流传送和/或存储,并且其可包含到其它网页的链接或指针。在一个实施例中,客户端108的用户手动地从服务器104请求网页。可选择的,客户端108使用网页浏览器116自动地产生请求。商业上可获得的网页浏览器软件116的例子是由微软公司提供的INTERNET EXPLORER、由AOL/Time Warner提供的NETSCAPENAVIGATOR或由Mozilla Foundation提供的FIREFOX。
在一些实施例中,客户端108还包括客户端软件。客户端软件120对客户端108提供允许软件开发商参与、监督、促进或观察上述软件开发活动的功能。可以各种形式来实现客户端软件120,例如可以下载到客户端108上并结合网页浏览器116运行的Java小应用程序的形式,或者客户端软件120可以是以多平台语言(例如,Java)或以本机处理器可执行代码实现的单机应用程序的形式。在一个实施例中,如果在客户端108上执行,客户端软件120打开通过通信网络112到服务器104的网络连接并通过那个连接与服务器104通信。客户端软件120和网页浏览器116可以是单一客户服务器接口124的一部分;例如,可将客户端软件实现为网页浏览器116的“插件程序”。
通信网络112将客户端108与服务器104连接。可通过任何媒体例如,标准电话线、LAN或WAN连接(例如T1、T3、56kb、X.25)、宽带连接(ISDN,Frame Relay,ATM)、无线连接(802.11,蓝牙等),等等来进行通信。优选的,网络112可携载TCP/IP协议通信,并且通过网页浏览器116进行的HTTP/HTTPS请求和客户端软件120和服务器104之间的连接可在这种TCP/IP网络上进行通信。然而网络的类型并不是限制的,任何适当的网络都可使用。可用作通信网络112或是其一部分的网络的非限制示例包括基于以太网的无线或有线内联网、局域网或广域网(LAN或WAN)和/或已知为互联网的全球通信网,所述网络可适应许多不同的通信媒体和协议。
服务器104与客户端108相互作用。服务器104优选地实现在一个或多个服务器级计算机上,所述服务器级计算机具有充足的存储器、数据存储和处理能力并且运行一个服务器级操作系统(例如SUNSolaris、GNU/Linux和微软视窗操作系统家族)。根据设备容量和用户数量以及用户基数的大小也可使用除此处所述之外的其它类型的系统硬件和软件。例如,服务器104可以是有一个或多个服务器组成的逻辑组或者可以是其一部分,例如服务器群(server farm)或服务器网络。作为另一个例子,可以有多个服务器104,这些服务器可彼此相关或连接,或者多个服务器可使用共享数据独立的操作。在另一个实施例中且典型的是在大规模系统中,可在组件中执行应用软件,其中不同的组件运行在不同的服务器计算机上、相同的服务器上或某一种组合。
在一些实施例中,服务器104还可包括例如在由Lydon等人提出的标题分别为“Systems and Methods for Coding Competitions”和“Apparatus and System for Facilitating Online CodingCompetitions”的美国专利第6569012和6761631号中所述的竞争服务器,所述专利文献通过整体参考而被并入本文。
在一个实施例中,服务器104和客户端108允许通过一个或多个开发者对软件程序进行分布软件开发,所述开发者可以与或者可以不与请求软件程序开发的实体相关。软件程序可以是用于机器的任何种类的指令,例如包括但不局限于组件、类、程序库、应用程序、小应用程序、脚本、逻辑表、数据块或这些当中的任一个或多个的任意组合或集合。
在一个实施例中,软件程序是软件组件。通常,软件组件是一个功能软件模块,其可以是一个应用程序的可重用构建块。一个组件可具有任何功能或功能性。正如一些示例,软件组件可包括,但不局限于诸如图形用户接口工具、小型计算器、数据库管理器的接口、用于保险统计表计算、DNA搜索功能、为了加工制造部件的目的制造数字控制机器的接口、公共/私密密钥加密运算和用于注册和与主机应用程序进行通信的功能(例如,保险调整和销售点(POS)产品跟踪)的组件。在一些实施例中,组件为了所需的服务而彼此通信(例如,通过通信网络112)。组件的一个具体例子是JavaBean,其是以Java编程语言编写的组件。也可以任何其他语言编来写组件,包括但不局限于Visual Basic,C++,Java和C#。
在一个实施例中,软件程序是应用程序。应用程序可以包括一个或多个软件组件。在一个实施例中,软件应用程序包括使用此处所述的方法先前开发的软件组件。在一些实施例中,应用程序完全包括新的软件程序。在一些实施例中,应用程序包括新软件程序和先前开发的软件程序的组合。
参照图2,可使用软件开发域204来提供具有高质量软件的实体。可通过各种方法从分布式编程人员团体识别和/或选择一个或多个开发者,并且随后将其用于开发软件组件。例如,开发者可以是培养协作计算机编程和分布式软件开发的组织、企业或团体的雇员、顾问或成员,并且在一些情况中,开发者彼此可能不具有其它正式或非正式的关系。在一些实施例中,一个或多个开发者可作为负责组织和协调其他开发者的工作量的产品经理。产品经理也可以指定项目,例如但不局限于项目成本、项目安排和项目风险。在一个实施例中,产品经理对于项目产生一个项目计划,其可包括但不局限于估计项目成本和日程,以及例如说明项目范围和风险的要求文档。
在一些实施例中,开发者可包括体系结构设计者、设计师、程序师、质量保证工程师、以及其他软件开发角色,如在Hughes提出的标题为“Method and Systems for Software Development”的未决美国专利申请序列第10/408402号中所述,所述专利申请通过整体参考而被并入本文。
在一个实施例中,软件开发域204包括通信服务器216、一个或多个结构化的开发方法学220、软件开发软件224和复核部门228。通信服务器提供通过其外部实体208、程序员团体212和复核部门208可彼此交互的渠道,例如以设计或功能表提供文件编制、提交软件、得出和提供反馈、复核提交的软件和潜在的评价提交的软件。在一些实施例中,通信服务器是或用作如上所述的服务器104的一部分,而在其它情况中通信服务器可以是单独的服务器,其可通过应用程序服务提供商(ASP)、互联网服务提供商(ISP)或其他第三方来操作和/或外购。
结构化开发方法学220提供用于软件程序开发的框架。方法学220指定一个共用词汇表、一组固定的可交付产品(deliverables)、开发阶段或步骤、用于一个或多个步骤的输入和输出以及开发过程的其他方面。例如,方法学220将开发过程分为体系架构和设计阶段以及开发和测试阶段。另外,在该特定的非限制示例中,在启动任何开发工作之前,对体系架构和设计阶段的输出例如类图、测试案例、技术规范和其它设计文档进行提交、复核和最终确定。一旦选择和批准了一组设计文档,则所述设计文档将被用作开发阶段的输入。在开发和设计阶段,开发者基于设计文档创建源代码、脚本、文件编制和其它可交付产品。通过在开始开发之前确保高质量的设计文档,开发者被提供他们正被要求开发的项目的一个完整和精确的表述。另外,通过使用结构化方法学,参与者(例如,开发者212、实体208)能够有效的进行通信,并且知道每个处理步骤的输出以及可对其进行验证。通过提供公共定义和一组已知的输入,例如使用情况,和一组输出,例如,期望结果,并且通过便于基于团体的开发,开发者彼此可有效和高效的彼此交互,因此降低了生产高质量软件所需的成本和时间。
软件开发软件224提供用于执行方法学220的操作机构,和开发者能够进行开发、测试、提交和验证软件设计和软件程序中的一项或多项的软件开发环境。在一些实施例中,如图所示,软件224的组件可驻留在服务器104上,而一些组件可包括在驻留在如上所述的客户端上的客户软件中。软件开发软件224可选择性的包括例如一个或多个开发库,开发者从开发库能够访问先前开发的组件和文件编制模板;提供关于编程项、语法和功能的信息的文件编制特征;还允许开发者识别和校正编程错误的编译程序;和甚至版本控制和代码管理功能。
图3给出了例如使用上述的软件开发域204开发软件的方法的一个实施例的概略图。通信服务器216接收描述软件程序的期望功能的规范(步骤304),所述规范然后被分发给分布式程序员团体212(步骤308)。所述团体212中的一个或多个程序员基于在所述规范中描述的功能性产生详述所述程序的技术方面的设计,并且一旦完成,就在服务器104处接收设计(步骤312)。然后所提交的设计接受设计复核过程(步骤316),由此将所述设计与所述规范进行比较,并对其所规定的功能性的执行情况和与结构化开发方法学220的兼容情况进行评估。响应所述评估,可选择一个“最好”的提交设计(步骤320),并且如果有至少一个满足质量的提交,则可使选择的设计对于分布式程序员团体212可用(步骤324)。大量程序员中的每一个(或者,在一些情况中,为每个程序员团队)提交一个他们确信符合所述设计和结构化开发方法学220的要求的软件程序。在服务器104处接收软件程序(步骤328)并使程序接受软件复核处理(步骤332)以确定哪个提交的程序最符合所述分布式设计和结构化开发方法学220。一旦通过复核,一个(或者在一些情况下多于一个,或者如果没有程序是充分高质量的则一个也没有)程序被标识为“获胜”的提交项(步骤336)。
图4给出了上述的一般方法的一个可能实施例。在一些这种实施例中,通过服务商400来监视和管理开发过程。服务商400可以是能够执行此处所述的功能的任何个体、组或实体。在一些情况中,可根据例如对先前提交的软件设计和/或程序获得的典型分数或在软件编程竞赛中获得较高等级从分布式开发团体208中选择服务商400。在其它情况中,可由请求开发软件程序的实体(例如实体208)来指定或提供服务商400,并由此监督设计和开发过程以进一步确保最终的产品将与规范相称。
最初,服务商400从希望具有软件程序、应用程序、组件或为了其自身利益开发的其它资产的实体(未示)接收输入。所述实体可以是寻求具有一个或多个供内部使用而设计和/或开发的计算机程序或者作为计划在商业上进行销售的较大型应用程序的一部分的公司。在一些情况中,所述实体会提供详细的规范,并在其它情况中,可只提供一个功能需求的列表。所述服务商从外部实体接收要求(步骤406)、规范(步骤408),或者在一些情况中两者都接收。然而,如果没有提供规范,或者如果规范需要修订以使其符合方法学,则所述服务商可根据要求开发规范(步骤410)。在一些情况中,可要求开发团体407(例如图2中的开发团体212)中的一个或多个成员来开发规范,并且在一些情况中可提交多个规范,其中只有一个规范被选择作为最后的规范,用于指导设计和开发工作。
在一个实施例中,规范定义了商业计划和稳定的硬件和/或软件平台或其它体系结构约束。例如,规范可定义网络设备、服务器和通常的基础结构以支持项目和产品的开发和生产。所述规范还能够标识必须以其或使用其对组件进行编程的语言或工具、软件组件的功能概要、边界条件、效率要求、计算机平台/环境要求、接口要求、性能标准、测试案例要求和/或组件的文档编制要求。在一些实施例中,所述规范可包括将支付给提交与规范相适应的最佳设计和/或程序的设计者的钱数。
在一些情况中,所述规范被分配一个难度等级,或者服务商、实体或规范的其他鉴别者确信根据所述规范产生可理解的设计将有多困难的一些类似的指标。在一些情况中,难度等级也可以基于确信完成所述任务所需的工作量,和完成任务所分配的时间。可以任何适当的方式表示难度等级,例如以数字形式(例如,1到10的等级)、字母等级或类似“容易”、“中等”或“困难”的说明。例如,用于复杂基因序列算法设计的规范在1到10的等级上可具有9的难度等级,而在文件中执行对特定文本搜索的简单组件可被分配难度等级为2。如果有附加的实际约束,例如如果在两天内需要该搜索组件,则由于紧的时间约束而可选择性的增加难度等级。在一些实施例中,可部分根据与所述规范相关的难度等级来产生或调整给予提交选择的设计的设计者的奖励(例如,钱、技术等级等)。
一旦规范被接收(或开发),则服务商400(或在一些情况中为项目经理)根据开发方法学220对规范进行复核以确定它是否满足完整规范的要求。方法学可包括最优方法的活动、模板、指南和有助于软件体系结构设计者、程序员和开发者以一致和有效的方式产生优质代码的标准。这种方法学的使用减少了重新思考和再生成编程文档编制和构造的需要,从而减少了项目持续时间、成本并提高了质量和组件可重用性。
一旦完成,就通过通信服务器212将所述规范分发给一个或多个开发者404、404’、404”(总体为404),其可以是诸如图2中所示的团体的分布式程序员团体的成员。在一个非限制示例中,开发者404彼此不相关。例如,开发者可不具有共同的职员,可在世界范围内在地理上分散开发者,并且在一些情况中先前彼此并不相互交流。然而,作为团体212的成员,开发者404可能已经加入一个或多个竞赛,和/或先前已经提交了接受复核的软件制品(artifact)。该方案允许实体208有权访问大量备用的认证的软件开发者。
可通过诸如网络112(图1)的通信网络来进行通信,例如通过电子邮件、即时信息、文本信息、可通过网页浏览器116进行访问的网页上的公告(posting)、通过新闻组、传真或任何其他适当的通信。在一些实施例中,可伴随奖赏、报酬的指示或对于提交选择的软件设计的设计者可获得的其他认可来进行规范的通信。在一些情况中,报酬的数量和/或类型可随时间改变,或者随参与成员的增加或减少而改变,或二者同时发生。在一些情况中,可向多个设计者奖赏不同的数量,例如较大的奖赏给予最好的设计,而较小的奖赏给予次位的设计。接收奖赏的设计人员的数量可例如基于参加设计项目或其它类似属性的设计人员的数量。
可通过各种方法来选择规范的接受者。在一些实施中,团体成员可能已经表达了参与一个开发项目的兴趣,而在一些情况中可基于在编码竞赛中的先前成绩、以前开发的项目或测量软件开发者的编程技能的其它方法来选择个体。例如,分布式程序员团体的成员可以是先前已经加入在线编程竞赛的程序员。在这种情况下,参与者的编程技能可根据他们的成绩或者作为一个团队单独的,或者关于其他程序员来进行定级,并且可使用所述等级来确定哪些程序员适合接收新规范的通知或对通知做出响应。
在一个实施例中,服务商400在各个参与者(外部实体208、开发者404等)之间主持一个合作论坛以确定、讨论设计特征或关于设计特征进行合作。合作论坛可由开发者、用户、预期客户或在开发某一软件中感兴趣的其它人员构成。在一个实施例中,合作论坛是参与者可公布想法、问题、提议或其它信息的在线论坛。在一些实施例中,只有论坛成员的子集可向论坛发布建议。
一旦接收规范,一个或多个开发者404每个都会根据规范来开发软件设计(步骤412、412’和412”)。可使用任何适当的开发系统来进行软件设计的开发,例如通过通信服务器216提供的软件开发软件224、通过开发者404提供的开发环境或其某种组合。当开发者404满意其设计满足规定的要求并符合结构化开发方法学220时,她会例如通过通信服务器216、传真、电子邮件、邮件或其它类似方法来提交她的设计。
为了确定哪个设计将被用作用于软件程序的设计,使用设计复核过程(步骤414)。该设计复核可以任意种方式来进行。在一些情况中,服务商400可将复核过程委派给分布式程序员团体的一个或多个成员或者是所述实体的被任命者。在一些实施例中,设计复核过程包括用作对来自软件设计者的设计提交项进行复核的设计复核部门的一个或多个开发者404。设计复核部门优选的具有较小数量(例如少于十)的成员,例如三个成员,但也可以是任何数量。通常,复核部门只被形成用于一个或较小数量的相关项目,例如三个项目。在一些实施例中,复核部门可被形成用于延长的时间,但人员配备的变化也可有助于保持质量。
优选的,通过服务商400和/或项目经理、复核部门的成员,和/或请求软件程序的外部实体将设计复核部门成员中的一个成员选择为主要复核部门成员。在一些情况中,服务商400或服务商400的代表作为主要复核部门成员。主要复核部门成员负责对所述部门的活动的协调和管理。
在一个实施例中,通过设计复核部门来判断用于软件设计的提交项。在一些实施例中,主要复核部门成员在设计复核部门的其他成员复核设计提交项之前对它们进行筛选以允许复核部门的剩余成员只判断提交项中的最好项。在一些实施例中,所述筛选过程包括根据它们满足在规范中所列举的形式要求(例如,提交的格式和元素)的程度来对提交项进行记分。在一些实施例中,使用记分卡对分数提供文件编制,其可以是文档、电子表格、在线表格、数据库或其它电子文档。在一些情况中,所述设计复核部门还可以验证开发者404的匿名使得不能从他们的提交项来辨别它们的身份。
筛选复核可确定是否包括所要求的设计元素(例如,类、使用情况和序列图、组件规范、所要求的算法、类存根和功能测试)。筛选复核还可确定这些元素完整的呈现了。例如关于类图,尤其是类定义,筛选复核可确定下列中的任一个或全部(1)类定义提供类的用途的描述性概述,(2)为了分离功能性已经产生了子分组,(3)类范围匹配类用途,(4)对编程技术(例如继承性和抽象)存在适当的和有效的使用,(5)正确使用接口,(6)对组件定义适当的构造函数,和(7)适当使用类修饰语,例如,最终的和静态的。筛选复核也可例如关于变量定义确定(1)变量范围被正确定义,(2)对于效率和灵活性之间的平衡适当定义类型分配,和(3)使用初始值定义所有变量。另外,关于方法定义,例如,筛选复核可确定(1)范围被正确定义,(2)例外情况被正确处理和使用,(3)修饰语被适当使用,(4)使用返回类型,(5)方法论证被适当定义,和(6)如在所述要求规范中陈述的应用程序接口(API)是可用的。
筛选复核还可例如验证对于设计中的所有公共方法是否存在使用情况图,和对于每个使用情况都存在序列图。筛选复核还可例如关于测试案例验证是否对每个序列图都提供了功能测试案例,和所述功能测试案例对于那些图是否为适当的。根据所指定的程序,所述设计可采用多种形式。典型的,所述规范将包括用于设计的要求。在一个实施例中,所述设计要求包括类图,其可以通用建模语言(UnifiedModeling Language(UML))开发,例如使用可从德国汉堡的GentlewareAG获得的Poseideon计算机辅助软件工程(CASE)工具。所述设计要求还可包括使用情况(use-case)图和序列(sequence)图。设计要求还可包括描述设计的编写组件设计规范、所要求的算法的列表和用于设计中的类的类存根。所述设计要求还包括能够用于测试所述程序的功能测试。在一个这种实施例中,功能测试是与JUnit测试基础设施兼容的测试。JUnit是用于测试Java软件的开放源软件,其可从www.sourceforge.net获得。
在一个实施例中,主复核部门成员通知设计复核部门一个或多个提交项已经通过初始筛选过程(步骤416),然后设计复核部门更详细的评估设计提交项。在一些实施例中,设计复核部门基于在规范中经文档编制的要求来复核提交项。在一些实施例中,设计复核部门对提交项进行记分(步骤418)。在一些实施例中,使用记分卡对分数进行文档编制,其可以是任何形式,包括文档、电子表格、在线表格、数据库或其它电子文档。
在一些实施例中,来自主复核部门成员和设计复核部门中的其它成员的分数和复核被汇总成最终的复核和分数。在一些实施例中,所述汇总可包括对包含在一个或多个文档中的信息进行编译。可通过主复核部门成员、设计复核部门的其它成员来执行这种汇总,或者在一个典型实施例中,使用驻留在服务器104(图1)上的基于计算机的系统来执行汇总。在一些实施例中,服务商400或主复核部门成员在设计复核部门成员之间解决不相符或不一致。
在一个实施例中,具有最高组合分数的设计被选作为将被用于执行的获胜设计(步骤420)。将奖赏、报酬和/或赞誉给予设计者。在一个实施例中,给予设计者的部分报酬被扣留直到开发复核结束。例如,设计者可接收75%的报酬直到设计复核结束,并在代码复核之后再支付25%。也可以对其他提交的设计给予奖赏、报酬和/或认可。例如,提交第二和第三好设计的设计者也可以接收报酬,在一些情况中所述报酬可少于获胜设计者的报酬。也可以对创造性使用技术、提交唯一测试案例或其它这种提交给予报酬。在一些实施例中,软件开发者可竞争分配给他们的设计、程序或其它提交的分数。
在一些情况中,被公布的设计被分配一个难度等级,或者外部实体、服务商400或设计的一些评估者相信产生满足所选择的设计要求的软件程序或组件将有多难的一些类似的指示。类似于分配给所述规范的难度等级,分配给一个设计的难度等级在一些情况中也可以化为在确信完成所述任务所需的工作量,和完成任务所分配的时间的因素。在一些实施例中,授予提交选择的设计的设计者(例如,金钱、技术等级等)的认可可部分基于与所述规范相关的难度等级来进行调节。
在一些实施例中,除了对提交项进行复核之外,设计复核部门可标识在进入开发阶段之前应包括在设计中的对设计的有用修改。主复核部门成员对所述额外的要求进行文档编制,并将该信息传送给提交所述设计的设计者404。在一个实施例中,主复核部门成员对来自复核部门的评论进行汇总。开发者404可更新设计并重新提交它以供设计复核部门进行复核。该过程可重复直到主复核部门成员确信所述设计已经满足所有所需要求。
一旦设计复核部门确认一项设计已经充分解决了规范的要求,主复核部门成员通知服务商400、产品经理、或外部实体这种设计已经通过了设计复核过程。然后就可向开发团体407公布和/或发布设计(步骤422)以请求提交与所述设计一致的软件程序。例如,服务商400可使得设计在网站上和/或在用于执行的邮件发送清单上可用,并根据所述设计请求组件。
在一个可选择实施例中,并且作为系统灵活性的示例,所述实体开发软件设计并将所述设计提供给服务商400作为直接到开发过程的输入。服务商400接收设计(步骤424)并选择性的启动如上所述的复核过程以确定设计满足结构化开发方法学220的标准。使用该方案,希望保持对软件开发过程(例如,体系结构、平台、编码标准等)的设计阶段的控制的实体可利用内部或其它资源例如商业和系统分析员来开发与他们的标准相适应的设计,然后利用分布的开发团体212来开发最终产品。通常,该选择性方案在机构内部保持软件开发过程的各设计方面,并“外购”开发过程的制造方面使得开发域204能够使用可重复的、结构化开发方法和开发团体212来开发软件程序。类似的,实体208可只要求开发域204的服务来开发软件设计,并随后使用其他资源,例如内部的程序员或境外开发者来开发代码。
通过保持多个实体和到开发过程之中和之外的出口点所提供的灵活性允许外部实体在逐情况或逐阶段的基础上判定是否从开始到结束利用开发域204,(即通过测试和支持的规范)或者只使用域204用于所述过程的特定阶段(即,代码开发、规范开发、软件设计开发、测试、支持等)。
仍参照图4,被选择和经认可的设计被公布和提供给分布式程序员团体212的成员。如上所述,通过所述规范,可将所述设计发送给整个团体或只发送给选择的团体成员。在将设计发送给选定成员的形式下,选择过程可基于任何适当的标准或其组合,所述标准例如但不局限于编程竞赛中的过去的成绩、先前提交的软件程序的质量、在设计开发中的复杂情况,或通过服务商400、实体208和提交获胜设计的设计者、其他设计者或团体212的其他成员的特定请求。在一些实施例中,设计的传送是可伴随提交选择软件程序的开发者和/或亚军可获得的奖赏、报酬或和其他认可的指示。在一些情况中,报酬的数量和/或类型可随时间变化,或者随参与者数量的增加或减少而变化。
每个开发者404都开发满足选定设计要求的软件代码(步骤426、426’和426”),并当完成时,将代码例如提交给服务商400或服务器。如上所述,开发者404可使用各种各样的编码技术、语言和开发环境来开发软件,只要代码例如满足设计规定的功能和体系结构方面和结构化开发方法学220所描绘的质量和依照句法的标准。在一些实施例中,开发者404可使用通过通信服务器216提供的软件开发软件以有助于开发任务。因为开发软件224和开发方法学220都被保持在开发域204内,所以方法学220的许多编码和质量控制要求都可被构建到软件224中,这更有助于开发者404以有效的方式开发优质代码。
为了确定哪个软件程序将被最终选作为将要递交给实体208的程序,使用代码复核过程(步骤428),所述代码复核过程可以任何适当的方式进行。在一些实施例中,代码复核过程包括作为代码复核部门起作用的一个或多个开发者404对从软件开发者提交的软件程序进行复核。代码复核部门优选的具有较少数量的成员(例如,少于十),例如三个成员,但也可是任何数量。通常,代码复核部门被形成只用于一个或较小数量的相关项目,例如三个项目,然后解散以允许所述成员参与其它的设计复核部门、代码复核部门,或者参与作为设计者和/或开发者本身。在一些实施例中,复核部门可被形成用于延长的时间,但人员配备的变化也可帮助保持质量。
优选的,通过服务商404和/或项目经理、复核部门的成员和/或请求软件程序的外部实体将代码复核部门成员的一个成员选作为主代码复核成员。在一些情况中,服务商400或服务商400的代表当作主代码部门成员。主代码部门成员负责对所述部门的活动的协调和管理。
在一个实施例中,通过代码复核部门来判断提交的软件程序。在一些实施例中,主复核部门成员在代码复核部门的其他成员复核代码提交项之前对它们进行筛选以允许代码部门的剩余成员只判断提交中的最好项,例如满足最低要求的那些提交项。在一些实施例中,所述筛选过程包括根据它们满足在选定设计中所概述的形式要求(例如,提交的格式和元素)的程度来对提交记分。在一些实施例中,使用记分卡对分数进行文件编制,其可以是文档、电子表格、在线表格、数据库或其它电子文档。
在一些实施例中,例如,关于软件代码,代码复核员基于下列程度对代码进行记分(1)提交的代码解决如在组件设计文档中所详述的功能性的程度;(2)提交的代码正确的使用所有所需要的技术(例如,语言、所要求的组件等)和数据包的程度;(3)提交的代码恰当的实现所要求的算法的程度;(4)没有使用额外的公共类、方法或变量,所提交的代码已经正确执行(并未修改)如在所述设计中所定义的公共应用程序接口(API)的程度。
关于源代码,例如,筛选复核可确定下列中的任一个或全部;(1)所有公用方法是否被清楚的评论;(2)是否包括所要求的标记(例如,“@author”,“@param”,“@return”,“@throws”和“@version”;(3)版权标记是否被转移(populated);(4)源代码是否遵从用于Java语言的标准编码规则,例如由Sun Microsystems所公开的那些标准编码规则;(5)是否使用4个空格缩进来代替列表缩进;和(6)在类图中发现的所有类、方法和变量定义在源代码中是否被精确代表。代码复核也可例如用于验证对于所述设计中的所有公用方法是否都存在单元测试案例,并且每个单元测试由测试程序正确地标识。
关于类定义,例如,复核者可基于如在设计文档(例如,包括修饰语、类型和命名注释)中所定义的实现类的程度和是否实现定义的类来评价代码。关于变量定义和方法定义,例如,复核者可确定如在设计文档(例如,包括修饰语、类型和命名注释)中所定义的执行所有变量和方法的程度。关于关系,例如,复核者可确定所述实现适当的映射类关系的程度。
复核者可进一步基于代码检查来评价代码。例如,复核者可确定在代码中所定义的对象类型对于计划使用是最好的选择的程度-例如是否应该使用矢量类型而不是数组类型。复核者可确定存在任何不必要的循环的程序、或疏忽的对象例化或变量分配。
复核者还可检查测试案例。关于测试案例,例如,复核者可确定(1)单元测试案例完全测试所有方法和构成部分的程度;(2)单元测试案例适当的使用配置和拆卸方法来配置测试环境的程度;(3)在单元测试案例中使用的文件出现在指定目录中的程度;(4)在完成测试之后,单元测试案例不会在文件系统上留下临时文件的程度。
复核者可使用测试案例例如由开发者404、其他开发者、复核者、服务商400、实体208以及其他群体开发的测试案例对代码运行测试。复核者甚至可进一步通过实行精确性、失败和重点测试来评价代码。精确性测试对提供有效输入时得到的最终输出的精确性进行测试。精确性测试也可用于证实配置数据。失败测试对组件被提供有无效输入例如坏数据和不正确的使用时的正确失败行为进行测试。重点测试对于大量操作的组件容量进行测试,但测试此特性作为吞吐量的性能。在组件的评估中包括失败的测试,例如作为分数缩减(scorereduction)。然后复核者就可基于该评估对组件分配一个整体分数。
在一个实施例中,主复核部门成员通知代码复核部门一个或多个提交项已经通过了初始筛选步骤(步骤430),然后代码复核部门就可更详细的评估所述程序提交项。在一些实施例中,代码复核部门可基于在选定设计中被文件编制的设计要求来复核所述提交项。代码复核部门然后就可根据评估的结果来对提交项进行记分(步骤432)。在一些实施例中,使用记分卡来对分数进行文件编制,其可以是任何适当的装置,例如文档、电子表格、在线表格、数据库或其它电子文档。
在一些实施例中,来自主代码复核部门成员和代码复核部门其他成员的分数和复核被汇总成一个最终的复核和分数。在一些实施例中,汇总可包括对一个或多个文档中包括的信息进行编译。这种汇总可通过服务商400、主代码部门成员、代码复核部门的其他成员来执行,或者在一个典型实施例中,使用驻留在服务器104(图1)上的基于计算机的系统来执行汇总。在一些实施例中,服务商400或主复核部门成员解决代码复核部门成员之间的不相符或不一致。
在一个实施例中,具有最高总分的软件程序被选作为获胜程序(步骤434),其将被递送给外部实体208作为最终产品(步骤436)。在一些实施例中,奖赏、报酬和/或认可被给予提交获胜程序的软件开发者。也可有用于其它提交的程序的奖赏、报酬和/或认可。例如,提交第二和第三好的程序的编程者也可接收报酬,所述报酬在一些情况中可少于获胜编程者的报酬。也可对创造性使用技术、提交唯一测试案例或其它这种提交给出报酬。在一些实施例中,软件开发者可对分配给他们的程序、测试案例或其它提交项的分数进行竞争。
在一些实施例中,除了复核提交项之外,代码复核部门可标识在发布之前应该包括在一个选定软件程序中的对程序有用的修改。主代码复核部门成员对附加要求进行文件编制,并将该信息传送给提交所述代码的开发者404。在一个实施例中,主代码复核部门成员对来自复核部门的意见进行汇总。开发者404可更新所述程序并重新提交它以供代码复核部门复核用。该过程可重复直到主复核部门成员确信所述程序已经满足所有所需的要求并满足在结构化开发方法学220中规定的标准。
在一些实施例中,在已经将软件发送给一个或多个实体208之后,可以用增强性、发布后的程序缺陷修复(post-delivery bug fixes)、额外的功能性来更新软件或者可对其进行修改以在其它的计算环境或平台中进行操作。在这种情况中,域204对先前发布的软件产品提供跟踪和更新(步骤438),如在由Hughes于2003年4月7日申请的标题为“Method and Systems for Software Development”的未决美国专利申请序列第10/408402号中所述,所述文件通过整体参考而被并入本文。
例如,在一个实施例中,一个实体委托开发软件组件,并在完成所述组件时,将所述组件的版本1发布给实体208。随后,第二实体208请求开发一个执行相同功能的类似组件,然而为了满足第二实体的特定要求,需要对所述组件做出一些修改。修改例如是对组件进行的改进(例如,效率增加,较小的存储器要求)、删除(例如,不需要的步骤或特征)和添加(例如,赠送的特征或功能)。修改的另一个例子是将所述组件整合成另一个组件(例如,更大的组件)。响应对修改组件的请求,一个新版本的组件(例如,版本1.1)被开发并将其发布给第二实体208。在一个实施例中,向第一实体208发送说明一个更新版本的组件是可用的信息。在另外的实施例中,用于开发新版本的组件的成本可在期望接收所述新版本的原始组件(版本1)的接受者以及启动新版本开发的实体之间分担。另外,在一些实施例中,要求开发新版本的实体208被补偿许可/销售所述第二版组件的拷贝。
如上所述,在一些实施例中,开发者404除了提交完整的软件程序之外还提交一个或多个测试案例。测试案例的目的是提供程序相对于其得以运行的样本数据和期望输出,并且可将所述程序的实际输出与所述期望输出进行比较。通过提交多个测试案例,可独立测试许多不同的方案,因此特定的处理错误或疏忽可被识别出来。例如,计算用于贷款的分期付款表的程序可能需要例如利率、本金数量、支付范围和支付频率的输入数据。每个数据元素都可能需要进行检查,使得空集、零、负数、小数、特殊字符等都被考虑并调用适当的错误检查和信息。另外,应该核实数学运算,并且还应核实极端的输入值,例如长支付周期、每日支付、非常大或非常小的本金数量和极小的利率。在一些版本中,可开发一个测试案例来检查这些案例中的每一个,然而在其它版本中,可有益的为每种错误类型提供单独的测试案例。在某些实施例中,可将多个测试案例随后并入到一个较大的测试程序(例如,脚本、命令解释程序(shell)或其它高级程序)中并且共同或同时运行。
通常,在开发者进行编码时可鼓励他们开发测试案例,使得他们能够考虑他们编码时的边界和错误条件。可有益的使用由一个或多个或者全部其他提交者开发的测试案例来测试每个提交的程序以覆盖尽可能多的错误条件。
参考图5,在一个证实性实施例中,每个开发者404、404’和404”都响应传送的软件设计和/或上面涉及的规范分别对开发域204提交软件程序502、502’和502”。除了提交程序之外,开发者404还提交一个或多个测试案例506、506’和506”。例如,当开发者1404提交程序1502时,她还提交测试案例1A和测试案例1B,统称为506。开发者2404’和开发者3404’也这么做,使得所有这三个开发者404都完成他们的提交之后,开发域204包括一个提交池508,其包括三个提交的程序和六个测试案例。即使可能开发者1404相对于她的程序502运行她所提交的测试案例1A和1B506,还可能出现的情况是分别由开发者2404’和开发者3404”提交的测试案例506’和506”会致力于由开发者1404没有预期的案例或数据。因此,在试图识别每个提交的程序的所有潜在错误过程中可有利的相对于每个提交的程序运行由所有开发者提交的每个测试案例。在一些版本中,可从提交池508中排除提交的测试案例的一个子集,或者不使用它们,因为它们是重复的、不会测试所需的特征或者是不正确的。如果这么做,可将提交池508中的测试案例的一个子集用于测试提交的程序。因为程序被更加严格的测试(即,使用由多个开发者提交的一套测试案例),所以最终得到的程序的质量可能高于仅通过开发选择程序的那些开发者测试的程序的质量。
参照图6,提交池508中的测试案例被应用于提交程序502、502’、502”。在一些情况中,池508中的所有测试案例被应用于每个提交的程序,而在一些版本中只使用提交测试案例的一个子集。在一些实施例中,通过相对于它运行第一测试案例而可从争用排除某些程序,使得随后的测试案例是不需要的。在一些版本中,测试案例对一个程序的每次应用都会导致一个分数604。然后就可将对于测试案例对提交程序的每次应用的分数604列成表并汇总成一个对于那个特定程序的组合的或整体的分数。一些测试案例具有比其他测试案例高或低的权重,使得对于一个特定测试案例的分数可更有效的表示程序的整体质量,或者结果更有意义。在其它情况中,分数可以是二元的,-即通过的测试接收分数“1”,而失败的测试接收分数“0”。在一些实施例中,列表和汇总可在服务器104上自动进行。
在一些实施例中,提交设计和/或开发代码的开发者按照对他们提交项的分数来进行定级。根据提交之前每个开发者的等级、被提交的设计或程序的分配难度等级和产生提交的其他开发者的数量来计算等级。应该理解提交可以是一个设计、程序或其它计算机软件资产,或者在一些情况中为许多不同的资产。根据提交之前的每个开发者的等级和一个恒定标准等级(例如,1200)来对每个开发者计算一个技能等级,和根据它们的变动性(volatility)和标准评分来对每个开发者计算一个偏差。
通过评估开发者的提交项对其他开发者的提交项的期望分数并对每个开发者的期望成绩进行等级评定来计算提交设计或程序的那个开发者的期望成绩。复核者可通过使用任何数量的方法(包括,但不限于上述的那些方法)来给提交项记分。
根据提交软件的分数和来自其他开发者的提交项的分数(例如,是否是相同的程序或者一个或多个具有类似的难度等级的其他程序),对每个开发者进行等级评定,并根据他们对当前提交项的等级和其他开发者的等级来计算实际的成绩。在一些情况中,来其其他开发者的供比较的提交项用于相同的程序。在一些情况中,来自其他开发者的提交项是具有类似难度或范围的提交项。
还可从开发者的数量、每个开发者在提交设计或程序之前的等级、开发者在提交之前的平均等级和在提交之前每个开发者的等级的变动性来计算竞争因数。
那么每个开发者就可使用他们旧的等级、竞争因数和他们的实际分数和期望分数之间的差异来评定他们的成绩。该成绩评定可根据先前从开发者接收的提交项数量进行加权,并且可将其用于计算开发者的新的等级和变动性。在一些情况中,开发者成绩对一个提交项的影响可被包覆(capped)使得任何一个提交项都不会对开发者的等级具有极度重要的影响。在一些情况中,开发者的分数可被最大包覆,使得具有最大可能的等级。通过估计每个开发者对其他开发者的期望成绩并对每个参与者的期望成绩进行等级排序排序来计算每个开发者的期望成绩。可通过服务商400、实体208、复核部门成员或自动使用例如驻留在服务器104上的软件使用任何数量的方法对提交项和参与者进行记分。
在一个实施例中,授予的点数取决于完成提交的难度。服务器还可根据与服务器提供设计的时间相比的服务器接收开发者的提交项的时间来调节授予开发者的点值。在一个实施例中,授予一个开发者的总点数如等式1所示授予的总点数=MP*(((.7*TT2))/(10*PT2+TT2)) 等式1
在等式1中,PT是开发者开发提交项(即,产生计算机代码)所花费的时间,TT是用于对所有提交项进行编码所分配的总时间,MP是对于开发提交项可获得的最大点。在一个实施例中,可获得的最大点数是对于开发者实际上不可获得的服务器的参考系。更加具体的,对于被授予最大点数的开发者来说,开发者应该必须几乎花费零秒来读取设计、开发他们的提交项和将它提交给服务器。例如,如果有一个设计被分配了三小时,并且花费开发者1个小时对该问题进行编码,那么如果代码正确执行,则TT=180、PT=60和将被授予近似63%的总点数MP。
在一个实施例中,如果提交项通过所有测试数据都能正确执行,则开发者接收对于所述提交项的该点数(例如,可获得总数的63%),而如果提交项使用所有测试数据并不能正确执行,则开发者没有接收的点数。在其它实施例中,对于部分正确的提交项给予部分信誉。例如,在一个实施例中,提交项根据测试数据的百分比来接收点数。在另一个实施例中,根据提交项正确执行的测试数据的百分比对接收的点数进行换算。在一些实施例中,例如在竞争或由多个回合构成的比赛中,服务器对于每个回合都跟踪授予每个开发者的点。服务器还可对每个开发者计算运行总数,假定在每个完整的竞争回合中都授予点。可将该运行总数用于排除低分数开发者。
在一个实施例中,在完成一个或多个竞争回合之后,服务器可对开发者分配一个等级。典型的在竞赛或比赛完成时进行等级的分配。例如,竞争可由一个回合构成,或者可由多个回合构成,例如以比赛的形式。因此,在竞争由问题发布、开发、复核和测试步骤的一次反复或者一个以上的回合组成的实施例中,在对每个开发者授予总点数之后,服务器对每个开发者分配一个等级。在竞争包括多个回合(例如,比赛)的一个实施例中,在开发者完成比赛之后,服务器对每个开发者分配一个等级。
所述等级提供了可用于以图表示开发者的技能、知识和能力的量度。如下面更加详细描述的,在一个实施例中服务器使开发者的等级以在竞赛(例如,具有一个或多个回合)期间授予开发者的总点数为基础。所述等级可以是分数、级别或任何其它类型的定级技术。虽然参照计算机代码的开发和提交进行了说明,这种方法也可应用于对软件的开发或硬件设计、数据模型、应用程序、组件和作为使用上述的方法学的结果产生的其它工作产品进行定级。
在一个实施例中,外部实体208致力于接收开发的设计或代码,以及获得开发者的等级,并在一些情况中只接收等级。例如,外部实体208可请求开发者加入开发过程,以便对开发者进行定级,并且可对他们的技能进行客观的评估以用于更大的值的将来的项目,或者确定哪个开发者是更熟练的。另外,请求者可能对开发的设计或代码具有一定的兴趣,并且可能对将开发的智力财产用于其商业或其它方面产生一定的兴趣。
可极有益的使用较高定级的人员、使用上述的过程,作为设计复核过程中的设计复核员和/或代码复核过程中的代码复核员。实行代码复核的一个传统问题是复核人员的能力未被建立。通过技术不熟练的开发者进行的复核可导致不适当的复核。通过使用所述过程仅选择具有充分熟练技能的开发者(如通过所述过程确定的)作为复核人员,所述过程本身会保证其成功。
在一个实施例中,由一个组织内的软件开发团体来采用该软件开发过程。由所述团体执行的开发通过使用该过程来实行。所述团体中的每个开发者具有一个等级,并且开发者进行工作以改进和/或保持他们的等级。具有较高等级的开发者可参与复核(例如,设计复核过程或代码复核过程)。在一个实现过程中,开发者接收额外的利益和/或补偿用于获得较高的等级。类似的,开发者可接收额外的利益和/或补偿用于复核过程中的这种参与。该示例中的请求者是直接负责软件开发的产品或程序经理。
在另一个实现过程中,外部的组织(例如,顾问)可使用上述的系统和方法来对一个开发团体的开发能力进行评估和定级。以这种方式,所述顾问就可依靠他们本身而且依靠与已经加入或正在加入该系统的其他组织进行交往的其他开发者来对开发者进行定级。评估者提供评估服务并如上所述的进行汇报。该方案的一个益处是如果复核者私人不认识开发者,智力财产的评分更不可能发生偏差,并且将任何一个开发者的技能与大量开发者进行比较而可对那个开发者技能等级关于他或她等同的人提供一个更加精确的表述。
参照图7,服务器104可包括多个便于软件规范、设计和程序的传送和开发的模块和子系统。通信服务器704的一个例子是便于在如上所述的网络112上进行HTTP/HTTPS和其它类似网络通信的网页服务器。通信服务器704包括便于在分布的程序员团体212、外部实体208、服务商400和复核部门成员(通常称作“用户”)之间进行通信的工具。通信工具的例子包括,但不局限于,能够在开发者404之间进行实时通信(例如,聊天)的模块、新闻组、在线会议和文档协作工具。服务商400和/或外部实体208还可使用通信服务器704来公布设计或规范以将其发布给分布程序员团体212。
另外,服务器104例如还包括便于软件开发域204和设计和开发过程的软件开发环境702,和支持域204的子系统和模块。例如,服务器104可包括开发公布子系统708、管理子系统712、复核部门子系统7014、测试子系统716、记分子系统720、方法学数据库724和发布子系统728。
在一个实施例中,开发公布子系统708允许系统的用户公布规范、提交设计、公布选择的设计、提交软件程序和测试案例和公布用于发布的选择软件程序。公布子系统708根据其任务来识别用户,和根据个体安全性和访问权限确定那些功能可以被访问、项目当前所处的开发阶段等。例如,如果一个特定的项目正处于设计开发阶段,则公布子系统708可确定发起所述项目的外部实体有权对规范进行读/写访问,并且如果需要能够重新公布一个更新的规范。服务商400可以有权对规范进行读取访问,以及访问归因于他们可以支持的其他外部实体。在一些实施例中,整个分布的程序员团体可能查看当前所有未决的规范,然而公布子系统可将完整读取访问仅限制于满足如上所述的一个或多个技能或定级标准的那些开发者。一旦提交了设计,就可将对提交设计的访问进一步仅限制于复核部门成员,或者在一些情况中限制于所述过程中的其他参与者。
开发公布子系统708还允许服务器104或其他参与者与可能的开发者进行通信以促进开发项目和使参与开发过程的程序员团体发展。在一个实施例中,开发公布子系统708对可能的开发者显示广告。在一个实施例中,广告使用文本、图形、视频和/或声音来说明项目。通信技术的例子包括,但不局限于在服务器网站上公布这些广告、显示关于项目的统计数据(例如,支付给开发者的计划特许权使用费、参与该项目的开发者、每周可用的开发时间)。此外,在一个实施例中,开发公布子系统708接收与开发项目相关的询问。在另外的实施例中,开发公布子系统708对特殊的开发者提出开发机会。开发公布子系统708可例如分析分布团体的每个成员的等级、对先前开发的项目的先前贡献、对先前组件开发项目的贡献质量(例如,基于如上所述的对每个开发者的提交项所给出的分数)和开发者进行参与的当前可用性。
服务器104还包括一个管理子系统712。管理子系统712是使用软件开发环境204跟踪设计和开发项目的过程的模块。管理子系统712还便于系统的新用户进行注册,并根据其对各个项目所具有的角色对用户指定适当的安全性和访问权限。在一些形态中,管理子系统712还可编辑和跟踪软件开发环境204和系统用户的操作统计。例如,为了确定将要授予提交获胜设计的开发者的适当补偿,管理子系统712可复核先前完成的项目并指定一个类似的现金奖赏。类似的,在公布设计或程序的难度等级是非常高的情况下,管理子系统712可复核关于个体程序员的信息以确定历史上关于类似项目执行良好的那些开发者。另外,管理子系统712可用于分析从外部实体提供的规范开发操作程序所需的整体吞吐时间。这可帮助系统用户设置适当的递送日期和与新项目相关的成本。
服务器104还包括复核部门子系统714。复核部门子系统714允许复核部门成员、外部实体、服务商和在某些情况下的分布团体中的开发者对来自其他开发者的提交项进行复核,如上所述。在一个实施例中,通信服务器704、开发公布子系统708、管理子系统712、复核部门子系统714、测试子系统、记分子系统和方法学数据库都驻留在服务器104上。可选择的,软件开发环境204的这些组件可驻留在其它服务器或远程设备上。
服务器104另外还包括一个测试子系统716。测试子系统716允许对提交的程序、应用程序和/或组件进行测试。在一个实施例中,复核部门、服务商400和/或外部实体208使用测试服务器708来复核、评估、筛选和测试提交的设计和软件程序。测试子系统716还可如上所述的相对于一些或全部提交程序执行开发者404开发和提交的测试案例。另外,测试子系统716可对组件或应用程序执行自动的测试,例如用于验证和/或测量存储器使用率、线程使用率、机器统计数据(例如I/O使用率和处理器载荷)。另外,测试子系统716可通过性能、设计和/或功能性来评价组件。测试子系统716可以是用于同时测试多个程序的测试装具模块(harness)。
服务器104还包括一记分子系统720。在一个实施例中,记分子系统720根据测试子系统716的结果对提交项计算分数,并在一些实施例中,对在一个或多个编码竞赛、先前开发提交项或二者中的每个参与者的评分进行定级。在其它实施例中,记分子系统720可根据其对项目的贡献来计算开发者的等级。
服务器104还包括一个方法学数据库724。方法学数据库724存储与结构化开发方法学220相关的数据。在一个实施例中,方法学220可规定从开发项目的一个阶段过渡到下一个所需的特定输入和输出。例如,方法学200可指示为了完成项目的规范阶段并且是设计阶段,必须完成项目的检查表。另外,方法学数据库724可存储能够用于将来项目的模板的样本文档、设计和代码示例,并由此对新项目利用标准化的、可重复的和可预测的处理框架。该标准化减小了与从事新的软件开发项目相关的风险,缩短了新开发项目的整体持续时间和提高了最终产品的质量和可靠性。
服务器104还包括发布子系统728。发布子系统728可跟踪和存储与已经使用域204产生的软件产品(例如,规范、设计、开发的程序)相关的数据。在一个实施例中,发布子系统728包括有关请求产品的实体208、域204的入口点和出口点、有效日期例如请求日期和递交日期、参与产品开发的开发者的姓名和/或昵称的说明性信息。发布子系统728还可包括关于产品的详细功能信息,例如用于开发产品的技术、受支持计算环境以及其它信息。在一些实施例中,可对先前发布的软件产品进行更新和修补,如上所述。在这种情况中,发布子系统728可方便的识别具有较旧版本产品的实体208,随后在可应用的情况下传送和发布更新的版本。在一些情况中,发布子系统728还可用作源代码管理系统,由此允许先前开发的软件产品的各种版本分支成具有共同起源的不同软件产品。
虽然上面说明为独立的子系统和模块,但这只是用于典型的目的,并且这些子系统和模块可选择的结合到一个或多个模块或子系统中。另外,上述的一个或多个子系统也可与其他模块远程设置(例如,在服务器组中的另一个服务器104上执行)。
虽然此处已经参照软件进行了说明并在关于软件组件执行时可使用,但合作开发的产品可以是任何种类的体现知识产权的有形或无形对象。作为非限制示例,所述技术可用于计算机硬件和电子设计,或其它设计,例如架构、建筑或景观设计。可使用所述技术的其它非限制示例包括所有种类的写入文档和内容的开发,例如文档编制和论文或期刊文章(不管是在线的还是纸式的)、调查论文、原稿、多媒体内容、法律文献以及更多。
权利要求
1.一种用于开发软件程序的计算机化方法,所述方法包括将用于软件程序设计的规范传送给第一多个开发者;响应传送的规范,从所述第一多个软件开发者的子集中的每一个接收用于软件程序的设计;推动设计复核过程以对每个接收的设计进行记分;至少部分的基于在设计复核过程中的其分数从接收的设计中选择一个设计;将选择的设计传送给第二多个软件开发者;响应传送的设计从所述第二多个软件开发者的子集中的每一个接收软件程序;推动软件复核过程以对每个接收的程序进行记分;和至少部分的基于在软件复核过程中的其分数从接收的程序中选择一个程序。
2.如权利要求1所述的方法,其中所述软件程序包括从组件、应用程序、模块和程序库的组中选择的一个程序。
3.如权利要求1所述的方法,其中所述第一多个软件开发者中的每一个在一个或多个编码竞争中被定级。
4.如权利要求3所述的方法,其中至少部分的基于具有在一个或多个编码竞争中接收的最低等级来选择所述第一多个开发者。
5.如权利要求1所述的方法,其中至少部分的基于与一项设计或一个程序相关的分数对所述开发者进行定级。
6.如权利要求1所述的方法,还包括使一难度等级与软件程序相关。
7.如权利要求6所述的方法,其中至少部分的基于与设计或程序相关的难度等级对开发者进行定级。
8.如权利要求1所述的方法,其中所述多个软件开发者在地理上是分布式的。
9.如权利要求1所述的方法,其中所述第一多个开发者和第二多个开发者是不同的。
10.如权利要求1所述的方法,其中所述软件程序设计包括要求文档、活动图、案例文档、测试案例、原型和UML文档中的一个或多个。
11.如权利要求1所述的方法,其中使用在线应用程序来传送所述规范。
12.如权利要求11所述的方法,其中所述在线应用程序通过互联网进行通信。
13.如权利要求1所述的方法,还包括对提交选择设计的软件开发者进行奖赏。
14.如权利要求13所述的方法,其中所述奖赏是金钱。
15.如权利要求13所述的方法,其中所述奖赏是增加的技能等级。
16.如权利要求1所述的方法,还包括对提交选择程序的软件开发者进行奖赏。
17.如权利要求16所述的方法,其中所述奖赏是金钱。
18.如权利要求16所述的方法,其中所述奖赏是增加的技能等级。
19.如权利要求1所述的方法,还包括在传送规范之前,从请求开发软件程序的实体接收所述规范的至少一部分。
20.如权利要求1所述的方法,其中通过多个复核人员来执行设计复核过程。
21.如权利要求20所述的方法,其中在一项计算机编程竞争中对所述多个复核人员中的每一个进行定级。
22.如权利要求21所述的方法,其中所述多个复核人员中的每一个的等级高于一预定最小等级。
23.如权利要求20所述的方法,其中所述设计复核过程包括将来自所述多个复核人员中的每一个的分数汇总成一个总冯并基于所述总分来选择一个设计。
24.如权利要求1所述的方法,其中通过多个复核人员来执行软件复核过程。
25.如权利要求24所述的方法,其中在一项计算机编程竞争中对所述多个复核人员中的每一个进行定级。
26.如权利要求25所述的方法,其中所述多个复核人员中的每一个的等级高于一预定最小等级。
27.如权利要求23所述的方法,其中所述软件复核过程包括将来自所述多个复核人员中的每一个的分数汇总成一个总分并基于所述总分来选择一个程序。
28.如权利要求1所述的方法,其中所述推动的设计复核包括读取设计文档、完成复核表格、和标识要由提交所述设计的软件开发者并入到所述设计中的改变中的一项或多项。
29.如权利要求28所述的方法,其中所述复核表格是在线表格。
30.如权利要求28所述的方法,其中所标识的改变按照复核人员的判断力被指定为强制性的或选择性的。
31.如权利要求1所述的方法,其中所接收的程序包括源代码、目标代码和编译代码中的一项或多项。
32.如权利要求1所述的方法,还包括发布所选择的程序。
33.如权利要求32所述的方法,还包括为发布的软件程序提供支持。
34.如权利要求1所述的方法,其中还包括从对分配给他们的设计的分数进行争辩的软件开发者接收申诉。
35.如权利要求1所述的方法,其中还包括从对分配给他们的程序的分数进行争辩的软件开发者接收申诉。
36.一种分布式软件开发方法,包括对分布式软件开发团体提供软件开发系统,所述系统包括使用结构化开发方法学推动软件程序开发和测试的软件开发软件;使用用于将软件开发软件发送给分布式软件开发团体的软件进行通信的通信服务器;复核部门,包括一个或多个能够确定所述分布式软件开发团体所开发的软件的质量的程序员;从一个实体接收产生一个软件程序的请求;和通过所述软件开发团体的至少一个子集使用所述软件开发系统推动开发所述软件程序。
37.如权利要求36所述的方法,其中所述软件程序是从组件、应用程序、模块和程序库的组中选择的程序。
38.如权利要求36所述的方法,其中基于软件开发者参与一个或多个编码竞争来对他们进行定级。
39.如权利要求36所述的方法,其中所述软件开发系统在地理上是分布式的。
40.如权利要求39所述的方法,其中所述地理分布通过互联网来管理。
41.如权利要求36所述的方法,其中所述软件开发系统被执行为java小应用程序。
42.如权利要求36所述的方法,其中所述复核部门由在编码竞争中被定级的程序员构成。
43.如权利要求36所述的方法,其中由复核部门至少部分通过对设计文档、源代码、目标代码、编译代码、类定义和方法的复核来确定软件的质量。
44.如权利要求36所述的方法,其中所述结构化开发方法学包括多个阶段。
45.如权利要求44所述的方法,其中所述多个阶段包括规范阶段、设计阶段、开发阶段、测试阶段和支持阶段中的一个或多个。
46.如权利要求36所述的方法,其中所述开发环境促使下列中的一项或多项执行UML模型的开发、案例模型的开发、计算机代码的开发、计算机代码的编译和计算机代码的测试。
47.如权利要求36所述的方法,还包括从所述软件开发团体的子集接收开发的软件程序。
48.如权利要求47所述的方法,还包括基于软件程序的质量选择将要递送给所述实体的接收程序中的一个或多个。
49.如权利要求48所述的方法,还包括对提交一个或多个选择软件程序的开发者进行奖赏。
50.如权利要求49所述的方法,其中所述奖赏是金钱。
51.如权利要求49所述的方法,其中所述奖赏是增加的技能等级。
52.一种评估软件程序的计算机化方法,包括步骤将用于开发软件程序的请求传送给一组软件开发者;响应传送的请求,从所述软件开发者组的子集中的每一个接收一个候选软件程序和用于测试所接收的候选软件程序的一个或多个测试案例;使用从所述软件开发者组的子集中的两个或多个接收的测试案例对每个接收的软件程序进行测试;和至少部分的基于测试步骤的结果对接收的候选软件程序进行记分。
53.如权利要求52所述的方法,其中软件开发者在地理上是分布式的。
54.如权利要求52所述的方法,其中在一项编码竞争中对软件开发者进行定级。
55.如权利要求52所述的方法,其中所接收的候选软件程序包括源代码、目标代码、编译代码、类定义、方法、应用程序和组件中的一个或多个。
56.如权利要求52所述的方法,其中所提交的测试案例包括将用于候选软件程序的输入的样本数据。
57.一种用于评估软件程序的功能性的计算机化系统,包括通信服务器,用于将开发软件程序的请求传送给一组软件开发者,并响应传送的请求,从所述软件开发者组的子集中的每一个接收一个候选软件程序和用于测试所接收的候选软件程序的一个或多个测试案例;测试服务器,用于使用从所述软件开发组的子集中的两个或多个接收的测试案例对每个接收的软件程序进行测试;和与测试服务器通信的记分服务器,用于至少部分的基于从测试服务器接收的测试结果对接收的候选软件程序进行记分。
58.如权利要求57所述的系统,其中软件开发者在地理上是分布式的。
59.如权利要求57所述的系统,其中在一项或多项编码竞争中对软件开发者进行定级。
60.如权利要求57所述的系统,其中所接收的候选软件程序包括源代码、目标代码、编译代码、类定义、方法、应用程序和组件中的一个或多个。
61.如权利要求57所述的系统,其中所提交的测试案例包括将用于候选软件程序的输入的样本数据。
全文摘要
本发明涉及用于开发软件的方法和系统。在一个实施例中,一种用于开发软件的方法包括将用于软件程序设计的规范传送给第一多个开发者;响应于规范,从所述开发者的一个子集接收设计;推动设计复核过程以对设计进行记分;基于其分数选择一个设计;将选择的设计传送给第二多个软件开发者;响应所述设计,从所述第二多个软件开发者的子集接收软件程序;推动软件复核过程以对所述程序进行记分;和基于其分数选择一个程序。在另一个实施例中,一种用于分布式软件开发的方法包括对一分布式开发团体提供一软件开发系统,所述系统包括使用结构化开发方法学的软件开发软件;通信服务器,和复核部门,用于确定所提交的软件的质量;接收产生一个软件程序的请求;和通过所述分布的开发团体的子集使用所述软件开发系统推动开发所述程序。
文档编号G06Q10/00GK101091173SQ200580008184
公开日2007年12月19日 申请日期2005年1月14日 优先权日2004年1月15日
发明者J·M·休斯 申请人:托普科德公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1