abs项目 - 战线拉的太长
abs项目 - 战线拉的太长
“从项目中来,到项目中去”。
坑是踩不完的,尽量做到不要踩重复的坑就好。
最近的这个项目,从2016的8月份左右开始立项,一直做到2017的2月份,还是有很多的问题在继续排查。其中暴露出来不少的问题。
现在回头来看,总体来讲整个框架其实并不复杂,只是牵扯的模块太多:

其中模块B,C,D是集成在一个进程中的,A单独跑一个进程。其中的数据流顺序如图所示,逻辑上是一个顺序线性依赖的关系,但实际上,软件的需求是最终的“7”对用户来讲要实时流畅,这就要求最终的运行其实是一个并行流水作业。
从2016开始的点追溯,有下面几个方面没有处理好:
用户需求没有转化为开发需求
项目开始之处,没有将用户需求进行量化,将其转换为真实可见的开发需求和性能需求,也就是,对其中的设计指标是不清楚的,这就导致后面一系列的开发决策是非常盲目且相当然的;
流水线
对并行的流水线设计原理不了解,导致时间片的设计和计算出错。这个问题属于知识盲点,后面单独针对总结。
数据到底走多快?
开始总是觉得这次是对硬件性能估计不足,但仔细分析这其实是个表面问题。
处于核心模块C开发时,对于依赖的A,B,D模块,都没有考虑依赖模块的处理性能(这个地方的性能可能是硬件原因造成的,也可能是软件原因造成的)。设计中只是考虑了“数据流向和时序”,但是没有考虑“各个步骤上数据到底能走多快”,导致了结合点的缓冲读写机制设计有问题;
集成经验不足
项目中牵扯对一个三方的算法库进行集成,“同名符号冲突”和一些库的缺陷直到后面要提交系统测试才发现。冲突的问题已经通过开发自检脚本来解决了,倒是“对三方集成库的单元测试”是个大问题。(后来通过readelf等命令解析编译后的段符号,比对重名,可以在集成前做重名函数检出)
要想办法将一个大功能完全可以先对其进行拆分,拆分到一定粒度的子模块后,在接合处编写DEMO对其验证,可以先把跟集成的库相关的代码实现,入口处进行DEMO测试后再集成到系统,不用等到整个系统完成了,把所有东西跑起来再去验证库。
可调试性是躲不过的
什么叫可调式性,就是这部分的数据流向对开发人员来说可以透明。
形式可以多样,或者是打印,或者是输出到文本。重要的是,存在不透明的数据,就会存在难以调试的缺陷,不要抱有侥幸的心理,调试的设计和开发逃不掉的。
沟通
拿不准的方案,要催着别人一起看。
涉及很多人就及时开会,面对面效率高。
联调时,用原理和数据沟通。
abs项目 - 战线拉的太长的更多相关文章
- layui的select下拉框太长被遮挡了的解决办法
layui的select下拉框太长采用滚动条的形式出现,可以给select的dl加一个最大高度,具体的效果如下图 .layui-form-select dl { max-height:160px; }
- Mac下关于——你不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。文件的删除
内容是google的,测试有效,因为用revel打包的东西删除以后有这个循环bug Mac下关于——你不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效.文件的删除 关于这个问题我找到的一 ...
- JavaScript解决select下拉框中的内容太长显示不全的问题
JavaScript解决select下拉框中的内容太长显示不全的问题 1.说明 有些情况下,select下拉框的内容过长,导致部分看不见: 现在通过鼠标事件,让下拉框中的内容显示完全 2.实现源码 & ...
- 与项目欧拉速度比较:C vs Python与Erlang vs Haskell
我从问题#12 ProjectEuler作为编程练习,并比较我在C,Python,Erlang和Haskell中的实现(当然不是最优)实现.为了获得更高的执行时间,我搜索了第一个有1000个以上因子的 ...
- vs调试windows mobile程序时布署时间太长的解决办法
vs调试windows mobile程序时布署时间太长的解决办法 1.VS平台上,选工具-选项-项目和解决方案-MS BUILD项目生成输出详细信息中选择“诊断”,目的是在调试窗口中看出哪个过程编译的 ...
- p2p项目,自己期望太高了。
在项目的进行中,主要牵扯到了一些安全方面的考虑,跟money相关的嘛,如果安全不考虑,你就惨了,一期呢,为了防止数据被篡改,主要对数据用dsa进行了签名,二期呢,考虑到das产生的字符串有可能太长,修 ...
- 用反射或委托优化switch太长的方法
在代码进行优化的时候,发现了switch case太长,有的竟然长达30个远远超过一屏这样在代码的可读性来说很差.特别在我们看代码的时候要拉下拉框我个人觉得这是不合理的.但是我不建议有switch就进 ...
- “sgen.exe”未能运行。文件名或扩展名太长
问题 创建项目后无法运行 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB6003 指定的任务可执行文件"sgen.exe"未能运行.System.Component ...
- 总结解决 Android-Studio 编译耗时(好久、太长)问题
首先通过搜索有关Android-Studio 编译耗时(好久.太长)问题的博客,速度确实有所改善. 一.暂时解决 Android-Studio 编译耗时(好久.太长)问题 本文链接:https://b ...
随机推荐
- VisualSVN Server更改SVN版本库存放路径的方法
来源:http://blog.csdn.net/tcjy1000/article/details/42023849 最近也玩起了SVN软件版本管理,在本机上安装了VisualSVN Server+To ...
- JavaScript:直接写入 HTML 输出流
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- c语言描述的直接插入排序法
#include<stdio.h> #include<stdlib.h> #define SIZE 6 typedef int Type; //直接插入排序法 void Ins ...
- ## `nrm`的安装使用
作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址:什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原因,经常访问不到,这时候,我们可以在国内,创 ...
- JSON Web Tokens介绍
转载请标明出处: http://blog.csdn.net/forezp/article/details/72804324 本文出自方志朋的博客 ##什么是JWT 这篇文章选择性翻译于https:// ...
- 使用Dapper处理多个结果集和多重映射的教程
在本文中,我们将介绍如何使用DAPPER从单个数据库调用中读取数据库中的多个结果集.我们将看看我们可能希望这样做的场景,以及如何使用它的Query和QueryMultiple方法更简洁地实现这一点. ...
- 解读JavaScript中的Hoisting机制(js变量声明提升机制)
hoisting机制:javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 知识点一:javascript是没有 ...
- LCA最近公共祖先——Tarjan模板
LCA(Lowest Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. Tarjan是一种离线算法,时间复杂度O(n+Q),Q表示询问次数,其中 ...
- js | javascript获取和设置元素的属性
获取和设置元素的内容: var nv = document.getElementById("pid"); alert(nv.innerHTML); nv.innerHTML=&qu ...
- 【redis常用的键值操作及性能优化】
服务端 启动redis服务 { // -a:指定密码 -h:指定主机 -p:指定端口 } //让redis 服务中断崩溃 //保存和关闭 //后台备份 //设置登录密码 //redis-benchma ...