最新要闻
- 前沿资讯!2022年全国电影总票房超300亿!《长津湖之水门桥》夺冠
- 接盘暴雪玩家 网易《无尽战区》下周重新开服:首发上线29位英雄
- 240W超级闪充要来!realme暗示新机充满电不到10分钟
- 为庆祝传统新年 阿根廷民众烧梅西雕像:当地习俗、已延续66年
- 当前时讯:Apple Watch Ultra一周上手:不适合普通用户
- 与网易和好基无可能 魔兽关服倒计时:暴雪代理谈判进入第二阶段
- 120Hz自适应刷新0延迟:一加11成屏幕流畅体验天花板
- 环球速读:五月天版权回归网易云音乐 网友:糟糕的心情好了些
- 每日消息!俞敏洪给自己2022年打8分:没有欠员工一分钱工资
- 动态:4599元 雷军分享Redmi K60冠军版特写照:和跑车一样精致
- Redmi K60素皮版本质感堪比手工!雷军:值得你细品
- 环球看热讯:健康速食!西安饭庄油泼biangbiang面大促:每盒6.66元
- 今日热门!罗永浩怎么看?西门子回应洗衣机10年包修为保证能修 洋品牌赤裸裸坑国人
- Intel Unison正式上线:实现PC与安卓/iOS手机无缝连接
- 当前消息!你最想看哪个?2023春节档已官宣五部电影 《满江红》比拼《流浪地球2》
- 环球微头条丨销量甩Intel+Zen4全家!AMD神U锐龙7 5800X3D卖成年度处理器销冠
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
浅谈研发实践的技术债与效能提升
在软件研发过程中,往往随着为了快速满足业务要求的压力,用户需求的变更,软件代码的增多,以及版本的迭代,团队成员的变化等等因素,导致一个软件项目随着时间推移,欠的技术债会越积越多,用户使用容易出错,部署流程也变得复杂。
技术债务不及时还掉,就会产生“利息”,进而导致软件复杂度呈指数级增长。代码行越多,逻辑越复杂,技术债务就会欠的越来越多,最终到了某个临界点的特定时刻,软件代码就会变得失控,没人知道里面改动会带来什么后果。每一次的需求修改调整,引发即使很小的代码修改,可能由于软件复杂度变高,都会带来新的问题,轻则导致软件无法正常使用,重则导致出现严重的问题,甚至系统崩溃无法正常使用等问题。随着时间的累积,导致问题处理和修复耗费大量时间。
而这种失控,在实际软件开发过程中,是一个普遍的现象。熵增定律告诉我们,孤立系统总是趋向于熵增,最终达到熵的最大状态,也就是系统的最混乱无序状态。熵是无序的混乱程度,也就是说世界上一切事物发展的自然倾向都是从井然有序走向混乱无序。软件也不例外,如果不进行适度控制和优化,也必然朝着混乱的方向行进。
(资料图片仅供参考)
在实践中,团队技术人员通过多种办法来提高软件研发效能,调整软件研发模式,以流程、方法等方式持续提高软件质量,最终提升软件可用性,以及用户体验。从笔者的过往实践来看,比较常见的有:
1.从需求分析与输入端控制
2.从软件架构与设计方面提升
3.从团队协作与组织方面提升
4.从软件代码质量与测试方面提升
5.从研发模式与工作流程方面
6.软件项目管理与部署发布
这篇文章,下面就以个人粗浅的理解,概要式的进行一些初步的分析,后续我们针对具体的每个方向的主题,逐步再进行详细的探讨。
需求分析与输入端控制
需求输入端的重要性毋庸置疑。软件要解决用户的什么痛点,用户会在什么场景下使用,做什么样的操作,来达到什么样的效果,解决了什么样的问题,这些要做一款软件需要考虑的首要问题。
而对用户真实需求的分析,做出符合产品定位并满足用户使用的解决方案,其中需要有很多的思考和分析,如何以高效且低成本方式做好,是值得长期研究和实践的话题。
ToC类软件和toB类软件的用户属性不同,需求侧重点不同,在做需求分析时候,做好需求分析,需求挖掘,以及需求的验证等也都不同。
在实践中,往往也会存在很多的伪需求,以及被忽略的隐含需求。功能性需求只是一方面,但决定软件成败的,往往是隐含的非功能性需求。
在进行软件需求分析时候,需要对于功能的完整性、功能前后一致性,以及逻辑合理性等进行论证,也需要考虑到需求是否可落地实施等。
需求分析和输入端的分析和控制,对软件的研发时间方向起着至关重要的作用。往往多一个需求,或者一个功能流程的变化,就足以使得后续的一系列软件流程随之改变。在软件需求阶段,做好需求分析,需求确认,以及需求评审,是很重要的一个环节。
软件架构与设计方面
当需求确定之后,就需要进行软件设计了。软件规模的大小,用户的使用场景差异,就决定着软件的设计方式,就一般的普通软件系统而言,采用单体软件、前后端分离、分布式云架构方式,采取公有云、混合云、或者私有云模式部署,都对整体软件设计影响很大。
软件整体架构的选择,不仅仅需要考虑功能方面,也需要对系统的可用性、性能、可扩展性、文件存储、消息处理、接口协议、通信方式等进行考虑,从基础模式上做好设计。
一般而言,常见的软件系统由前端UI展示层、服务应用层、业务逻辑层、数据持久化层组成。不论是单体应用,还是分布式应用,以及微服务架构,乃至一些大的云厂商设计的Serverless架构,都在解决给用户界面呈现,业务逻辑处理,与数据持久化的问题。只是在每一层里面,有更详细的架构设计;以及由于业务属性或者项目某方面的特点需要,导致做了一些特殊型的架构设计。如何巧妙地让前后端协调起来,通过完整、准确、高质量的代码实现,从而输出一个稳定高效的软件,是在设计方面值得下功夫去做的事情,并且值得持续演进和更新。架构设计是一个不断演进的过程,也是一个产品长期演进和迭代过程中绕不开的必由之路。
实践工作中,我们做的业务软件系统,也需要随着用户需求的驱动,不断进行技术选型的修改,软件架构设计的优化,持续不断地优化和调整。我们学习一些业界开源的经典软件架构设计,会有一定帮助。比如下面这几个:
Linux系统架构:
(上图参考:https://retrage.github.io/img/lkl-architecture.png)
Openstack架构设计:
(上图参考:https://object-storage-ca-ymq-1.vexxhost.net/swift/v1/6e4619c416ff4bd19e1c087f27a43eea/www-assets-prod/openstack-map/openstack-map-v20221001.jpg)
Kubernetes架构设计:
(上图参考:https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.2/docs/design/architecture.png)
一些开源的经典软件设计很巧妙,在实际的软件设计中,可以给我们很多启发,在实践中可以参考学习借鉴,以便少走很多弯路。
团队协作与组织模式
当需求与软件基本设计确定之后,团队的协同与组织模型就进行相关协作与工作开展,基于一些常用的协作工具,如Jira、Redmine、Tapd、Worktile、Teambition、禅道、飞书之类进行产品需求、工作事务、项目进度、task、bug与软件质量等的管理与跟踪。大部分的工具现在都提供了对于任务优先级设定,人员、时间等的。可以根据自己团队的时间选择取用。各种工具皆有自己的优劣势,选取一种作为团队的标准化工具,再逐步优化和改善,目标是能够实现信息共享与同步,方便团队协同,提高效率就可以。
软件代码质量与测试
在人月神话中提到,软件开发工作没有银弹,不为系统测试安排足够的时间简直就是一场灾难。由于软件工程在实际中的复杂性,需要做好合理的时间规划,并且需要注意风险。在实际的项目开活动中,前期未为测试分配足够的时间,就会导致大多数项目在后期长期维护修复,反复挣扎,导致实际上测试花费了进度中超过一半的时间。软件工程中进度计划方面,典型的经验是为1/3计划、1/6编码、1/4部件测试以及1/4系统测试。
在项目实践中,许多项目在系统测试之前还能保持进度。在进入系统测试之后,就会陷入泥潭,时间不可控。因为项目为测试预留时间较少,测试介入较晚,在项目快完成的时候才开始启动测试,直到项目的发布日期,人们才会发现进度上存在问题,还有很多复杂的问题没有处理完成。给测试预留的时间不足,就会在项目快完成接近发布日的时候面临延期的窘境。就软件而言,实际往往需要经过数轮测试,才能使得一个软件能够功能可用,而要达到好用,更是需要持续地精雕细琢,经历更漫长的测试,多轮的实践。所以业界也有说法,好的软件是不断测试之后才优化打磨出来的。所谓“不经一番寒彻骨,怎得梅花扑鼻香”,只有持续的深入细节测试和优化,不断打磨,才能使得软件能用,直到最终好用、易用。
研发模式与工作流程
所谓”工欲善其事必先利其器”,选择合适的开发工具与模式,会对实际的效率提升有很大帮助。首先建议团队之间采用相同的标准SDK版本,相同的IDE版本,相同的项目管理工具与构建工具,节省一些由于版本差异导致的转换等成本。其次,敏捷开发模式已经盛行多年,基于敏捷模式的快速迭代工作,采取小步快跑,小版本迭代,快速发布,循序渐进的模式,这种主流普遍的研发模式,团队之间快速协作,更早的验证软件小功能,每一个Sprint都有对应的输出,迭代式、增量交付,能够让团队整体实现更高效的协作,以及最高效的交付。
项目管理与部署交付
在实际项目运行中,即使采取敏捷方式,基本的需求分析,编码与单元测试,集成与系统验收测试等关键环节也是必不可少的。而项目管理方面,就需要做好内外部的资源与时间等各方面的协调工作,控制好风险,确保团队的进度满足,整体进展与原计划之间是匹配的。
软件的部署与交付,是整体相对靠后的一个重要环节。通过持续集成结合持续交付与持续部署的方式,让一切自动化起来,让开发、测试人员专注与业务的实现与测试,让代码构建到发布的过程自动运行。采取流水线式自动部署,让项目从代码提交,代码质量扫描、单元测试、build构建,自动化测试,自动化发布,并完成自动化部署,代码提交即可触发构建到发布的过程,实现全程无人值守即可完成。
把能固化的流程性工作交给工具,降低人工操作,可以减少错误,也可以提高效率。用程序测试程序,用程序调用程序,用程序管理程序,从而提升整个发布与研发的运转效率。
总体而言,软件的研发、交付,也是个系统性的工程,只有快速地响应变化,持续提高效率,才能实现更好的结果。一些GTD工具、好的项目管理工具,一个小脚本,也会带来效能方面的提升。培养好的习惯,养成良好的规范化标准对工程师而言很重要。
小结
本文很简要地从几个方面讨论了一些效能提升的要点,在软件研发实践中,效能提升也不止上面几点,而且以上提到的几个方面也有更深入的细节,后续我们继续分享交流。
浅谈研发实践的技术债与效能提升
前沿资讯!2022年全国电影总票房超300亿!《长津湖之水门桥》夺冠
接盘暴雪玩家 网易《无尽战区》下周重新开服:首发上线29位英雄
240W超级闪充要来!realme暗示新机充满电不到10分钟
为庆祝传统新年 阿根廷民众烧梅西雕像:当地习俗、已延续66年
当前时讯:Apple Watch Ultra一周上手:不适合普通用户
当前报道:Linux的串口非标准波特率设置更改
最新消息:Go语言实现包的初始化控制器与流程控制器
世界速递!如何站在开发者的角度理解框架的设计思想?
每日热门:文件IO操作开发笔记(一):使用Qt的QFile对磁盘文件存储进行性能测试以及测试工具
全球微资讯!python 中os和sys模块常用方法
与网易和好基无可能 魔兽关服倒计时:暴雪代理谈判进入第二阶段
120Hz自适应刷新0延迟:一加11成屏幕流畅体验天花板
环球速读:五月天版权回归网易云音乐 网友:糟糕的心情好了些
每日消息!俞敏洪给自己2022年打8分:没有欠员工一分钱工资
动态:4599元 雷军分享Redmi K60冠军版特写照:和跑车一样精致
世界视讯!什么是 A/B 实验,为什么要开 A/B 实验?
环球热文:IT 技术工作详解 -小马说工作
每日热文:SweetAlert让消息弹出窗口更加具有个性化!
Redmi K60素皮版本质感堪比手工!雷军:值得你细品
环球看热讯:健康速食!西安饭庄油泼biangbiang面大促:每盒6.66元
今日热门!罗永浩怎么看?西门子回应洗衣机10年包修为保证能修 洋品牌赤裸裸坑国人
Intel Unison正式上线:实现PC与安卓/iOS手机无缝连接
当前消息!你最想看哪个?2023春节档已官宣五部电影 《满江红》比拼《流浪地球2》
每日快看:建筑软件解决方案丨Bluebeam简介
头条:2022 倒带 - NutUI
环球简讯:面试官:为什么 wait/notify 必须与 synchronized 一起使用??
环球微头条丨销量甩Intel+Zen4全家!AMD神U锐龙7 5800X3D卖成年度处理器销冠
全球速递!等了7年!《大圣归来》导演新作《深海》定档 要做国漫里程碑、视觉突破极限
每日速看!10多万买“大路虎” 奇瑞旗舰SUV瑞虎9官图发布:霸气
全球要闻:最贵748元!苹果全系电池涨价 3月1日开始:非针对国人 成本增加所致
【焦点热闻】行驶中天窗可能会掉 奔驰再次召回超12万辆汽车
环球今日讯!诺氟沙星突然爆火!医生紧急提醒:未成年人禁用
每日速递:[概率论与数理统计]笔记:1.4 条件概率
全球消息!699元Redmi 12C开卖 员工:对比友商1500元线下机 竞争力也十足
天天要闻:2023年电动车在美国会更便宜 更多人买得起了!有4点原因
我国最大的固体运载火箭!力箭一号遥二开启总装测试:拟5月发射
故事老套且拖沓?不妨对《阿凡达2》宽容一点
《阿凡达2》票房达到回本线了:全球票房已突破14亿美元
商业网络安全解决方案丨Avast产品简介
时讯:Kubernetes监控手册05-监控Kubelet
袋鼠云产品功能更新报告03期丨产品体验全面优化,请查收!
对标苹果!三星推出27寸ViewFinity S9显示器:5K屏、全金属机身
当前报道:免费十年突然改版!游侠对战平台宣布每天只能免费一小时
焦点日报:价格下来了:东方基因快速检测试剂盒4.9元/份
天天微头条丨每5辆新车就有4辆电动车 挪威电动车市占率近80%全球第一高
灭菌独立装 袋鼠医生N95医用口罩30片45元大促
世界视点!从源代码构建TensorFlow流程记录
全球百事通!最大尺寸iPad被砍!曝苹果不打算在今年发14.1英寸iPad Pro
环球即时:比亚迪百万级越野车 仰望R1最新预告:首搭最具辨识度的尾灯
Firefox遭意外“误伤”:新版本被错误识别为IE 11
特斯拉全年销量破130万辆 还是全球纯电动车销冠
【全球快播报】如何不动声色的让身边的人知道你买RTX 4090了?
天天快讯:github上传本地代码到仓库教程
世界速看:联合三个国家尖端技术!38年后Intel重回老本行 让存储性能爆炸性提高
全球实时:西安高铁站私家车上站台接送乘客引争议:VIP贵宾服务 存在多年
2023年第一涨 国内油价今晚迎来调整 每升或上调0.2元
当前观点:你想成特斯拉车主吗?分析称Model 2快要来了 售价17万
世界热议:苹果中国工厂都要搬走?印度产iPhone加大 还要拿下iPad、Mac等
速看:AMD Zen4锐龙狂降价作用不大:德国电商销量不及Zen3五分之一
环球观察:抖音推出桌面端聊天软件抖音聊天:神似微信电脑版
天天百事通!微信支付之支付码支付
关注:学习Python第一个程序“Hello,World”
【新要闻】1.2 今天和对象吵架 但依旧学了代码
热文:谁说的不流畅?Steam玩家调查:Win11成香饽饽 NV四年前神卡1650领跑
新年暴击!超10家车企宣布涨价 特斯拉公开“唱反调”
三星将在CES 2023展示新款显示屏:折叠、滑动都支持
赚翻的节奏:美国超级百万彩票头奖升至54亿元 竟多次没人中奖
全球热门:女司机等红灯陌生男突然上车搭讪:拉车门坐到后排 被当场吓哭
环球关注:保研经历分享
环球消息!MySQL——事务
今亮点!特斯拉司机在德国高速公路上睡着!无视交警 结果“很刑”
世界讯息:2022年新生儿爆款名字出炉上热搜 这些字用得最多:土爆了?
全球微速讯:电商晒数据!4年卖出那么多块SSD 三星质量稳如狗:零返修
天天日报丨1.2复习了一下MySQL的索引
Codeforces Good Bye 2022 CF 1770 F Koxia and Sequence 题解
世界热头条丨WPF+ASP.NET SignalR实现动态折线图
世界头条:1. 线程管理基础
天天短讯!越南地产大佬都做出60万的车了 建议国内这位好好学
环球快资讯丨2023元旦档总票房5.47亿:《阿凡达2》撑起“半壁江山”
bbs项目(部分讲解)
天天通讯!手慢真无了!徐福记零食礼盒大促:39.9元到手 送礼有面
天天即时看!NVIDIA服软了!RTX 4070 Ti大量偷跑:价格低至6299元
环球速讯:国行6499元买到就是赚到?RTX 4070 Ti性能抢先看:对比4080
世界观焦点:解放生产力!一文教你快速入门正则表达式
全球快看:你肯定达标了?31省份最低工资表公布:上海第一 超2500元
热议:29岁男子身高2.89米成世界上最高的人:还在生长中!
JavaWeb学习笔记
焦点快看:因14 Plus销量太差 曝苹果将对iPhone 15 Plus价格大调整
环球头条:超14亿美元!《阿凡达2》票房达到回本线 你贡献了几张票?
世界快看:3G CDMA再见!美国运营商关闭 中国电信也快关闭了
新消息丨苹果中国不手软:iPhone 14之前机型保修费大涨 700元换块电池
即时焦点:tclap库的使用
美好午餐肉罐头促销:5盒不到20元 味道鲜美入口留香
天天新资讯:MySQL——基础架构
Python类与对象详解
【环球热闻】Python重用父类方法
Python类的封装教程
世界热门:电竞圈说的“满血”到底是啥 真能带来游戏体验升级?实测揭秘真相
女子花2700修热水器:成本只有13元