ZLG/AWTK是如何保证代码质量的

AWTK是ZLG开源的GUI引擎,不少朋友关心AWTK是如何保证代码质量的,这里统一回复一下。我们在保证AWTK的代码质量方面,主要采用了下列措施:

架构设计。 软件架构对代码的质量有决定性的影响,但好的架构不是预先设计出来的,而是在应对各种需求和变化时,不断完善和优化出来的。常常见到,有人花十年时间打造一件绝世作品,也有人花几年时间让一套软件变成不可维护,这就是说明软件架构是在不断变化的,是变好还是变坏,则取决于开发者的意志。从一开始我们就把AWTK的架构优化放在首要地位,无论是增加新的功能还修改BUG,每一次改动都AWTK的架构进行改进和优化。AWTK的设计思想基本来自《系统程序员成长计划》,另外《设计模式》、《实时设计模式》、《软件框架设计的艺术》和《架构整洁之道》等书籍对AWTK架构的发展影响也很大。AWTK的架构还有很大的改进空间,但我们相信通过不断的优化,AWTK的架构会越来越完善。

单元测试。 代码的可测试对于单元测试至关重要,如果在设计系统架构时,没有考虑可测试性,那么单元测试是很难写的(请参考Bob大叔的《架构整洁之道》)。所幸在设计AWTK之初,我们就非常注重它可测试性。针对接口编程和依赖注入(DIP)是提高代码可测试重要的方法,在AWTK中有大量的接口和依赖注入,这使得AWTK绝大部分组件都可以编写单元测试。有人说单元测试只能解决25%-50%的问题。我赞同这个观点,单元测试不是全能的,但它确实非常有用,我们也在不断完善AWTK的测试用例,让单元测试起到更大的作用。

Code Review。 Code Review也是提高代码质量极好的手段,每次增加新的功能或修改BUG,我们都会去Review相关的代码。在Review时,经常发现一些丑陋的代码,有时甚至完全不相信这些代码是自己写出来的,这时会庆幸进行了Code Review,否则这些丑陋的代码就不被发现。通过Code Review发现这些丑陋的代码,并及时对其重构,不但让提高了代码的质量,还能有效防止破窗效应的出现。

在不同平台进行测试。 不同的平台、不同的编译器、甚至不同版本的操作系统和不同版本的编译器,都会发现新的问题。所以我们会定期在MacOS,Linux、Windows和各个嵌入式平台上进行测试,保证在各个平台上运行正常,这对提高代码质量也非常有用的。

用valgrind进行动态检查。 用C/C++写代码时,内存问题,比如:内存泄露、越界访问和野指针,这些问题引发的后果,可能随机出现,也可能很长时间后才出现,所以很难调试和定位。幸好动态检查对这类问题非常有效,valgrind是一个强大且免费的动态检查工具,它能检查出绝大部分内存问题(与运行时代码的覆盖率有关)。可惜它支持Linux平台,而且对SDL支持不好。为了使用valgrind,我们及时支持了Linux Framebuffer,这使得我们可以用valgrind对AWTK进行全面检查。

手工测试。 手工测试也是必不可少的,我们会定期(基本上每天)手工把demoui中展现的功能测试一遍,有时会发现一些单元测试遗漏的问题或者无法自动测试的问题。

经常修改。 《架构整洁之道》中提出一个观点:要使软件架构稳定,你就要不断的修改它。这个观点初看有点自相矛盾,经常修改的东西会稳定吗?仔细一想,它又确实与我们过去多年的经验不谋而合:增加新功能时去完善它,在修改BUG去完善它,没事就去Review并重构它,架构自然越来越好,代码质量自然越来越高。当然,前提你的单元测试用例尽可能完善,否则没人敢去修改一个大型的代码。如果你关注AWTK,你就会发现AWTK几乎天天都有很多改动,这些改动可能并没有增加新的功能。

群策群力。 ZLG内部有不少同事在基于AWTK做项目,外部有些一些朋友开始使用AWTK,他们也会发现一些漏网的问题,或提出一些新的需求。我们会及时响应这问题,对于严重的问题,基本上在当天都能解决。

对于一些特定平台出现的问题,我们没有重现的环境,希望发现问题的朋友,能静下心来去查找问题的原因,并分享出来。

自动化集成测试。 这部分工作还没有做,不过已经排入计划。目前有两个想法:一是支持事件的录制和重放,并通过AI实现自动测试。二是支持appium等流行自动测试框架,用脚本对UI进行自动测试。

AWTK中,肯定还有很多问题,以上这些措施也并不全面,我们还在持续努力中。欢迎大家提出问题和建议,也欢迎大家去挖掘AWTK中BUG和丑陋的代码,用这些东西对我们进行"打脸"和"羞辱"。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容