230 likes | 401 Views
从WPS到Wps on Web. 大型应用软件架构的变迁. WPS V6项目介绍. www.wps.cn 项目介绍 2002年至今, 100-200 人 Windows平台,C++,界面采用Delphi 特点 规模大、周期长、耦合度高 完全自有整体架构 几乎不用第三方框架、库. Wps on Web项目介绍. 开发中 项目介绍 2009年立项,现处于开发期,目前50多人 前端:Flex平台 后端:核心C++,服务总线Java,整合应用Python 特点 从客户端到服务端计算的变迁 从桌面应用到浏览器(RIA)的变迁
E N D
从WPS到Wps on Web 大型应用软件架构的变迁
WPS V6项目介绍 www.wps.cn 项目介绍 2002年至今,100-200人 Windows平台,C++,界面采用Delphi 特点 规模大、周期长、耦合度高 完全自有整体架构 几乎不用第三方框架、库
Wps on Web项目介绍 开发中 项目介绍 2009年立项,现处于开发期,目前50多人 前端:Flex平台 后端:核心C++,服务总线Java,整合应用Python 特点 从客户端到服务端计算的变迁 从桌面应用到浏览器(RIA)的变迁 从完全自有架构到混合(Hybrid)架构的变迁
WPS架构团队的演化 核心程序员 个体架构师 架构组 多架构组
关于本报告 • 不适合做理论性讲解 • 大型工程的规模效应使得问题复杂化 • 任何一个实践的推行都需要大量时间和辅助工作 • 没有一个实践能完美解决大型工程问题 • 不适合面面俱到 • 整个工程管理体系比较复杂,涉及的点非常多 • 以后会在个人博客中与大家探讨 • 选择几个有趣的点与大家分享 • 不多,就三个
C++语言 • WPS使用最多语言 • 具有最大的底层控制能力 • 具有最大的优化潜力 • 具备用于构建大型系统的能力 • 大型复杂应用系统需要 • 缺陷 • 语言体系复杂,难以精通 • 容易犯错,底层错误难以调试 • 开发效率低
多语言开发 • WPS V6方案 • C++与Delphi • 使用效果 • 接口语义复杂 • 交互频率高 • 有效率要求 • 紧耦合边界不适用跨语言方案
C--工程 • 使用于Wps on Web项目 • 提供RAD语言的代码风格 • Java/C#风格支持 • 类库 • 部分动态语言特性 • 完全使用标准C++构建 • 无需更换开发工具 • 原生C++代码,和普通C++无缝交互 • 获得开发效率和执行效率的平衡 • 准备作为开源项目发展
void DeleteFiles(string dir) { string[] files = Directory.GetFiles(dir); foreach (string s in files) File.Delete(s); string[] dirs = Directory.GetDirectories(dir); foreach (string s in files) DeleteFiles(s); } void DeleteFiles(stringx dir) { Array<stringx> files = Directory::GetFiles(dir); foreach (stringx, s, files) File::Delete(s); Array<stringx> dirs = Directory::GetDirectories(dir); foreach (stringx, s, dirs) DeleteFiles(s); } Sample: C#和C++
框架设计的变化 • 部署模型 • 不再是整体一块 • 即使在服务端,也可能分布在不同的环境(设备)上 • 通信模式 • 直接函数调用转变为基于网络协议的调用:REST、SOAP、基于Socket的RPC框架等 • 根据通信需求,以及双方的构建技术决定 • 耦合度降低 • 尽可能可插接 • 不能依赖另一个模块总是正确工作
与质量保证相关的开发实践 • 单元测试 • TDD与单元测试 • 面向契约 • C++ / AS中的契约框架 • 内核扫描 • 持续集成系统 • 代码覆盖率工具
内核扫描技术 • 内核扫描是广义的DbC • 一个经过规划的时刻触发,对更大范围数据进行检查的诊断过程 • 更大尺度的目标数据集,更复杂的规则集合 • 扫描时机受控 • 内核扫描在WPS电子表格开发中的应用 • 细节设计不完善问题 • 不符合设计的隐患(对于测试有很大的辅助作用) • 在在线表格中引用内核扫描 • 服务端 • 客户端
代码覆盖率工具 • 语言支持 • C/C++, Python, Flex(AS3) • 覆盖统计 • 代码行、函数、类 • 动态覆盖统计 • 运行时统计覆盖率 • 代码高亮 • 代码有效和无效高亮 • 执行频率统计 • 代码执行频率计算
谢谢大家 www.gridbear.com blog.wps.cn