Yanggang wps

1,207
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,207
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×