开始调试c#,如何测试代码以确保其行为符合要求?

开始调试c#,如何测试代码以确保其行为符合要求?,c#,debugging,behavior,C#,Debugging,Behavior,我已经编写了一个相对简单的代码(使用了一些表单,拥有所有表单范围的变量和数据库,知道它何时第一次运行,这有它自己的含义,等等) 正如你们中的一些人所知道的,我真的开始了,到目前为止,当预期使用它时,代码运行良好,例如,配置文件没有被删除,或者它的名称被更改 尽管如此,我还是采取了一些预防措施,但我担心它可能会有一些意想不到的行为,初学者应该读些什么呢 有没有办法在不尝试各种可能的用途组合的情况下对其进行深入测试 多谢各位 编辑:对于那些还没有阅读过的人,我很害怕它,因为它已经发生了,我已经修改了

我已经编写了一个相对简单的代码(使用了一些表单,拥有所有表单范围的变量和数据库,知道它何时第一次运行,这有它自己的含义,等等)

正如你们中的一些人所知道的,我真的开始了,到目前为止,当预期使用它时,代码运行良好,例如,配置文件没有被删除,或者它的名称被更改

尽管如此,我还是采取了一些预防措施,但我担心它可能会有一些意想不到的行为,初学者应该读些什么呢

有没有办法在不尝试各种可能的用途组合的情况下对其进行深入测试

多谢各位


编辑:对于那些还没有阅读过的人,我很害怕它,因为它已经发生了,我已经修改了将近一半的代码来处理意外行为:)

这个问题相当广泛,但我要尝试一下:

  • 在极端情况下,第一道防线是编写单元测试。这将确保您能想到的所有场景都能正常工作(因为您可以在每次构建之后一直运行测试)。当然,这样的测试只有在你做的时候才有用。此外,您还需要一个用于单元测试的解耦视图逻辑系统,以便您可以模拟逻辑试图对视图执行的任何操作

  • 第二道防线是自动化UI测试这些测试对于测试用户输入和确保系统不会崩溃、正确输出等非常有用

  • 最后一道防线是功能测试、集成测试和验收测试。这些测试是手动运行的,是的,您几乎必须尝试“各种可能的使用组合”

  • 最后,要测试一个应用程序,它必须在你能想到的每个用例中都能工作。没有任何免费的午餐,当然也没有任何神奇的测试框架能够为您带来所有潜在的问题

    一些单元测试框架:

    Microsoft自动UI测试:

    更新

    如果您处于专业编程/工程环境中,您通常会有一个QA部门,其全部工作是尝试并破坏您的软件。如果您不是,那么可能没有很多其他程序员可以与您交换代码:)。也就是说,让人们尝试并使用您的程序可以是一种很好的测试方法:

  • 您可以获得关于用户体验问题的良好反馈
  • 他们可能会找到一些你错过的角落案例
  • 如果他们喜欢你的软件,他们可以口头传播 但是,如果没有其他测试,仍然可以编写好的测试。一些准则:

  • 您是否依赖于外部资源,如文件或数据库?如果不可用,会发生什么?腐败的?垃圾数据
  • 您是否依赖于按特定顺序执行操作的用户?按照你能想到的每一个错误的顺序去做
  • 您是否有超出字符串范围的输入?输入错误数据(例如,数字中的字符)。针对SQL注入之类的东西进行测试
  • 通常,您最了解您的代码,因此您应该能够识别代码可能存在的问题换句话说,如果你能想到“如果<插入不可能的场景>发生,这将打破”的地方,它就会发生;确保你能处理它,为它写一个单元测试,功能测试,等等

    有明确的用例说明程序应该做什么和不应该做什么也可以引导您沿着这条道路前进。在职业环境中,这些几乎总是来自你的雇主。作为一个业余爱好者,你只需要想出你能想到的一切。确保每个用例都有正确行为的测试用例,以及任何可能出现错误的测试用例


    希望这有帮助

    你有没有研究过单元测试、自动化测试和集成测试的概念?从来没有听说过,我会看一看编辑:我有点单元测试,我测试过它的每一部分,但是因为有两种不同的形式,它们之间的交互使它不可能,它可能遗漏了一些东西,就像一个变量更新。我已经修复了上面的错误。。我只是担心其他事情可能会出错,比如,在更改一个选项后,它不会将文件保存在正确的路径中,那么我相信您的问题会通过以下方式得到解决:)我当然也推荐他的书,但也可以看看他的网站。你会在那里找到很多非常有价值的资源,乍一看,这本书似乎涵盖了大部分内容。这很奇怪,因为当我注意到它很容易表现不佳时,我的第一个猜测是,编码人员会交换文件,一个测试另一个。。我还注意到,当我至少编码时,我试图预测用户想要做什么,很难想到用户不想让程序做什么,这才是真正的痛苦。@CésarAmorim有效地进行QA确实需要某种天赋,这就是为什么大多数公司都有专门的人员来做这件事。看到我的更新,希望它能帮上一点忙。非常有用的帖子,我在那里处理了一些事情,对于外部资源,我总是写两个文件,一个由用户选择,另一个在数据文件夹中,所以如果第一个失败,它会发出警告并尝试读取第二个,也是关于顺序的,我也试过了,并放置一些锁定的东西,直到用户启用正确的选项(解锁更多可能性)。我“意识到”这些调试方法,但无法将它们写在脑海中。多亏了你,我做到了。:)很高兴我能帮忙。记住,当你怀疑的时候,总会有一个更好的白痴,你不希望他破坏你的程序:)