如何系统地考虑程序的边界情况? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
huangdaxian
V2EX    程序员

如何系统地考虑程序的边界情况?

  •  
  •   huangdaxian 2018-05-18 16:22:08 +08:00 4588 次点击
    这是一个创建于 2704 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做 OJ 题,发现自己在考虑程序边界条件的能力过于薄弱,很多特殊情况没有考虑到,导致程序通过率较低。

    回想起工作中,也会经常漏掉一些特殊情况。程序的使用者并不会像自己想的那么老老实实地输入,于是线上会经常因为这种原因报出问题(公司并没有完整的测试体系),于是曾经和同事戏谑:一定要把每个用户当傻子来看待才能开发出稳健的程序。

    但对于现在我的水平来说,非常难以考虑周全,而且开发周期也不允许花太多时间在这个上面。对于这种问题,大家有没有系统的解决方案呢?

    13 条回复    2018-05-23 09:46:55 +08:00
    night98
        1
    night98  
       2018-05-18 16:28:25 +08:00 via Android
    多写多脸
    night98
        2
    night98  
       2018-05-18 16:28:37 +08:00 via Android
    young7657
        3
    young7657  
       2018-05-18 16:30:22 +08:00
    不停完善边界情况,一步到位很难吧
    ray1888
        4
    ray1888  
       2018-05-18 17:38:20 +08:00
    tdd? 我觉得可能会有帮助
    Luckyray
        5
    Luckyray  
       2018-05-18 17:48:30 +08:00 via iPhone
    经验吧,我写 oj 就从来没一次通过过……
    Building
        6
    Building  
       2018-05-18 18:40:43 +08:00 via iPhone
    要么让它崩溃,至少知道错在哪里,如果检查参数一定要有打印和说明,否则默默帮你 Handle 掉了特殊情况一环套一环你的代码就莫名其妙跑到了未知区域...
    jamesxu
        7
    jamesxu   div class="badges">   2018-05-18 19:18:30 +08:00 via iPhone
    多思考+流程图
    TWalker
        8
    TWalker  
       2018-05-18 19:45:55 +08:00 via iPhone
    多思考
    函数开头先处理异常情况,考虑参数是否合法;
    MinQ
        9
    MinQ  
       2018-05-18 23:18:04 +08:00
    写单元测试,错数据统统塞进去
    cxbig
        10
    cxbig  
       2018-05-18 23:56:24 +08:00
    经验为主,但不要一开始就想得太多。靠反馈和迭代逐步完善。
    huangdaxian
        11
    huangdaxian  
    OP
       2018-05-19 13:26:47 +08:00
    @ray1888 在我们这种业务性公司,TDD 是不现实的
    hirra
        12
    hirra  
       2018-05-19 15:33:57 +08:00
    流程图,思维导图
    huangdaxian
        13
    huangdaxian  
    OP
       2018-05-23 09:46:55 +08:00
    这几天看了一些文章,有的说业务代码里非业务的边界不应该有任何检查,全部由外层调用者自己控制,也有的说程序的每一层都需要进行检测,并且对异常进行封装,确保对异常的掌控性。

    对于我来说,最纠结的点在于有些程序的边界并不常见,而效验这些边界需要较高的计算成本,如果这段程序每次执行时都进行检查,可能会成倍地降低效率,并且开发成本也是相应地提高的(相当费脑)。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5431 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 07:43 PVG 15:43 LAX 00:43 JFK 03:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86