自动驾驶软件工程设计要点

软件工程是业务系统的基础,基础好不好,直接决定了整个项目的成本和效率。磨刀不误砍柴工,打磨好基础才能无往不利,快速迭代。具体来说需要包含这几点:

  1. 概念模型要准确且清晰;

把一个业务抽象成怎样的模型,用怎样的机制让系统运作起来,这是设计之初首先要思考的问题。抽象的层面越高,扩展性越好,但是也不要抽象得太过导致过于晦涩,基本上能够cover业务的所有场景就可以。然后把其中可以统一的概念和操作抽象出来,并且考虑在未来的一段时间内哪些因素是可能变化的,把可能变化的地方也抽象出来。这样基本上整个业务的抽象就足够了,如果后期碰到没有预料到的改动,再进行概念模型的进一步抽象。完成了抽象之后,要把机制设计好,业务的运行逻辑如何映射到软件中来,需要把其中的通用机制抽取出来,让策略和机制是分开的,既方便业务的开发和扩展,也方便软件工程的维护升级。抽象出来的概念和机制要和领域专家进行深度的探讨,真正满足业务的需求,并且将这些概念和机制同步给他们,彼此间建立统一的语言和认知,对于今后的开发和迭代都是非常有意义的。

  1. 编码就是写作,要严谨、优美、清晰;

编码不是一个人的狂欢,是整个公司生产力的一部分。代码的价值不仅体现在功能实现上,还体现在其维护性上。糟糕的代码尽管短期内能用,但是难以理解,充满了混沌,容易存在很多潜在的bug。也没法在团队中进行有效的交接,价值就大打折扣,基本上注定是要重新写的。好的编码和写作是一样的,得有缜密的思路、优美的语言和清晰的结构。首先构思是经得起推敲的,能够给别人讲明白,也能经受别人的challenge,所以编码之前,把思路写出来并且讲出来是十分有必要的,形式可以不限。其次每个变量的命名都是要斟酌的,要清晰表达其意义,用词要准确,不能和别的东西混杂,尤其是在相关性比较强的代码段之间不同类型的变量就应该有完全不一样的关键词缀。最后结构要划分好,函数和模块要划分清楚,不要整得像一坨屎,也不要拆得七零八落。

  1. 任何一个设计实现都必须是可验证和检测的;

这是经验较少的程序员最容易忽视的问题,一般只考虑怎么实现功能,却没有思考怎么验证。无法验证的代码是没有意义的,上线了只能带来无尽的调试麻烦,出现问题时势必会怀疑这儿怀疑那儿,浪费时间。所以每个函数,每行代码都是要可测的,并且要设计充分的测试用例,证明其准确性和正确性。上线之后也要考虑如何验证关键点的正确性,就像造了一栋大楼会保留很多的检修点一样,软件上线后没法检验出问题就抓瞎,只能再次复现和跟进,最终甚至可能需要返工。所以log一定是最开始要做好的组件,打印log的地方都要思考是否充分且必要,log的内容是否足够定位这个地方可能出现的问题,如果有错误,一定要清晰的打印出来,说明错误的原因。和其它模块的接口部分要有清晰记录,避免后期分锅带来不必要的麻烦,提高研发效率。

  1. 设计之初就要想好性能指标,并且建设配套的指标体系;

大的软件工程的建设非一日之功,需要长期维护和迭代的。从管理和技术的角度都需要能够看到技术迭代的路径和成效。一个软件实现了整体的功能,其实只实现了20%的目标。商业化产品是需要不断优化来降低成本,实现商业最大化的。硬件能不能换更便宜的,带宽能不能用更小的,研发时间能不能再缩短,这些问题才是那80%的工作。不要忽略软件的每一个环节的性能和效率,从编译、开发、调试、集成和运行时,每个环节的耗时、CPU占用、内存占用、IO、网络带宽都是很重要的指标。就拿编译来说,每次编译时间节省一分钟,整个部门能节省出很多的人力,让算法同学的时间消耗在编译等事情上更是对生产力的严重损耗。运行时的指标就更重要了,关键指标要定义清楚,和第3点一样,要让整个系统是可验证的,能够清楚的知道热点在哪里,这样才可以有的放矢,高效地提升系统性能。

总体来说,软件工程之于现代工业就像土木工程之于现代建筑,只知道搬砖是不够的,这些点是我现在深有体会的点,也希望能够在今后的实践中不断完善我的工程思想,打造我的工程风格。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351