CN101430643B - 提供项目开发环境的方法和装置,以及项目开发系统 - Google Patents
提供项目开发环境的方法和装置,以及项目开发系统 Download PDFInfo
- Publication number
- CN101430643B CN101430643B CN200710165836.7A CN200710165836A CN101430643B CN 101430643 B CN101430643 B CN 101430643B CN 200710165836 A CN200710165836 A CN 200710165836A CN 101430643 B CN101430643 B CN 101430643B
- Authority
- CN
- China
- Prior art keywords
- workpiece
- developer
- project
- access rights
- relied
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了为开发人员提供项目开发环境的方法,为开发人员提供项目开发环境的装置,以及项目开发系统。本发明根据开发人员的请求、项目分配信息和项目工件依赖关系,确定所述开发人员具有访问权限的工件,和所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件,并针对所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件,生成逻辑工件。本发明能够通过生成代理使每个开发人员不能接触到其不需要接触的项目代码,提高了项目开发的安全性,同时保证其能够自由调用所依赖的工件。
Description
技术领域
本发明涉及计算机技术,更具体地说,涉及在软件项目的开发过程中为软件开发人员提供开发环境的技术。
背景技术
目前,一个软件项目的开发需要多个开发人员,甚至不同领域的多个开发人员共同合作完成,其中给每个开发人员分配一部分项目进行开发。
在当前的软件项目开发过程中,使用项目管理工具(ProjectManagement Tool,PMT)对项目进行划分,将一个项目划分为若干个子项目;然后使用集成开发环境(Integrated Development Environment,IDE)对各个子项目进行开发,例如建立和修改源文件;同时使用版本控制系统(Version Control System,VCS)对开发过程中产生的工件(artifact)进行版本控制,例如改变源文件的版本。大多数现有的VCS产品,例如并行版本系统(Concurrent Versions System,CVS)、ClearCase和配置管理和版本控制(Configuration Management Version Control,CMVC)等,均为用户提供强大的版本控制功能,例如签入、签出等的操作,
在使用集成开发环境IDE和版本控制系统VCS对项目进行开发和管理的过程中,每个开发人员在整个项目的开发环境中开发自己承担的子项目。但是,这种工作模式对于某些项目的开发并不适用,例如,在如下的两种情况下存在问题:
1)项目具有很高的保密要求,并需要大量的开发人员共同进行开发,此时,项目管理员不希望任何一个开发人员接触到整个项目,因此,如何确保每个开发人员不能获得整个项目的内容是一个至关重要的问题;
2)项目非常复杂并且不同开发人员的工作之间的关系也非常复杂,开发人员通常需要花费大量的时间来解决由其他开发人员的相关工作引起的开发环境问题。
对于上述问题,目前的一些可能的解决方案包括:
手动地为不同的开发人员提供不同的开发环境,手工地将一个完整的项目拆分成为多个不同的子项目,然后对每个子项目独立进行开发,项目之间没有联系。虽然该方法能够确保每个开发人员不能获得整个项目的内容,但是如果对整个项目进行了修改,原来被拆分出来的子项目就需要重新从整个项目中再次进行手工拆分,这样的拆分工作在软件项目中非常常见,因此所述手动方法难免进行许多重复的手工工作,非常耗时,并且该方法容易产生错误。最重要的是,这种手动方法使得各个模块的设计和测试相互独立,在软件模块相互依赖的软件开发中,想要依赖其他开发者的开发模块测试自己的开发模块的运行情况就变的非常不便。因此通常情况下,只有在进行极小规模的软件开发过程中才会采用这种纯手工的开发环境分配方式;
利用VCS对不同开发人员开发的子项目进行访问控制,比如,项目A被拆分为子项目A-1,A-2,A-3。负责开发子项目A-1的开发人员可对其进行完全的控制,读取,修改,提交新版本,对其依赖的子项目A-2拥有读取的控制权限,对不相关的子项目A-3没有任何控制权限。如果负责开发子项目A-1的开发人员可以读取其它开发人员开发的子项目A-2,那么该解决方案不能达到对子项目A-2进行保密要求。为了确保每个开发人员不能获得不是由自己承担的子项目的内容,从而达到保密要求,需要限制该开发人员对非承担项目的读取权限,但是这种访问的完全拒绝会导致编译错误,因为项目开发环境不能为该开发人员提供其没有访问权限而需要访问的项目内容,而编译时需要读取被依赖到的其它子项目的内容,由于没有读取权限,编译器找不到应有的依赖的代码,因此编译器就会报告错误。
此外,在题目为“engineering System for distributed development anddevelopment by a number of users”的专利文献US2006/0168556A1中公开了一种项目划分方法,其从一个整体项目中找出完全独立的子项目,并由具体的开发人员对其进行开发。但是,在实际的软件开发过程中,一个项目并不总是能够由多个完全独立的子项目组成,恰恰相反,子项目间存在依赖关系几乎是不可避免的。
因此,需要一种为开发人员提供完整并不会涉及任何他不需要知道的开发代码的方法,该方法应当能够保证每个开发人员拿到的子项目中既不会包含他不应该看到的内容,又能保证项目的正确编译和测试。
发明内容
为了解决上述现有技术中存在的问题,本发明提供了为开发人员提供项目开发环境的方法,为开发人员提供项目开发环境的装置,以及项目开发系统。
根据本发明的一个方面,提供了一种为开发人员提供项目开发环境的方法,包括以下步骤:根据开发人员的请求、项目分配信息和项目工件依赖关系,确定所述开发人员具有访问权限的工件,和所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件;针对所述开发人员具有访问权限的工件,提供物理工件;针对所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件,生成逻辑工件;以及将所述物理工件和所述逻辑工件一起发送给所述开发人员。
根据本发明的另一个方面,提供了一种为开发人员提供项目开发环境的装置,包括:项目工件过滤单元,根据开发人员的请求、项目分配信息和项目工件依赖关系,确定所述开发人员具有访问权限的工件,和所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件;物理工件提供单元,针对所述开发人员具有访问权限的工件,提供物理工件;逻辑工件生成单元,针对所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件,生成逻辑工件;以及发送单元,将所述物理工件和所述逻辑工件一起发送给所述开发人员。
根据本发明的另一个方面,提供了一种项目开发系统,包括:项目管理工具PMT,用于对项目进行分配,并提供项目分配信息;版本控制系统VCS,用于管理和存储在项目开发过程中生成的工件;集成开发环境IDE,用于开发人员进行项目开发;以及上述为开发人员提供项目开发环境的装置,用于根据开发人员的请求、所述项目管理工具提供的项目分配信息、和项目工件依赖关系,为开发人员提供逻辑开发环境。
附图说明
相信通过以下结合附图对本发明具体实施方式的说明,能够使人们更好地了解本发明上述的特点、优点和目的,其中:
图1示出了根据本发明的一个实施例的为开发人员提供项目开发环境的方法的流程图;
图2示出了根据本发明的实施例的项目工件依赖关系的一个实例;
图3示出了根据本发明的实施例的项目工件的一个实例;
图4示出了根据本发明的实施例的项目工件的另一个实例;
图5示出了根据本发明的一个实施例的为开发人员提供项目开发环境的装置的方框图;以及
图6示出了根据本发明的一个实施例的项目开发系统的方框图。
具体实施方式
下面就结合附图对本发明的各个优选实施例进行详细的说明。
为开发人员提供项目开发环境的方法
图1示出了根据本发明的一个实施例的为开发人员提供项目开发环境的方法的流程图。如图1所示,首先,在步骤101,根据开发人员的请求、项目分配信息和项目工件依赖关系,确定该开发人员具有访问权限的工件,和该开发人员具有访问权限的工件所依赖的其它该开发人员没有访问权限的工件。具体地,开发人员的请求包括该开发人员的身份(Identity,ID)或者带有该开发人员的身份ID的工件名称,该工件名称是指被开发的实体,例如接口、组件/模块和数据类型等的名称。开发人员的身份可以根据开发人员的用户名或IP(Internet Protocol,互联网协议)地址等来识别,本发明对此没有任何限制,只要能够识别提出请求的开发人员的身份即可。
在步骤101中,如果开发人员的请求包括开发人员的身份ID,则该开发人员希望获取其具有访问权限的所有工件及所述所有工件所依赖的其它工件。如果请求为带有该开发人员的身份ID的工件名称,则该开发人员只想获取其具有访问权限的该特定的工件及所述特定工件所依赖的其它工件。
在本实施例中,上述工件可以是在项目开发的过程中产生的任何实体,例如接口、组件/模块和数据等等。接口是指为通信双方进行通信而定义的协议,其由组件实现。组件/模块是指包括应用逻辑的源代码,用于实现一定的功能。数据是指供组件具体使用的数据。图3示出了根据本发明的实施例的项目工件的一个实例,其示出了一个接口FoodOrder_Interface_FoodService。在图3中,check和notifycollector是这个接口的两个方法,check方法的功能是检查当前是否有在时间间隔timeIntervalBO内的订单需要进行定餐操作。Notifycollector方法是将准备好的信息message发送给定餐管理员,通知其进行定餐操作。
图4示出了根据本发明的实施例的项目工件的另一个实例,其示出了一个数据TimeIntervalBO的内容。在图4中,TimeIntervalBO是一个时间间隔数据类型,由起始时间和终止时间构成,例如开始为10/26/20071:00:00PM终止为10/26/2007 1:30:00PM。
应该理解,这里示出和列举的工件的例子只是为了示例性说明,本发明并不限于此,上述工件可以是项目开发过程中产生的任何实体。
在本实施例中,项目分配信息是有关项目划分和项目开发情况的信息。在对一个项目进行开发之前,项目管理员需要将项目划分为若干个子项目,由不同的开发人员或开发人员组来开发各个子项目。在项目开发的过程中,开发出的工件与开发人员具有对应关系。因此,上述项目分配信息实际上是一个对照表,如下面的表1所示,其列出了每个子项目由谁来开发,即列出了开发人员和项目工件之间的映射关系。
表1
开发人员 | 子项目 |
Alice | FoodProductManagement_Interface_FoodProductChange |
FoodProductManagement_Interface_FoodProductDelete | |
Bob | FoodProductManagement_Interface_FoodProductGet |
在上述表1中可见,开发人员Alice负责开发子项目FoodProductManagement_Interface_FoodProductChange和FoodProductManagement_Interface_FoodProductDelete,开发人员Bob负责子项目FoodProductManagement_Interface_FoodProductGet。
在本实施例中,项目工件依赖关系是指在项目的开发过程中产生的各个工件之间的依赖关系,即相互之间的调用关系。图2示出了根据本发明的实施例的项目工件依赖关系的一个实例。在图2中,示出了接口、组件和数据之间的依赖关系,例如,组件C3实现接口I3,引用接口I4和I5,并使用数据D2和D4。应该理解,图2只是示例性示出了项目工件之间的依赖关系,本发明并不限于此,例如还可以包括数据和数据、接口和数据之间的依赖关系等。应该理解,本发明只对一个工件直接依赖的工件生成代理,对所述工件间接依赖的工件无需生成代理,因为其不影响所述工件的执行。
接着,在步骤102,针对该开发人员具有访问权限的工件,提供物理工件。具体地,在项目档案库中查找所述开发人员具有访问权限的工件,其中将所述查找到的工件作为物理工件,其中物理工件是开发人员具有真实访问控制权限的在项目档案库中存在有对应的具体物理文件的开发工件。
在本实施例中,项目档案库(project repository)是一个中心存储单元,用于集中存储在项目开发过程中产生的任何工件。可选地,项目档案库不仅存储工件本身,而且存储每个工件的版本信息和变化情况。物理上,项目档案库可以通过单独的服务器实现,也可以通过版本控制系统VCS的文件管理系统实现。本发明对项目档案库没有任何限制,只要能够存储工件,并在需要的时候提供工件即可。
接着,在步骤103,如果开发人员具有访问权限的工件(如图2中的组件C1)依赖于其没有访问权限的工件(如图2中的接口I1)的运行,则针对该开发人员没有访问权限的工件(如I1),生成逻辑工件。
具体地,在项目档案库中查找所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件。然后,针对所述查找到的工件生成代理,其中将所述代理作为所述逻辑工件。
在查找到开发人员需要调用的工件后,为了不让该开发人员看到该工件的细节同时不影响该开发人员使用,在步骤103中生成的代理隐藏了查找到的该工件的实现细节,而不影响与该工件具有依赖关系的工件的执行。
具体地,生成代理的方法例如可以采用现有的JET(Java EmitterTemplates)方法,该方法的具体细节参见如下链接[1]-[2]:
[1]http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html
[2]http://www.eclipse.org/articles/Article-JET2/jet_tutorial2.html
应该理解,本发明的生成代理的方法并不限于此,可以使用本领域的技术人员公知的任何方法,只要能够将生成代理的工件的主要代码保留,同时隐藏重要的细节即可。
下面以图3示出的上述接口FoodOrder_Interface_FoodService为例详细描述本实施例的生成代理的过程。
实现接口FoodOrder_Interface_FoodService的代码如下:
package com.dcm.foodsystem;
import com.dcm.foodsystem.FoodOrder_Interface_FoodService;
import com.ibm.websphere.sca.Ticket;
import commonj.sdo.DataObject;
import com.ibm.websphere.sca.ServiceManager;
public class FoodSystem1Impl{
/**
*Default constructor.
*/
public FoodSystem1Impl(){
super();
}
/**
*Return a reference to the component service instance for this
*implementation class.This method should be used when passing this
*service to a partner reference or if you want to invoke this component
*service asynchronously.
*
*generated(com.ibm.wbit.java)
*/
private Object getMyService(){
return(Object) ServiceManager.INSTANCE.locateService(″self″);
}
/**
*This method is used to locate the service for the reference named
*″FoodOrder_Interface_FoodServicePartner″.This will return an instance of
*{link FoodOrder_Interface_FoodService}.If you would like to use this
*service asynchronously then you will need to cast the result to
*{link FoodOrder_Interface_FoodServiceAsync}.
*
*generated(com.ibm.wbit.java)
*
*return FoodOrder_Interface_FoodService
*/
public FoodOrder_Interface_FoodService
locateService_FoodOrder_Interface_FoodServicePartner(){
return(FoodOrder_Interface_FoodService)ServiceManager.INSTANCE
.locateService(″FoodOrder_Interface_FoodServicePartner″);
}
/**
*Method generated to support implemention of operation″check″defined for
*WSDL port type named″interface.FoodOrder_Interface_FoodService″.
*
*The presence of commonj.sdo.DataObject as the return type and/or as a
*parameter type conveys that its a complex type.Please refer to the WSDL
*Definition for more information on the type of input,output and
*fault(s).
*/
public Boolean check(DataObject timeIntervalBO){
System.out.println(timeIntervalBO);
Boolean result=locateService_FoodOrder_Interface_FoodServicePartner()
.check(timeIntervalBO);
System.out.println(″result″+result);
return result;
}
/**
*Method generated to support implemention of operation″notifyCollector″
*defined for WSDL port type named
*″interface.FoodOrder_Interface_FoodService″.
*
*Please refer to the WSDL Definition for more information on the type of
*input,output and fault(s).
*/
public String notifyCollector(String message){
String result=locateService_FoodOrder_Interface_FoodServicePartner()
.notifyCollector(message);
return result;
}
}
在生成代理的过程中,将接口FoodOrder_Interface_FoodService中的public Boolean check(DataObject timeIntervalBO)的实现细节隐藏,只将结果“true”返回。虽然在上述实施例中将“true”作为返回结果,但是,应该理解,“true”或“false”都可以作为返回结果。实际操作中开发人员可以任意设置缺省的返回结果,或者在自己的代码中修改这些缺省的返回结果,并基于这些修改的结果测试自己开发的代码。即将
public Boolean check(DataObject timeIntervalBO){
System.out.println(timeIntervalBO);
Boolean result=locateService_FoodOrder_Interface_FoodServicePartner()
.check(timeIntervalBO);
System.out.println(″result″+result);
return result;
}
省略为
public Boolean check(DataObject timeIntervalBO){
return true;
}
此外,将接口FoodOrder_Interface_FoodService中的public Booleanpublic String notifyCollector(String message)的实现细节隐藏,只将结果“null”返回。即将
public String notifyCollector(String message){
String result=locateService_FoodOrder_Interface_FoodServicePartner()
.notifyCollector(message);
return result;
}
省略为
public String notifyCollector(String message){
return null;
}
从而,针对接口FoodOrder_Interface_FoodSerVice生成的代理的代码如下:
package com.dcm.foodsystem;
import com.dcm.foodsystem.FoodOrder_Interface_FoodService;
import com.ibm.websphere.sca.Ticket;
import commonj.sdo.DataObject;
import com.ibm.websphere.sca.ServiceManager;
public class FoodSystem2Impl{
/**
*Default constructor.
*/
public FoodSystem2Impl(){
super();
}
/**
*Return a reference to the component service instance for this
*implementation class.This method should be used when passing this
*service to a partner reference or if you want to invoke this component
*service asynchronously.
*
*generated(com.ibm.wbit.java)
*/
private Object getMyService(){
return(Object)ServiceManager.INSTANCE.locateService(″self″);
}
/**
*This method is used to locate the service for the reference named
*″FoodOrder_Interface_FoodServicePartner″.This will return an instance of
*{link FoodOrder_Interface_FoodService}.If you would like to use this
*service asynchronously then you will need to cast the result to
*{link FoodOrder_Interface_FoodServiceAsync}.
*
*generated(com.ibm.wbit.java)
*
*return FoodOrder_Interface_FoodService
*/
public FoodOrder_Interface_FoodService
locateService_FoodOrder_Interface_FoodServicePartner(){
return(FoodOrder_Interface_FoodService)ServiceManager.INSTANCE
.locateService(″FoodOrder_Interface_FoodServicePartner″);
}
/**
*Method generated to support implemention of operation″check″defined for
*WSDL port type named″interface.FoodOrder_Interface_FoodService″.
*
*The presence of commonj.sdo.DataObject as the return type and/or as a
*parameter type conveys that its a complex type.Please refer to the WSDL
*Definition for more information on the type of input,output and
*fault(s).
*/
pubic Boolean check(DataObject timeIntervalBO){
return true;
}
/**
*Method generated to support implemention of operation″notifyCollector″
*defined for WSDL port type named
*″interface.FoodOrder_Interface_FoodService″.
*
*Please refer to the WSDL Definition for more information on the type of
*input,output and fault(s).
*/
public String notifyCollector(String message){
return null;
}
}
在接口FoodOrder_Interface_FoodService中,public Booleancheck(DataObject timeIntervalBO)和public Boolean public StringnotifyCollector(String message)是该接口的两个操作,所有的应用逻辑都在这两个操作中。该接口中的其它代码是保证接口的实现能够正常运行的辅助性代码,在不同的接口的实现中都是相同的。此外,对于需要隐藏实现细节的操作,本发明的方法可以根据接口定义自动进行挑选,例如将图3所示的接口中的check操作和notifyCollector操作自动挑选出来并隐藏,而将其它公共代码保留下来。
以上虽然以接口FoodOrder_Interface_FoodService为例描述了本实施例的为工件生成代理的过程,但是上述过程只是示例性的,本发明并不限于此,只要能够将实现接口的操作的代码删除,仅创建符合返回类型的随机数据,并保留其它代码即可。
最后,在步骤104,将所述物理工件和所述逻辑工件一起发送给所述开发人员。
通过使用本实施例的为开发人员提供项目开发环境的方法,通过生成代理使每个开发人员不能接触到整个项目的内容,提高了项目开发的安全性。同时,能够自动地为开发人员提供完整的逻辑开发环境,保证其能够自由调用所依赖的工件。因此本发明与手动方法相比,提高了开发效率。
为开发人员提供项目开发环境的装置
图5示出了根据本发明的一个实施例的为开发人员提供项目开发环境的装置的方框图。下面就结合该图,对本实施例进行描述。对于那些与前面实施例相同的部分,适当省略其说明。
如图5所示,本实施例的为开发人员提供项目开发环境的装置500,包括:项目工件过滤单元501,根据开发人员的请求、项目分配信息和项目工件依赖关系,确定该开发人员具有访问权限的工件,和该开发人员具有访问权限的工件所依赖的其它该开发人员没有访问权限的工件;物理工件提供单元502,针对该开发人员具有访问权限的工件,提供物理工件;逻辑工件生成单元503,针对该开发人员具有访问权限的工件所依赖的其它该开发人员没有访问权限的工件,生成逻辑工件;以及发送单元504,将所述物理工件和所述逻辑工件一起发送给所述开发人员。
具体地,开发人员的请求包括该开发人员的ID或者带有该开发人员的身份ID的工件名称。开发人员的身份可以根据开发人员的用户名或IP地址等来识别,本发明对此没有任何限制,只要能够识别提出请求的开发人员的身份即可。
在本实施例中,如果请求为开发人员的身份ID,则该开发人员希望获取其具有访问权限的所有工件及所述所有工件所依赖的其它工件。如果请求为带有该开发人员的身份ID的工件名称,则该开发人员只想获取其具有访问权限的该特定的工件及所述特定工件所依赖的其它工件。
在本实施例中,上述工件是在项目开发的过程中产生的任何实体,例如接口、组件和数据等等。接口是指为通信双方进行通信而定义的协议,其由组件实现。组件是指包括应用逻辑的源代码,用于实现一定的功能。数据是指供组件具体使用的数据。图3示出了根据本发明的实施例的项目工件的一个实例,其示出了一个接口FoodOrder_Interface_FoodService。图4示出了根据本发明的实施例的项目工件的另一个实例,其示出了一个数据TimeIntervalBO。
应该理解,这里示出和列举的工件的例子只是为了示例性说明,本发明并不限于此,上述工件可以是项目开发过程中产生的任何实体。
在本实施例中,项目分配信息是有关项目划分和项目开发情况的信息。在对一个项目进行开发之前,项目管理员需要将项目划分为若干个子项目,由不同的开发人员或开发人员组来开发各个子项目。在项目开发的过程中,开发出的工件与开发人员具有对应关系。因此,上述项目分配信息实际上是一个对照表,其列出了每个子项目由谁来开发,即列出了开发人员和项目工件之间的映射关系。
在本实施例中,项目工件依赖关系是指在项目的开发过程中产生的各个工件之间的依赖关系,即一个工件对另一个工件的依赖关系。图2示出了根据本发明的实施例的项目工件依赖关系的一个实例。在图2中,示出了接口、组件和数据之间的依赖关系,例如,组件C3实现接口I3,引用接口I4和I5,并使用数据D2和D4。应该理解,图2只是示例性示出了项目工件之间的依赖关系,本发明并不限于此。
具体地,物理工件提供单元502在项目档案库中查找所述开发人员具有访问权限的工件,其中将所述查找到的工件作为所述物理工件。
在本实施例中,项目档案库是一个中心存储单元,用于集中存储在项目开发过程中产生的任何工件。可选地,项目档案库不仅存储工件本身,而且存储每个工件的版本信息和变化情况。物理上,项目档案库可以通过单独的服务器实现,也可以通过版本控制系统VCS的文件管理系统实现。本发明对项目档案库没有任何限制,只要能够存储工件,并在需要的时候提供工件即可。
具体地,逻辑工件生成单元503在项目档案库中查找所述开发人员具有访问权限的工件所依赖的其它所述开发人员没有访问权限的工件。然后,针对所述查找到的工件生成代理,其中将所述代理作为所述逻辑工件。
在查找到开发人员需要调用的工件后,为了不让该开发人员看到该工件的细节同时不影响该开发人员使用,逻辑工件生成单元503生成的代理隐藏了查找到的该工件的实现细节,而不影响与该工件具有依赖关系的工件的执行。
具体地,逻辑工件生成单元503例如可以采用现有的JET(JavaEmitter Templates)技术,该技术的具体细节参见如下链接[1]-[2]:
[1]http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html
[2]http://www.eclipse.org/articles/Article-JET2/jet_tutorial2.html
应该理解,本发明的逻辑工件生成单元503并不限于此,可以使用本领域的技术人员公知的任何生成单元,只要能够将生成代理的工件的主要代码保留,同时隐藏重要的细节即可。
逻辑工件生成单元503生成代理的具体过程与上述实施例中以图3示出的接口FoodOrder_Interface_FoodService为例描述的生成代理的过程相同,在此不再赘述。
通过使用本实施例的为开发人员提供项目开发环境的装置500,通过逻辑工件生成单元503生成代理使每个开发人员不能接触到整个项目的内容,提高了项目开发的安全性。同时,能够自动地为开发人员提供完整的逻辑开发环境,与手动方法相比,提高了开发效率。
项目开发系统
在同一发明构思下,图6示出了根据本发明的一个实施例的项目开发系统的方框图。下面就结合该图,对本实施例进行描述。对于那些与前面实施例相同的部分,适当省略其说明。
如图6所示,本实施例的项目开发系统600包括:项目管理工具PMT601,用于对项目进行分配,并提供项目分配信息;版本控制系统VCS 602,用于管理和存储在项目开发过程中生成的工件;集成开发环境IDE 603,用于开发人员进行项目开发;以及上述为开发人员提供项目开发环境的装置500,用于根据开发人员的请求、所述项目管理工具提供的项目分配信息、和项目工件依赖关系,为开发人员提供逻辑开发环境。
在本实施例中,项目管理工具PMT 601可以是本领域的技术人员公知的任何项目管理工具,只要能够将一个项目划分为若干个子项目,并在项目开发过程中对项目进行管理即可。版本控制系统VCS 602可以是例如CVS、ClearCase和CMVC等等,本发明对此没有任何限制,只要能够对项目开发过程中生成的工件进行管理和存储即可。集成开发环境IDE 603可以是本领域的技术人员公知的任何开发环境,只要能够让开发人员进行项目开发即可。
本实施例的项目开发系统600为开发人员提供集成开发环境的过程与上述方法和装置的实施例相同,在此不再赘述。
通过使用本实施例的项目开发系统600,通过生成代理使每个开发人员不能接触到整个项目的内容,提高了项目开发的安全性。同时,能够自动地为开发人员提供完整的逻辑开发环境,与手动方法相比,提高了开发效率。
此外,本实施例的项目开发系统600集成了项目管理工具PMT、版本控制系统VCS和集成开发环境IDE,从而为项目开发提供了完整、安全、综合的开发环境,极大地提高了开发效率。
除非另有说明,本发明所述的功能可用硬件或软件或它们的结合来运行。然而,在一优选实施列中,除非另有说明,这些功能是由处理器,如计算机或电子数据处理器,按照编码,如计算机程序编码,的集成电路来执行的。一般来说,为了实现本发明的实施例而执行的方法可以是操作系统或特定应用程序的一部分、程序、模块、对象或指令序列。本发明的软件通常包括将由本地计算机呈现成机器可读格式的众多指令,因此是可执行指令。此外,程序包括相对于程序来说驻留在本地或在存储器中找到的变量和数据结构。另外,下文描述的各种程序可以根据在本发明的特定实施例中实现它们的应用方法来识别。当携带指向本发明的功能的计算机可读指令时,这样的信号承载媒体代表本发明的实施例。
以上虽然通过一些示例性的实施例对本发明的为开发人员提供项目开发环境的方法,为开发人员提供项目开发环境的装置,以及项目开发系统进行了详细的描述,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅由所附权利要求为准。
Claims (17)
1.一种为开发人员提供项目开发环境的方法,包括以下步骤:
根据开发人员的请求、项目分配信息和项目工件依赖关系,确定所述开发人员具有访问权限的工件,和所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件;
针对所述开发人员具有访问权限的工件,提供物理工件,其中所述提供物理工件进一步包括查找所述开发人员具有访问权限的工件,将所述查找到的工件作为物理工件;
针对所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件,生成逻辑工件,其中所述生成逻辑工件进一步包括查找所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件,并针对所述其它工件生成代理,将所述代理作为所述逻辑工件;以及
将所述物理工件和所述逻辑工件一起发送给所述开发人员。
2.根据权利要求1所述的方法,其中所述查找所述开发人员具有访问权限的工件进一步包括:
在项目档案库中查找所述开发人员具有访问权限的工件。
3.根据权利要求1所述的方法,其中所述查找所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件进一步包括:
在项目档案库中查找所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件。
4.根据权利要求3所述的方法,其中所述代理隐藏所述查找到的工件的实现细节。
5.根据权利要求1-4中任何一项所述的方法,其中所述工件包括项目开发过程中产生的任何实体。
6.根据权利要求5所述的方法,其中所述实体包括接口、组件和数据中的至少一个。
7.根据权利要求1-4中任何一项所述的方法,其中所述项目分配信息包括开发人员和项目工件之间的映射关系。
8.根据权利要求1-4中任何一项所述的方法,其中所述项目工件依赖关系包括各项目工件之间的调用关系。
9.一种为开发人员提供项目开发环境的装置,包括:
项目工件过滤单元,根据开发人员的请求、项目分配信息和项目工件依赖关系,确定所述开发人员具有访问权限的工件,和所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件;
物理工件提供单元,针对所述开发人员具有访问权限的工件,提供物理工件,其中所述物理工件提供单元进一步查找所述开发人员具有访问权限的工件,将所述查找到的工件作为物理工件;
逻辑工件生成单元,针对所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件,生成逻辑工件,其中所述逻辑工件生成单元进一步查找所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件,并针对所述其它工件生成代理,将所述代理作为所述逻辑工件;以及
发送单元,将所述物理工件和所述逻辑工件一起发送给所述开发人员。
10.根据权利要求9所述的装置,其中所述查找所述开发人员具有访问权限的工件进一步包括:
在项目档案库中查找所述开发人员具有访问权限的工件。
11.根据权利要求9所述的装置,其中所述查找所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件进一步包括:
在项目档案库中查找所述开发人员具有访问权限的工件所依赖的所述开发人员没有访问权限的其它工件。
12.根据权利要求11所述的装置,其中所述代理隐藏所述查找到的工件的实现细节。
13.根据权利要求9-12中任何一项所述的装置,其中所述工件包括项目开发过程中产生的任何实体。
14.根据权利要求13所述的装置,其中所述实体包括接口、组件和数据中的至少一个。
15.根据权利要求9-12中任何一项所述的装置,其中所述项目分配信息包括开发人员和项目工件之间的映射关系。
16.根据权利要求9-12中任何一项所述的装置,其中所述项目工件依赖关系包括各项目工件之间的调用关系。
17.一种项目开发系统,包括:
项目管理工具PMT,用于对项目进行分配,并提供项目分配信息;
版本控制系统VCS,用于管理和存储在项目开发过程中生成的工件;
集成开发环境IDE,用于开发人员进行项目开发;以及
根据权利要求9-16中任何一项所述的装置,用于根据开发人员的请求、所述项目管理工具提供的项目分配信息、和项目工件依赖关系,为开发人员提供逻辑开发环境。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710165836.7A CN101430643B (zh) | 2007-11-05 | 2007-11-05 | 提供项目开发环境的方法和装置,以及项目开发系统 |
US12/261,008 US8327317B2 (en) | 2007-11-05 | 2008-10-29 | Method and apparatus for providing project development environment and project development system |
JP2008283691A JP5475979B2 (ja) | 2007-11-05 | 2008-11-04 | プロジェクト開発環境を与える方法及び装置並びにプロジェクト開発システム(プロジェクト開発環境を与える方法及び装置並びにプロジェクト開発システム) |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710165836.7A CN101430643B (zh) | 2007-11-05 | 2007-11-05 | 提供项目开发环境的方法和装置,以及项目开发系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101430643A CN101430643A (zh) | 2009-05-13 |
CN101430643B true CN101430643B (zh) | 2012-06-27 |
Family
ID=40589434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710165836.7A Active CN101430643B (zh) | 2007-11-05 | 2007-11-05 | 提供项目开发环境的方法和装置,以及项目开发系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8327317B2 (zh) |
JP (1) | JP5475979B2 (zh) |
CN (1) | CN101430643B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101235330B1 (ko) * | 2009-12-21 | 2013-02-19 | 한국전자통신연구원 | 임베디드 소프트웨어 개발 도구 통합 관리 장치 및 방법 |
US8650532B2 (en) | 2010-05-11 | 2014-02-11 | Microsoft Corporation | Change notification and information update based on uncompiled software development project |
CN102012816B (zh) * | 2010-11-30 | 2014-06-11 | 深圳创维-Rgb电子有限公司 | 一种生成ide工程文件和解决方案文件的方法与装置 |
EP2503454A1 (en) * | 2011-03-24 | 2012-09-26 | Walter Schatz | Method and a system for generating a software product |
US9053442B2 (en) | 2012-05-08 | 2015-06-09 | International Business Machines Corporation | Multiple project areas in a development environment |
US8938708B2 (en) * | 2012-08-14 | 2015-01-20 | International Business Machines Corporation | Determining project status in a development environment |
US9645807B2 (en) * | 2012-08-28 | 2017-05-09 | International Business Machines Corporation | Automated deployment of a configured system into a computing environment |
US9128724B2 (en) | 2012-08-28 | 2015-09-08 | International Business Machines Corporation | Configuring assembly of a system using supplied architectural artifacts |
CN104375843A (zh) * | 2014-12-11 | 2015-02-25 | 浪潮电子信息产业股份有限公司 | 一种基于权限控制自动生成页面的方法 |
US11086640B2 (en) * | 2015-12-30 | 2021-08-10 | Palantir Technologies Inc. | Composite graphical interface with shareable data-objects |
US9612723B1 (en) * | 2015-12-30 | 2017-04-04 | Palantir Technologies Inc. | Composite graphical interface with shareable data-objects |
US10521220B1 (en) | 2018-12-18 | 2019-12-31 | Palantir Technologies Inc. | Systems and methods for coordinating the deployment of components to defined user groups |
CN110531962B (zh) * | 2019-08-06 | 2023-11-17 | 上海连尚网络科技有限公司 | 小程序的开发处理方法、设备及计算机可读存储介质 |
CN111061403A (zh) * | 2019-11-15 | 2020-04-24 | 福士瑞精密工业(郑州)有限公司 | 刀具信息处理装置、处理方法、服务器及存储介质 |
CN111625221B (zh) * | 2020-05-26 | 2023-09-29 | 艾普阳科技(深圳)有限公司 | 应用于集成开发环境的版本控制方法、装置及设备和介质 |
CN112558963A (zh) * | 2020-12-16 | 2021-03-26 | 中国人寿保险股份有限公司 | 一种软件开发方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1746879A (zh) * | 2004-09-06 | 2006-03-15 | 英业达股份有限公司 | 资源开发管理系统以及方法 |
CN1869991A (zh) * | 2006-06-30 | 2006-11-29 | 南京联创科技股份有限公司 | 基于动态代理的数据访问对象模式的实现方法 |
CN101046746A (zh) * | 2006-03-31 | 2007-10-03 | Sap股份公司 | 分布式软件开发环境中的代码管理 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5758351A (en) * | 1995-03-01 | 1998-05-26 | Sterling Software, Inc. | System and method for the creation and use of surrogate information system objects |
US7139999B2 (en) * | 1999-08-31 | 2006-11-21 | Accenture Llp | Development architecture framework |
US6757893B1 (en) * | 1999-12-17 | 2004-06-29 | Canon Kabushiki Kaisha | Version control system for software code |
US6748380B2 (en) * | 2001-05-14 | 2004-06-08 | International Business Machines Corporation | Method, system, and program product for permission to access software |
JP3673189B2 (ja) * | 2001-05-21 | 2005-07-20 | 株式会社東芝 | 書き込み制御方法および構造化文書管理装置および構造化文書編集装置およびプログラム |
US7698636B2 (en) * | 2002-06-13 | 2010-04-13 | Microsoft Corporation | System and method for in-context editing of components |
US7174348B1 (en) | 2002-11-26 | 2007-02-06 | Unisys Corporation | Computer program having an object module and a software development tool integration module which automatically interlink artifacts generated in different phases of a software project |
JP2004287947A (ja) * | 2003-03-24 | 2004-10-14 | Sharp Corp | データ管理装置およびデータ管理プログラム |
JP2006134214A (ja) | 2004-11-09 | 2006-05-25 | Hitachi Ltd | ファイルのバージョン管理方法および計算機システム |
EP1675044A1 (de) | 2004-12-21 | 2006-06-28 | Siemens Aktiengesellschaft | Engineering-System für verteilte Entwicklung und Entwicklung durch mehrere Nutzer |
JP5002975B2 (ja) * | 2006-02-08 | 2012-08-15 | 富士電機株式会社 | プログラム開発支援システム |
WO2008124038A1 (en) * | 2007-04-03 | 2008-10-16 | Ldra Technology, Inc. | Automated management of software requirements verification |
US8060855B2 (en) * | 2007-10-09 | 2011-11-15 | Microsoft Corporation | Artifact sharing from a development environment |
-
2007
- 2007-11-05 CN CN200710165836.7A patent/CN101430643B/zh active Active
-
2008
- 2008-10-29 US US12/261,008 patent/US8327317B2/en active Active
- 2008-11-04 JP JP2008283691A patent/JP5475979B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1746879A (zh) * | 2004-09-06 | 2006-03-15 | 英业达股份有限公司 | 资源开发管理系统以及方法 |
CN101046746A (zh) * | 2006-03-31 | 2007-10-03 | Sap股份公司 | 分布式软件开发环境中的代码管理 |
CN1869991A (zh) * | 2006-06-30 | 2006-11-29 | 南京联创科技股份有限公司 | 基于动态代理的数据访问对象模式的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
US8327317B2 (en) | 2012-12-04 |
JP5475979B2 (ja) | 2014-04-16 |
US20090119638A1 (en) | 2009-05-07 |
CN101430643A (zh) | 2009-05-13 |
JP2009116875A (ja) | 2009-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101430643B (zh) | 提供项目开发环境的方法和装置,以及项目开发系统 | |
US20220253298A1 (en) | Systems and methods for transformation of reporting schema | |
US8490050B2 (en) | Automatic generation of user interfaces | |
US8181155B2 (en) | Unified expression and location framework | |
CN105760168A (zh) | 一种代码文件自动生成方法及系统 | |
Fill | SeMFIS: a flexible engineering platform for semantic annotations of conceptual models | |
Groth et al. | A model of process documentation to determine provenance in mash-ups | |
Wesley et al. | Verifying Solidity smart contracts via communication abstraction in SmartACE | |
US20090259987A1 (en) | Method, system and computer program product for recommending components based on common usage patterns | |
Ketkar et al. | Inferring and applying type changes | |
Chen et al. | Decomposition of UML activity diagrams | |
CN113987337A (zh) | 基于组件化动态编排的搜索方法、系统、设备及存储介质 | |
Pati et al. | A survey report of enhancements to the visitor software design pattern | |
US10606569B2 (en) | Declarative configuration elements | |
US20210157807A1 (en) | Object-based search processing | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
Ebert et al. | GReTL: an extensible, operational, graph-based transformation language | |
Wang et al. | Translating Event-B machines to database applications | |
CN113495723A (zh) | 一种调用功能组件的方法、装置及存储介质 | |
CN112287012B (zh) | 采用Spark SQL模式实现http接口调用方法 | |
US20230205496A1 (en) | Declarative visual programming language code search | |
US9378468B2 (en) | Generic boxed components for multi-client systems | |
Brown | Introduction to UTL_HTTP | |
Rademacher et al. | Model-Driven Engineering of Microservice Architectures—The LEMMA Approach | |
Ali et al. | Towards Efficient Model Comparison using Automated Program Rewriting |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |