项目描述:
这是一个监控相关的项目。有多个现场,每个现场都有多个摄像头,客户端可以监控各个现场,同一个现场也可以从各个角度监控。客户端可以同时有多个视频窗口,每个现场都可以独立选择绑定的现场和绑定的摄像机位。
业务需求:
用户可以选择不同的摄像机位观看现场。 |
系统需求分解:
a)用户从下拉条选择要查看的视频机位,选择后在对应的窗口播放视频。 |
b)由于可能有多个窗口在看视频,本窗口选择的视频可能另一个窗口已经在播放了,因此确保同一个机位视频只订阅一次。 |
c)记得要清除原有订阅的视频。 |
d)如果视频所在的服务器不同需要建立新的连接。如果另的窗口的视频源同一个服务地址,则只用一个连接。 |
个人观点:系统需求分解就是将业务需求结合开发环境、架构、性能、对象生命期管理的进一步分解。
TODO:
1. (不测)切换下拉事件:如果没有机位没变化则不改变当前状态 |
2. (不测)切换下拉事件:如果机位发生变化,取消窗口同旧的视频流的绑定 |
3. (不测)切换下拉事件:如果机位发生变化,建立窗口同新的视频流的绑定 |
4. (要测)建立窗口同视频机位的绑定:如果该机位视频已经有其它的窗口订阅了,那么无需重新订阅,直接使用原有订阅,添加该视频订阅合约同窗口的关系。 |
5. (要测)建立窗口同视频机位的绑定:如果该机位视频还未订阅过,那么进行订阅。 |
6. (要测)订阅机位视频:创建或取得同该视频源的访问代理对象,订阅机位所在通道的视频流。 |
7. (要测)创建或取得同该视频源的访问代理对象:如果视频源所在的代理对象已经存在,直接返回 |
8. (要测)创建或取得同该视频源的访问代理对象:如果视频源所在的代理对象不存在,则创建,并取得同该服务器的连接,将该代理对象放入连接中。 |
9. (要测)取得同该服务器的连接:如果连接存在,直接返回 |
10. (要测)取得同该服务器的连接:如果连接不存在,则创建一个新的连接 |
11. (要测)取消窗口同旧的视频流的绑定:从订阅的节点中,移除本窗口 |
12. (要测)取消窗口同旧的视频流的绑定:如果订阅节点中的所有绑定窗口都清空了,则真正向视频源取消对应通道视频流的订阅。并清除视频源的访问代理。 |
13. (要测)清除视频源的访问代理:如果代理所在的连接器没有任何其它代理,则断开并清除连接 |
个人观点:由于1、2、3涉及到MFC的窗口控件调用,测试麻烦,固不进行测试。
个人观点:由于涉及的问题较复杂,因此TODO也是采用逐层挖掘的方式,如:
切换下拉事件
建立窗口同视频机位的绑定
如果该机位视频已经有其它的窗口订阅了
如果该机位视频还未订阅过
订阅机位视频
创建或取得同该视频源的访问代理对象
如果视频源所在的代理对象已经存在
如果视频源所在的代理对象不存在
取消窗口同旧的视频流的绑定
从订阅的节点中,移除本窗口
如果订阅节点中的所有绑定窗口都清空了
清除视频源的访问代理
个人观点:由于TDD是驱动设计,而不是保障接口的有效性测试,而此可以去测试一些private的函数。如何测private,不同语言不同,我是用c++,采用friend方式就可以。
以上是我的一些思路,纯粹是个人在项目中的摸索,还请大家共同指教。另外我觉得不同的软件开发,会有一些各自适用的经验,大家也可以一起贴出来交流学习。