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 ...
随机推荐
- 【题解】POJ 2115 C Looooops (Exgcd)
POJ 2115:http://poj.org/problem?id=2115 思路 设循环T次 则要满足A≡(B+CT)(mod 2k) 可得 A=B+CT+m*2k 移项得C*T+2k*m=B-A ...
- MR中简单实现自定义的输入输出格式
import java.io.DataOutput; import java.io.IOException; import java.util.HashMap; import java.util.Ma ...
- mac install PyQt5
1. install brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...
- 什么是OR映射?
实体对象采用的是面向对象技术,它表达实体的关系是用关联.继承.而RDBMS 是遵循关系的范式理论构建的二维表,主要采用主键和外键的关联方式.因此,对象模型与数据库模型是不一致的,需要在两者之间进行变换 ...
- 对TCP三次握手四次分手还不清楚,超简单解析
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...
- JavaScript 基础(五) 函数 变量和作用域
函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } ...
- 记录JavaScript的util.js类库
工作中用到的, 不断做为积累, 以后能用到. 也感谢前辈们. 定义Util对象 var MyUtil = new Object(); 从url中获取参数 //从url中获取参数 function G ...
- 【剑指offer】 Java实现重建二叉树
GitHub上的代码链接 /** * @Author: DaleyZou * @Description: 重建二叉树 * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. * 假设输入的前序 ...
- 快速创建显示数字数据的动画——CountUp.js
由于项目需求,需要写一个数字增/减量的动画特效,最后找到了CountUp.js CountUp.js是一个无依赖,轻量级的JavaScript“类”,可用于快速创建以更有趣的方式显示数字数据的动画. ...
- APSchedule的练习使用
1 简介 APScheduler的全称是Advanced Python Scheduler.它是一个轻量级的 Python 定时任务调度框架.APScheduler 支持三种调度任务:固定时间间隔,固 ...