这绝对是主观的,但我想尽量避免它变成争论。我认为如果人们恰当地对待它,这将是一个有趣的问题。
这个问题的想法来自于我对“你最讨厌的语言的哪五件事?”问题的回答。我认为c#中的类在默认情况下应该是密封的——我不会把我的理由放在这个问题上,但我可能会写一个更完整的解释来回答这个问题。我对评论中的讨论热度感到惊讶(目前有25条评论)。
那么,你有什么有争议的观点?我宁愿避免那些基于相对较少的基础而导致相当宗教的事情(例如,大括号放置),但例如可能包括“单元测试实际上并没有多大帮助”或“公共字段确实是可以的”之类的事情。重要的是(至少对我来说)你的观点背后是有理由的。
请提出你的观点和理由——我鼓励人们投票给那些有充分论证和有趣的观点,不管你是否恰好同意这些观点。
在开始构建电子系统之前,每个开发人员都应该花几周甚至几个月的时间来开发基于纸张的系统。他们还应该被迫使用他们的系统。
开发一个好的基于纸张的系统是一项艰苦的工作。它迫使你考虑人性(繁琐的过程会被忽略,过于复杂的过程往往会崩溃),并教会你欣赏简单的价值(新工作放在这个托盘里,QA工作放在这个托盘里,存档放在这个盒子里)。
一旦你弄清楚如何在纸上构建一个系统,构建一个有效的计算机系统通常会容易得多——一个人们实际上想要(并且能够)使用的系统。
我们开发的系统并不是由一群训练有素的自动机控制的;真实的人使用它们,真实的人由经理培训,经理也是真实的人,没有太多的时间浪费在培训他们如何跳过你的圈子。
事实上,关于我的第二点:
每个开发人员都应该被要求进行交互式培训课程,向用户展示如何使用他们的软件。
从长远来看,不需要探索所有形式的测试,QA也可以做得很好
很多地方似乎都有一种“方法”,即“我们怎么做”。这似乎隐含地排除了其他方法。
从长远来看,这是一个严重的问题,因为QA的主要功能是将错误归档并修复它们。
如果你不能找到尽可能多的bug,你就不能很好地做到这一点。例如,当您排除方法时,由于过于依赖黑盒,您开始忽略整个可发现的编码错误类别。这意味着,您正在使整个编码错误类无法修复,除非有人偶然发现它。
潜在的问题似乎往往是管理层+员工。有这个问题的管理者似乎对计算机科学和/或他们团队的价值主张有狭隘的想法。他们倾向于创建反映他们的方法的团队,以及测试方法的白名单。
我并不是说你可以或应该一直做所有的事情。让我们面对现实吧,对于给定的产品来说,一些测试方法只是在浪费时间。有些方法在产品成熟度的特定级别上更有用。但我认为,测试组织缺少的是挑战自己学习新事物的能力,并将其应用于整体绩效。
这里有一个假设的对话可以总结:
我:你测试了启动脚本10年,却对shell脚本及其工作原理一无所知?!
测试人员:是的。
我:权限?
测试人员:安装程序会这样做
我:平台,发布特定的依赖?
测试者:我们为此存档bug
我:错误处理?
测试人员:当错误发生时,客户支持会给我们发送一些信息。
我:好吧…(开始考虑在stackoverflow中写帖子…)