程序员菜鸟请教版上马工码婆赐教写程序尽量减少bug的好办法

v
vangoc
楼主 (北美华人网)
不到20个人的私人小公司,只有我一个程序员
没人做测试,而且可以用来测试的样本非常少,
老板非常严厉,要求马上上线,压力山大
请问如何让程序尽量减少bug,或是在log内有了error msg, 能快速的定位到错误代码的那一行?
已经尽量让代码简洁了,naming 也都consistent, 还写log, 上了一些ut。
现在的办法是用一个try catch 把所有code, 都包裹起来,能看到error, 但是无法定位error, 除非用debug tools一点一点run
谢谢大家
m
minqidev
你要提供更多信息才行。 【1】用什么语言 【2】用什么IDE工具
像一般的语言报错,都有一种写法,类似于 __FILE__, __LINE__, 你可以自己写log到自己指定的文件。
这里面大家喜欢保存,当前文件,某一行出错。
g
gokgs
把stack trace 加到 log 里。

c
coalpilerd
try-catch尽量少用,除非你真的确定知道你能catch到什么exception以及你有办法处理那些exception。有UT的情况下,如果不用try-catch,这些错误很可能UT就能发现;很多时候try-catch只会把小毛病藏起来,然后拖成大毛病。
通过log来定位到底哪一段出了问题的常见做法是,在函数里定义一个局部变量,一开始初始化为零,然后在每个可能出问题的那一行代码下面把这个变量加一,最后dump log的时候把变量值写进去。这样你大概就知道是什么位置出错。
爱zumba
Unit testing at least 80%
m
mt.everest
不到20个人的私人小公司,只有我一个程序员
没人做测试,而且可以用来测试的样本非常少,
老板非常严厉,要求马上上线,压力山大
请问如何让程序尽量减少bug,或是在log内有了error msg, 能快速的定位到错误代码的那一行?
已经尽量让代码简洁了,naming 也都consistent, 还写log, 上了一些ut。
现在的办法是用一个try catch 把所有code, 都包裹起来,能看到error, 但是无法定位error, 除非用debug tools一点一点run
谢谢大家
vangoc 发表于 2023-04-28 09:23

try and catch你要re-throw,不要直接放log。这样才能有stack trace。

m
mt.everest
Unit testing at least 80%
爱zumba 发表于 2023-04-28 09:57

估计他老板不给时间让他写unit test。哎。
反正就是要让自己日子好过,unit test,integration test,acceptance test都该有。都该扩大covarage。
然后是log,是metrics,是tracing。
不过最关键的是architecture。是设计一个好的系统。是ops,保障足够的cpu,memory,network。一旦server下线能立刻发现。
1
160erskine
不到20个人的私人小公司,只有我一个程序员
没人做测试,而且可以用来测试的样本非常少,
老板非常严厉,要求马上上线,压力山大
请问如何让程序尽量减少bug,或是在log内有了error msg, 能快速的定位到错误代码的那一行?
已经尽量让代码简洁了,naming 也都consistent, 还写log, 上了一些ut。
现在的办法是用一个try catch 把所有code, 都包裹起来,能看到error, 但是无法定位error, 除非用debug tools一点一点run
谢谢大家
vangoc 发表于 2023-04-28 09:23

你这问的是写程序的最高境界,哪有shortcut啊
a
andolomeda
楼上大大正解。楼主思路不太对,增加test coverage 、把架构搞好是唯一正确操作,不然这软件很快完蛋
m
mt.everest
如果你用的是dotnet,我建议你加个logging interceptor,代码里面有异常,就可以直接log了。
spring 里面我估计也有类似的功能。这是chatgpt给的例子。
y
yihead
对,test必须要有。最起码ut得有
g
gokgs
unit test? are you guys kidding?
startup 都是 0 unit test, 直接 production. 哈哈。
x
xiaoywz
对,test必须要有。最起码ut得有
yihead 发表于 2023-04-28 10:28

他说公司就他一个程序员,而且要马上go live, 现在回去搞UT?
绿
绿葱
程序的架构要清晰,数据结构决定程序结构。 运行的每个阶段,操作对象有一个稳定的状态, 测试或debug是看这个状态是不是异常。 复杂系统,有没有经验, 其实就是要知道这些约定,很多并不写在spec里。 有的code能明显看出是被多人写过, 每个人的稳定态理解不同, 这部分code就会有大问题。
x
xiaoywz
不到20个人的私人小公司,只有我一个程序员
没人做测试,而且可以用来测试的样本非常少,
老板非常严厉,要求马上上线,压力山大
请问如何让程序尽量减少bug,或是在log内有了error msg, 能快速的定位到错误代码的那一行?
已经尽量让代码简洁了,naming 也都consistent, 还写log, 上了一些ut。
现在的办法是用一个try catch 把所有code, 都包裹起来,能看到error, 但是无法定位error, 除非用debug tools一点一点run
谢谢大家
vangoc 发表于 2023-04-28 09:23

我觉得如果要马上上线了,那技术层补救的方法有限。尤其是你们那里就你一个程序员。 只有一个程序员的麻烦的地方在于,你说一些技术上的困难或潜在的问题,你找不到别人在支持你,因为剩下的人毛也不懂。
如果是我,除了技术层,我会做两件事, 第一,说服你老板至少找个人进行全面high level功能测试,这样至少能看看需求和implementation是不是一致,而且这个人也能share一部分责任。 第二,我不知道你这是整个产品上线,还是说一个feature上线, 我假设是功能上线,那你能不能加个switch, 万一挂了的话能把这个功能关掉。
p
pop
楼主的公司居然就只有一个程序员,连测试啥的都没有, 唯一的程序员还是一个菜鸟程序员,估计是看中了新手比较便宜。 然后不懂行的老板还非常严厉,一个劲push赶紧上线。 不知道做的到底是啥,不过感觉就算仓促上线也会问题多多,到时候还是楼主一个人挨骂。
感觉这个公司没啥前途,有机会赶紧跳船跑路吧。
小气蔻蔻
最好的办法就是提高自己水平,成为大神。
n
nickbear
上integration test,一般框架都有对应的包实现,可以模拟真实的request 上线至少要搞个blue green deployment,有问题了可以马上切换回来 基本的metric和health check要有,有问题可以马上发现
m
molly233
不到20个人的私人小公司,只有我一个程序员
没人做测试,而且可以用来测试的样本非常少,
老板非常严厉,要求马上上线,压力山大
请问如何让程序尽量减少bug,或是在log内有了error msg, 能快速的定位到错误代码的那一行?
已经尽量让代码简洁了,naming 也都consistent, 还写log, 上了一些ut。
现在的办法是用一个try catch 把所有code, 都包裹起来,能看到error, 但是无法定位error, 除非用debug tools一点一点run
谢谢大家
vangoc 发表于 2023-04-28 09:23

不写test 害人害己。写完测试覆盖率90%才算写完了,要不然半成品都不是,怎么敢直接production, 太粗糙了。
同建议跑路,感觉像转行的人什么都不懂在乱搞
x
xiaoywz
楼上那些唧唧歪歪unit test的,明显没在小公司干过。
千渔千寻
回复 1楼vangoc的帖子
这老板真不行。程序都是试错试好的。老司机出错少,那是因为以前踩坑多。不愿花老司机的钱,就只能这质量。
h
hoxu
写 test 是正解。
V
Vinky
不写test 害人害己。写完测试覆盖率90%才算写完了,要不然半成品都不是,怎么敢直接production, 太粗糙了。
同建议跑路,感觉像转行的人什么都不懂在乱搞
molly233 发表于 2023-04-28 11:24

怎么老觉得整天国人怼国人?!怎么是乱搞?!能给点意见就最好,不给就不要太Mean。你不转码,别人天天转码,国人转码就动了你的蛋糕?!
d
dalianyin
最好的方法就是离开这个小作坊 去大厂取几年经
幸运之神
你以为大厂行?大厂每个组基本只有一两个顶着干,其他就混饭吃。
l
letgogogo
楼主的公司居然就只有一个程序员,连测试啥的都没有, 唯一的程序员还是一个菜鸟程序员,估计是看中了新手比较便宜。 然后不懂行的老板还非常严厉,一个劲push赶紧上线。 不知道做的到底是啥,不过感觉就算仓促上线也会问题多多,到时候还是楼主一个人挨骂。
感觉这个公司没啥前途,有机会赶紧跳船跑路吧。
pop 发表于 2023-04-28 11:11

这公司是火坑,楼主能跑就跑吧
j
jack54321
楼主的公司居然就只有一个程序员,连测试啥的都没有, 唯一的程序员还是一个菜鸟程序员,估计是看中了新手比较便宜。 然后不懂行的老板还非常严厉,一个劲push赶紧上线。 不知道做的到底是啥,不过感觉就算仓促上线也会问题多多,到时候还是楼主一个人挨骂。
感觉这个公司没啥前途,有机会赶紧跳船跑路吧。
pop 发表于 2023-04-28 11:11

其实,这种公司,完全不需要 雇个人 自己从头写。
看哪个好的,完全可以买一个 类似的架构,在那个基础上 再 customize 一下 就可以了
大喜妞
Try Amazon Code Whisperer。能让你码的更快。
w
wenxinhemu
先画流程图
g
gokgs
楼上那些唧唧歪歪unit test的,明显没在小公司干过。
xiaoywz 发表于 2023-04-28 11:26

是的,我早就一针见血的指出了。
n
njbaby
我也遇到过这个情况,新手小公司,程序可以run但是,没人可以帮着测试,还要上线,压力太大,还是一走了之。建议去一个大点公司,最好有个team, 可以得到一些指点和支持。
t
ted.hanks
unit test? are you guys kidding?
startup 都是 0 unit test, 直接 production. 哈哈。
gokgs 发表于 2023-04-28 10:58

g
gokgs
我也遇到过这个情况,新手小公司,程序可以run但是,没人可以帮着测试,还要上线,压力太大,还是一走了之。建议去一个大点公司,最好有个team, 可以得到一些指点和支持。
njbaby 发表于 2023-04-28 14:05

关键是公司的产品是什么, 要是 碰上早期的 google, fb, 你梦里都可以写 code.
蓝雪花
写程序出bug,那是太正常不过的了,也创造了不少工作机会,lol 说正事。第一,version control,每次递交的code都有记录,可以返回到之前到任何版本,出了错误,可以和之前到版本对比调试。第二,建立regression system,也就是一个包含很多testcase的系统,coverage要广,每次提交code之前都跑一下这个regression,没有出错,才可以提交code。 这些,在大点的公司,都是有专门的team做的,楼主一个人,量力而行。
Y
Yourdad
就你一个程序员 还是快逃吧 老板也不知道程序怎么回事 没有理解
c
chmod999
起码来个qa吧?老板自己来当qa也行啊 啥都不管眼一闭就要成品的是没脑子吗?
J
J.X
一个程序员的公司,还敢有程序上线?还有客户敢用?你一走,公司就没有人懂了,还不完蛋?
p
pigluo
不到20个人的私人小公司,只有我一个程序员
没人做测试,而且可以用来测试的样本非常少,
老板非常严厉,要求马上上线,压力山大
请问如何让程序尽量减少bug,或是在log内有了error msg, 能快速的定位到错误代码的那一行?
已经尽量让代码简洁了,naming 也都consistent, 还写log, 上了一些ut。
现在的办法是用一个try catch 把所有code, 都包裹起来,能看到error, 但是无法定位error, 除非用debug tools一点一点run
谢谢大家
vangoc 发表于 2023-04-28 09:23

根据我们组的经验,很多时候bug太多,并不是程序员本身的写代码的能力,而是用户需求没做好。
看你们公司那么小,很多工作应该都是 ad-hoc 临时起意的,或者 requirement 没有定义好,或者根本就没有 requirement。老板有个大概的需求在脑子里,给你大概讲一下,你的理解,也许只有20%和他想的重合。因为他也没有给你细节和各种 use cases,这样看来来就好像你做了东,忘了西,顾了右,落了左。
有经验的程序员,或者说在那个公司工作久了,就会意识到,哦,这个地方我要注意一下,或者,问一下同事,某些 use case 需不需要,需要什么样的结果,这样 design architecture 的时候,就会注意到。
没经验的,或者在公司很短时间的,因为对公司产品不熟,不少 business logic 不了解,看起来就好像人能力不行,其实,他们写的代码本身根本没有问题,只是设计构架的时候,很多东西没有考虑到。
p
pigluo
其实共公司再小,都应该有两个程序员吧,相互 code review,才能发现漏洞。否则,全都靠QA 黑盒测试,好多问题无法暴露。
h
honghua
mark .....
m
mylittle9
没人测只有自己测。光unit test肯定不行啊。 你得做end to end,和environment test。有负载的要加load. 功能测完得测性能,否则一上load就完蛋。

再牛的程序员也写不出bug free的大型程序。都是测出来的。
p
pigluo
try-catch尽量少用,除非你真的确定知道你能catch到什么exception以及你有办法处理那些exception。有UT的情况下,如果不用try-catch,这些错误很可能UT就能发现;很多时候try-catch只会把小毛病藏起来,然后拖成大毛病。
通过log来定位到底哪一段出了问题的常见做法是,在函数里定义一个局部变量,一开始初始化为零,然后在每个可能出问题的那一行代码下面把这个变量加一,最后dump log的时候把变量值写进去。这样你大概就知道是什么位置出错。
coalpilerd 发表于 2023-04-28 09:40

哈哈,我组里有个娃,特别爱用 try-catch,偷偷摸摸把exception 吃了,又不throw,他所谓的 fail gracefully,结果就是测试初期,看不到问题,程序从来不 crash,很多东西不能用,最后一分钟才测出来 (QA黑盒测的,小朋友没写 unit test,后来我们要求所有人都写 unit test)
e
eragshs
unit test? are you guys kidding?
startup 都是 0 unit test, 直接 production. 哈哈。
gokgs 发表于 2023-04-28 10:58

哈哈哈连dev环境都没有的
e
eragshs
一个程序员的公司,还敢有程序上线?还有客户敢用?你一走,公司就没有人懂了,还不完蛋?
J.X 发表于 2023-04-28 16:02

这种应该就是做公司内部的应用程序的,就算下线了也没啥,公司照样可以转
e
eragshs
楼主的公司居然就只有一个程序员,连测试啥的都没有, 唯一的程序员还是一个菜鸟程序员,估计是看中了新手比较便宜。 然后不懂行的老板还非常严厉,一个劲push赶紧上线。 不知道做的到底是啥,不过感觉就算仓促上线也会问题多多,到时候还是楼主一个人挨骂。
感觉这个公司没啥前途,有机会赶紧跳船跑路吧。
pop 发表于 2023-04-28 11:11

其实这种老板很好相处,都是楼主一人说了算,好爽啊!
p
poppyjasper
要自己弄一些QA cases
否则,很难做的

p
poppyjasper

应该有免费的version control软件

d
dalianyin
你以为大厂行?大厂每个组基本只有一两个顶着干,其他就混饭吃。
幸运之神 发表于 2023-04-28 12:47

不用自己干 看别人干就行 他现在这种情况 不仅吃不到猪肉 连🐷长什么样都看不到
m
mt.everest

应该有免费的version control软件


poppyjasper 发表于 2023-04-28 16:50

git啊
p
poppyjasper
我以前也在start up干过
QA可以自己做,就是把全部成功案例走一遍,再finalize

g
gokgs
其实大部分 startup 一开始的程序应该是很简单的, 基本功能搞定了就行, 各种 edge case 慢慢加。
w
webdriver
一个行业一个坑,即使老程序员,换个坑也需要不少时间熟悉 。。。
l
lala_2009
回复 1楼vangoc的帖子
这样的公司有点可怕,快逃吧。
g
guoguosusu
感觉让你一个人写一个debug tool根本不现实,也没时间写unit tests.至少多写一些log,log 写清楚问题是什么
H
Hesterhql
一开始程序都还挺正常的 但是经不起后期客户脑洞大开
c
chickenrib
程序员不是谁都可以做的。楼主是个菜鸟,而且不像是那种可以自我成长的,还是去一个有人带可以学习成长的公司吧。
F
Finallz
Unit test + integration test + end to end test, full CI/CD
j
johnlucy
好多有用的建议,同意testing strategy是在大厂能学到的有用方法论
h
hioc
不知道。问题太不上路。
菜鸟可不就是bug多吗,老鸟也写不出没bug的code。。。。。