现代软件工程系列 学生的精彩文章 (4) 为用户服务

from:

http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!421.entry

赞一下Office的用户体验
今天我做API Hook,开了个Word想截获它的系统调用。结果由于我的程序写屎了,Word一开就崩。崩了大概10次以后,再启动Word的时候它给了这么一个提示:

image

 
我倒是第一次见到这个对话框,估计其他用户也很少见得到。
用户甚至根本不会想到他需要这样一个feature。比如我要是把Office玩坏了,我就自己重装一遍。即使Office没有这个feature,用户也不会感觉出什么异样,然而M$还是把这样的feature做进来了,要知道,虽然判断一下程序是否频繁崩溃并不难,但是后面的诊断和恢复可能就不那么容易做了(当然我没试过它效果如何)。花这么大功夫去做一些很多用户一辈子都用不到的功能,不得不说Office的开发人员是在很用心的做这个软件,Office不愧是M$的摇钱树啊。
 
另外一个值得思考的问题是,我们写程序,首先关注的当然是程序的正确性,我们都在极力避免程序崩掉,我们可能会忽视了灾难发生时的补救措施。我以前就有这样的心态:我对我写的程序很有信心,它肯定不会出错,所以我没必要写补救的代码以防万一。然而,经历过iHunter的开发以后,我意识到这种想法是片面和不现实的。首先,当程序写到一定规模的时候,谁都不敢拍胸脯保证它不会出错;其次,用户会进行各种各样的非法操作,甚至有删文件等不可抗拒力,写得再好的程序也可以把它搞崩。所以,不管是自己的错还是用户的错,当发生了异常一定要处理,能恢复的就恢复,不能恢复的,至少告诉用户“虽然我不知道为什么会这样,但至少我知道它发生了,建议你接下来做这些事情……”,这比弹出一个“在某某地址读写错误”的用户看不懂的系统错误对话框出来,用户体验要强多了。
 
话虽这么说,但这件事要做好可不容易。我在iHunter里写的代码,经常要跟插件进行交互。对于iHunter主程序来说,插件就是用户了。于是高翔给我的要求是:无论插件给你返回什么样的值,无论它抛什么异常出来,你都不能让主程序崩掉。我写起来才发现要做到这点真不容易。你必须在和插件的每一次交互中都小心翼翼地处理各种异常情况,必须考虑到它会怎样阴你。还有数据一致性的问题,插件一次失败的操作可能把数据给改了,怎样把数据恢复过来?我们现在还不敢夸口说我们的程序坚不可摧,免疫插件的各种耍流氓行为。但我们在尽力处理这些可能根本就不会遇到的问题。如果从应付软工课的角度来看,做这些努力根本是不必要的,因为现在我们的插件都是遵循接口要求写的,根本不会出现各种各样乱七八糟的异常;即使是将来有第三方为我们开发插件,也很难想像它会以搞崩我们的软件为目的。然而,如果是想用心做一个好软件的话,这些工作又的确是不得不做的。
 
-- 黄源河

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程系列 学生的精彩文章 (6) 我们其实还不懂互联网

from http://cid-ba6a52af193f301f.spaces.live.com/ 第一次把我们自己的写的东西放在网上让别人去用,今天过得非常有传奇色彩,我决定讲个长故事来纪念我们的发布第一天。 由于找不到能放软件的地方,我们把软件以附形式件放在了zol的论坛&am…

现代软件工程系列 学生精彩文章(7) 宝贵的教训

from http://codecanvas3706.spaces.live.com/blog/cns!5A77585898179960!205.entry [当学生的时候, 最好犯一些错误, 经历一些失败. 不经历一些惨痛的失败, 难道要到工作的时候才失败么? ] 个人的失败感言 记得在读完了《梦断代码》之后,我也只是为chandler项…

c语言入门自学为什么要用,为什么要将C语言作为入门语言?

编程是向计算机发出指令以执行特定任务或执行指令的行为,目前专业行业和学术界使用数百种编程语言。一个人需要熟悉并且能够使用至少几种编程语言进行编程才能作为目前专业开发者的成功。学习编程的最好理由在于它对所有人开放,你不需要大学学位即可通过…

现代软件工程讲义 如何提出靠谱的项目建议

互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代。 你有很多机会做出影响世界的产品, 但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了… 那么我们后来人除了羡慕别人生得早, 还有什么机会呢? 但是往往不经意间, 在同学们…

基础知识很扎实 - 但是面试就是做不出来, 怎么办? (长, 慎入)

http://www.newsmth.net/bbstcon.php?boardMicrosoft&gid48785 有人提问: 看了很多的面试题之类的,感觉虽然自己数据结构与算法基础知识很扎实,但还是做不出来,所以请高人指点。 这个问题看似迷惑, 其实提问的人搞混了两件事 - “数据…

敏捷软件开发宣言ndash;Manifesto for Agile Software Development

敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改?下面是一个笑话, 王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 (Agile) 的团队,要文档作甚? 马上开始干活!都快盖好了&…

现代软件工程 其实还是人的问题

在《现代软件工程》这门课程上,大家分成6-7人的小组进行项目开发,有项目经理 (PM),有开发人员 (dev),测试人员 (test) 等。不久就有PM说,怎么小组里有些人就是不干活? 最早,大家假设所有人都是…

历年高考报考人数和录取人数

全国历年参加高考人数和录取人数统计 (1977年~2010年) 时间(年)参加高考人数(万人)录取人数 (万人)录取率 (%)1977570274.7%197861040.26.6%1979468286.0%1980333288.4%1…

android音乐进度条设计代码,【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等...

作者:程序员小冰,GitHub主页:https://github.com/QQ986945193新浪微博:http://weibo.com/mcxiaobing首先给大家看一下我们今天这个最终实现的效果图:当然,这里的进度,是我们手动触摸控制的。截图…

顶级程序员的心得ndash;Coders at Work

[原文在 www.yishan.cc 连载, 现在合成一篇] 我去年读了 “Coders at Work”, 对15 位顶级程序员的采访, 总共600页。 从采访的模式看,有点像“艺术人生”, 一般都是音乐起,讲小时候的故事,你怎么开始写程序的? (…

android动态表格数据类型,华为运动表GT表盘主题制作教程

控件介绍运动表 GT单图控件用于显示一张静态图片,通常用作背景图、图标等。属性区域操作说明:1) 图片路径:点击 号图标选择图片。注:图片尺寸不得超过所选表盘 DPI 大小,如,选择 390 X 390 表盘&#xff0…

cnblog 的小问题 - 尽在 null 中

在Chrome 上发送消息的时候, 出来一个内容为 “null” 的错误。 期望: 至少要用一个缺省的错误信息 “网站内部错误, 请稍后再试 …” 来代替 null.

android icon 圆角半径,iOS和安卓APP启动图标的尺寸和圆角值详解

今天在APP设计交流群里,又有不少的初学的APP设计小伙伴都在问ios端和安卓端的启动图标尺寸大小和圆角半径大小。第一部分:我们先来看看iOS端的图标的尺寸和圆角大小详解A、iOS6和之前版本,应用图标的半径都可以通过四分之一圆角绘制出来。512…

炁体源流 鸿蒙,一人之下:八绝技中最强被曝光,没想到炁体源流落榜,第一在后头...

如今有很多朋友都喜欢在空下来之后看一下动漫给自己解解乏,相比起明星们所在的综艺和影视而言,动漫只要做得好,是不存在啥演技不好,外形让人不喜欢、性格太差劲、太假等等情况的。所以近年来咱们也发现越来越多青少年喜欢上了动漫…

scrumndash;yesterday once more

在敏捷开发的 SCRUM 流程中, 一个基本要求就是团队中的成员在每日例会中介绍自己昨天的进度, 今天的计划, 和遇到的困难。 下面是《现代软件工程》课程上一个学生团队在2/18 和 2/19 这两天的报告。 粗粗看去, 不禁有 “昨日重来” 的感觉。 一些同学的任务在2/18 报告的 yes…

android studio导入eclipse项目各种问题,eclipse项目导入android studio 各类问题及解决方法...

随着时间的推移,技术的推进,开发android的IDE,逐渐由 eclipse转移到android studio,但… 我们的拖延症是很严重的,只要eclipse能用一天就绝不迁移,只到有一天,项目越来越大,引入的第…

android 名片识别 简书,iOS 自己实现 名片识别 三 图片处理

主题: 图片处理声明:下面这些图片仅供学习使用0.png1.剪切图片根据矩形特征剪切图片// property (nonatomic , strong) CIImage *img;//property (nonatomic , strong) CIRectangleFeature *feature;_img [_img imageByCroppingToRect:_feature.bounds];1.png2.图形矫正根据特…

用积分来衡量博客的成绩

I was told the “积分" in CNBLOGS site is a fair reflection of the popularity and activity of a blog. The score is a linear function of the following factors: (the page view of your blogs, the comments from others to your blogs, your comments to ot…

清华大学 现代软件工程 - 实战经验分享

在前两节课中, 老师给大家描绘了关于软件工程和创新的理论和美景。 那么在实践中, 我们的软件工程师是怎么创新的? 我们请两位清华的校友和大家聊聊他们自己做的项目, 也和大家探讨一下软件工程师的工作, 生活和职业发展。 分享题目1: Sora Project - turn cutting edge re…

html5图片碎片效果,html5 canvas实现图片玻璃碎片特效

今天要为大家带来一款html5 canvas实现的图片玻璃碎片特效。图片以玻璃碎片的形式出现到界面中,然后似玻璃被打碎的效果渐消息。效果图如下:实现代码:html代码:js代码:// canvas settingsvar imageWidth 768,imageHei…