Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Yanggang wps

1,406 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Yanggang wps

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

×