对产品质量的一点思考

640?wx_fmt=jpeg

不管是做产品还是做项目,也不管是采用瀑布模型还是敏捷开发,我们都有一个终极目标,就是能按时交付质量可靠的功能,其中质量尤为重要。

本文是我对产品质量的一点思考,如果您所在的团队代码质量很高,很少出BUG,那么可以私信我,我们可以交流下关于代码质量的一些问题。

小公司面临的问题

大公司里每个人指责分明,团队的人员配置也比较齐全,有完整的开发流程,流程也会不断的迭代优化,每个环节只要按照流程严格去执行,基本不会出什么大的问题。但不是每个人都能够进入到大公司,或者说会一直待在大公司,如果您是在中小公司,可能会有下面一些情况:

  • 没有专职的需求分析人员,没有专职的测试人员,很多时候是一岗多职

  • 没有不急的项目,客户永远说的都是越快越好

  • 虽然说唯一不变的就是变化,我们需要拥抱变化,但常常会即便拥有一双长臂,也无力拥抱

  • 需求来了,直接写代码,后期补文档

  • 代码中基本不写单元测试

  • 没有自主研发的需求管理平台

为什么会有上面的问题,我觉得很重要的一个原因是成本问题,专职需求分析需要人力成本,写单元测试、文档等需要时间成本,等等。短期看来是节省了成本,但从长远来看,会导致质量下降,最终会得不偿失,如果您是做项目,打一枪换个地方,我不做评价,如果是在不断地迭代成品,那么就要停下来好好思考下了。

我们的现状

10人左右的团队,需要做的事情如下:

  • 需求分析

  • Vue前端开发

  • dotNetCore后端开发

  • H5、小程序、iOS、安卓

  • 测试

  • 运维

上面说到,在小公司会是一岗多职,我们也不例外,大概任务分配如下:

  • 全员做需求分析,即便是新手,也要求做简单需求的分析

  • 后端工程师除了iOS和安卓不做,其他的都做

  • iOS和安卓工程师除了后端不做,其他都做

  • 只有一两个只做纯前端的工程师

目前来看,整个团队是偏全栈的,全栈的团队理论上效率会很高,的确,效率从来都不是我担心的问题,但质量问题却一直都没能很好的解决:

  • 开发人员还是更喜欢写代码,文档能力偏弱,虽然目前强制规定每个所做的需求在语雀上要写对应的需求文档,但很多时候写不到点子上,关联影响点也没有分析,给测试提供不了很好的支撑

  • 文档写不好,加上开发者的思维,很多低级问题在自测阶段不能被发现

  • 经常改了A模块的一个问题,引发其他模块的几个问题

  • 同样的问题会反反复复出现

怎样解决质量问题

取舍和平衡

我认为软件开发其实是在时间、范围、稳定性和代码质量上做博弈:

  • 时间:交付一个功能的期限,比如老板说3个月要上线某功能

  • 范围:需要实现功能的边界

  • 稳定性:随着版本的不断更新,用户使用产品的一个最直观的感受

  • 代码质量:代码是否是可复用,易于维护的,用户不能直观感受,但也同样重要

领导总是会说,这个时间节点非常重要,或者重要客户,不能延后,等等,总之时间节点后延的可能性不大。

稳定性也不能出问题,轻则客户满意度降低,重则会造成事故,给客户带来严重损失,客户可能因此就丢了。

所以只能在范围和代码质量上做取舍:

  • 本来应该三个月做的任务,非要压缩到一个月,那只能去和领导沟通,将一些不重要,或者不紧急的任务放到下一阶段完成

  • 如果范围也不能压缩,那就只能舍弃代码质量了,怎么快怎么来,但也因此欠下了一个技术债,债是需要偿还的,也是有利息的,还的越迟,利息越多。

自动化测试

自动化测试分为两个部分,构建之前的单元测试和构建之后的端到端测试

  • 单元测试又分为前端Vue的单元测试和dotNetCore的单元测试,在一个已成型的产品中去加单元测试是很困难的,所以只能先找一些关键点,经常出问题的点去尝试

  • 端到端的测试我们采用TestCafe,反复出问题的地方,就提炼出来一种业务场景,有针对性地去写测试代码

配合Jenkins,做到测试的自动化,那是不是有了自动化测试就能高枕无忧了呢?并不是,我觉得更重要的是,每个人员对产品要有深入的理解,对所做的需求要能完全掌握,对关联影响点的分析要没有任务遗漏。

测试只是手段而不是目的,我们的目的是写出好的代码,交付出无缺陷的功能。

总结

没有任何的方法论是可以生搬硬套的,只有不断的去学习、吸收、结合现有资源进行实践、不断的重复这个过程,直到找到一种适合自己团队的落地方案。

改善质量的道路任重而道远,不断地去尝试,去实践总会有些效果的。

您所在的团队又是怎么样来保证质量的呢?欢迎讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统-学习笔记

王道操作系统:有道云笔记 欢迎评论给意见!

Codeforces Round #630 (Div. 2) F. Independent Set 树形dp

传送门 文章目录题意:思路:题意: 给你一棵树,求这棵树的边导出子图中独立集的数量和,独立集大小可以为000。 思路: 先考虑普通的独立集数量怎么求,无非就是分情况讨论一下选根还是不选根&…

CSP赛前总结

1.由奥卡姆剃刀定律,通过各种特判和大量无根据猜测得到的解法不可能正确。 比赛的题目解法可能复杂,但绝不会繁琐。 2.由幸存者偏差,在写题时往往会参考样例,这样样例以外的情况可能会导致bug。 不要相信样例,大样例…

正确使用AES对称加密

正确使用AES对称加密经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据。但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险。我经常遇到的问题,有如下&#xff1…

Codeforces Round #709 (Div. 1) C. Skyline Photo dp + 单调栈优化

传送门 文章目录题意:思路:题意: 思路: 首先一个非常明显的dpdpdp式子就是f[i]max(f[j]val(j1,i))f[i]max(f[j]val(j1,i))f[i]max(f[j]val(j1,i)),其中val(j1,i)val(j1,i)val(j1,i)是[j1,i][j1,i][j1,i]中高度最小的美…

CSP2019游记

Day -不知道多少 第一轮 题出得挺好,终于没有鬼畜的CCF赞歌了 考得还行 Day -1 复习了Tarjan并伪证了一遍,然后颓废了 安利E17大失败 放了几十个满贯 给某同学科普了一些不好的东西,现在他好像自闭了 我谢罪 Day 0 继续肝Tarjan然后…

「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)...

上一篇介绍过数据差距与数据岛的背景,这里不再赘述,请翻阅上一文。此篇在Sqlserver上给大家演示1000万条记录的计算性能。测试电脑软硬件说明一般般的笔记本电脑,2017年7月,价格:4500。电脑配置数据构造1000万行数据&a…

Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring 构造

传送门 文章目录题意:思路:题意: 思路: 针灸思维不行,数据结构来凑呗。 一开始做的时候想简单了,一直wawawa,后来想到了hackhackhack样例,开始换思路构造,结果死活想不到…

用象棋的思维趣说IT人的职业发展和钱途

最近我花了不少功夫在学习象棋,也学习了王天一等高手的棋路,感觉IT人的职业和下棋一样,往好了讲,争主动权争实惠只争朝夕,往坏了讲,一步走错得用多步来弥补,如果错误太大未必能弥补回来。在本文…

【康复训练】[国家集训队] calc【dp】【拉格朗日插值】

传送门 显然可以dp 显然可以假设单调增,答案乘个阶乘即可 设f(i,j)f(i,j)f(i,j)表示前iii个不超过jjj的答案 f(i,j)f(i,j−1)jf(i−1,j−1)f(i,j)f(i,j-1)jf(i-1,j-1)f(i,j)f(i,j−1)jf(i−1,j−1) 注意边界是f(0,i)1!f(0,i)1!f(0,i)1! 注意边界是f(0,i)1!!f(0…

Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences 思维 + 组合数学

传送门 文章目录题意:思路:题意: 给你d,modd,modd,mod,让你求能构造出如下序列aaa的个数模modmodmod: 思路: 首先可以发现aaa的长度不能超过log2dlog_2dlog2​d,因为如果存在两个aaa的二进制…

基于 Roslyn 实现动态编译

基于 Roslyn 实现动态编译Intro之前做的一个数据库小工具可以支持根据 Model 代码文件生成创建表的 sql 语句,原来是基于 CodeDom 实现的,最近改成使用基于 Roslyn 去做了。实现的原理在于编译选择的Model 文件生成一个程序集,再从这个程序集…

【NOI2013】向量内积【随机化】

传送门 题意:给nnn个ddd维向量,询问是否有两个向量内积(对应位乘积和)为kkk的倍数 n≤100000,d≤100,k2,3n \leq100000,d\leq100,k2,3n≤100000,d≤100,k2,3 考虑每个向量能否与之前的某一个匹配 如果我们找到某一个与之前的可…

Codeforces Round #212 (Div. 2) C. Insertion Sort 思维

传送门 文章目录题意:思路:题意: n≤5000n\le5000n≤5000 思路: 从dpdpdp题集中看到的,一看n≤5000n\le5000n≤5000,这不就乱搞就行了,哪有什么dpdpdp🦆。 看到冒泡排序&#xff0…

[Abp vNext 源码分析] - 4. 工作单元

一、简要说明统一工作单元是一个比较重要的基础设施组件,它负责管理整个业务流程当中涉及到的数据库事务,一旦某个环节出现异常自动进行回滚处理。在 ABP vNext 框架当中,工作单元被独立出来作为一个单独的模块(Volo.Abp.Uow)。你可以根据自己…

OI训练记录

2019/12/25 Linux下VS code安装、emacs基础配置、gdb简单使用 NOI2013 向量内积 构造一个貌似随便找到但复杂度不允许的方案,可以考虑弱化条件后随机化 NOI2013 树的计数 2019/12/26 NOI2013 矩阵游戏(无blog) 矩阵幂不满足费马小定理,需要推导通…

Codeforces Round #462 (Div. 2) C. A Twisty Movement dp + 思维转换

传送门 文章目录题意:思路:题意: 给你一个长度为nnn的只包含1,21,21,2的序列aaa,你可以至多翻转一段区间,求翻转之后最长非递减子序列是多长。 思路: 考虑如果翻转的话,翻转的子区间肯定是22…

使用 Cake 推送 NuGet 包到 AzureDevops 的 Artifacts 上

大家好,我最近在想如何提交代码的时候自动的打包 NuGet 然后发布到 AzureDevOps 中的 Artifacts,在这个过程中踩了很多坑,也走了很多弯路,所以这次篇文章就是将我探索的结果和我遇到的一些问题整理分享给大家。我的上一篇关于 CI/…

【NOI2013】树的计数【树的遍历】【期望】

传送门 题意:给定一棵nnn个点的树的DFS和BFS序,求树高期望。 n≤2e5n \leq 2e5n≤2e5 首先根据BFS序将树点分层,一定切记先自己把树点分层,这样实际上是在排除一部分情况。 将每一层第一个点打标记,答案就是期望标记…

Codeforces Round #632 (Div. 2) C. Eugene and an array 思维 + 前缀和

传送门 文章目录题意:思路:题意: 给定一个长度为nnn的序列aaa,定义一段区间为好区间是这段区间的所有连续子区间的和都不为000,求好区间的个数。 思路: 套路题,定义aia_iai​的前缀和bi∑j1i…