最有可能发生什么类型的问题?

Chr*_*isC 6 c# language-agnostic sql-server

如果我写道:

  1. 一个C#SQL数据库应用程序(一个简单的程序,由一些表单上的GUI组成,带有用于与SQL数据库连接的逻辑)
  2. 供家庭使用,不进行任何网络通信
  3. 它使用简单,可靠和适当的SQL数据库
  4. 其GUI与逻辑正确分离
  5. 具有完整可靠的输入数据验证
  6. 已经过全面测试,可以消除100%的逻辑错误

...然后,如果程序是由随机用户在随机Windows计算机上安装和运行的话.

Q1)最有可能出现哪些类型的技术(非程序)问题和支持情况,以及它们的可能性有多大?

Q2)首先我可以做更多/其他事情来防止这些问题并最大限度地减少所需的用户支持量?

我知道一些答案将适用于我的特定平台(C#,SQL,Windows等),有些则不适用.

请尽可能具体.

Mitch Wheat在下面给了我一些非常有价值的建议,但我现在正在提供赏金,因为我希望能够更好地了解我最有可能遇到的事情.

Mit*_*eat 13

  • 永远不要相信未经验证的用户输入

  • 在您的应用程序中构建出色的错误日志记录(可能还有错误自动提交功能).能够动态增加日志记录级别,以便可以在用户的​​桌面上打开详细日志记录.

  • 以友好的方式向用户报告错误; 不要责怪他们!

  • 如果您的应用程序依赖于许多环境设置或可能被其他软件更改的第三方插件/库,请考虑运行初始化步骤,检查并记录预期和找到的版本.这可以节省你拔头发!


ken*_*nny 7

它永远不会让我惊讶真正的用户会做什么.为任何事情做好准备.


Aar*_*ght 6

Q1)还会出现哪些类型的问题?

错误,设计缺陷,功能请求和可用性问题,与任何其他应用程序相同的问题.

Q2)解决这些问题需要多少时间和知识?

超过你想要花的钱.

Q3)我首先要做的是尽量减少所需的用户支持量?

测试,测试和更多测试.聘请全职测试人员是最好的选择.否则,请确保为自己设置支持数据库,以便轻松查找过去的问题并将此知识传递给其他支持人员.

使用良好的错误跟踪/票务系统,最好是允许您公开或集成某种用户可访问知识库的系统.如果你很幸运,这将有助于减少少量的支持请求.


如果您想要非常积极主动,请在应用程序中构建行为跟踪系统(当然保留用户匿名性),这样您就可以看到用户花费最多时间的功能,并了解应用程序的心理模型所处的区域与他们不相称.

哦,并尝试使程序优雅地失败.一个神秘的异常对话帮助没有人; 有一个屏幕可以解释一般情况下出了什么问题以及他们可以做些什么来解决它("再试30秒","重启应用程序").实际上可以通过这种方式处理一些意外的错误情况,例如连接超时.使相同的屏幕可以选择自动提交异常报告或将调试信息复制到剪贴板,以便他们可以通过电子邮件发送.如果您有堆栈跟踪,您的工作将更容易.

在我的一个应用程序中,我修改了全局异常处理程序,以显示某些类型的网络超时的特殊消息,并大大减少了提交的超时"错误"的数量.只要您跟踪异常报告,随着时间的推移,您将了解经常出现哪些类型的未处理异常/意外情况,并且能够......好好处理它们.


kyo*_*ryu 4

如果您断言您的逻辑是正确且经过验证的(根据您的问题),那么基本上就剩下基于状态的问题需要处理。

因此,您需要担心的事情包括:

  1. 硬件故障

  2. 关键文件会在意外的时间在机器上被删除,而不是由您的程序删除。

  3. 依赖更新会让你崩溃。

  4. 整体系统状态 - 例如硬盘已满

  5. 数据库正在停止

  6. 依赖项被卸载

此外,代码中任何您认为外部进程正在运行且可用的地方都将是一个即将发生的问题。您应该始终假设任何外部进程都是不稳定的,并且它任意下降是预期的行为(这就是为什么您在单独的进程中拥有事物的部分原因)。事实上,依赖任何你不能完全控制的状态本质上都是有风险的。虽然沿着这条路走下去可能会变得过于偏执,但最好至少考虑一下您所依赖的内容,并且非常小心和明确地做出假设(可能可以安全地假设 .NET 框架已经存在,就好像事实并非如此,这可能超出了您解决该问题的范围)。