null软件工程&架构软件工程&架构许式伟
2010-9-25自我介绍自我介绍许式伟,目前任职于盛大创新院。致力于改善国内的创业环境。前金山技术总监,WPS Office 2005首席架构师,开源爱好者,发布有Boost Memory、StdExt、TPL、WinxGui、DocX 等开源项目。技术关注领域:分布式存储、网络操作系统、Erlang风格编程与最佳服务端编程实践、搜索引擎等。话
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
缘起话题缘起软件质量保障
重要性
从本质上说,专业、高质量的产品和服务,才是企业真正意义上的生命线。
源头:开发者本身的素质
代码的设计与实现
外部保障:公司成熟度的标志
工程管理
专业的平台成就专业的产品AgendaAgenda代码学(设计与实现)
KISS —— Keep it simple, stupid
Modularity
Testable
Orthogonal Decomposition
工程学(项目管理)
代码管理
跟踪变化(任务/缺陷管理)
自动化测试
单元测试
日构建代码的设计与实现代码的设计与实现代码的生命周期
开发阶段仅占代码生命周期的极少时间。
但这阶段的每一分每一秒都至关重要。影响维护阶段所需的投入。
维护阶段的投入占多大比重?代码的生命周期开发阶段维护阶段KISS:简单比复杂好KISS:简单比复杂好不要增加无谓的复杂性
除非有人为复杂性买单
正确理解系统的需求之后才进行设计
易实施性
让模块容易实现,比复杂的优化更重要
避免惊异
让你的代码(包括接口)符合惯例Modularity:模块比框架更重要Modularity:模块比框架更重要框架是易变的
框架都将经历不断发展演化的过程,逐步得到完善
框架是业务流,可复用性相对更低。
不让模块为框架买单
模块设计时应忽略框架的存在
认真审视模块的接口
发现“过度的(或多余的)约束”Testable:保证可测试性Testable:保证可测试性设计应该以可测试性为第一目标
一个模块可以很方便地进行测试,那么就可以说它是一个设计优良的模块。
坚持进行单元测试可提高设计能力。
可测试性 = 低耦合
环境模拟(依赖的模块、数据输入)
及时发现模块构架调整的潜在问题
通常模块在架构调整期(代码重构)最容易引入Bug。
只有在模块开发中就不断积累经典数据、以案例的形式固化已知Bug,才可能在架构调整等最容易引发问题的情形下获得最佳效果。 Orthogonal Decomposition:正交分解Orthogonal Decomposition:正交分解架构就是不断地对系统进行正交分解的过程
优先考虑组合,而不是继承
做乘法而不是做加法
eg. 抽取一个url中的outlinks
outlinks(in: url) -> out: unique_outlinks
curl url 2> /dev/null | hrefs | sort -u
通用组件
curl(in: url) -> out: file_content/html_text
hrefs(in: html_text) -> out: outlinks
regex(text/html_text, pattern) -> matches/outlinks
sort-u(in: records/outlinks) -> out: unique_records/unique_outlinks专业的平台成就专业的产品专业的平台成就专业的产品代码管理:CVS vs. SVN vs. GIT代码管理:CVS vs. SVN vs. GITCVS:“单文件”的版本管理
不管理目录,无法跟踪工程结构的变化
本地无版本管理功能
SVN:“项目”的版本管理
全局的版本号,代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
了系统的一个镜像状态
本地可管理单一的历史版本(基版本)
在CVS基础上,易用性有很大加强
钩子:定制工作流
GIT:“项目群”的版本管理
分布式的版本管理系统,可管理任意复杂的巨型项目(如Linux)
分布的、松散的项目管理,适合大型开源项目
无需联网,本地就有完整的版本管理能力跟踪变化:任务/缺陷管理跟踪变化:任务/缺陷管理Trac (Ticket Tracker)
是一个任务/缺陷管理工具
可和SVN配合
可以看到某个Bug的修复修改了哪些代码
可以看到某一次Check In是为了什么自动化测试自动化测试自动化测试的必要性
常规测试的缺陷
一般是基于手工的,不具备可回归性。因此测试的效率不高。
由于缺乏效率,往往导致测试仅仅针对典型数据,覆盖率往往也很低。
自动化单元测试的重要特征
自动化、可回归性
Quiet:没有错误,就不说话
案例的执行安全受控
某个案例的失败,不会影响其他案例的运行。单元测试的重要性单元测试的重要性测试成本最低
单元(模块)是最容易,也是最应该采用自动化测试的。而集成测试、系统测试虽然也有自动化的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
和支持工具,但需要更高额的代价。
减少问题发现的周期
单元测试将问题的发现周期缩短,降低bug修复成本。
如果问题在集成测试、系统测试期被发现,那么同样一个问题需要花几倍甚至几十倍的时间进行定位、修复。理解单元测试理解单元测试推广单元测试其实是
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
单元测试方法和认识
实际上单元测试大家都会去做,我们提倡单元测试,更大程度上是要达到:
规范单元测试的编写(方法)
固化已经发现的Bug,最大程度保留下来我们的测试案例(认识)- 重视测试代码:测试代码也是开发成果,理应获得和模块同等重要的地位,理应被保留下来。日构建(Daily Build)日构建(Daily Build)项目质量保障的最后一道关卡
每天你都可以通过它获得一个当前系统健康状况的
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
。
做什么?
检出代码(Check out)
编译工程(Build)
代码自动检查(Check)
运行自动化测试案例(Test)
报告结果(Report)
如:Build、Check和Test的失败案例
怎么做?
工具:Ant / Shell scriptQ & AQ & A交流:xushiweizh@gmail.com
谢谢!