在开始一份新工作之前,您会考虑谈论系统的 "unit testability" 吗?
Would you consider the "unit testability" of a system something to talk about before starting a new job?
我走进了一份新工作,开始开发一个系统,这让我再次意识到单元测试的重要性;我的意思是适当的单元测试不需要个人单击按钮并与测试交互,甚至不需要访问数据库或 WCF 或跨越其上下文中的任何其他体系结构边界。您应该能够 运行 随时随地进行这些测试,次数不限。
但是这个系统很大,它有大约 700 个项目分布在 300 多个解决方案文件中。该系统直接从 'Program Files' 中的部署位置引用 dll,在许多地方都可以找到 'circular references'。开发人员更改代码库中的某些内容后,他们会手动将 dll 复制到某个地方或通过电子邮件将它们发送给彼此。一些控制器有 21,000 (21K) 行代码。它可以是 'big ball of mud'。
我向他们展示了如何以及在何处向系统添加一两个不会影响任何人的接缝,这样我们就可以开始对系统进行单元测试,因为他们似乎同意他们需要这个安全网并且他们注意到整个行业都在谈论它的好处。但是现在,当 'a new property to expose something on a class' 破坏了他们的构建时,我开始受到团队中其他架构师的抵制。
这就是变化。一个新的 属性 公开现有的私有字段。
public INavigationComponent CurrentNavigationComponent { get { return _currentNavigationComponent; } }
一位架构师和他的一位开发人员没有耐心(或专业知识)找出他们有旧 dll 的位置,因此他们要求我删除 属性,我确实这样做了,他仍然无法建造。
因此,如果团队不愿意将单个 属性 添加到 class 中,这将启用另一个级别的测试,那么我觉得我在说教。
单元测试系统是否过于严格(或乐观)要求考虑新的工作环境?
我猜人们会回答“向您的团队推销单元测试的概念和好处是 my/your 的工作,如果您做不到,那么...”。
欢迎来到现实世界。
根据我的经验,全面的单元测试通常会使开发时间增加约 5 倍;从长远来看,它节省了多少时间,目前还没有定论。如果您在质量控制至上的行业工作(航空和医药是两个立即 spring 想到的行业),那么这是显而易见的,但对于大多数行业而言,还有许多其他因素在起作用,包括时间到-市场问题、现金流、营销需求、竞争力量和大量其他与实际编程无关的东西。
正确看待事情很重要。作为新员工,告诉他们如何开发系统不是你的工作。你能做的最好的事情就是证明你会为了公司的利益与你的团队和其他部门合作,即使这意味着必须做出妥协。不要误会我的意思,您有责任向上级传达您对项目的担忧,尤其是当您认为这些担忧可能会产生长期影响时。但是,接受所做的任何决定也是你的工作,即使它们对你不利,无论如何都要尽力而为。
底线:成为一名优秀的编码员只是成为一名优秀程序员的一小部分。
我走进了一份新工作,开始开发一个系统,这让我再次意识到单元测试的重要性;我的意思是适当的单元测试不需要个人单击按钮并与测试交互,甚至不需要访问数据库或 WCF 或跨越其上下文中的任何其他体系结构边界。您应该能够 运行 随时随地进行这些测试,次数不限。
但是这个系统很大,它有大约 700 个项目分布在 300 多个解决方案文件中。该系统直接从 'Program Files' 中的部署位置引用 dll,在许多地方都可以找到 'circular references'。开发人员更改代码库中的某些内容后,他们会手动将 dll 复制到某个地方或通过电子邮件将它们发送给彼此。一些控制器有 21,000 (21K) 行代码。它可以是 'big ball of mud'。
我向他们展示了如何以及在何处向系统添加一两个不会影响任何人的接缝,这样我们就可以开始对系统进行单元测试,因为他们似乎同意他们需要这个安全网并且他们注意到整个行业都在谈论它的好处。但是现在,当 'a new property to expose something on a class' 破坏了他们的构建时,我开始受到团队中其他架构师的抵制。
这就是变化。一个新的 属性 公开现有的私有字段。
public INavigationComponent CurrentNavigationComponent { get { return _currentNavigationComponent; } }
一位架构师和他的一位开发人员没有耐心(或专业知识)找出他们有旧 dll 的位置,因此他们要求我删除 属性,我确实这样做了,他仍然无法建造。
因此,如果团队不愿意将单个 属性 添加到 class 中,这将启用另一个级别的测试,那么我觉得我在说教。
单元测试系统是否过于严格(或乐观)要求考虑新的工作环境?
我猜人们会回答“向您的团队推销单元测试的概念和好处是 my/your 的工作,如果您做不到,那么...”。
欢迎来到现实世界。
根据我的经验,全面的单元测试通常会使开发时间增加约 5 倍;从长远来看,它节省了多少时间,目前还没有定论。如果您在质量控制至上的行业工作(航空和医药是两个立即 spring 想到的行业),那么这是显而易见的,但对于大多数行业而言,还有许多其他因素在起作用,包括时间到-市场问题、现金流、营销需求、竞争力量和大量其他与实际编程无关的东西。
正确看待事情很重要。作为新员工,告诉他们如何开发系统不是你的工作。你能做的最好的事情就是证明你会为了公司的利益与你的团队和其他部门合作,即使这意味着必须做出妥协。不要误会我的意思,您有责任向上级传达您对项目的担忧,尤其是当您认为这些担忧可能会产生长期影响时。但是,接受所做的任何决定也是你的工作,即使它们对你不利,无论如何都要尽力而为。
底线:成为一名优秀的编码员只是成为一名优秀程序员的一小部分。