搜索
bottom↓
回复: 105

有一种痛苦叫逻辑bug,谁有良药?

  [复制链接]

出0入17汤圆

发表于 2016-11-7 08:48:53 | 显示全部楼层 |阅读模式
程序的稳定性,健壮性与跟多方面相关,一些基本功就不说了。 这次主要说逻辑的问题(应该属于应用层)。

比如写这样的程序: 输入密码,连续输错5次密码,自锁10分钟,并能显示剩余的分钟数。 写了完了,测试没有问题,之后添加另一个功能,在任何情况下,按下紧急按键可以报警,并进入报警页面,当时测试也没有问题。

后来发现,如果先输错密码进入自锁,再按紧急报警键,1分钟内显示正常报警页面,之后,每分钟都会,突兀的显示一次倒计时的数字。

这个问题很好排查, 最佳的方法时, 在显示倒计时的时候,先判断下当前页面,如果是自锁界面,就显示数字, 如果不是,就不要显示。 这样报警结束后,还可以显示自锁的时间。

通过这个例子,就是说,做某单一功能时,想的不是很全面,随着功能的添加,逻辑性的问题,就显得越来越多,有的错误,只有在非常特定的状态下才会触发,但是有时在测试时,却不一定会被发现,最终形成产品流到市场上。

虽然有的公司,会有专门的软件测试人员,但是也不一定能保证,产品不出一点问题的。 而且bug的源头还是码农,解决问题还得从自身解决。 谁有良药?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2016-11-7 08:54:14 | 显示全部楼层
推倒重来!!!  码农的痛苦,你知道有木有! 心若在,梦就在!大不了从头,,,再来!!!!!!!!1

出0入0汤圆

发表于 2016-11-7 08:55:52 | 显示全部楼层
最烦恼的是交付到客户后才发现BUG,而且还是客户发现的BUG

出0入17汤圆

 楼主| 发表于 2016-11-7 09:00:37 | 显示全部楼层
wkman 发表于 2016-11-7 08:54
推倒重来!!!  码农的痛苦,你知道有木有! 心若在,梦就在!大不了从头,,,再来!! ...

写着写程序,会发现一种更好的逻辑分层或是算法,如果程序没有超过1/3进度,我会重写的。

出0入9汤圆

发表于 2016-11-7 09:05:42 | 显示全部楼层
YRHeng 发表于 2016-11-7 08:55
最烦恼的是交付到客户后才发现BUG,而且还是客户发现的BUG

大部分时间都是在找bug,真正写代码的时间倒是没那么多

出0入17汤圆

 楼主| 发表于 2016-11-7 09:06:40 | 显示全部楼层
YRHeng 发表于 2016-11-7 08:55
最烦恼的是交付到客户后才发现BUG,而且还是客户发现的BUG

交给客户,而且客户发现bug,就毁了一世英名。。。

出0入0汤圆

发表于 2016-11-7 09:09:39 | 显示全部楼层
流程图+完整的测试方案!

出0入17汤圆

 楼主| 发表于 2016-11-7 09:10:47 | 显示全部楼层
事后找,不如事前预防。 事前怎么预防?  流程图只是个程序的大概,不会到细节上,防不住bug。 如果要写具体到细节的流程图,基本等价于伪代码,那跟写程序没什么区别了,

出0入17汤圆

 楼主| 发表于 2016-11-7 09:12:49 | 显示全部楼层
目前,是靠个人的逻辑推理能力+事后的检验修复。

出0入0汤圆

发表于 2016-11-7 09:12:59 | 显示全部楼层
基本是三七开,三成写程序,七成在修BUG

出0入0汤圆

发表于 2016-11-7 09:13:12 | 显示全部楼层
保证程序的稳定性,健壮性,所以动手写之前,逻辑构思很重要!
慎重,慎之又慎!

出0入0汤圆

发表于 2016-11-7 09:13:49 | 显示全部楼层
wicy001 发表于 2016-11-7 09:10
事后找,不如事前预防。 事前怎么预防?  流程图只是个程序的大概,不会到细节上,防不住bug。 如果要写具体 ...

先前功能你都不知道要不要加,加什么样的都不清楚,你怎么提前预防?

只能在加功能前考虑下怎么实现,会不会影响别的功能。

出0入17汤圆

 楼主| 发表于 2016-11-7 09:20:30 | 显示全部楼层
xjavr 发表于 2016-11-7 09:13
先前功能你都不知道要不要加,加什么样的都不清楚,你怎么提前预防?

只能在加功能前考虑下怎么实现,会 ...

写代码都是一个功能一个功能写的,每添加一个功能,都要把与该功能相互作用的其他功能列出,弄清楚影响关系,再动手写,如果考虑的清楚,就是100%OK 了。

每个功能的解耦很重要, 如果重叠额功能太多,不好操作了。

出0入0汤圆

发表于 2016-11-7 09:26:12 | 显示全部楼层
逻辑问题似乎是无法避免的,只有使用更多的测试用例来覆盖。

出0入0汤圆

发表于 2016-11-7 09:27:15 | 显示全部楼层
Xiyuhexuan 发表于 2016-11-7 09:09
流程图+完整的测试方案!

更进一步,在开始的时候用状态机来建模,再维护也是先修改模型。

我是用的QP Framework的工具来可视化创建状态机。
然后读取状态机的保存的XML格式的源文件来生成代码,QP默认也有自己的代码生成功能,只是
为了兼顾层次化状态机的功能,不够清爽。

出0入0汤圆

发表于 2016-11-7 09:31:39 | 显示全部楼层
这种属于架构不合理导致的,在最初设计的时候并没考虑到有这种需求,后期由于客户或其他原因临时增加功能,导致新旧功能融合不好,在设计前期很难有效避免
你看window、ios等大系统每次更新之后也都可能会出新问题,也是跟这个有关
除非前期立项的时候,功能考虑就比较全面,而且后期不增加新功能,才能有效避免这个问题

出0入0汤圆

发表于 2016-11-7 09:39:24 | 显示全部楼层
有时候整个夜上都在想程序的结构,全局程序结构在脑子里一定要清晰,一般这个都要在夜深人静时...

唉!!又是一个晚上,打了不超过20行代码。苦B的程序员,说多都是泪,

出0入0汤圆

发表于 2016-11-7 09:43:56 | 显示全部楼层
值得思考!记号

出0入0汤圆

发表于 2016-11-7 09:44:29 | 显示全部楼层
1.将系统划分为高内聚、低耦合的模块;(软件工程书本里都这么说。实际操作见仁见智,就看个人功力了)
2.模块内适当使用状态迁移表。

出40入42汤圆

发表于 2016-11-7 09:48:57 | 显示全部楼层
逻辑bug,一直都没有很好的解决方案,只能靠程序设计的经验和全面测试了。。

出0入17汤圆

 楼主| 发表于 2016-11-7 09:49:05 | 显示全部楼层
菜包 发表于 2016-11-7 09:31
这种属于架构不合理导致的,在最初设计的时候并没考虑到有这种需求,后期由于客户或其他原因临时增加功能, ...

完全赞同。良好的架构,合理的分层,可以规避很多bug的,出现bug的时候,还很容易分析和解决。

出0入17汤圆

 楼主| 发表于 2016-11-7 09:52:10 | 显示全部楼层
菜包 发表于 2016-11-7 09:31
这种属于架构不合理导致的,在最初设计的时候并没考虑到有这种需求,后期由于客户或其他原因临时增加功能, ...

不过话有说回来, 以我主楼举得的例子,功能很简单,架构上没有问题,但一不小心还会出现问题。

出0入0汤圆

发表于 2016-11-7 10:10:35 | 显示全部楼层
倒计时时间短一点,计数次数少一些,方便调试时测试,正式发布时再改成正常的时间和次数。

出0入0汤圆

发表于 2016-11-7 10:17:55 | 显示全部楼层
试试看FMEA

出0入0汤圆

发表于 2016-11-7 10:27:42 | 显示全部楼层
wicy001 发表于 2016-11-7 09:00
写着写程序,会发现一种更好的逻辑分层或是算法,如果程序没有超过1/3进度,我会重写的。 ...


是这样。楼主位发的案例,个人感觉是应用层构架上出了问题,而不是在调试阶段。
在原本功能需求下架构是没问题的,但加入了紧急,顶层构架逻辑上就变了,而代码没有适应这个改变。
所以程序设计上构架比较难……

出0入17汤圆

 楼主| 发表于 2016-11-7 10:34:04 | 显示全部楼层
guzhongqi 发表于 2016-11-7 10:10
倒计时时间短一点,计数次数少一些,方便调试时测试,正式发布时再改成正常的时间和次数。 ...

这是个好办法。

出0入0汤圆

发表于 2016-11-7 10:43:45 | 显示全部楼层
这种问题微软、苹果都避免不了

出20入22汤圆

发表于 2016-11-7 10:44:03 | 显示全部楼层
这个BUG永远靠程序员自己去解决不了,这是人性的客观问题,如果程序小,程序员努力一下还能解决,大一点程序的根本不可能都弄掉,就像学生考试,一次两次100分有可能,永远不可能次次考试都是100分,虽然有不少错误都不是难的技术问题,要都找出来,只有程序员自己努力加上后面的验证人员的工作。学生考试自己能找出全部的错误?只有靠老师批改试卷才能发现绝大部分甚至全部错误的答案

出0入17汤圆

 楼主| 发表于 2016-11-7 10:50:35 | 显示全部楼层
fnems 发表于 2016-11-7 10:27
是这样。楼主位发的案例,个人感觉是应用层构架上出了问题,而不是在调试阶段。
在原本功能需求下架构是 ...


经你提醒,我认识到这个问题是因为框架不完善。

因为程序菜单中某个页面的中调用了定时器,定时刷新数字。
如果在菜单框架中,加入跳转页面,对定时器或判断当前页面处理的机制,以后的类似问题都可避免。



出0入0汤圆

发表于 2016-11-7 10:53:52 | 显示全部楼层
wicy001 发表于 2016-11-7 09:10
事后找,不如事前预防。 事前怎么预防?  流程图只是个程序的大概,不会到细节上,防不住bug。 如果要写具体 ...

流程图是很详尽的,不仅仅是框架图!

都没有严谨的逻辑思维,怎么可能没有BUG,

只有你思路明确, 逻辑严谨,流程图透彻, 才能保证尽可能的少BUG!

很多时候的BUG其实程序员都是在处理没有明确的流程时按照想当然的思路去写代码!

怎么可能完全符合客户的需求呢?

出0入17汤圆

 楼主| 发表于 2016-11-7 10:58:42 | 显示全部楼层
stdio 发表于 2016-11-7 09:44
1.将系统划分为高内聚、低耦合的模块;(软件工程书本里都这么说。实际操作见仁见智,就看个人功力了)
2. ...

没错 。 高内聚、低耦合,说起来容易,做起来难。 尤其有的控制程序,模式,功能太多,很杂,把模块剥离出来,再用模块搭建起整个控制程序,很不容易。

我觉的高质量的代码价值也是在这里。 而并非局限在一个查表法的小技巧

出0入0汤圆

发表于 2016-11-7 11:00:47 | 显示全部楼层
wicy001 发表于 2016-11-7 09:20
写代码都是一个功能一个功能写的,每添加一个功能,都要把与该功能相互作用的其他功能列出,弄清楚影响关 ...

理论上很好,但是BUG不可避免。如果每一个功能不是同一个人,这种情况出现的概率更大。

构架再好也顶不住临时的需求增加,很多软件到最后都要重构才能获得最优方案。

出0入0汤圆

发表于 2016-11-7 11:04:25 | 显示全部楼层
有一种境界叫规则驱动,百病不侵。
                                             

出0入17汤圆

 楼主| 发表于 2016-11-7 11:07:39 | 显示全部楼层

刚查了下,FMEA潜在的失效模式及后果分析 ,普通码农可不会用了, 整一堆表,不如一个流程图了。

出0入17汤圆

 楼主| 发表于 2016-11-7 12:16:57 | 显示全部楼层
lianglee 发表于 2016-11-7 10:33
找这样的BUG真的会找死人,特别是很多与时间相关的逻辑BUG.

例如,T1,T2,T3...Tn多个计数器同时进行,如 ...

是的,这种程序很难调。 把时间量做事件触发,判断状态,程序做起会容易的,加上OS,会更容易。

功能越复杂的系统,出bug的几率肯定也越大,这一点是改变不了的。

出0入0汤圆

发表于 2016-11-7 12:28:08 | 显示全部楼层
所以最烦改需求,一次性的逻辑就会严谨许多,改着改着bug就来了。我觉得无法消除,可以减少。可能每次改动都更新流程图进行推敲会有帮助

出0入17汤圆

 楼主| 发表于 2016-11-7 12:30:19 | 显示全部楼层
gyzzg2030 发表于 2016-11-7 10:44
这个BUG永远靠程序员自己去解决不了,这是人性的客观问题,如果程序小,程序员努力一下还能解决,大一点程 ...

发帖的时候,我也是这种观点。

人们思考问题,不可能每次都全面的。 没有考虑全面,就会有bug。

当把这个问题上升到架构层次,可以规避一些bug,但是也不是万能,还是会出现架构不完善的情况。

如果抛开架构,回归举例bug的本身,实际还是如何能考虑问题全面的问题, 这好像是个哲学命题。

出0入17汤圆

 楼主| 发表于 2016-11-7 12:32:03 | 显示全部楼层
laoshuhunya 发表于 2016-11-7 11:04
有一种境界叫规则驱动,百病不侵。

虚心求教,请再指点一下,这是一种什么境界?

出0入10汤圆

发表于 2016-11-7 12:52:22 | 显示全部楼层
要这么想,连微软都需要不断打补丁,你说的这些情况也就释然了

出0入0汤圆

发表于 2016-11-7 13:01:14 | 显示全部楼层
这种bug 只能说是客户的问题,客户提出需求1 解决 需求2 解决
但是他并没有说是需求1 和需求2 不能同时发生。关键是一些重要的东西要客户有明文规定
不能说一会儿加这个一会加那个,永远都加不完的。。。。

出0入0汤圆

发表于 2016-11-7 13:17:41 | 显示全部楼层
一个软件,要稳定,总是需要3~5版本的。
这是正常现象。

出0入49汤圆

发表于 2016-11-7 13:38:56 | 显示全部楼层
详细的程序逻辑流程图分析

出0入0汤圆

发表于 2016-11-7 13:39:40 来自手机 | 显示全部楼层
菜包 发表于 2016-11-7 09:31
这种属于架构不合理导致的,在最初设计的时候并没考虑到有这种需求,后期由于客户或其他原因临时增加功能, ...

立项的时候,考虑清楚。我支持这个,但是这个环节,真正重视的,有多少,或者说,有吗。。

出0入0汤圆

发表于 2016-11-7 14:36:39 | 显示全部楼层
程序架构规划好,后面遇到问题调试也容易一些

出0入0汤圆

发表于 2016-11-7 15:10:38 | 显示全部楼层
逻辑bug不是fema可以解决的,例如开关机之内的,如果输入变量多,状态转移复杂,动手之前需要用状态完完全全理清楚,自己做完了作为关键电需要专家一起评审。评审过的东西慎改动,状态死锁就懵逼了。

出0入0汤圆

发表于 2016-11-7 15:37:35 | 显示全部楼层
逻辑BUG就只能解,不过状态机会好一些。

出0入0汤圆

发表于 2016-11-7 15:42:13 | 显示全部楼层

软件的FMEA真的有用吗?

出0入0汤圆

发表于 2016-11-7 15:44:12 | 显示全部楼层
逻辑很多的情况下用状态机是最好的选择,添加功能只需要添加子状态机或者调整某个状态机  不至于大动

出140入158汤圆

发表于 2016-11-7 15:48:38 | 显示全部楼层
架构问题。分层设计,对象化,模块化,减少模块间耦合,少用全局变量,多用状态机,层间模块间用结构体指针传递参数。我们公司做的程序代码规模通常在10W~20W行之间,很少会有BUG,而且找BUG的时间很小,归功于我们在设计初期就制定好一个优良的架构,坚持设计原则,一步一步来,想砌积木一样。

出140入158汤圆

发表于 2016-11-7 15:49:44 | 显示全部楼层
写程序就像写文章,需要条理清晰,架构非常重要。

出0入0汤圆

发表于 2016-11-7 15:52:38 | 显示全部楼层
2个程序员一个写,一个检查。。。

出0入0汤圆

发表于 2016-11-7 15:57:43 | 显示全部楼层
FMEA对于可能发生风险大的事件有一定的效用,毕竟是纸上谈兵。但是假如做软体认证,这个也是不可货缺得工具。

出0入0汤圆

发表于 2016-11-7 16:36:06 | 显示全部楼层
wicy001 发表于 2016-11-7 12:32
虚心求教,请再指点一下,这是一种什么境界?

      一般我们认为世界是因果联系的,事物总是对外界或内部的刺激作出反应,我们考察的模型都是基于〝事件驱动〞或〝消息驱动〞的。不过俺认为这些只是表象,在更深的层次是〝规则驱动〞。基于事件或消息驱动的机器人永远只是一台机器,但如果是基于规则驱动,人工智能可能超越人类。
      两个单字节整数执行加法运算,我们应该怎样验证软件运行结果是否正确?显然我们不需要检查每个不同加数执行的结果,只要考虑一些特殊组合就可以了。所以,软件测试的问题就归结为如何确定这些特殊组合的问题。
      俺近来也在思考软件方面的问题,发现这里的坑大得超乎想像,目前没有成熟的想法。。
  

出0入0汤圆

发表于 2016-11-7 16:47:22 来自手机 | 显示全部楼层
程序有bug很正常。除了按软件工程化进行可以尽可能避免致命bug外,软件的生命周期就是在不断地debug中延伸的..........

出0入17汤圆

 楼主| 发表于 2016-11-7 17:54:57 来自手机 | 显示全部楼层
amigenius 发表于 2016-11-7 15:48
架构问题。分层设计,对象化,模块化,减少模块间耦合,少用全局变量,多用状态机,层间模块间用结构体指针 ...

谢谢。
请问你们是裸机,自制os,还是成品OS?
分层会到几层?

出0入17汤圆

 楼主| 发表于 2016-11-7 17:58:49 来自手机 | 显示全部楼层
ericw2012 发表于 2016-11-7 15:52
2个程序员一个写,一个检查。。。

太奢侈,一个程序员+一个专业的测试员,会更好吧

出0入17汤圆

 楼主| 发表于 2016-11-7 18:07:04 来自手机 | 显示全部楼层
laoshuhunya 发表于 2016-11-7 16:36
一般我们认为世界是因果联系的,事物总是对外界或内部的刺激作出反应,我们考察的模型都是基于〝事 ...

学习了,我认这种规则驱动是智能学习的结果,是由量到质。

出0入0汤圆

发表于 2016-11-7 20:03:53 来自手机 | 显示全部楼层
如果测试流程也是同一个或一组的程序员所写,那如果测试员测试时,bug多半发现不了!

出0入0汤圆

发表于 2016-11-7 20:49:43 | 显示全部楼层
amigenius 发表于 2016-11-7 15:48
架构问题。分层设计,对象化,模块化,减少模块间耦合,少用全局变量,多用状态机,层间模块间用结构体指针 ...

这个规模的系统能控制住,还是很厉害了!

出0入0汤圆

发表于 2016-11-7 21:05:55 | 显示全部楼层
测试里面有一种叫思维老化的什么概念。
大概是说做测试的久了,变成了固定方式的固定模式的测试。
那么,测试也就没什么意义了。
所以,测试和调试,思维很重要,不要以惯性思维去想问题。

出0入0汤圆

发表于 2016-11-7 21:23:43 来自手机 | 显示全部楼层
我都是把产品先给不懂的人来试,一般都能发现很多想不到的低级错误

出0入0汤圆

发表于 2016-11-7 21:57:12 | 显示全部楼层
这个,今天说要改这个功能,明天说加那个功能,后天说取消另一个功能。。。。  最后自然就乱了

出0入0汤圆

发表于 2016-11-7 22:36:29 | 显示全部楼层
其实出这种问题,多半是项目管理上有问题。
1、每一个新的需求,都需要做评估
2、每一个新的需求,都要做设计
3、对新需求的实现,要评估对现有逻辑的影响
项目大了之后,管理必须跟上,相应的流程要走。这是大项目必须要付出的管理成本。

当然,小项目随便整,老板、客户有想法,随时可以加功能,那就不要报怨程序会变得乱七八糟。。。。。哈哈。。。。

出0入0汤圆

发表于 2016-11-7 22:55:08 | 显示全部楼层
楼主做什么行业啊?

出0入0汤圆

发表于 2016-11-8 07:17:44 来自手机 | 显示全部楼层
楼主有画流程图吗?

出0入0汤圆

发表于 2016-11-8 08:16:39 | 显示全部楼层
码前做详细的规画    框架做好

出0入17汤圆

 楼主| 发表于 2016-11-8 08:38:21 | 显示全部楼层
BD8NCF 发表于 2016-11-7 22:36
其实出这种问题,多半是项目管理上有问题。
1、每一个新的需求,都需要做评估
2、每一个新的需求,都要做设 ...


老板提出一个大概的基本要求,剩下的有我们完成。

我们的项目都是边实施,边修订。 在不断进行中,解决问题,来完成老板的要求。





出0入17汤圆

 楼主| 发表于 2016-11-8 08:40:28 | 显示全部楼层
zyw19987 发表于 2016-11-7 22:55
楼主做什么行业啊?

智能家居

出0入17汤圆

 楼主| 发表于 2016-11-8 08:46:58 | 显示全部楼层
huangqi412 发表于 2016-11-7 21:57
这个,今天说要改这个功能,明天说加那个功能,后天说取消另一个功能。。。。  最后自然就乱了 ...

我负责开发的设备,大体的功能定下了, 但实际中要与其他设备通信,联动, 通信协议都补充修改好几版了。

我做的设备,带屏幕,带按键是用户使用我们设备的入口,考虑的问题相对多一点。

出0入17汤圆

 楼主| 发表于 2016-11-8 08:49:09 | 显示全部楼层
tangnyzl 发表于 2016-11-8 07:17
楼主有画流程图吗?

不画。

画的简单了没意思, 画的复杂了,不如直接码代码了。

我都是一个功能一个功能的写, 每个功能写之前,都会用文字,写个流程。

出0入0汤圆

发表于 2016-11-8 11:37:50 | 显示全部楼层
根本原因是对行业逻辑不熟。

出0入17汤圆

 楼主| 发表于 2016-11-8 13:03:23 | 显示全部楼层
zyw19987 发表于 2016-11-8 11:37
根本原因是对行业逻辑不熟。

参考我在38L的回复。

即便对行业逻辑非常熟,搭起来的架构仍然不可能完美。 还是会出现的bug。

在旧产品上,添加一个新功能,做成新产品,相对容易,bug会少,因为之前踩过很多bug了。从头搭建一个以前没做的新产品,比较难。

出0入0汤圆

发表于 2016-11-8 13:13:57 | 显示全部楼层
根本原因是对行业逻辑不熟。

出0入0汤圆

发表于 2016-11-8 13:15:27 | 显示全部楼层
根本原因是对行业逻辑不熟。

出0入17汤圆

发表于 2016-11-10 19:42:28 | 显示全部楼层
同求,目前对策是加强后期测试。

出0入8汤圆

发表于 2016-11-11 00:21:10 来自手机 | 显示全部楼层
远程升级

出0入0汤圆

发表于 2016-11-11 08:18:37 | 显示全部楼层
逻辑bug,没有银弹。。。。         

出0入0汤圆

发表于 2016-11-11 09:11:52 | 显示全部楼层
wicy001 发表于 2016-11-7 17:58
太奢侈,一个程序员+一个专业的测试员,会更好吧

所以说 说来说去 光是靠一个人  想把问题都解决了  这种想法其实是要不得的  还是要靠流程保证  可能是有这样的神人一个人搞定 但是就像学霸一样少只有少

出0入0汤圆

发表于 2016-11-11 09:16:01 | 显示全部楼层
wicy001 发表于 2016-11-8 08:38
老板提出一个大概的基本要求,剩下的有我们完成。

我们的项目都是边实施,边修订。 在不断进行中,解 ...

看的出来 你所说的情况应该和大部分国内行业类似 一个人单打独斗挡一面的  我敢打赌楼上那位项目代码量10-20万行的,绝不可能是这样小打小闹的作坊作风

出0入0汤圆

发表于 2016-11-11 11:51:53 | 显示全部楼层
状态机,面向对象,模块化减少逻辑BUG的概率,在研发时间充裕时内先架构后代码是规范的,如果先代码那后面就有永远调试不完的BUG,空间需求,时间需求同样会影响软件质量。

出0入17汤圆

 楼主| 发表于 2016-11-11 12:22:41 | 显示全部楼层
zhenglingo 发表于 2016-11-11 11:51
状态机,面向对象,模块化减少逻辑BUG的概率,在研发时间充裕时内先架构后代码是规范的,如果先代码那后面 ...

学习了。

出0入17汤圆

 楼主| 发表于 2016-11-11 12:33:33 | 显示全部楼层
myxiaonia 发表于 2016-11-11 09:11
所以说 说来说去 光是靠一个人  想把问题都解决了  这种想法其实是要不得的  还是要靠流程保证  可能是有 ...

小企业,只有一个人,流程起不了多大作用, 完全靠个人的能力和责任感

出0入0汤圆

发表于 2016-11-11 13:08:40 | 显示全部楼层
有bug才有希望

出0入71汤圆

发表于 2016-11-11 21:54:21 | 显示全部楼层
本帖最后由 dellric 于 2016-11-11 21:55 编辑

流程图这种简单的东西有时候很容易被忽略,就像感冒了之后,多喝水一样见效,不是所有的感冒都要用青霉素的。

出0入0汤圆

发表于 2016-11-11 22:12:55 来自手机 | 显示全部楼层
问题多数出在改身上,多点往这里想,问问就好改解决了

出0入42汤圆

发表于 2016-11-12 08:54:50 | 显示全部楼层
YRHeng 发表于 2016-11-7 08:55
最烦恼的是交付到客户后才发现BUG,而且还是客户发现的BUG

出现这个情况  也正常的   毕竟群众的眼睛是雪亮的   只要不是致命的问题   带上笔记本  现场维护下 就OK  ,客户还是能接受的。
最要命的是,由于出现BUG导致客户 停车,那个客户的损失就大了,就要找你们公司索赔了。

出0入0汤圆

发表于 2016-11-12 15:56:50 | 显示全部楼层
最痛苦的情况,我的一个程序,在运行的有几百套,程序都一样的,只有一台设备,会频繁出现一个问题,所有外设都更换多次了,电源也都处理了。所谓频繁,大概有时24小时会有1-2次错误处理导致设备暂停。其他的都没有出现,没有任何规律,你去现场等几天都没有问题,你前脚刚走,立刻打电话说出现了。

出0入0汤圆

发表于 2016-11-12 16:02:00 | 显示全部楼层
检查了暂停时的输出状态发现,程序有一个一定会两个OUT一起停的情况实际上在暂停时却只停了一个,艹,这TMD到底啥情况啊。恰巧运行到这里跳过了几百条程序又继续往下执行?暂停时所有操作都可以正常操作的。
说几百条是说期间有很多条件判断的程序都没有执行,但是这个函数的最后几条却得到执行。哎,头痛啊,这不有是好几天都没有再出现问题了。没法找啊。艹

出0入0汤圆

发表于 2016-11-12 17:09:42 | 显示全部楼层
基于Matlab模型编程,在纯软件环境下测试,保证覆盖率达到100%

出0入0汤圆

发表于 2016-11-12 22:10:57 | 显示全部楼层
这个,我只能说,用心,拿出纸笔,画出一切可能。

出0入0汤圆

发表于 2016-11-13 08:05:09 | 显示全部楼层
楼主是在深圳吗?

出0入0汤圆

发表于 2016-11-13 08:43:55 来自手机 | 显示全部楼层
现在大的项目都有架构师,程序写之前先泡在客户那边了解工艺和需求

出0入0汤圆

发表于 2016-11-13 16:38:12 来自手机 | 显示全部楼层
出到大城市,发现很多人都是一种简单的顺序结构,并且耦合程度十分之高

出0入17汤圆

 楼主| 发表于 2016-11-15 09:05:37 | 显示全部楼层
bailao99 发表于 2016-11-12 17:09
基于Matlab模型编程,在纯软件环境下测试,保证覆盖率达到100%

能举例说明下吗?   能把每个功能的特殊情况都测试到? 有些特殊情况,人都未必能想到的。

出0入0汤圆

发表于 2016-11-15 10:29:31 | 显示全部楼层
wicy001 发表于 2016-11-15 09:05
能举例说明下吗?   能把每个功能的特殊情况都测试到? 有些特殊情况,人都未必能想到的。 ...

Matlab环境下,测试输入可自己编程实现。先做已想到的情况,后面碰到没想到的再加。逻辑设计那块也是先保证已有输入下通过,新的输入条件下不通过就修改逻辑模型,直到所有测试输入下都通过。
Matlab simulink建立的模型可以直接生成C代码,编译后可以在电脑或者单片机;里运行

出0入17汤圆

 楼主| 发表于 2016-11-15 12:14:07 | 显示全部楼层
zyw19987 发表于 2016-11-13 08:05
楼主是在深圳吗?

不是。 在青岛。

出0入0汤圆

发表于 2016-11-16 10:30:50 | 显示全部楼层
我现在手上的设备需求至少增删改了100多项,有时真想推到重写,可是现在代码量已经到2W+了,我发布的版本也都200多个了,真心累,现在还在改需求改代码,早期的框架已经很难招架的住了,我在想后期接手的人会不会骂我;

出0入0汤圆

发表于 2016-11-16 12:50:44 | 显示全部楼层
后期功能增减导致的Bug,前期规划时总有些是避不开的。和公司新来技术副总讨论过这个问题,他给的解法是:正式release之后,将整个程序重构,然后走测试流程验证通过,而且他在上家公司基本都会要求这么做。这表示以后项目时程我们可以拉双倍?想想就很激动,哈哈哈哈

出0入0汤圆

发表于 2016-11-16 15:21:49 | 显示全部楼层
项目时程我们可以拉双倍,这个好。

出0入4汤圆

发表于 2016-11-16 15:59:33 | 显示全部楼层
嵌入式系统设计师 考试大纲 有个测试相关的 你可以看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-27 03:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表