软件开发随记之一 —— 添加功能开关

本文探讨了在现代软件开发中如何利用功能开关来简化版本维护,以减轻复杂性和负担。添加适当的开关可以为开发者提供更大的灵活性。
“你给软件新加的功能A不错,能够让系统的性能大幅度提升。”
“谢谢!老板,我会不断努力的……”
“可是,据测试人员说,有的时候它会导致系统不是很稳定。你知道,客户催得很紧急,他们需要一个稳定的版本。你看,你能不能暂时把这个模块屏蔽掉?”
“!@#¥ 好的,我可以在SVN上把代码回滚到以前的版本。可是,最近在源代码树上,又提交了很多不涉及模块A的代码,如果回滚,这些代码势必也要被去掉……”
“不行!这些代码是修复以前的BUG的,不能去掉。任务紧张,限你一天之内完成!!!”
于是,我只有不断地比较版本,合并版本,不断寻找编译的错误,同时还要不断地调试……真正的超负荷体力劳动。
以上的情形,在软件开发当中经常可以遇到。新功能和稳定性有时是互相冲突的。但是,客户的需求又是漂移不定的。作为开发人员,如何做到既不影响自己的进度,又能尽可能满足客户的需求呢?个人认为,通过给新功能模块添加一个简单的开关,在大部分情况下,可以很好地解决这个问题。添加功能开关有两种,一种是在程序运行时的动态设置开关,另外一种是在源代码编译时生效的静态开关。
1. 动态开关
在编译之后的代码里面就已经包含了新功能A,通过一个特殊的开关可以禁止或使能它(如果是应用程序一般是一个参数,如果是Linux内核模块可以通过proc文件来实现)。这样做的好处就是不用因为功能A来维护不同的发行版本。同一个版本,可以给不同需求的客户使用,减少维护开销。如果客户的需求变化太快,比如今天不要功能A,明天又要,也比较容易实现。
此方法不足的地方就是在涉及到功能A之处,需要用开关进行动态判断,以决定是否进入和A相关的代码。如果这样的判断太多,势必影响性能。不过,当CPU很强大且性能瓶颈不在于CPU的时候,这点影响一般可以忽略不计。
2. 静态开关
开发相关随记包含多个方面: - **软件开发**:在增加和设计较为庞大的程序时,要考虑程序结构设计,如解耦、层与层接口、模块之间关系、参数、ram、flash、运行速度等。还可学习了解aoutosar的分层结构。新的项目需在较短时间完成从零编码到交付[^1]。 - **IsaacLab开发**:遇到在spring - damping模型下,调大限制和刚度、damping参数后出现异常情况,几十个episode插入后不在孔周围晃,此现象与预期不符,需进一步理顺[^2]。 - **Chrome扩展程序开发**:Map是新的数据类型,可在JavaScript中用于存储键值对实现快速查找,还给出了本地缓存工具的代码实现,同时列举了一些相关学习参考资料,如ReqBin在线API测试工具、Chrome插件开发攻略等[^3]。 ```javascript let data = new Map([ ['Alice', 25], ['Bob', 30], ['Charlie', 35], ['David', 40] ]); console.log(data.get('Alice')); // 25 var myLocalStorageTool = { set: function(key, value) { localStorage.setItem(key, value); }, get: function(key) { return localStorage.getItem(key); }, remove: function(key) { localStorage.removeItem(key); }, removeAll: function() { localStorage.clear(); }, toJsonString: function(jsData) { return JSON.stringify(jsData); }, toJsData: function(jsonString) { return JSON.parse(jsonString); } }; ``` - **X86平台开发**:对于intel的X86平台,intel提供完整数据手册和丰富资源,不同卷册有不同内容,如vol 1是整体介绍,vol 2是CPU部分寄存器说明等,还有PDG、硬件设计指南、散热文档、产线可制造性文档等可供参考[^4]。 - **通用开发问题**:client的定时器是通用功能,但依赖cocos2d的Scheduler类,导致移植到server端困难,使用C++标准库实现可避免该问题[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值