对产品质量的一点思考

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,一经查实,立即删除!

相关文章

正确使用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]中高度最小的美…

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

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

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

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

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

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

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 文件生成一个程序集,再从这个程序集…

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)。你可以根据自己…

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

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

了解Kubernetes主体架构(二十八)

前言 Kubernetes的教程一直在编写,目前已经初步完成了以下内容:1)基础理论2)使用Minikube部署本地Kubernetes集群3)使用Kubeadm创建集群接下来还会逐步完善本教程,比如Helm、ELK、Windows Serv…

Codeforces Round #632 (Div. 2) F. Kate and imperfection 数论 + 贪心

传送门 文章目录题意:思路:题意: n≤5e5n\le5e5n≤5e5 思路: 首先有个显然的结论:当往集合中加入一个数xxx的时候,如果存在d∣xd|xd∣x且ddd不在集合中,那么加入ddd一定比加入xxx更优。 也就是…

.NET开发框架(二)-框架功能简述

本框架为响应式SPA框架,支持PC与手机端的屏幕自适应。手机展示效果视频在文章末尾查看。框架入口地址:http://letyouknow.net/1、框架登录界面,输入账号与密码,点击立即登录2、框架主界面,左-右结构,左边为…

Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

传送门 文章目录题意:思路题意: 直接白嫖 思路 首先不难发现,n≤2n\le2n≤2的时候是无解的。 现在我们来构造n3n3n3的情况,通过打表可以发现如下矩阵是符合题目要求的: 179325486\begin{array}{ccc} 1&7&9…

SiteServer CMS 新版本 V6.11(2019年7月1日发布)

欢迎来到 SiteServer CMS V6.11版本(.NET CORE V7.0预览版本将推迟至2019年9月1日发布),经过两个月的连续迭代开发,V6.11 版本新增了采集插件以及多项BUG修复:SS.Gather 页面采集插件页面采集插件将在V6.11版本中正式提…

P1020 [NOIP1999 普及组] 导弹拦截 Dilworth定理 + dp

传送门 文章目录题意:思路:题意: 思路: 对于第一问直接输出最长不严格下降子序列即可,第二问是Dilworth定理,变形比较多,之前也写过类似的,这里贴个证明。 //#pragma GCC optimiz…

参数传递机制之JWT

1. 什么是 JWTJWT 其全称为:JSON Web Token,简单地说就是 JSON 在 Web 上的一种带签名的标记形式。官方的定义如下:JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.…

Codeforces Round #709 (Div. 1) B. Playlist 链表维护 + bfs

传送门 文章目录题意:思路:题意: 思路: 紧跟刘爷脚步补题。 不难想到用链表维护下一个数是什么,这样就跟以前做过的一个题差不多了,首先将初始的时候删掉的点的前一个点即为题目中的AAA入队,让…

浅谈ASP.NET Core中IOC与DI的理解和使用

说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生,早前,自己也有尝试过去了解这两个东西,但是一直觉得有点很难去理解,总觉得对其还是模糊不清,所以,趁着今天有空,就去把两个概念捋清…

一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE

这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver、oracle、mysql、postgres、sqlite、access等常见数据库。注意:它并不是一个orm工具(常见的orm框架如:EF、Dapper等)。2.1 引入DBUtil依赖1. 首先打开vs(推荐vs2019)&#xff0c…