我想更多地了解/更好地了解至少拥有两个团队的开发团队的常见Java Web开发实践 - Web设计人员和Web组件开发人员。特别是,我有兴趣理解这样的事情:
假设有一个代码存储库,那么所有团队都会检查所有代码的本地副本吗?如果是,为什么网页设计师想要/需要访问后端代码,同样为什么Web组件开发人员想要/需要访问前端代码?
每个团队成员,无论团队成员如何测试他们的代码,他们如何将代码“部署”到本地工作站,开发盒上的单个实例或整合开发框?
如何进行集成和测试?例如,假设一个Web设计人员创建一个“注册”表单页面,Web组件开发人员创建后端代码来处理并将数据插入到数据库中 - 如何集成前端和后端代码并经过测试?
有关开发组的Java Web开发实践的任何其他信息,我没有特别询问,但是相关,请分享。
编辑(后续行动): 我很欣赏这些答案,他们填补了我对java web开发的大部分概念漏洞。但是,我确实有几个后续问题 -
测试,特别是自动化测试显然是Java Web开发的重要部分;但什么构成了良好的“考验”?例如,假设一个java后端开发人员只是将接受表单数据的代码放在一起,验证它,然后插入/更新数据库。在这种情况下,什么是一个好的测试?此外,这怎么可能“自动化”?
有人可以阐述持续集成 - 即他们只编译所有项目代码的目的吗?或者它是否有助于自动化测试?根据我的理解,continuance集成服务器监视提交的存储库,并在提交时检出新修改的代码并编译整个项目;在成功/失败编译时,通知用户。
答案 0 :(得分:4)
我们总是会查看我们可以获得的所有源代码。外部库,后端系统和工作的源代码。读取后端系统的代码使前端开发人员更容易理解正在发生的事情。后端开发人员有时会阅读前端代码以了解事情的实际使用情况。更多代码是好东西。 Maven还支持自动下载源代码,这很棒。
我们使用maven,我真的在团队环境中推荐它。我们在团队集中测试服务器和通用接受环境中进行本地部署。越接近“家”,你就可以测试,更便宜,更有效率。
我们使用selenium进行大量测试,允许使用正确部署的webapp“通过前端”进行测试。除此之外,运行部分堆栈的大多数集成测试都在maven配置文件中作为常规junit测试运行。
答案 1 :(得分:4)
我们如何在团队中这样做:
是。即使您没有使用所有部件,每个成员也会检出所有代码。您需要在工作时快速查看所做的更改,在本地计算机上运行该应用程序。前端人员需要运行后端代码才能看到前端效果。
在编码期间,每个成员都在自己的机器上运行代码。在签入时,它在一个特别指定的服务器上作为一个整体进行测试。
测试应尽可能自动化。每个团队成员都会为其部分代码编写测试代码,并且也会签入。您可以使用持续集成服务器自动运行这些测试。但是初始测试实际上是在本地机器上完成的。如果我检查代码,然后更改后端类,我将运行代码并确保它在我的机器上工作,更新任何需要更新的测试并提交我的更改。自动化测试在服务器上运行,以确保各种提交都能很好地协同工作。
我不能说这是最好的最佳实践,但对于我们这个只有4个开发人员的小团队来说,这是实践。
答案 2 :(得分:3)
总结一下Maven方式。
答案 3 :(得分:2)
对于第一个问题,您通常应该能够看到堆栈跟踪中每一行的源代码(这也意味着您使用JDK进行开发,因为Eclipse会自动将src.zip文件附加到运行时库中即使它超出了你自己的专业领域。
所以,请尽可能检查。它有一天会对你有所帮助 - 如果他们知道整个团队总能看到它,那么编码员往往会编写更好的代码并更好地记录它。
用于开发和部署。您可以做任何您想要开发和测试代码的内容,但是生产中或团队外部的任何代码必须由机器构建(这确保了可重复性)。我们使用Hudson,但这只是一个意外。 Atlassian Bamboo的最新入门团队许可可能意味着我们也使用它。
答案 4 :(得分:1)
在我们的团队中......
我们的目的是通常在存储库中为新的开发创建一个新的分支,然后在准备好部署到生产环境中时将它们合并到要标记的主干中。所以我们检查出我们正在处理的所有分支。此外,使用SVN,多个编码器可以在同一个文件上工作,因为SVN不会锁定文件,让你在之后合并它们,但这是一个非常罕见的情况。自动合并并不总是有效,您必须进行一些“手动合并”。
首先进行测试,然后部署在开发环境中,然后部署在验收环境中。在DEV和验收环境中测试的代码由Luntbuild / ANT构建,并通过Jythons脚本在我们的ApplicationServer中进行编译。我们从不在当地环境之外部署或建造。如果可能,我们会要求团队中的其他人测试这些部署。
Cactus API让您“加速”servlet / struts / web app的jUnit测试。我们使用JMeter和Selenium(不错的firefox插件)进行一些压力测试以进行其他测试。您还可以运行覆盖工具(如EMMA),让您知道jUnit / Cactus测试覆盖的代码百分比。
答案 5 :(得分:1)
假设有一个代码存储库,那么所有团队都会检查所有代码的本地副本吗?如果是,为什么网页设计师想要/需要访问后端代码,同样为什么Web组件开发人员需要/需要访问前端代码?
这取决于您的项目/构建的大小和模块化程度。对于具有大代码库的大型项目,必须使用模块化方法和二进制依赖项。这将大大改善本地构建时间。如果我处理模块A(取决于B),我不想在开发周期中编译B.这会让我慢下来,这很烦人。我更喜欢在B上使用二进制依赖(如果需要,我仍然可以签出B并在本地编译)。
每个团队成员,无论团队成员如何测试他们的代码,他们如何将代码“部署”到本地工作站,开发盒上的单个实例或统一开发框?
为每个开发人员使用专用环境,用于Web服务器,应用程序服务器,数据库实例(请参阅Use one database instance per developer)。团队成员应该能够在不干扰他人的情况下重新启动,重新部署(即使我主张最小化在开发期间“在容器中”花费的时间,即更喜欢单独的单元测试)。因此,更喜欢本地工作站以获取可能需要重新启动的所有内容:Web服务器,应用程序服务器等。本地部署通常也更容易。对于数据库,远程数据库实例通常很好(例如,如果你有一个大的oracle服务器可能会更好)。使用统一的开发框进行持续集成过程。
如何进行集成和测试?例如,假设一个Web设计人员创建一个“注册”表单页面,Web组件开发人员创建后端代码来处理并将数据插入到数据库中 - 如何集成前端和后端代码并经过测试?
首先单独测试它们。如果需要,模拟/存根后端。然后测试整体。在进行与数据库交互的集成或功能测试时,一个好的做法是在运行测试之前始终将数据库置于已知状态(请参阅Good setup don't need cleanup!)。 DBUnit可以帮助您做到这一点。 Cactus是服务器端测试的另一个好工具,例如集成测试。要运行功能测试(即端到端测试),Selenium或WebDriver是很好的候选者。对于验收测试(或BBD),我目前正在调查Cucumber,我喜欢它。