破解一个”屎山“项目(上)

文摘   2024-10-14 06:37   上海  
不知有谁遇到过”屎山“项目吗?遇到是怎么破解的,最终结局是怎样的?最近投入到一个”屎山“项目不能自拔,每天精力被耗得差不多,公众号文章快写不动了。”屎山“项目耗人.....
1 什么是"屎山"

"屎山"这一术语在软件开发领域是一个非正式的比喻,用来形容那些结构混乱、难以维护、代码质量低下的大型代码库。这个比喻形象地表达了这样的代码积累就像不断堆积的粪便,既不美观也不易于处理。

它通常形成于以下几个原因:

  1. 历史遗留:随着时间的推移,项目初期可能因为时间紧迫或资源有限,代码没有遵循最佳实践编写,之后由于各种原因(如需求变更、人员流动)而未能得到适当的重构。
  2. 持续堆砌:面对新需求,开发人员选择在现有代码基础上快速添加功能,而不是彻底重构,因为这样做短期内看似更高效,但长期导致代码复杂度和耦合度增加。
  3. 技术债务:为了快速交付,团队可能会积累技术债务,即选择了短期利益而牺牲了代码的长期可维护性,这种累积最终形成难以逾越的“屎山”。
  4. 知识传递不足:团队成员变动频繁,新成员对旧代码的理解不足,导致难以做出恰当的修改,只能在不了解整体架构的情况下进行局部调整。
  5. 重构成本:全面重构需要大量时间和资源,且存在风险,可能导致新问题出现,影响业务稳定性,因此往往被推迟或避免。
source: WordPress › Error (crondose.com)

2 ”屎山“项目的特点

故事是这样的,曾经有个团队发现项目干不下去了,就找到了接锅侠,而我不幸被选中。为什么干不下去?无非就是项目的三大要素:成本、时间,和质量。
  • 成本问题,原来以为一个软件工程师的投入就行,结果发现最少要5个起步;以为不需要开发工具和测试设备的投入,结果发现需要天文数字的投入,光AUTOSAR工具链的投入就是上百个w。
  • 时间问题,人员投入的严重不足,伴随着客户的需求越来越多,交付节点不可能完成;同时因为人员和工具的投入不足,前提开发产生的bug数量巨多,解bug的时间投入惊人。自然地,软件交付的节点一而再再而三要延期。
  • 质量问题,从软件开发来说,需求、开发、验证和项目管理都有问题。
    - 未与客户进行需求的沟通,没有需求管理,也没有软件的需求文档;
    - 软件乱改,在不懂原base的功能逻辑前提下,为了弄出基本功能,在已有base上大量屏蔽现有的逻辑;然后收发的信号传输不一致,将原来用于功能A的信号接口当作功能BCD的信号接口;原来Base的无关功能但又会影响基本功能的逻辑被保留。
    - 未进行软件测试,让客户验证和调试软件,一个问题可以发几版软件给客户。
    - 项目内容均各自的本地电脑管理,未进行统一的数据管理。
总的特点就是:要啥没啥,还要无中生有。问题多多,没几个解决了。反正对照"屎山"的定义和形成原因,我发现这方方面面都满足,真中奖了.......

3 如何破解 ”屎山“项目

如果只是普普通通工程师一枚,记住在没人没资源的情况下,别想着自己一人能干起来。首先要学会报警,困难风险要让所有人知道;然后自己分析分析自己哪些可以做,但是不要着急做,就算能独立做也得慢慢来,因为没投入进来之前,你其实也做不好,就算做起来也是低效的。
期间,我尝试去修复其中一个bug,虽然只是简简单单地修改了一个逻辑,结果却将原有的基本功能给干没了。这时,客户暴躁了.......
source: 错误代码 – ProgrammerHumor.io
会叫孩子的有奶吃,这个道理好像什么时候都成立,那就投人投资源来解决问题安抚客户,那此时可以开始干点东西了。
下面就从ECU软件开发角度,聊聊如何去破解”屎山“项目。

记住尽可能先做好软件项目管理的工作,然后再去干软件开发工作,越”屎山“的项目越是如此,因为越不容易解决的问题,先要让大家认可你的解决思路,然后细究别人看不到的细节,如果一开始埋头细节,别人不了解,而结果问题没解决反而问题更多,那是哑巴吃黄连有苦说不出,你以为解释清楚了,但是别人客户听不懂,那就会误会了。

1) 关于软件项目管理。

当问题很多,在解决一个问题的过程中或者想同时解决几个问题时,进行频繁地尝试修改和软件释放,没有软件交付管理,软件数据管理和软件问题管理是会非常混乱的。因此当我意识到软件有多”屎山“之后,一方面为了梳理出现状,另一方面确保后续我所做的每一步变更。从以下几个方面来让内外部都清晰地了解我们所在做的:
  • 首先,所有软件项目相关的内容采用Git进行管理,确保软件版本能够及时上传,有迹可循,当然包括软件交付记录和软件问题管理等文件。

source: git 版本管理工具 学习笔记
  • 然后,一次软件交付或释放只不做多个问题的修复,尽量只做一个问题的修复,这样的好处就是客户很容易了解修复了什么,同时解决几个问题,碰到问题没解决,还引起了其他问题,反而给自己带来了更多的坑。因此我们采用的软件交付管理策略就是一版软件只针对一个问题释放给客户,同时让客户清晰地了解每版软件的变更点。
  • 再是软件问题管理,在我接手之前,所有的软件问题都是邮件内容的简单回复或会议上的口述。但随着邮件频率越来越高,一下子就变得无法跟踪问题状态了。因此,整一个文件来管理这些软件问题就十分必要,如下示意:

通过对上述三点的梳理和管理,那么基本可以做到内外部对于软件问题信息(原因分析,解决方案,软件版本,释放计划)的对齐,以及双方清晰了解实时的进展。接下来就是去解决具体的技术问题:

2) 关于软件开发。

对于ECU软件开发,无非三个点:需求、设计和验证。

  • 需求。了解需求的实现状态,虽然得不到答案。但是可以了解哪些需求不是客户要求的,而是”屎山“软件祖传的,做到对软件无关的东西心中有个数。然后去了解出问题的功能,该功能需求实现的状态。
  • 设计。首先是接口,梳理接口的状态和注重接口的影响分析。当你去分析数据时,明明条件都满足,但是结果却不对,不可能现象就是出现了,这时候必须接收现象的正确性,质疑信号的真实性,梳理接口,确保你所看到的信号都是正确有效的。追本溯源,信号的源头要么来自CAN和传感器,要么逻辑运算生成的。另外当变更一个信号的逻辑时,注意信号被使用的情况,或者说是影响分析,有时一个信号逻辑的变化,很可能影响很多逻辑的变化,此时要慎之又慎。然后是逻辑,做最少的逻辑变动去修复问题,明确为什么要做这样的逻辑变动。总之,当一个模型的接口规模达到一定的数量,要去梳理信号将是及其艰巨而耗时的任务,真的称之为”屎山“真的一点都不为过。
  • 验证。让客户进行调试软件测试是件很奇葩的事情,这个没啥多说的,要资源尽快建立软件测试能力,确保验证OK再释放软件给客户。

4 小结

尽管“屎山”听起来负面,但它实际上反映了软件开发中的现实挑战。面对“屎山”项目,如何快速构建自己的解决思路和方法,然后再通过详细的设计,来解决具体一个一个的问题,虽然过程中承受的压力是有点,但是回头再看,还是一件挺有意思的事情。当然“屎山”项目的锅能不接就不接,因为它的形成背后肯定有深层次的原因的,而这种原因注定它的结局很难被改变,而最终谁来承担这个结果,大概率是后面的接锅侠。
这种事情分享出来应该是有点意义的,尤其对于初入职场的朋友,切记勿埋头苦干,“屎山”项目可分享点的还挺多的,下篇文章再来分享为何我觉得是“屎山”软件。


创作不易,欢迎点赞再看收藏关注






汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章