9

我是一个学术联盟的唯一开发者,该联盟的总部设在东北的一所大学。我所有的开发工作都涉及内部工具,主要是 Java,所以没有向公众发布。现在,我觉得我的开发工作流程非常“业余”,与您在经验丰富的软件开发公司看到的完全不同。我倾向于说这并不重要,因为无论如何我是唯一的开发人员,但如果没有其他原因,只是为了让我的工作更轻松一些,做一些改变并没有什么坏处我的简历上有更多技术。现在我的工作流程是这样的:

  • 我的大部分开发工作都是在笔记本电脑上的 Eclipse 中完成的。一切都保存在我的笔记本电脑本地,我不使用 VCS,也没有真正备份我的代码(除了偶尔通过电子邮件发送给自己,以便我可以在另一台计算机上查看它 - 是的,我告诉过你我的开发环境需要工作)。

  • 当我完成一个项目并想要部署它或者我只是想测试它时,我使用 Eclipse 中的内置 Jar 工具来制作我的项目的可执行 .jar。如果我使用外部 .jar 库,我会使用 Fat-Jar 插件将这些 .jar 包含在我的可执行 .jar 中。

  • 创建 .jar 后,我通过 SFTP 手动将其上传到服务器并使用 .jar 之类的内容对其进行测试java -jar MyProject.jar

哦,是的,我有没有提到我不进行单元测试?

我想首先解决的最明显的问题是我缺乏源代码控制。我喜欢 git,因为它是分布式的,但它似乎不能很好地与 Eclipse 集成,而且我听说它在我的主要开发操作系统 Windows 上不能很好地工作。所以,我倾向于SVN,我确实有一些经验。我确实有自己的个人服务器,我想我会用它来控制我的源代码,因为我宁愿自己做管理员也不愿与大学官僚作风。我之前在设置 SVN 时遇到了一些麻烦,但我会再试一次。也许我还会安装诸如 Trac 或 Redmine 之类的东西来进行错误跟踪、待办事项列表等?

构建和部署呢?必须有比使用 Fat-Jar 并手动将我的 jar 上传到服务器更好的方法。我听说过 Ant 和 Maven 之类的工具——这些工具是否适用于我想做的事情?我怎样才能开始使用这些?

我想我最终也想将单元测试与 JUnit 集成。尽管它可能应该是,但这不是我现在主要关心的问题,因为到目前为止我的应用程序并不是非常复杂。我现在真的很想简化和简化我的工作流程,然后我将轻松进行单元测试。

对不起,很长的问题。我想我的问题归结为,对于一个单独的开发人员来说,我可以/应该使用哪些工具和方法,不仅可以让我的工作更轻松,而且还可以让自己接触到一些技术,这些技术在专门的开发中是必需的知识屋?


编辑:感谢到目前为止的精彩回答。我并不是说我想让我的工作流程“企业化”只是为了这样做,而是为了让我的工作更简单,并掌握一些通常在企业开发环境中使用的技术。这就是我的意思。

4

13 回答 13

8

在我看来,你实际上对你需要做什么有一个很好的想法。

必须使用 Subversion(或其他 VCS)。尽管为您的工作相关代码设置一个单独的 SVN 存储库而不是使用个人存储库可能是明智的。

您可以使用像 Subclipse 这样的插件将 Subversion 与 Eclipse 集成,我发现它工作得很好。

我肯定会使用 Ant 或 Maven - 我更喜欢 Ant,因为它更灵活,而且我认为它比 Maven 更适合您的开发风格。但是您可能还想研究处理依赖管理的Apache Ivy 。

基本上,您设置了一个运行编译、构建和部署步骤的 ant 任务 - 这样当您创建最终的 JAR 包时,您可以确定它已经过单元测试,因为它是您的 ant 脚本的一部分。开始使用 ant 的最佳方法是查看一些示例,并通读手册

至于单元测试 - 您可以逐步建立单元测试。我建议将 JUnit 与Cobertura之类的代码覆盖工具(易于设置)结合使用——它将帮助您了解测试覆盖了多少代码,并且是您的测试有效程度的指标。

设置诸如 Trac 之类的东西也可能是值得的 - 能够跟踪错误很重要,并且 wiki 对文档非常有用。

换句话说,所有这些听起来你都在正确的路线上,你只需要开始使用其中一些工具!

于 2009-01-05T16:54:55.710 回答
2

如果你真的很喜欢分布式源代码控制,我建议你看看Bazaar。它的类似 GIT 的分布式源代码控制是围绕执行非常高质量的合并而设计的。开箱即用,它适用于包括 Windows 在内的所有平台,并且它们有一个TortoiseBZR客户端。

但实际上,任何源代码控制总比没有好。如果您是唯一的开发人员,那么不需要比 SVN 更复杂的东西。大公司和项目一直在使用 SVN,几乎没有问题。

就单元测试而言,您应该熟悉JUnit。您了解单元测试并知道您应该这样做这一事实仍然比大多数临时开发人员领先了几步。

于 2009-01-05T16:54:46.803 回答
2

使用版本控制。时期。SVN与 Eclipse 和 Windows有很好的集成。获取适用于 windows 的 TourtisSVN 客户端并在 Eclipse 中使用 subclipse 插件。

我建议使用外部 HD 或使用您公司的一台服务器来放置您的存储库并经常进行备份。Subversion 也适用于部署和升级。只要学习如何去做,你就永远不会回头:)

至于单元测试,有些人会说这是要走的路,但我还没有找到足够的证据来自己开始实践。如果有人在这个问题上可以说服我,那么请这样做!

此外,不要指望“企业化”您的工作流程 - 让它变得更好。适合大型团队和公司的做法可能不适合您。我自己几乎是唯一的开发人员,并且知道您所处的情况。只需尝试一切,然后只在一段时间后保持自然的感觉。

但请务必尝试 SVN!如果您的公司有一个带有 apache 的 LINUX 服务器,请查看您是否可以使用 DAV-SVN 在那里设置您的服务器。

:)

于 2009-01-05T16:55:43.353 回答
2

我想你回答了你自己的大部分问题。

  • 源代码控制:选择 SVN - 易于安装,与 Eclipse (subclipse) 完美集成。
  • 使用 Ant 构建您的项目并进行部署(SCP/SFTP 任务)
  • 将所有设置(Eclipse 项目设置、构建 xmls 等)保存在 SVN 中。
  • 使用 Bugzilla 跟踪您的错误/问题/请求/想法。
于 2009-01-05T16:57:15.880 回答
1

开始使用版本控制将是非常有益的。现在开始,事不宜迟!Git 的发展速度非常快,而且已经有一个 TortoiseGit 正在开发中。SVN 仍然是一个很好的标准。而且我没有与 Mercurial 合作过,但这是另一个值得研究的 VCS。

除此之外,我不明白为什么您的工作流程必须是企业化的。它只需要高效和舒适。也就是说,我认为您应该尝试使用简单的文本编辑器并从命令行编译。大多数世界上最优秀的程序员仍然使用它而不是 IDE,它将帮助您了解您最喜欢的 IDE 下的流程。

于 2009-01-05T16:54:16.400 回答
1

查看 Pragmatic Programmers 的Pragmatic Starter Kit

它向您介绍大学等软件开发的重要基础知识。似乎放弃了,如版本控制、单元测试和项目自动化(按此顺序),并且以非常平易近人的方式进行。

它会给你一个坚实的基础,让你继续前进。

于 2009-01-05T17:05:09.153 回答
0

看看@Matt Raible 的 Appfuse。

它结合了 Maven 和单元测试。

http://raibledesigns.com/rd/tags/appfuse

于 2009-01-05T16:57:28.670 回答
0

一旦你设置了版本控制和一些单元测试,我会考虑一个持续集成服务器(你想成为企业,对吧?)。

即使您是并且仍然是唯一的开发人员,这也可能会帮助您发现一些错误。您忘记签入或喜欢的东西。CI 服务器会定期检查您的所有源代码,进行干净的构建并运行您的所有测试。如果出现错误,它还会与您联系。

这可以保证您(或任何其他人)能够检查您的代码并构建/运行您的项目。

我建议看看哈德森

于 2009-01-05T17:18:53.510 回答
0

虽然你把它作为最后一件事,但我认为你应该立即开始使用 jUnit。

原因是,它可能是您确定的最简单的目标,而且这些工具几乎肯定已经内置到您的 Eclipse 构建中。

在您的项目中创建一个名为“jUnit”的新文件夹。

假设您有一个 Employee 类,具有 setAnnualSalary() 和 getMonthlySalary() 方法。

右键单击jUunit文件夹,新建->“jUnit测试用例”。这将创建一个新类。称之为TestEmployee。Eclipse 像往常一样为您生成样板文件。

添加一个名称以“test”开头的 void 方法:

public void testSalaryCalc() {
    Employee emp = new Employee("John Doe");
    emp.setAnnualSalary(12000);
    assertEquals(1000,emp.getMonthlySalary());
}

右键单击,“运行方式”->“jUnit 测试”。(第一次 Eclipse 可能会提示您为项目做一些设置。按照它说的去做。)

如果 Employee 工作正常,您会看到一个绿色条。破坏 Employee 类,再次运行测试,您将看到一个红色条,以及告诉您失败原因的输出。

恭喜:你是单元测试!

右键单击父目录并选择“Run as jUnit test”将运行目录中的每个 Testcase 类。稍后您可以将 jUnit 合并到您的构建过程中,但现在不要担心。

自动完成将向您显示assert()您可以使用的所有变体。您可以阅读它,并针对在通过测试用例的实现之前编写测试用例的实践。但是只要做上面简单的事情就会给你带来很大的好处。

于 2009-01-05T17:19:52.400 回答
0

正如其他人所说,你已经清楚地知道你需要做什么。VCS 是必须的,CI 或错误跟踪可能是多余的(对于单个开发人员来说,电子表格可能足以进行错误跟踪)。

可能使您受益匪浅的一件事是保持井井有条的产品积压。在单独开发中,我发现保持专注于高优先级功能并避免功能蔓延是我最大的挑战之一。保留积压工作非常有帮助。它不必是一个优先的功能列表,其中包含一些关于每个功能范围的注释。在我的工作场所,我们将这些信息保存在 Trac 中,但在这里,您可能只需要一个电子表格。

我想为单元测试添加一个插件,特别是测试驱动开发(TDD)。 肯特贝克的书是一个很好的起点。我发现 TDD 帮助我保持诚实并专注于我真正需要做的事情,特别是在没有 QA 的单一开发人员项目上。有时,代码似乎是自己编写的。

于 2009-01-05T19:53:21.547 回答
0

你得到了一些非常可靠的答案,所以简短的帖子添加了一篇关于测试驱动开发的文章的链接,这是一种敏捷实践,在你的简历上看起来不错。 TDD

于 2009-01-05T19:57:44.687 回答
0

如果您正在运行要放置 SVN 服务器的 Windows Server,请使用Visual SVN作为服务器。它非常易于设置和使用,它同时支持基本身份验证和 Windows 身份验证。它也是免费使用的。

Eclipse 有很多模块可以与 SVN 服务器集成,因此请使用其中之一,或者已经建议的 Tortoise SVN。

于 2009-01-05T20:13:02.333 回答
0

之前的所有评论几乎涵盖了您可能需要的所有内容:-)

我想添加另一种关于如何开发的方法(开发工作流程)。

我建议您阅读以下文章,尽管它是一个 git 工作流程,但您可以将相同的想法用于您可能正在使用的任何其他工具。

http://nvie.com/posts/a-successful-git-branching-model/

于 2014-07-16T00:29:36.827 回答