2010-06-07 97 views
1

我目前正在与另一位开发人员在集中式开发服务器上进行Web开发。过去这一切都行得通,因为我们有两个独立的项目,我们正在努力并且很少发生冲突。但是,现在我们正在添加第三个(可能的)开发人员。这显然会影响其他开发人员对我的工作产生影响的问题,反之亦然。为了解决这个问题,我认为最好的解决方案是创建一个虚拟机在开发者之间分发以供本地使用。我遇到的问题是涉及到数据库。如何创建安全的本地开发环境?

鉴于我们都在笔记本电脑上开发,只需保留实时数据的本地副本就显得很愚蠢。

我已经考虑清理数据,但我无法真正弄清楚如何替换真实的数据,用数据代表人们实际输入的内容,而不是一遍又一遍地重复相同的信息。每个人的地址变成123测试巷,测试镇,西澳大利亚州,99999什么的。这真的值得关注吗?有没有工具可以帮助解决这类问题?我正在使用MySQL。理想情况下,如果我清理数据库,它应该从我可以定期运行的脚本完成。如果我这样做,我还需要一种方法来减小数据库本身的大小。 (我想我可以选择所有在x后创建的记录,并将它们和相应的表中的所有记录删除,这样并不是什么大问题。)

我想过的第二种解决方案是加密vm的硬盘驱动器,但我不确定这在速度方面是多么的实用,以及在丢失/被盗的笔记本电脑的情况下。如果我这样做,虚拟硬盘驱动器文件本身应该加密还是应该在虚拟机中加密? (我假设后者是可移植的,并且不需要开发者在他们选择的操作系统上具有任何类型的加密能力。)

第三个是为每个开发人员创建数据库的副本在我们的开发服务器上,他们随后负责通过迁移脚本或您有什么方式使架构与规范数据库保持同步。这个解决方案似乎是最简单的,但并不是随着更多开发人员的增加而扩展。

你如何处理这个问题?

回答

2

使用虚假数据 - 如果必须投资数据生成器,但请不要在开发环境中使用真实数据,特别是如果访问该数据可能会受到影响。我对MS SQL的工具更熟悉,但使用谷歌搜索“MySQL data generator”带来了EMS SqlManagerDatanamic

+0

我不是特别熟悉的工具,但+1“请不要在开发环境中使用真实的数据”!您可能无法预见这有多重要,但*投入时间寻找生成假数据的方法! – 2010-06-07 18:47:12

+0

过去我经常听到这种说法,也许我只是笨手笨脚,但我没有看到使用真实数据的问题。仅仅是因为它被盗的可能性?如果你曾经为一家软件公司工作,我可以看到使用真实数据是一个问题。您不想从您的某个客户导入数据库。如果您想让开发人员与实时服务器分离,出于某种原因,我也会遇到问题。还有别的事吗?我在这里错过了什么? – baudtack 2010-06-07 20:26:09

+0

@docgnome - 贵公司是否有隐私政策?如果是这样,那么对于客户数据的使用和保护方式有何评论?如果数据是公司内部的,那么您的人力资源政策对这些数据有何看法?如果您使用的是实际数据,则至少必须具有与生产实例中的数据相同的保护级别。坦率地说,我发现这对开发箱来说太具侵入性了。丢失数据的风险(如果数据非常敏感,可能是您的工作 - 是的,电话号码很敏感)不值得为开发生成假数据。 – tvanfosson 2010-06-07 21:01:32

0

正如tvanfosson提到的,使用假数据而不是直播。这样做不仅可以保持实时数据的安全,还可以让您测试不同的场景,例如国际名称等。

至于如何分配数据库,您的模式和创建脚本确实应该在源代码控制中,因此每个开发人员都可以在他们认为合适的情况下创建数据库的本地副本。

0

您可以设置一个灯具(种子数据)系统。您只需提供一次数据,并根据需要将其放入数据库中。这可以在源代码控制中进行,以便所有用户使用/更新灯具。

我认为自动发电机通常是一个坏主意。他们很难生成可能是真实的信息。赛程将允许你提供这些信息,并且知道你在找什么。你也可以通过使用灯具来推动验证器的界限。

第一次设置可能需要一点时间,但我认为您将获得更高质量的数据用于测试。

问候,

贾斯汀

+0

取决于你在说什么样的测试。对于单元测试,DB应该被抽象出来,模拟数据应该被用于IMO。对于集成/ UI测试,您可以在很大程度上使用规则或正则表达式(无论工具允许)使用生成的数据。我认为数据库不应该包含无效数据,即不应允许用户输入的数据。如果您有一些有效但不易生成的边缘案例,这些边缘案例总是可以通过手工生成。一旦你有一个好的测试数据集,它应该在版本控制中进行备份和维护。 – tvanfosson 2010-06-07 21:04:44

相关问题