用于对软件开发服务征求建议的系统以及方法 【相关申请的交叉引用】
本申请要求了于2002年4月8日申请的美国临时专利申请序号为60/370,937的申请的优先权。
【技术领域】
本发明涉及用于开发以及分送软件的基于计算机的方法以及系统,更具体来讲,涉及简化软件的分布式开发的方法以及系统。
背景信息
在美国以及其他地方中,计算机已经变成人们日常生活的一部分,这包括在工作方面以及个人努力方面。这是因为通用计算机可以被编程来运行各种软件程序,每种软件程序均提供不同的处理以及连网功能。计算机程序设计员开发计算机代码。一些公司雇用大量的计算机程序设计员基于公司的利益来开发代码。
一个方法是雇用大量的程序员并且“在内部”开发软件。虽然这样提供了对程序设计人员团队的重要控制,但是寻找、雇用以及维护这个团队的花费上是相当高的。此外,当个体程序员离开公司时,还可能丢失大部分技术以及工业知识。作为选择,许多公司把他们的编程工作“转移”给咨询公司或者合同雇员。这种方法减轻了公司管理个体雇员的负担,然而工作的质量经常受到质疑,并且集成来自于很多外部供应商的工作的难题十分明显。
【发明内容】
需要一种方式来进行组织以便获得高质量地软件,而不需要维护较大的、永久的软件开发组织。已经提出的用于改善软件开发的技术是代码重新使用以及基于组件的设计。但是即使组织采用这种技术,他们仍需要依照可承受的方式获得高质量组件。
总体上,本发明涉及激励分布式软件开发人员小组,他们彼此互不相关,以便参与高质量软件的分布式开发。通常,开发人员的激励可通过财政以及竞赛奖励来产生。所述开发人员的独立性允许强制执行严格的设计以及质量分析,这也将产生很高质量(例如企业质量)的软件。
在一个方面中,产品管理者将软件程序的规范传达给开发人员小组,所述开发人员可以是软件体系结构设计师、设计者、编码员等等。产品管理者响应传达的规范接收一个或多个提交内容。每个提交内容至少部分基于所述提交内容满足传达的规范的程度来被评分。响应于所述得分,选择其中一个提交内容,用于包括在软件存储库中以便分送至公众。可以将酬劳分配给提交了所述存储库中包括的设计或者代码的开发人员。应该理解的是,所述软件程序可以是任何种类的程序,例如包括但不限于:组件、类、库、应用或者上述内容的一个或多个的某些组合或者集合。
各种实施例可以包括一个或多个以下特征。分配给开发人员的评级可以由在一个或多个编码竞赛中开发人员的成绩而来,其中所述竞赛也可以保持联机。分配给开发人员的评级可以由开发人员在前提交的软件程序设计而来。分配给开发人员的评级可以由开发人员在前提交的软件程序而来。发送给所述开发人员的规范可以用于设计软件程序。发送给所述开发人员的规范可以用于开发软件程序。所述软件程序可以是软件组件。所述软件程序可以是软件应用、一个或多个软件组件的组合或者软件模块之一。为开发人员得出的评级可用于确定应该接收规范的程序员子集。开发人员评级的存在可以确定是否将所述开发人员包括在应该接收规范的程序员子集中。所述开发人员可以提交软件程序的设计。所述开发人员可以提交软件程序的计算机代码。所述开发人员可以是软件设计师。所述开发人员可以是软件程序员。提交内容的得分可以基于由不同于提交该提交内容的开发人员的开发人员评审的提交内容来推导。可以基于接收的最小得分来选择所述提交内容以便包括到所述软件存储库中。所述软件存储库中包括的提交内容可以被保证在不同于用于原始提交内容的计算环境的计算环境中操作。
总的来说,本发明的另一个方面涉及补偿进行设计或者开发软件程序的开发人员。一种方法包括征求多个开发人员对软件程序的提交内容,响应所述征求接收至少一个软件程序,为所接收到的响应评分,基于所述得分选择软件程序以便分送至公众,分送所述程序至公众,并且分配一部分通过分送程序获得的收益给开发人员,其中所述开发人员提交了所选的程序设计或者代码。
实施例可以包括一个或多个以下特征。在征求开发人员之前,给所述开发人员评级。开发人员可以基于他们在联机编码竞赛中的成绩来评级。所述开发人员可以基于他们对软件程序设计的在前提交内容来评级。所述开发人员可以基于他们在前提交的软件程序来评级。所述软件程序可以是软件组件。所述软件程序可以是软件应用、软件组件的组合或者软件模块。相反,或者例外,可以至少部分基于他们的评级或者依照其具有的评级来征求程序员。来自于程序分送的收入的分配可以至少部分基于开发人员的评级来进行。来自于程序分送的收入分配可以至少部分基于开发人员开发软件程序所花费的小时数目和/或基于开发人员参加的工作比例来进行。来自于程序分送的收入分配可以至少部分基于软件程序被分送的次数和/或人员来进行。
在又一个方面中,本发明涉及用于实现上述方法的系统。例如,用于简化软件程序分布式开发的系统包括评级引擎,用于对软件开发人员的技能进行评级;以及服务器,用于向已经预先由评级引擎评级的开发人员传达软件规范。所述系统还包括服务器,用于当开发人员提交软件程序时接收它们,以及用于为提交的软件程序评分的模块。
在本发明此方面的一个实施例中,所述系统还可以包括评审模块,用于允许开发人员评审由其他开发人员提交的提交内容和/或由评审委员会产生的评分卡。所述系统还可以包括存储库,用于存储所述软件程序以及所有相关联的设计文档。所述存储库可以包括联机陈列室,用于显示所述程序,并且还可以包括使用提交的软件程序构造的样品应用。所述存储库还可以包括用于向公众演示软件程序功能的模块。
在本发明的另一个实施例中,所述系统还可以包括计算模块,用于在已经预先提交了软件程序的程序员当中分配收益。所述收入分配可至少部分基于程序员的评级。收入分配可以至少部分基于程序员设计或者开发软件程序所花费的小时数目。所述收入分配例如可以至少部分基于软件程序被分送的次数和/或人员来进行。
根据以下附图、详细说明以及权利要求书,本发明的其他方面以及优点将变得更明显,所有这些内容仅仅是通过举例来说明本发明的原理。
附图简述
在所述附图中,遍及不同的视图,相同的参考标记通常涉及相同的部分。此外,所述附图不必是按比例缩放的,而是当举例说明本发明的原理时,通常将重点突出。
图1是依照本发明的具有服务器的分布式软件开发系统的实施例框图。
图2是依照本发明的分布式软件开发小组的一个实施例的框图。
图3是依照本发明的分布式软件开发小组的第二实施例的框图。
图4是依照本发明的当开发软件程序时由有效的软件开发小组执行的步骤的实施例流程图。
图5依照本发明由有效的软件开发小组的成员执行的步骤的实施例的流程图。
图6由软件设计的有效成员执行的图5步骤的实施例的更加详细的流程图。
图7由软件程序设计小组的有效成员执行的图5步骤的实施例的更加详细的流程图。
图8是依照本发明用于简化软件程序的开发和/或区别的图1服务器的实施例的更加详细的框图。
图9是依照本发明用于简化规范的传递和以及提交内容的接收和评分的图1服务器的实施例的更详细框图。
图10是依照本发明的软件目录的实施例框图。
图11是依照本发明的与第一公司以及第二公司通信的软件目录系统的实施例的框图。
图12是依照本发明的举例说明修改软件组件的软件目录系统的实施例的框图。
图13是依照本发明的补偿数据结构的实施例框图。
图14是依照本发明举例说明用于分布式软件开发小组的基于酬劳的补偿结构的实施例的表。
图15是依照本发明举例说明用于分布式软件开发小组的基于酬劳的补偿结构的另一个实施例的表。
图16是依照本发明举例说明由服务器支持的滑动比例酬劳补偿结构的实施例的线性图表。
详细说明
参照图1,在一个实施例中,分布式软件开发系统101包括至少一个服务器104,以及至少一个客户端108,108’,108”,通称为108。如图所示,所述分布式软件开发系统101包括三个客户端108,108’,108”,但是这只是为了举例说明的目的,并且其意指可以存在任何数量的客户端108。所述客户端108最好作为在个人计算机(例如具有INTEL处理器或者APPLE MACINTOSH的PC)上运行的软件来实现,所述个人计算机能够运行这种操作系统,诸如来自于Redmond,Washington的微软公司MICROSOFT WINDOWS系列的操作系统,来自于California,Cupertino的Apple Computer的MACINTOSH操作系统,以及各种的UNIX操作系统,诸如来自于SUN MICROSYSTEMS的SUN SOLARIS以及来自于NorthCarolina(以及其他),Durham的RED HAT公司的GNU/Linux。所述客户端108还可以在这种硬件上实现,所述硬件诸如智能或无智能终端、网络计算机、无线电设备、信息设备、工作站、小型计算机、大型计算机或者其他计算装置,将其作为通用计算机或者专用硬件装置来操作,以便在分布式软件开发系统101中充当客户端108来单独使用。
通常,在一些实施例中,客户端108可以由软件开发人员来操作,并且可以由参与软件开发的软件开发人员使用。客户端108还可以由所述软件开发人员开发的软件的客户来操作。在各种实施例中,客户端计算机108包括浏览器116、客户端软件120或者两个都包括。所述浏览器116允许客户端108依照网页请求来请求网页(例如从所述服务器104)。网页的例子是包括计算机可执行的或者可翻译的信息、图形、音响、文本和/或视频的数据文件,其可以被显示、执行、播放、处理、流送和/或存储,并且可以包含到其他网页的链路或者指针。在一个实施例中,客户端108的用户从所述服务器104人工地请求网页。作为选择,客户端108自动地利用所述浏览器116进行请求。可以商业可得的浏览器软件116的例子是由Washington,Redmond的微软公司提供的INTERNET EXPLORER,以及由California,Mountain View的NetscapeCommunications公司提供的NETSCAPE NAVIGATOR。
在一些实施例中,所述客户端108还包括客户端软件120。所述客户端软件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)、无线链路等等。优选的是,所述网络112可以支持TCP/IP协议通信,以及由浏览器116进行的HTTP/HTTPS请求,并且客户端软件120和服务器104之间的连接可以经由这种TCP/IP网络进行通信。然而,所述网络的类型不是限制性的,任何适当的网络都可以使用。可以充当通信网络112的网络的典型实例包括无线或者有线的基于以太网的内联网、局域或者广域网(LAN或者WAN),和/或通称为互联网的全球通信网,这些网络可以适应许多不同的通信介质和协议。
服务器104与客户端108交互。所述服务器104最好在一个或多个服务器类计算机上实现,所述计算机具有足够的存储器、数据存储器和处理能力,并且可以运行服务器类操作系统(例如SUN Solaris、GNU/Linux、MICROSOFT WINDOWS NT)。根据装置的容量和用户数目以及用户的规模,还可以使用不同于此处描述的其他类型的系统硬件和软件。例如,所述服务器104可以属于服务器场或者服务器网络的一部分,其是一个或多个服务器的逻辑组。作为另一个例子,可以存在多个服务器104,其可以彼此关联或者彼此连接,或者多个服务器可以独立地操作,但是共享数据。在进一步的实施例中,并且作为具有代表性的大规模系统,应用软件可以依照组件来实现,依照在不同的服务器计算机上、在相同的服务器上运行的不同组件,或者某些组合。
所述服务器104可以包括竞赛服务器,如Lydon等人申请的序号为10/041,393、题为“Systems and Methods for Coding Competitions”的一并待决的美国专利申请中所描述的那样。
在一个实施例中,所述服务器104使有效的开发小组能够进行软件程序的分布式软件开发。所述软件程序可以是任何种类的机器命令,例如包括但不限于组件、类、库、应用、小程序、逻辑表、数据块或者这些内容的任意一个或多个的一个或多个任意组合或集合。在一个实施例中,所述软件程序可以是软件组件。通常,软件组件是可以作为应用的可重用构建单元的功能性软件模块。正如几个例子,软件组件包括但不局限于以下这种组件,诸如图形用户界面、小型利息计算器、数据库管理器的界面、保险统计表计算、DNA检索函数、为了机器制造零件的目的制造数字控制机床的接口、公共/私人密钥加密算法以及用于登录并且与主机应用通信的函数(例如,保险调节以及销售点(POS)产品跟踪)。在一些实施例中,为了需要的服务这些组件相互通信(例如经由通信网络112)。组件的特殊例子是JavaBean,其是依照Java程序设计语言编写的组件。组件还可以依照任何其他语言编写,包括但不限于VisualBasic、C++、Java、以及C#”。
在一个实施例中,所述软件程序可以是应用。在一些实施例中,应用可以由一个或多个软件组件组成。在一个实施例中,所述软件应用由使用如下所述的方法预先开发的软件组件组成。在一些实施例中,所述应用包括完全新的软件程序。在一些实施例中,所述应用包括新的软件程序以及预先开发的软件组件的组合。
参照图2,软件开发小组可用于开发软件组件。在一个实施例中,所述软件开发小组200包括产品管理者202。产品管理者202是组件开发和部署组件的管理者。所述产品管理者202可以执行市场调查以便识别可能对市场有用的组件。例如,所述产品管理者202可以执行对工业的研究,以便确定公司是否找到具有确定特征的有用组件,并且规定这种组件的需求。所述产品管理者202还可以规定(但不限于)诸如项目花费、项目安排以及项目风险的项。在一个实施例中,所述产品管理者202为所述项目创建项目计划,其可以包括估计的项目花费、进度、描述范围的需求文档以及项目风险。
设计师(也称为“设计者”)208设计所述软件组件。设计师208最好是充当一个或多个其他组员204,212,216的指导者并且与他们进行协作的资深开发人员,以便设计组件的体系结构。设计师208还可以创建用于满足由产品管理者202例如在需求文档中、或者通过与产品管理者202的其他通信而提出的组件需求的测试用例。所述设计师208最好以最大化软件组件的潜在重用的方式来设计所述组件。因此所述设计师208可以例如基于但不局限于有效的接口数目、所述组件与其他组件的兼容性以及组件的每个设计的执行速度来设计软件组件。
然后,一个或多个QA开发人员216,216’(通称为216)为所述组件开发测试计划。测试计划可以包括正常以及极限输入以便模拟生产以及压力。在一个实施例中,QA开发人员216使用由产品管理者202编写的需求规范以及由设计师208编写的设计规范来开发测试计划。QA开发人员216试图识别所述规范中的潜在的问题区域,并且朝向一个或多个那些区域来修补QA测试。此外,所述QA开发人员216可以与其他组员通信以便改善或者讨论测试计划。一旦完成,可以由所述设计师208和/或产品管理者202来评审测试计划,以便验证测试计划将充分地测试组件需求。
然后,一个或多个开发人员222,222’(通称为222)开发组件以符合规范描述的需求。在一个实施例中,所述开发人员222向设计师208提交对象模型,诸如依照统一建模语言(UML)的模型。一旦设计师208批准所述对象模型,开发人员222就开发代码以实现组件。所述开发人员使用测试计划来确定实现的代码满足所述需求。当所述开发人员222完成所述代码,设计师208和/或产品管理者202评审所述代码。在一个实施例中,所述设计师208评审所述编码,例如但不局限于确定功能、风格、编码标准的遵守、性能以及稳定性。
一旦所述组件被开发,依照测试计划所述QA开发人员216测试完成的组件,并且验证它是可接受的。
虽然图中所示的软件开发小组200包括一个产品管理者202、一个设计师208、两个QA开发人员216,216’以及两个开发人员222,222’,但是应该理解的是,这只是示例性的目的,并且开发人员222和QA开发人员216的数目将取决于特定的项目。还应该理解的是,软件开发小组200的一个或多个成员可以操作一个或多个客户端108,并且经由通信网络112与服务器104通信,如图1所示。
在一些实施例中,所述软件开发小组200由彼此没有关系的开发人员组成。例如,所述开发人员222未必是已知的(或者如果他们相互认识,那么将非常熟悉)QA开发人员216或者产品管理者202。此特殊的实施例的优势之一是:开发人员更加情愿参与由其他人开发的软件设计或者组件的无偏见同等评审。此外,在一些实施例中,评审过程可以是保持不记名的,以便开发人员不知道他们评审的是谁的工作。开发小组200的评审工作遵守严格的开发过程,并以这样的方式极大地增强最终产品的质量。在一个实施例中,同等评审过程依照驻留在服务器104上的开发环境来实现。在另一个实施例中,例如可是使用其他类型的开发环境,所述同等评审可以使用个体开发人员的计算机来执行。
现在参照图3,在图2实施例的变化中,产品管理者302主持开发小组300,其由分布式开发人员组(此处使用以包括设计者、设计评审者、开发人员、开发评审者等等)组成。例如,所述设计者以及开发人员可以是专致力于合作计算机程序编制和分布式软件开发的组织或者集体的成员。在一个实施例中,所述产品管理者302简化这种开发人员组当中的初始讨论,所述组可以包括潜在的或者实际的开发小组成员300。所述讨论可以是一种协作,用于识别待开发的新的或者要改善的软件组件的需求。在一些实施例中,所述讨论在联机论坛中进行,所述论坛可以由开发集体中的开发人员访问。在一个实施例中,通过从满足其他标准并且参与这种讨论的那些人中选择用于构建/设计304和开发310委员会的参与方,以此来鼓励参与这种论坛。
开发人员312可以请求加入开发小组300,所述产品管理者302可以要求开发人员312加入开发小组300,或者它们的某些组合。在一些实施例中,产品管理者302通过向提供了质量提交内容的开发人员312提供现金补偿或者奖品,来创建对参与所述开发小组的开发人员312的激励。在一些实施例中,所述产品管理者302通过鼓励开发人员312之间的竞赛来向参与的开发人员312创建激励。例如,在一些实施例中,所述开发人员312通过参与确定的开发小组来接受增加的评级。
所述开发小组300包括体系结构评审委员会304。所述体系结构评审委员会304包括一个或多个开发人员312,用于评审来自于软件设计师328的设计提交内容。所述体系结构评审委员会最好具有少量(例如小于十个)的成员,例如三个成员,但是也可以是任意的数量。通常,所述评审委员会只为一个或者少数相关项目形成。在一些实施例中,评审委员会可以形成更长的时间,但是在工作人员的变化也是可能可以帮助保持质量的。
优选的是,通过所述产品管理者302、体系结构评审委员会304、或别的方式将体系结构评审委员会成员之一选择为主要评审委员会成员308。如果委员会304被设立了更长时间,那么通常来说,为每个组件或者组件的相关组分配主要评审委员会成员308,但是主要评审委员会成员308也可以对该委员会304评审的所有组件是同一个,这取决于成员的有效性和技能。所述主要评审委员会成员308负责协调和管理委员会304的活动。
在一个实施例中,通过所述产品管理者302请求满足特定规范的组件设计提交内容,并且通过所述体系结构评审委员会304判断设计者328给出的设计提交内容。所述主要评审委员会成员308在体系结构评审委员会304的其他成员评审他们以前,筛选所述设计提交内容,以便允许其余的评审委员会只判断最佳提交内容。在一些实施例中,所述筛选过程包括基于它们满足规范中略述的需求的程度来为所述提交内容评分。在一些实施例中,使用评分卡文档化得分,其可以是文件、电子数据表、联机表格、数据库或者其他电子文件。
在一个实施例中,所述主要评审委员会成员308通知体系结构评审委员会304一个或多个提交内容已经通过了筛选过程,并且所述体系结构评审委员会304评审所述设计提交内容。在一些实施例中,所述体系结构评审委员会304基于规范中文档化的需求来评审提交内容。在一些实施例中,所述体系结构评审委员会304为所述提交内容评分。在一些实施例中,使用评分卡文档化得分,其可以是文件、电子数据表、联机表格、数据库或者其他电子文件。
在一些实施例中,来自于所述主要评审委员会成员308以及体系结构评审委员会304的其他成员的得分和评审被合并为最终评审和得分。在一些实施例中,所述合并可以包括编译一个或多个文档中包含的信息。这种合并可以通过主要评审委员会成员308、体系结构评审委员会304的其他成员来执行,或者在一个示范性的实施例中,使用驻留在服务器104(图1)上的基于计算机的系统来执行所述合并。在一些实施例中,所述产品管理者302解决体系结构评审委员会304之间的差异或者异议。
在一个实施例中,将具有最高组合得分的设计选为将用于实现的成功设计。将奖金和/或认可给予所述设计者。在一个实施例中,对设计者的一部分支付被扣留,直到开发评审结束。例如,所述设计者可以在设计评审结束收到75%的支付,并且在开发评审之后被支付25%。还可以对其他人提交的设计进行奖励和/或认可。
在一些实施例中,除评审所述提交内容以外,体系结构评审委员会304还可以识别对规范的有用修改或者应该包括到所述设计中的设计。所述主要评审委员会成员308文档化附加需求,并且将此信息传达给提交设计的设计者328。在一个实施例中,所述主要评审委员会成员308合并来自于评审委员会304的评论。设计者328可以更新所述设计并且重新提交它以供所述体系结构评审委员会304评审。此过程可以重复,直到主要评审委员会成员308相信所述设计已经满足所有必要的需求。
一旦所述体系结构评审委员会304确认设计已经足以阐明规范的需求,所述主要评审委员会成员308就通知产品管理者302这种设计已经通过了设计评审过程。所述产品管理者302因此能使用所述设计来征求对满足规范的设计的软件组件的提交内容。例如,所述产品管理者302可以对网络站点或者邮件名单的实现进行有效的设计。所述产品管理者302依照所述设计请求实现的组件。
所述开发小组300还包括开发评审委员会310,其类似于所述体系结构评审委员会304。所述开发评审委员会可以在完成并且选择所述设计时马上形成,或者可以在不同的时间选出,例如在形成体系结构评审委员会304的时候。开发评审委员会310的成员资格可以与设计评审委员会304的相同,或者与其相重叠,不过根据质量维护观点来看,这未必是合乎需要的。在一些实施例中,不选择所述开发评审委员会310,直到接收到对开发项目的提交内容。
所述开发评审委员会310包括一个或多个开发人员312,用于评审来自于软件程序员322的开发提交内容。所述开发评审委员会310最好具有少量(例如小于十个)的成员,例如三个成员,但是也可以是任意的数量。通常,所述开发评审委员会310只为一个或者少数相关项目而形成。在一些实施例中,评审委员会可以被形成更长时间,但是在工作人员方面的变化(以及评审委员会的继续竞赛)可以帮助维持质量。
优选的是,通过所述产品管理者302、开发评审委员会310、或其他方式将开发评审委员会310成员之一选择为主要开发评审委员会成员316。如果委员会310被设立了更长时间,那么通常来说,将开发委员会成员310被指派为主要开发评审委员会成员316,并且为每个组件或者组件的相关组指派开发委员会成员310,但是所述主要开发评审委员会成员316也可以对于该委员会310评审的所有组件相同,这取决于成员的有效性和技能。所述主要开发评审委员会成员316负责协调和管理委员会310的活动。
在一个实施例中,所述主要开发评审委员会成员316在由开发评审委员会310的其他成员评审提交内容以前筛选提交的组件。在一些实施例中,所述筛选过程包括基于它们满足设计规范中略述的需求的程度来为所述提交内容评分。在一些实施例中,使用评分卡文档化所述得分。所述评分卡可以是一文件、电子数据表、联机表格、数据库或者其他电子文件。
在一个实施例中,所述主要开发评审委员会成员316通知其他开发评审委员会成员310一个或多个提交内容已经通过了所述筛选过程。在一个实施例中,开发评审委员会310的成员评审提交的组件。在一些实施例中,所述主要开发评审委员会成员316基于在如上所述的设计文件中文档化的详细需要来评审所述提交内容。在一些实施例中,所述开发评审委员会310为所述提交内容评分。在一些实施例中,使用评分卡文档化所。所述评分卡可以是一文件、电子数据表、联机表格、数据库或者其他电子文件。
在一些实施例中,所述得分可以基于所述组件在一个或更多测试例中的执行情况。在一些实施例中,测试例可以包括用于确定当组件具有有效输入数据时接收的结果的准确性的测试。在一些实施例中,测试例可以包括用于确定当装备有无效输入数据时所述组件是否表现正确的测试。在一些实施例中,测试例可以包括用于确定所述组件如何响应大量输入数据的测试。
在一些实施例中,来自于所述主要开发评审委员会成员316以及所述开发评审委员会310的得分和评审被合并为最终评审。在一些实施例中,所述合并可以包括编译一个或多个文档中包含的信息。在一个实施例中,所述产品管理者302合并所述信息。在一些实施例中,所述主要开发评审委员会成员316合并所述信息。在一个示范性的实施例中,所述合并使用计算机程序来执行,其也可以驻留在服务器104上。在一些实施例中,所述产品管理者302解决开发评审委员会成员310之间的差异或者异议。
一旦所述开发评审委员会310确认实现的组件满足所述规范的需求,并且具有足够的质量,那么主要开发评审委员会成员316通知所述产品管理者302所述组件已经完成开发评审过程。在一个实施例中,将具有最高组合得分的实现方式选为将使用的成功组件。将奖金和/或其它认可给予所述程序员。还可以对亚军进行奖励和/或认可。成功组件因此能被归入软件存储库,以便由其他程序员访问和使用。如下文将进一步讨论的,在设计和实现所述组件过程中的参与方可以作为使用开发组件的收益的百分比来支付与他们的贡献相当的量。
在一些实施例中,开发评审委员会310的成员可以识别对组件中应该包括的实现方式的修改。所述主要开发评审委员会成员316文档化所述附加需求,以便程序员322可以更新和重新提交。此过程可以重复直到所述主要开发评审委员会成员316相信所述组件被完成。
还参照图4,在一个实施例中,所述产品管理者302确定开发项目的范围(步骤408),如上所述。所述项目经理302(可能与设计师308配合)生成组件、多个组件、或者将开发的应用、以及开发时间安排和预算的规范(步骤412)。
在一个实施例中,所述产品管理者302主持合作论坛以便确定潜在的开发项目的范围。在一些实施例中,所述信息可以是对新的软件组件的思想,并且在一些实施例中,所述信息可以是对现存的软件组件的附加需求。在一些实施例中,所述信息可以是对由预先开发的软件组件组合组成的软件应用的思想。所述合作论坛可以包括开发人员、顾客、预期的顾客、或者对开发软件组件感兴趣的其他人。在一个实施例中,所述合作论坛是一种联机论坛,其中参与方可以发送思想、询问、建议或者其他信息。在一些实施例中,只有论坛成员的子集可以向论坛发送建议。一旦所述产品管理者302确定收集了所述软件组件的必要需求,所述产品管理者302就可以创建组件的需求规范。所述产品管理者302在那个时候可以选择性地终止所述合作论坛。
在一个实施例中,所述规范定义了商业计划、稳定的硬件和/或软件平台、或者其他体系结构约束。例如,所述规范可以定义网络装置、服务器以及通用的基础结构,以便支持项目和产品的开发和生产。所述规范还可以识别组件必须依照其进行编制的语言,软件组件的功能概述、边界约束、效率需求、计算机平台需求、接口要求、性能标准、测试例需求和/或组件的文件需求。在一些实施例中,所述规范可以包括将支付给提交最佳设计的设计者的适量货币。
一旦完成所述规范,所述产品管理者302向其他组员传达所述规范(步骤416)。此传达可以经由通信网络112(图1)进行,诸如经由电子邮件消息来执行,在浏览器116可访问的网页上经由新闻组、传真或者其他通信方式来发送。所述产品管理者302可以与设计师208和/或任何其他组员212,216通信,以便获得对所述规范的评价和/或建议。在一个实施例中,所述产品管理者302向开发评审委员会310的一个或多个成员传达所述规范。在一个实施例中,所述开发评审委员会310依照如上所述的方法选择所述主要开发评审委员会成员316。所述开发评审委员会还可以评审(并且在一些实施例中选择)主要开发评审委员会成员316的工作。所述主要开发评审委员会成员316然后开发对组件的测试计划(步骤420),如上所述。所述程序员322然后开发用于满足由所述规范描述的所有需求的组件(步骤424)。一旦开发了所述组件,主要开发评审委员会成员316就测试完成的组件(步骤428)。如果所述软件组件通过主要开发评审委员会成员316的测试(并且在一些实施例中是主要设计师评审委员会成员308和/或产品管理者302),那么将所述组件添加到组件目录(步骤432)。
在一个实施例中,所述产品管理者302可以证明组件可以在多个计算环境中操作(步骤436),其中所述计算环境可以包括硬件平台、操作系统、应用服务器、连网协议、数据库管理系统等等的变化或者组合。例如,让开发的软件组件在运行WINDOWS 2000 Server的基于Intel的PC上操作、并且证明SQLServer数据库可以在具有Oracle数据库的SUN Solaris服务器上操作,这是十分有益的。所述证明可以由作为证明库一部分的评级开发成员来进行。所述证明库能访问服务器104,以便在多个平台组合上测试组件。在一些实施例中,所述证明库包括被选择以便证明组件的开发人员,并且对于每个完成了的证明将给予他们额定金额的补偿。所选择的开发人员可以是用于开发的开发人员或者其他开发人员。
在一个实施例中,所述主要体系结构评审委员会成员308测试组件的功能,并且评审由所述开发小组200产生的可交付的内容,诸如源代码以及文档。此外,如果所述组件足以通过设计师的测试,那么所述主要体系结构评审委员会成员308可以向产品管理者302传达最后审批。所述产品管理者302还可以在批准它们进入组件目录以前独自验证可交付的内容。在一些实施例中,所述组件可以由不同于提交组件的开发人员的开发人员来评审。
此外,在一些实施例中,所述组件基于组件在各种测试中执行的好坏来进行评分,其中所述各种测试是开发小组300应用于所述组件的。例如,所述产品管理者302可以使用服务器104(图1)来使组件经历一个或多个将开发小组300每个成员的贡献作为目标的测试,。使用此目标测试的结果,所述产品管理者302(例如使用服务器104)可以获得每个组员的组件开发得分,其因此能用来确定这种组员是否将用于后续组件开发项目。组员的评级是这样一种过程,其包括但是不局限于组件的性能、按期递送、任务完成以及可交付的有效性。
然后所述开发小组300可以确定如果所述组件的评分未曾达到上面预定的分值,那么不将所述组件添加到组件目录。在一个实施例中,如果不添加所述组件,那么开发小组300的成员(例如开发人员322)在组件上所作的工作而得到补偿不会象组件获得较高得分那样高。补偿例如可以是以下形式:现金补偿、假期、有形对象、无形的对象或者其任意的组合。
参照图5,开发人员依照他们在编码竞赛中的成绩、他们在设计、测试或者编码组件中的成绩、以及其它可能的因素,有选择性地被评级(步骤508)。所述产品管理者302向开发人员传达规范(步骤512)。在一些实施例中,所述产品管理者302只向具有评级的开发人员传达所述规范,或者向评级值超过预定最小值的开发人员传达。
开发人员响应所述规范创建设计或者组件,并且提交那些设计或者组件给产品管理者302、主要体系结构评审委员会成员308或者主要开发评审委员会成员316以供评审(步骤516)。
每个提交内容因此能基于质量标准被评分,所述质量标准例如但不局限于功能、风格、编码标准的遵守、性能以及稳定性(步骤520)。一旦评估了每个提交内容,就将一个提交内容选为成功提交内容(步骤524)。然后所述产品管理者302使用如下所述的任何方法分配一部分收入给创作成功提交内容的开发人员(步骤528)。
参照图6,在一个特殊的实施例中,产品管理者302进行市场调查(步骤602)以便确定对特定软件组件的需要。基于研究结果,所述产品管理者302规定软件组件的设计要求(步骤604)。
所述产品管理者302识别(其可以包括选择)体系结构评审委员会304的成员(步骤606),并且向体系结构评审委员会304提供所述规范(步骤608)。在一个实施例中,所述产品管理者302将所述规范置于网络服务器上,以便可以由体系结构评审委员会304访问。
所述体系结构评审委员会304可以是早已确定的,作为持久体系结构评审委员会304,或者所述体系结构评审委员会304成员可以被识别为此特定组件的体系结构评审委员会304成员。在一个实施例中,所述体系结构评审委员会304成员由产品管理者302通过他们的专业技术、他们的评级以及他们参与此能力所表示的意愿的一个或多个来选择。在一个实施例中,所述体系结构评审委员会304成员因为他们在评审委员会304中的参与而获得补偿。
在一个实施例中,所述体系结构评审委员会304对公众成员开放。在另一个实施例中,所述体系结构评审委员会304限于已经参与至少一个设计或者编码竞赛,并且基于他们的竞赛成绩被选择性地预先鉴定的软件设计师(步骤610)。在另一个实施例中,只有一个或多个竞赛中出色的设计者才有参与体系结构评审委员会304的资格。
例如,一系列竞赛可用于从大量竞赛者中识别出色的开发人员。作为选择,可以要求体系结构评审委员会304成员周期地具有在此过程中选择的组件。一旦所述产品管理者302提供所述体系结构评审委员会成员对所述规范的访问,委员会成员304就评审所述规范以便理解所述设计要求(步骤612)。所述委员会成员304可以请求澄清或者修正规范,并且所述产品管理者302可以响应。以这种方式,所述评审委员会成员304确信他们理解他们将评估的组件的需求。
当所述体系结构评审委员会304已经评审了设计需求规范时,将所述需求提供给设计者。在一些实施例中,在被授权访问所述设计规范之前,软件设计师308,308′以及308”(通称为308)如上所述基于评级、技能或者其他标准被预先鉴定。所述产品管理者302或者体系结构评审委员会304的成员赋予满足预先鉴定要求的设计者对规范的访问权。在一些实施例中,访问可以通过网页(其可以要求对访问的认证)、通过电子邮件或者其他技术来授权。所述设计者308可以评审所述规范(步骤616,616’以及616”)以及开发设计(步骤618,618’以及618”)。当设计者308已经完成了他的或者她的设计时,设计者308向体系结构评审委员会304提交所述设计(步骤620,620’以及620”)。
所述设计可以采用多个形式,这取决于指定的组件。通常,组件的规范将包括设计需求。在一个实施例中,所述设计包括类图,其可以依照统一建模语言(UML),例如使用Poseideon Computer Aided SoftwareEngineering(CASE)工具来开发,所述工具可以从德国的Gentleware AGof Hamburg购买到。所述设计还包括使用用例图以及顺序图。所述设计还包括编写用于描述所述设计的组件设计规范、所要求的算法列表以及用于设计中类的分类存根。所述设计还包括可用于测试程序的功能测试。在这种实施例之一中,所述功能测试是与测试基础结构的JUnit兼容的测试。JUnit是用于测试Java软件的开放式源软件,其可以从www.sourceforge.net中获得。
所述体系结构评审委员会304评审接收到的设计(步骤622)。在一个实施例中,此评审包括由主要评审者进行的第一筛选评审,然后通过评审委员会的其他成员进行进一步评审。第一筛选评审确定包括设计所要求的元素(例如,类、用例以及顺序图、组件规范、所要求的算法、分类存根以及功能测试)。
筛选评审还可以确定完整的呈现了这些元素。例如就类图而言,并且依照特定的类定义,筛选评审可以确定下述内容的一项或所有:(1)所述类定义提供类用途的描述性概述,(2)子程序包以及被创建以便区分功能,(3)类范围匹配类用途,(4)存在程序设计技术的正确并且有效的使用,诸如继承以及抽象,(5)正确地使用接口,(6)为所述组件定义适当的构造函数,以及(7)适当地使用类修饰,诸如最后的、静态的。就变量定义而言,所述筛选评审例如还可以确定:(1)正确定义变量作用域,(2)为效率和灵活性之间的平衡适当地定义类型分配,以及(3)将所有变量定义具有初始值。此外,例如就方法定义而言,所述筛选评审可以确定:(1)正确定义范围,异常被适当地操作并且使用,正确地使用修饰,使用返回值类型,正确地定义方法参数,以及按照需求规范中申明的应用编程接口(API)是有效的。
所述筛选评审例如还可以验证在所述设计中所有公共方法存在的用例图,并且验证每个用例存在的顺序图。就测试例而言,所述筛选评审例如还可以验证提供给每个顺序图的功能测试例,以及验证它们好像是适合于那些图。
在一个实施例中,所述初始筛选将条目的数目减少到评审委员会用于评审的可管理的数目,诸如5个条目。
所述体系结构评审委员会评估所述设计以便确定他们是否符合所述规范(步骤624)。在进行初始筛选的实施例中,评审委员会的成员均执行评审以便评估提交内容。
在一些实施例中,例如基于设计的质量以及它符合规范中说明的需求的好坏,所述体系结构评审委员会304可以计算提交内容的得分。例如,评审委员会成员将确定是否可以进行以下操作并且到何种程度:(1)所述设计解决了在功能说明中详细描述的需求,(2)所述设计有效地使用所有需求的技术(例如,语言、所要求的组件等等),(3)所述设计结合有效的标准设计模式以及方法论,(4)所述设计平衡设计模式的使用以及所期望组件用途的原理,(5)除了最初打算的用途,所述设计解决结合附加功能以及特征。
在一些实施例中,每个体系结构评审委员会成员还严格地评估设计元素的程度。例如,就类图而言,具体来讲,例如就类定义而言,所述体系结构评审委员会成员评估所述类图是否精确地并且彻底地描述了所要求的组件元素。所述委员会成员还评估所述设计是否适当的赋予所期望的组件用途以及吞吐量需求。就变量定义而言,所述委员会成员评估变量类型是否适合于所期望的组件用途,并且确定所使用的变量是否满足最小值和最大值参数。就方法定义而言,所述委员会成员评估以下内容的程度:(1)定义的方法正确陈述在所述需求规范中定义的API需求,(2)所述方法提供对定义变量的访问以及正确封装,以及(3)所述异常定义是预期的异常的详表。所述委员会成员还可以评估(1)是否很好地定义了类关系,(2)用例表是否彻底地描述了类用途,(3)所述顺序图是否彻底地描述了类之间的顺序交互,(4)所述组件规范是否向待实现的此设计提供了足够的信息,是否详细描述了对于所定义的方法应该如何处理非法参数,并且是否详细描述了所定义方法抛出的异常,以及(5)那些测试例是否彻底地并且精确地阐明组件功能。所述委员会成员因此能给每个条目指定总体得分。
例如,所述体系结构评审委员会304成员可以使用图1的服务器104来向其他委员会成员录制和传达他们的组件设计评估。在一个实施例中,所述委员会成员使用在线的评估表格来评估每个组件。所述委员会成员的评估因此能被识别,并且接到由委员会成员评级的组件。
在一个实施例中,所述体系结构评审委员会304成员还可以使用图1的服务器104来使设计经历一个或多个测试,所述一个或多个测试把规范中定义的个体需求作为目标。使用这些目标测试结果,体系结构评审委员会304的成员(例如使用服务器104)可以获得每个提交内容的设计得分。基于提交内容的评估,所述体系结构评审委员会304选择一个设计作为成功提交内容(步骤626)。
在一些情况下,基于由评审者识别的附加思想和问题,需要对设计进行修改,即使所述设计具有很高的得分。在一个实施例中,所述体系结构评审委员会304将所述设计送回给提交了成功设计的设计者308,以及修改建议、对确定修改的明确指示或者其他命令等等。在一些实施例中,所述主要体系结构评审委员会成员进行修改。所述设计者308将所述改变并入设计(步骤628),并且向体系结构评审委员会304重新提交所述设计(步骤630)。然后所述体系结构评审委员会304执行所述设计的最终质量控制评审(步骤632),并且向产品管理者302发送设计。所述产品管理者302因此能基于所述成功设计来使用该设计征求开发软件组件(步骤634),例如参照图7进一步说明的那样。所述产品管理者302还可以支付成功设计者308报酬,所述报酬或者是一般的收费,或者使用如下所述的方法。
参照图7,软件设计一旦是有效的,例如通过使用图6的方法或其他,那么所述设计可用于简化软件组件的开发。
所述产品管理者302识别开发评审委员会310的成员(步骤702)。此可选择性地包括为所述组件在前或者当前选择的开发评审委员会。所述产品管理者302将所述设计提供给开发评审委员会310(步骤704)。在一个实施例中,所述产品管理者302将所述设计置于网络服务器上,以便可以由开发评审委员会访问。
所述开发评审委员会310可以早已作为持久开发评审委员会310被确定,或者所述开发评审委员会310成员可以作为特定组件或者组件组的开发评审委员会成员被识别。在一个实施例中,所述开发评审委员会10成员由产品管理者302根据他们的专业技术、他们的评级以及他们参与此能力所表示的意愿的来选择。在一个实施例中,所述开发评审委员会成员在将所述软件组件提交之后被选择,以便给予所有开发人员提交组件的时机。在一个实施例中,所述开发评审委员会310成员因为他们在评审委员会310中的参与而获得补偿。此补偿可以是认可的形式,一般费用或者按小时的费用,或者是由组件产生的收益的百分比。
在一个实施例中,所述开发评审委员会310对公众成员开放。在另一个实施例中,所述开发评审委员会310限于已经参与至少一个设计或者编码竞赛的软件开发人员,并且基于他们的竞赛成绩被选择性地预先鉴定(步骤710)。在另一个实施例中,只有一个或多个竞赛中出色的开发人员才有参与开发评审委员会310的资格。
例如,一系列竞赛可用于从大量竞赛者中识别出色的开发人员。作为选择,开发评审委员会310成员可以被要求最近已经提交了一个或多个成功组件或者设计。一旦所述产品管理者302授权所述开发评审委员会310对所述规范的访问,委员会成员就评审所述规范以便理解所述开发要求,如上所述(步骤708)。所述开发评审委员会成员310可以请求澄清或者修正规范,并且所述产品管理者302可以响应。以这种方式,所述开发评审委员会310可确信他们将评估的组件的需求。
在一些实施例中,在被授权访问所述设计之前,所述软件开发人员(也称为程序员)314,314’和314”(通称为314)也被预先鉴定(步骤710、710’以及710”),这与如上所述的委员会成员相似(例如评级等等)或者不同。然后所述产品管理者302或者开发评审委员会310的成员授权那些满足预先鉴定要求的开发人员对设计的访问权。在一些实施例中,所述访问可以通过以下方式被授权,所述方式为:开发人员314输入密码,开发人员314操纵用于检验开发人员资格的特定网页,产品管理者302将所述规范利用电子邮件发送给开发人员314,或者其他类似手段。 一旦授权对规范进行访问,所述开发人员314因此能评审所述规范(步骤712,712’以及712”),并且开始开发与发送的设计一致的软件组件(步骤714,714’以及714”)。一旦开发人员314已经完成开发他们的软件组件,所述开发人员314就向开发评审委员会310提交所述组件(步骤716,716以及716”)。
在一些实施例中,所述组件历经同等评审过程。所述同等评审过程允许开发人员测试并且评审由其他开发人员开发的组件。例如,开发人员314可以创建软件组件,并且在提交之前,开发人员314”可以使所述组件经历一个或多个测试以便确定组件的质量。如上所述,所述开发人员314,314’以及314”通常具有最小值,或者彼此没有优先的关系。在一个示范性的实施例中,所述开发人员使用在线的绰号而不是他们的真实身份。因为所述组件历经此独立的并且不记名的同等评审过程,所以提交的组件质量将会很好。
所提交的组件可以采用多个形式,这取决于规定的组件。通常,组件的规范将包括开发组件的需求。在一个实施例中,开发的组件包括源代码,其可以依照Java程序设计语言来编写,例如使用来自于California,Santa Clara的Sun Microsystems的Java 2 MicroEdition(J2ME)开发平台。所述组件还包括单元测试例,并且相对于测试例记录成功文档化的执行过程。所述组件还包括文档。在这种实施例之一中,所述文件一致于Javadoc类型文档。所述组件还包括使用指南。
所述开发评审委员会310评审接收到的组件(步骤718)。在一个实施例中,此评审包括由主要评审者进行的第一筛选评审,然后通过开发评审委员会310的其他成员进行进一步评审。第一筛选评审确定设计所要求的元素被包括并且是起作用的(例如,源代码、单元测试例、文件、记录文件以及使用指南)。
筛选评审还可以确定这些元素是完整的。例如就源代码而言,所述筛选评审可以确定以下项的任意或者所有:(1)明显地注解所有公共方法;(2)包括所需要的标记诸如“@_author”、“@_param”、“@_returm”、“@_throws”以及“@_version”;(3)填充版权标记;(4)所述源代码跟随Java语言的标准编码约定,诸如由Sun Microsystems出版的那些;(5)将4个空格缩格用于代替tab缩格;以及(6)在所述类图中找到的所有类、方法以及变量定义被精确地依照源代码表示。所述开发筛选评审例如还可以验证存在于所述设计中所有公共方法的单元测试例,并且每个单元测试由一种测试程序正确地识别。
在一个实施例中,所述初始开发筛选过程将条目的数目减少到开发评审委员会310评审的可管理数目,诸如5个条目。
所述开发评审委员会310评估组件以便确定它们是否符合所述设计(步骤720)。在进行初始筛选的实施例中,评审委员会的成员均执行评审以便评估所提交的组件。
所述开发评审者相对于所述设计评估组件编码。在一个实施例中,例如就所述组件而言,所述评审者评估以下内容的程度:(1)所述实现阐明在组件设计文档中详细描述的功能;(2)所述实现正确使用所有要求的技术(例如语言、所需要的组件等等)以及程序包;(3)所述实现正确地实现所要求的算法;(4)所述实现已经依照设计中的定义正确实现(而非修改)公共应用编程接口(API),没有附加公共分类、方法或者变量。
例如就类定义而言,所述评审者评估按照设计文件中的定义实现的分类的程度(例如包括修饰、类型以及命名规则)并且评估所定义的分类是否被实现。例如就变量定义以及方法定义而言,所述评审者评估所有变量以及方法按照设计文件中的定义来实现的程度(例如包括修改量、类型以及命名规则)。例如就关系而言,所述评审者评估所述实现正确映射分类关系的程度。
所述评审者还可以通过执行代码评审来进一步评估所述编码。例如,所述评审者可以确定在实现中定义的对象类型是所期望用途的最佳选择的程度,例如是否本应代替数组类型而使用向量类型。所述评审者可以确定存在任何不必要的循环、或者粗略的对象实例化或者变量分配的程度。例如就测试例而言,所述评审者可以确定以下内容的程度:(1)所述单元测试例彻底地测试所有方法以及构造函数;(2)所述单元测试例正确地使用安装和卸载方法以便配置测试环境;(3)用于单元测试例的文件存在于指定目录中;(4)在测试完成之后,单元测试例没有在文件系统上留下临时文件。
所述评审者甚至可以通过进行准确性、故障以及压力测试来进一步评估所述编码。准确性测试可以当提供有效输入时测试输出结果的准确性。准确性测试还可以确认配置数据。故障测试用于当所述组件具有无效输入时测试校正故障行为,所述无效输入诸如错误的数据以及不正确的使用。压力测试用于测试组件大量操作的能力,但是将其作为吞吐量的性能来测试这种特征。失效的测试被归入组件的评估,例如作为得分减少。每个评审者因此能根据此评估为组件分配总体得分。
在一个实施例中,所述开发评审委员会成员310可以使用图1的服务器104来使所述设计经历一个或多个测试,所述一个或多个测试例如把设计中定义的个体需求作为目标。使用这些目标测试的结果,开发评审委员会的成员(例如使用服务器104)可以获得每个提交内容的总得分。
例如,所述开发评审委员会成员310可以使用图1的服务器104来向其他委员会成员录制和传达他们的组件设计评估。在一个实施例中,所述委员会成员使用在线的评估表格来评估每个组件。所述委员会成员的评估因此能被识别,并且组件自动地被接收的委员会成员得分评级。基于提交内容的评估,所述开发评审委员会310选择一个设计作为成功提交内容(步骤722)。
在一些情况下,对于成功组件可能需要修改。在这些情况下,所述开发评审委员会310将所述组件送回给提交了成功组件的组件开发人员314,以及修改建议、对确定修改的明确指示或者其他命令等等。所述开发人员314将一些或者所有改变并入组件(步骤724),并且向开发评审委员会310重新提交组件(步骤726)。所述开发评审委员会310因此能执行组件的最终质量控制评审(步骤728),并且向产品管理者302发送所述组件。所述产品管理者302因此能在组件目录中包括所述组件,如下所述,并且进行有效组件的分送(步骤730)。所述产品管理者302还可以给予成功开发人员314报酬,这可以使用如下所述的任一项方法(步骤732)。
参照图8,所述服务器104可以包括多个模块,用于简化组件的开发和/或区别。例如,组件开发子系统800可以简化如上所述的开发过程。所述组件开发子系统800利用开发小组200简化组件开发,并且与许多不同的模块通信,以便实现分布小组开发过程。
在一个实施例中,并且如以下更加详细所描述的,所述服务器104可以包括组件目录804。所述组件目录804存储由开发小组200开发的组件。在一个实施例中,所述组件目录804向潜在的买方提供与有效组件有关的信息的目录或者指南。例如,在选择特殊的组件以前,服务器104的顾客可以浏览组件目录804的指南以及与组件目录804中每个组件有关的信息。一旦所述服务器104(或者组件目录804的管理员)接收所需要的费用支付或者组件的授权信息,所述服务器104就经由通信网络112下载所述组件至客户端108。以下将参照图10进一步描述所述组件目录。
所述服务器104还包括通信工具808。在一个实施例中,所述通信工具808是用于简化开发小组200的组员204,208,212,216之间通信的工具。通信工具808的例子包括但是不局限于能够在组员204,208,212,216之间实时通信(例如闲谈)的模块、新闻组、在线会议以及文档合作工具。
此外,所述服务器104还可以包括组件孵化器812。所述组件孵化器812是能够使用户提交组件建议或者组件的修改的模块,其可以稍后作为市场调查的基础。
所述服务器104可以包括需求设计子系统816。所述需求设计子系统816使所述产品管理者204以及设计师208能浏览和评价需求规范。在进一步的实施例中,所述需求设计子系统816使产品管理者204以及设计师208能创建、编辑、下载、上载和/或批准规范中的需求(例如,经由通信网络112)。在一个实施例中,所述需求设计系统可以共享并且操纵UML中的模型。
所述服务器104另外包括开发传送子系统820。所述开发传送子系统820使所述服务器104或者产品管理者204能与潜在的开发小组成员通信,以便促进开发项目并且开发有助于形成组件目录的贡献者社团。在一个实施例中,所述开发传送子系统820向潜在的开发小组成员显示广告。在一个实施例中,所述广告使用文本、图形、视频和/或音响来描述项目。所述广告还可以描述在所述开发小组200中有效的职位。通信技术的例子包括但不限于:在服务器的网络站点上发送这些广告,显示有关所述项目的统计量(例如,给开发小组成员的计划酬劳报酬、参与此项目的开发小组成员、每周有效的开发小时)。此外,在一个实施例中,所述开发传送子系统820接受与开发项目相关联的查询。在进一步的实施例中,开发传送子系统820建议竞赛成员基数的成员形成处理查询的开发小组。所述开发传送子系统820例如可以分析编码竞赛成员基数的每个成员的评级,在前开发项目的在前贡献,在前组件开发项目的贡献质量(例如,基于在完成组件时给予每个开发小组成员204,208,212,216的得分,如上所述),以及当推荐竞赛成员基数的成员作为开发小组200的一部分时的当前有效潜在组员。所述产品管理者204可以或者不可以是刚才描述的广告职位。
所述服务器104还包括管理子系统824。所述管理子系统824是用于向开发小组成员(例如开发人员212、QA开发人员216)分配收益的模块。在一个实施例中,开发小组成员在组件许可或者组件拷贝出售上赚得酬劳。在进一步的实施例中,所述管理子系统824使所述产品管理者204以及设计师208能浏览项目的查询,并且基于来自于所述服务器104(即开发传送子系统820)的推荐来选择项目组。所述管理子系统824还可以跟踪开发小组200生产的可交付产品(例如,源代码、文档以及方案),和/或能够在开发组件之后对开发小组成员204,208,212,216进行评审。所述管理子系统824还可以扫描开发小组成员信息,诸如但不局限于历史、编码竞赛评级以及在先的工作经历。在一些实施例中,所述管理子系统824可以例如经由图形用户界面向产品管理者204和/或设计师208显示所述开发小组成员信息。
所述服务器104还包括软件设计子系统828。所述软件设计子系统828能够使组员204,208,212,216之间彼此合作。更具体地说并且在一个实施例中,所述软件设计子系统828使组员204,208,212,216能浏览设计文件和/或评论所述设计文件,所述设计文件诸如对象图(例如,类图以及用例图等等)。在另一个实施例中,所述软件设计子系统828使开发小组成员204,208,212,216能经由通信网络112创建、下载、上载和/或编辑设计文档和/或体系结构文档。
此外,所述服务器还包括组件开发环境(CDE)832。所述CDE 832使组员204,208,212,216以及组件的潜在买方能通过将组件链接在一起来创建应用。在一个实施例中,所述CDE 832是一种基于网页的应用(例如,小程序或者插件程序应用)。在另外的实施例中,所述CDE 832被归入所述客户端软件120。所述CDE 832还能够将组件从如下所述的测试组件的QA应用转换为集成模块(也如下所述),以便创建较大组件或者应用。所述CDE 832还能够将独立的组件从QA移动至生产,和/或将应用或者较大组件移动到生产。所述CDE 832可以另外并入商业可得的集成开发环境(IDE)软件。
所述服务器104另外包括质量保证(QA)应用836。所述QA应用836能够测试所有应用和/或组件。在一个实施例中,所述QA应用836执行由QA开发人员216开发的测试例。此外,所述QA应用836可以对组件或者应用执行自动测试,以便可以验证和/或测量存储器利用率、线程利用率、诸如I/O利用率以及处理器负载之类的机器统计量。另外,所述QA应用836可以通过性能、设计和/或功能为所述组件评分。此外,所述QA应用836可以是用于同时测试多个组件的检测设备。
在一个实施例中,所述服务器104可以包括封装应用840。所述封装应用840在可下载的文件(例如.ZIP文件、Java Archive(.JAR文件)或者动态链接库(.DLL)文件)中封装可交付的内容(例如,源文件、可执行的文件、文档和/或支持材料(例如XML,DDL))。在一个实施例中,当顾客从所述组件目录购买组件时,所述封装应用840将这些可交付内容封装到可下载的文件中。所述封装应用840然后下载所述文件至客户端108。
所述服务器104还包括组件陈列室844。所述组件陈列室844通过提供与所述组件有关的信息来同意组件的许可(和/或拷贝出售)以及使用。所述组件陈列室844还可以提供例如但不局限于表明组件用途、表明研究实例、提供相关组件以及应用列表以及提供与标价和/或许可有关的信息的能力。
虽然如上依照独立的子系统以及模块进行了描述,但是这仅仅是为了举例说明的目的,作为选择,这些子系统以及模块可以合并为一个或多个模块或者子系统。例如,在另一个实施例中,所述组件开发模块800可以执行如上所述的许多功能。此外,如上所述的一个或多个子系统可以位于远离其他模块的地方(例如,在服务器场中的另一个服务器104上执行)。
参照图9,所述开发传送子系统820包括网络服务器902。所述产品管理者204可以使用网络服务器902来向软件小组200发送设计或者分送的规范。所述服务器104还包括评级引擎904。在一个实施例中,所述评级引擎904为一个或多个编码竞赛中的每个参与方计算评级。在其他实施例中,所述评级引擎可以基于各个成员对项目的贡献来计算项目组200的成员评级。所述服务器104还包括接收模块906。在一个实施例中,所述接收模块906接收由项目组200的成员提交给开发传送子系统820的计算机软件设计。作为选择,所述接收模块906简化从开发人员212的提交内容的接收,所述开发人员212竞争开发小组200中的职位。所述服务器104还包括评分模块908。在一个实施例中,所述体系结构评审委员会304使用所述评分模块908来评估由软件设计师308提交的多个软件设计。另外,所述开发评审委员会310可以使用评分模块908来评估由程序员314提交的多个软件组件。所述服务器104还包括评审模块910。另外,开发人员可以使用评审模块910来评审来自于其他开发人员的提交内容。在一个实施例中,所述网络服务器902、评级引擎904、接收模块906、评分模块908以及评审模块都驻留在所述服务器104上。作为选择,所述网络服务器902、评级引擎904、接收模块906、评分模块908以及评审模块910可以驻留在其他服务器或者远程设备上。
参照图10,所述组件目录804包括组件存储库1004。所述组件存储库1004是用于服务器104可以公布以及卖给买方的那些组件的集中存储器。在一个实施例中,将所述组件目录804存储在服务器104上。作为选择,所述组件目录804可以存储在另一个服务器或者远程存储装置上(例如,数据库服务器)。在一些实施例中,所述组件存储库1004向希望购买组件或者其信息的潜在买方提供用户接口,通常,所述用户接口生成由买方使用以便与所述服务器104通信的客户端软件120或者浏览器116的代码。
所述组件目录804另外包括信息模块1008。所述信息模块1008向所述组件存储库1004提供与所述组件有关的信息。例如,所述信息模块1008可以提供或者包括列出服务器104支持组件的表,服务器104存储在所述组件存储库1004中。此外,所述信息模块1008还可以向组件存储库1004提供每个组件的文档,诸如但不局限于组件的存储器需求、效率、在QA测试中接收的得分以及开发小组200的成员。在一个实施例中,所述信息模块1008与所述组件存储库1004通信,以便向所述组件存储库1004提供组件信息,以便例如使潜在的买方在选择期间可以浏览组件信息(例如性能)。
所述组件目录804还包括更新跟踪模块1012。所述更新跟踪模块1012确保组件存储库包含组件的最新版本。在一个实施例中,当确定对顾客预先购买的组件进行修改时,所述组件目录804接收改变。所述更新跟踪模块1012确保修改的组件被存储在所述组件存储库1004中。在一些实施例中,所述更新跟踪模块1012警告产品管理者204或者设计师208所述修改。在又一实施例中,为了更加有效的更新,所述更新跟踪模块1012只将组件修改部分发送到组件存储库1004。在进一步的实施例中,如果修改了组件,那么所述更新跟踪模块1012将消息发送给已经预先购买了组件在前版本的所有顾客,以便通知顾客可以获得新的版本,以及此版本和在前版本之间的不同。
所述组件目录804另外包括从属跟踪模块1016。所述从属跟踪模块1016跟踪在应用中链接在一起的组件之间的从属关系。例如,组件买方从服务器104购买组件A。组件A是由组件B、C和D组成的较大组件。如果组件C随后被修改,那么在一个实施例中,所述服务器104通知所述买方组件C已经修改,并且组件C与组件A失去依赖关系。然而,所述买方对组件A感兴趣。如果所述买方只更新组件C,那么买方的组件A不可以操作,除非买方下载更新的组件B和D。所述从属跟踪模块1016是用于跟踪这种从属关系的模块。在一些实施例中,所述从属跟踪模块1016通知顾客有关从属关系。
所述组件目录804还包括集成模块1020。在一个实施例中,所述集成模块1020集成组件目录804中的组件以便形成较大组件或者应用。例如,所述产品管理者204可以确定存在对特殊的组件A的需要。如果所述产品管理者204认识到在组件目录204中不存在组件A,但是认识到存在也许能使用其他组件创建组件A的那些其他组件,那么产品管理者204可以计划项目以便创建组件A。在一个实施例中,所述集成模块1020便于将多个组件集成为一个较大的组件。
例如并且参照图11,组件目录系统1100包括操作第一客户端108的第一公司1104以及操作第二客户端108’的第二公司1108。所述公司1104,1108经由通信网络112与所述服务器104通信。所述服务器104包括组件目录804,并且所述组件目录804包括更新跟踪模块1012。虽然没有举例说明,每个客户端108,108’都包括各自的浏览器116,116’,所述服务器104包括如在图8中所述的模块(例如组件陈列室844),并且所述组件目录804包括如上在图10中所述的模块(例如信息模块1008)。
在一个实施例中,所述服务器104分别向第一以及第二公司1104,1108发送远程上载跟踪模块1112,1112’(通称为1112)。当公司1104,1108修改存储在组件目录804中的组件时,每个远程上载跟踪模块1112与上载跟踪模块1012通信。另外,所述远程上载跟踪模块1112还使公司(例如1104,1108)能将他们的组件添加到组件目录804,由此使所述组件对于其他公司可用。在一些实施例中,所述远程上载跟踪模块1112可以依照各种形式来实现,例如,它可以是下载到客户端108并且结合所述浏览器116和/或客户端软件120运行的Java小程序,或者所述远程上载跟踪模块1112可以是独立应用的形式,依照诸如Java的多平台语言或者依照本地处理器可执行代码来实现。此外,所述远程上载跟踪模块1112可以作为客户端软件120来实现。
在一个实施例中,第一公司1104产生组件1116的第一版本。在一个实施例中,所述远程上载跟踪模块1112然后自动地将所述组件1116经由通信网络112发送到服务器104(例如,上载跟踪模块1012),以便添加到组件目录804中。作为选择,如果第一公司1108希望提交组件到组件目录804,并且由此使所述组件对于其他公司可利用(例如第二公司1108),那么所述远程上载跟踪模块1112查询第一公司1108(例如第一公司1104的雇员)。例如,所述远程上载跟踪模块1112经由对话框查询第一公司1104(例如,在所述浏览器116或者客户端软件120上显示)。如果第一公司1104同意所述查询(例如,从用于将组件1116添加到组件目录804的会话中选择YES),那么所述远程更新跟踪模块1112向所述服务器104发送组件1116,如箭头1120所示。在一个实施例中,所述远程上载跟踪模块1112具有选项(例如复选框),以便将完成的组件发送到服务器104。一旦选择了所述选项,那么远程上载跟踪模块1112不查询第一公司1104,而是自动地将完成的组件发送到服务器104,并且如此这样执行,直到未选择选项。另外,虽然朝向第一公司1104修改,但是所述描述还适用于第二公司1108。在另一个实施例中,诸如酬劳谈判、工作确定等等的其他功能可以在将第三方组件添加到组件目录804以前进行。
在一个实施例中,所述上载组件在添加到组件目录804之前经历此处所述的QA过程。在一个实施例中,当接收组件1116的第一版本时,所述服务器104使组件1116经历图4中如上所述的一个或多个步骤。例如,所述服务器104在没有对组件执行QA测试时,不添加组件1116到组件目录804中(步骤428)。在另外的实施例中,所述服务器104不添加所述组件1116到组件目录804,直到设计师208向所述产品管理者204提供最后批准。由此,如果组件1116的版本1不满足设计师208(和/或产品管理者204)的严格编码标准需求,那么不将所述组件1116添加到组件目录408。在进一步的实施例中,所述服务器104通知第一公司1104所述组件1116不满足组件目录804条目中所要求的标准。所述服务器104可以另外提供第一公司1104在组件1116中发现的问题。
如果所述组件1116满足服务器的需求,并且因此被添加到所述组件目录804,那么服务器104因此能在组件目录804中显示组件1116,以便潜在的购买。由此,如果第二公司1108浏览组件目录804(例如,经由组件陈列室844),那么第二公司1108可以购买所述组件1116的版本1。在出售之后,所述服务器104随后发送所述组件1116到第二公司1108,以箭头1124说明。在一个实施例中,第一公司1104可以因为组件版本1的任何出售而得以补偿。
参照图12,在一个实施例中,第二公司1108购买组件的版本1,并且随后修改所述组件1116,依照修改箭头1128示出。例如,修改被改进(例如效率增加、减小内存需求)、删除(例如不必要的步骤或者特征)以及向所述组件1116的添加(例如,免费赠送的特征或功能)。修改的另一个例子是组件1116到另一个组件(例如较大组件)中的集成。响应所述修改,组件1116的版本1例如变成组件1116’的版本1.1。在一个实施例中,所述远程更新跟踪模块1112将消息发送到服务器104,用于声明第二公司1108已经修改了组件1116。在进一步的实施例中,所述远程更新跟踪模块1112然后向服务器104发送(或者例如查询以及发送)修改的版本1.1,如箭头1132所示。当收到组件1116’的版本1.1时,所述服务器104和/或开发小组成员通过执行图4中示出的步骤来确定修改的组件1116’是否可以添加到组件目录804。在一个实施例中,当组件1116’的版本1.1.添加到组件目录804中时,版本1.1.替换组件1116的版本1。作为选择,组件1116’的版本1.1被作为另一个组件添加到组件目录804中。组件1116’的版本1.1的置换或者添加可以取决于相对于组件版本1的改变量。此外,所述更新跟踪模块1012可以通知预先购买组件1116的版本1的每个顾客:更新方案1.1已经添加到所述组件目录804。其他模块1008,1016,1020还可以通知顾客例如有关附加从属关系以及可得到的信息。另外,在一些实施例中,第二公司1108因为许可/出售组件1116’的第二版本的拷贝而得以补偿。
在一个实施例中,对软件产品(例如组件或者软件应用)起作用的开发小组(例如208,212,216)的成员,因为他们对产品起的作用而获得报酬。虽然优选的是软件组件,但是由分布式软件开发系统101开发的产品可以是任何软件应用或者知识产权类型。在一个实施例中,并且如对于图8所述内容,服务器104的开发传送子系统820发送项目清单以及项目清单中的项目描述,诸如在广告中。所述广告或者发送例如可以包括每个开发小组成员的贡献,开发小组成员因为对所述项目所起的作用而接收的费用以及整个开发小组的总体贡献。
在一个实施例中,开发小组的成员基于他们对产品的贡献以及通过许可或者出售产品的拷贝而赚得的收益来接收酬劳。服务器104的所述管理子系统824(上述参照图8所描述的)跟踪具体特征来确定将给予开发小组成员的酬劳数额。在这种实施例之一中,所述费用是对酬劳的预付款,这意味着在预付款足数之前不支付酬劳。
在一个实施例中,并且参照图13,所述服务器104(例如所述管理子系统824)跟踪项目和/或每个开发小组成员的总收益1304、开发小组成员贡献1308、开发小组成员酬劳百分比1310、酬劳库百分比1311、酬劳库1312以及酬劳1316。
在一个实施例中,所述贡献1308是在开发工作前面规定的预定的量。在另一个实施例中,每个成员的贡献1308通过时间量、技能水平(由在前得分、竞赛评级、经验或者组合确定)或者开发小组成员工作程度来确定。在另一个实施例中,所述贡献1308通过开发小组成员贡献的有用性来确定。期望的开发小组成员(例如208,212,216)成比例的贡献是开发小组成员的酬劳百分比1310。在一个实施例中,所述开发小组成员的酬劳百分比1310通过按照被期望以便由所有开发小组成员来开发可交付内容(例如,组件以及相关文件)的总工作贡献,来划分为被期望以便由开发小组成员需要来实现她的任务的总工作贡献1308来确定。如果改变了所述组件,诸如升级或者另外修改,那么可以将开发小组成员的酬劳百分比1310因所述修改的版本而进行调整,以便反映新的贡献划分。
在一个实施例中,为产品选择酬劳库百分比1311。所述酬劳库百分比1311是总收益1304的百分比(例如每年、每季度或者每月的收益),所述百分比将被保留给特许使用金1316,该奖金将给予对所述产品起作用的开发小组。在一个实施例中,每个产品的预期酬劳库百分比1311在有效规范文档中被提出。在一些实施例中,所述酬劳库百分比1311可以取决于其他事务因素,诸如时间或者产品的流行。然后,所述酬劳库1312是产品的部分收益1304,其中所述产品依照特许使用金1316将分送到开发所述产品的开发小组成员。在一个实施例中,所述酬劳库1312通过将酬劳库百分比1311乘以总收益1304来进行确定,其中所述总收益是预定时间周期期间通过产品的出售或许可而收到的。
所述管理子系统824跟踪数据结构1324中的信息。在一个实施例中,存在过剩产品,其存储在所述组件目录804中。此外,已经致力于或者正在致力于一个或多个项目的人数是相当大的。为了跟踪用于精确确定每个开发小组成员对产品的贡献1308的补偿的信息,采用了服务器104的所述管理子系统824。
在一些实施例中,所述服务器104跟踪并且存储滑动比例酬劳1320,这基于这样一种选择,其中当他们同意对项目的作用时,开发小组成员可以确定组员的初始补偿报酬量(例如设定费用)。以下根据图16更详细地描述所述滑动比例酬劳1320。在一个实施例中,所述管理子系统824在补偿数据结构1324中存储此信息1304、1308、1312、1316、1320。所述数据结构1324例如可以存储在服务器的存储器中,或者存储在外存储器中和/或永久性存储器中。
例如并且参照图14,酬劳补偿表1400包括三个开发小组成员1404,即:成员1、成员2以及成员3,他们都是开发小组的贡献者。例如,成员1可以是设计师208,成员2可以是开发人员212,并且成员3可以是质量保证(QA)开发人员216。依照此实施例,成员1的贡献1308是100小时,成员2的贡献1308是200小时,并且成员3的贡献1308是300小时。在此例子中,每个成员(例如成员1、成员2、成员3)的贡献1308可以通过每个成员需要的小时的期望值来确定(如通过产品管理者204确定)。在其他实施例中,所述贡献1308例如可以通过花费的小时实际数目、编写或者测试的设计的模型或者代码的实际金额等等来进行确定。
在此例子中,开发小组的贡献1308的总数1410是600小时。所述开发小组成员酬劳百分比1310是被总贡献除的每个成员贡献1308。在此例子中,总贡献是(100+200+300)=600小时。然后,所述开发小组成员酬劳百分比1310对于成员1(100/600)=17%;对于成员2(200/600)=33%;并且对于成员3(300/600)=50%。
在此例子中,总收益1304是$20,000。此产品的酬劳库百分比1311是5%。所述酬劳库1312因此是($20,000×5%=)$1,000。由此,每个开发小组成员1404赚得的酬劳1316是酬劳库1312的他们的酬劳百分比1310。具体来讲,成员1接收($1,000×17%=)$170,成员2接收($1,000×33%=)$330,而成员3接收($1000×50%=)$500。在一些实施例中,当接收产品的附加收入时,这些特许使用金1324往往依照类似方式进行提取。
参照图15,在继续的例子中,通过三个组员1404生产的产品被修改并且更新为另一个版本。新版本可以是图11中描述的组件1116的版本1.1,或者集成到另一个产品中。所述附加工作通过组员1504执行(例如,成员4以及成员5),并且还通过成员3,而不是成员2以及成员1来执行。所述酬劳被调节以便将新的开发小组成员的贡献包括在酬劳1316的确定中。在此例子中,成员4的贡献是50小时,而成员5的贡献也是50小时。由此,因为两个附加成员1504的贡献,贡献量总数1410增加到750小时。所述开发小组成员酬劳百分比1310是被总贡献除的每个成员(成员1、成员2、成员3、成员4、成员5)的贡献。
那么所述开发小组成员酬劳百分比1310是:对于成员1(100/750)=13.33%;对于成员2(200/750)=26.66%;对于成员3(350/750)=46.66%;对于成员4(507750)=6.66%,而对于成员5(50/750)=6.66%。
此外,在此例子中,修改产品生成的总收益1304是$30,000。此产品的酬劳库百分比1311是5%。所述酬劳库1312因此是($30,000×5%=)$1500。每个开发小组成员1508接收酬劳库1312的他们的酬劳百分比1310:成员1接收($1500×13.33%=)$200。成员2接收($1500×26.66%=)$400。成员3接收($1500×46.66%=)$700,这高于前述的酬劳1316,所述酬劳1316是在成员3的附加贡献1308以前、成员3已经预先接收到的。在一些实施例中,当接收产品的附加收入时,这些特许使用金1316往往依照类似方式进行提取。
还参照图16,在一些实施例中,所述开发小组成员可以通过调节他们的滑动比例酬劳1320来调节他们接收(作为酬劳1316)的收益量。具体来讲,所述服务器104(例如产品管理者204)可以实现滑动比例1606,其使组员能选择设定费用1608的数额以及开发小组成员酬劳百分比1310的数额,以便开发小组成员可以接受产品成功的或多或少的风险。增加的费用1608将导致酬劳减少,反之亦然,并且因此减少了收到的酬劳1316。由此,所述组员选择的费用1608数额对应于酬劳选择1612。滑动比例1606的端点是设定费用1608以及开发小组成员酬劳百分比1310的最大值,它们是所述组员可以因为他们对项目的贡献1308而得到的。在示出的滑动比例1606中,设定费用1608的值在滑动比例1606的上半部表示,并且开发小组成员酬劳百分比1310在滑动比例1606的下半部表示。在一个实施例中,当请求费用时,潜在的组员酬劳因为设定费用的选择而被调节。为了确定滑动比例酬劳1320,这往往替换由组员接收到的酬劳1316,服务器104依照酬劳库1312并且依照由组员进行的酬劳选择1612来成倍增加组员的开发小组成员酬劳百分比1310。由此,滑动比例酬劳1320将是总收益1304乘以所述酬劳库百分比1311乘以开发小组成员酬劳百分比1310乘以酬劳选择百分比1612。
使用在图16中举例说明的例子,根据图15的成员2、成员3以及成员5,如果成员2在设定费用1608中选择接收其100%的补偿,那么成员2将在其他可应用方面得到0%的酬劳。由此,因为成员2选择所有其酬劳作为设定费用1608,所以成员2具有新的滑动比例酬劳1320(26.66%×1500×0%=)零,其替换图15中所示的酬劳1316。
在此例子中,成员3选择最高酬劳选择1612(例如100%)。因此,成员3的滑动比例酬劳1320是(46.66%×1500×100%=)$700。在另一个实施例中,成员5选择得到50%的可能费用1608以及50%的酬劳1316。由此,成员5的滑动比例酬劳1320是(6.66%×1500×50%=)$50。
在一个实施例中,设定费用1608的量直接涉及开发小组成员酬劳百分比1310的减少。由此,在设定费用1608中增加20%可以减少开发小组成员酬劳百分比1310 20%。在其他实施例中,在设定费用1608方面的变化不直接与开发小组成员酬劳百分比1310方面的变化相关。例如,服务器104可以将常量次数与费用1608方面的增加相乘,以便即使费用1608方面的轻微增加相当于开发小组成员酬劳百分比1310方面的较大增加,以便为期望风险而调节它。作为选择,服务器104可以指定一个常量,根据设定费用1608的方面的变化、将反比关系应用于开发小组成员酬劳百分比1310方面的变化。此外,在设定费用1608和开发小组成员酬劳百分比1310之间可以存在任何关系。由此,所述服务器104可以将一个或多个数学函数应用于确定相对于其他变量变化的一个变量的变化。
在一个实施例中,所述开发小组成员酬劳百分比1310和酬劳库百分比1311(例如前述的两个例子中的5%)对于每个有效产品可以是不同的,并且均随时易受服务器104向上的或者向下的调整。在进一步的实施例中,所述产品管理者204和/或所述设计师208可以改变这些百分比1310、1311。
此外,在一个实施例中,可以在支出以前测量收益(例如总收额)。在另一个实施例中,可以在支出之后确定收益(例如,净收益、佣金等等)。
在一个示范性的实施例中,所述分布式软件开发系统101在生命技术产业中被采用。第一生物技术公司开发一种新的分子集合,以下称为集合A、B和C,并且相信一个或多个所述分子可以有效预防特殊的疾病,以下称为疾病X。然而,所述生物技术公司没有蛋白质数据,所述蛋白质数据用于确定分子A、B和/或C是否有效预防疾病X。在一个实施例中,所述产品管理者204研究所述产业,并且随后开发小组将用于为每个分子特征建模的软件组件添加到组件目录804。在一些实施例中,所述开发小组还创建用于为疾病、诸如疾病X建模的一个或多个组件。所述生物技术公司可以浏览组件目录804中的组件,并且确定使用一个或多个组件例如来构建分子间相互作用的模型,并且确定分子对特殊疾病的有效性。在一些实施例中,所述服务器104生产用于提供有关特殊基因或者分子的数据的数据仓库的组件。在一个实施例中,所述生物技术公司使用组件从生物技术机器中读出数据,所述生物技术机器用于读取细胞和/或基因的数据。所述组件还可以存储从生物技术机器读出的数据。
总的来说,在一个方面中,本发明涉及一种用于确定协作开发产品的第一贡献者的酬劳的方法,所述产品通过第一贡献者以及至少一个其他贡献者开发。所述方法包括接收表示每个第一贡献者以及至少一个其他贡献者的每个、对协作开发的产品作出贡献的值。所述方法包括通过对所接收的值求和来计算贡献者以及至少一个其他贡献者作出的总贡献。所述方法包括基于所确定的第一贡献者的贡献价值与所计算的总贡献的比值,确定第一开发人员的开发人员酬劳百分比。所述方法包括从协作开发的产品获得的收益中,为协作开发的产品分配酬劳库;并且通过将酬劳库与开发人员酬劳百分比相乘来确定第一贡献者的酬劳数额。
在一个实施例中,分配酬劳库包括为协作开发的产品规定酬劳库百分比,并且将协作开发的产品获得的收益乘以酬劳库百分比。在各种实施例中,得到的收益可以是在减少支出以前或者以后的收益。
虽然此处参照软件进行了描述,并且对于当根据软件组件实现时有用,但是协作开发的产品可以是用于具体实现知识产权的任何种类的有形或无形对象。在一个实施例中,所述产品包括至少一个计算机软件组件。在这种实施例之一中,所述产品包括由至少一个计算机软件组件组成的计算机应用程序。在其他实施例中,所述产品包括集成电路设计以及计算机硬件装置的至少一个。在一个实施例中,所述贡献是产品管理、设计、体系结构、编码以及质量保证测试的至少一个。
在一个实施例中,所述接收步骤包括从系统管理员、键盘输入或者数据存储器(例如硬盘,存储器)以及软件对象的至少一个中接收。在一个实施例中,所述方法通过计算机至少部分地响应协作开发工作的贡献者贡献价值的输入来执行。在一个实施例中,表示贡献的值是基于规定贡献所需工作的估计的预定值。在另一个实施例中,表示贡献的值是基于实际贡献的测量(例如代码行、花费小时)。在各种实施例中,所述方法的步骤可以用于后续或者修改产品,其中所述产品包括附加贡献者的贡献。在这种情况下表示贡献的值可以是原始产品的贡献或者是对随后的或者修改的产品的贡献。
总的来说,在另一个方面中,本发明涉及一种系统,用于执行许多贡献者以及许多产品的方法步骤。所述系统使用此处所述的信息以及技术,以便能够跟踪与这些产品以及开发人员相关联的信息,以便依照贡献者的酬劳分配收益。总的来说,在另一个方面中,本发明涉及一种系统,用于简化分布式组件的开发,包括组件目录、分送的开发环境以及酬劳计算系统。
总的来说,在另一个方面中,本发明涉及一种组件目录系统,其包括本地组件存储器,用于存储组件以及与所述组件相关的信息;用户界面模块,用于提供与组件有关的信息;更新跟踪模块,用于跟踪对组件的更新;从属跟踪模块,用于跟踪组件从属关系;以及集成模块,用于识别可以集成的组件。在一个实施例中,所述系统还包括远程模块,用于提供与存储在远程系统上的组件有关的信息,并且使所述组件可为组件目录的用户所获得,就好像他们都包含在本地组件存储器中似的。