如果有人问您: 您认为影响一个软件品质的因素有哪些? 您脑子里可能会闪出一堆: 功能, 界面, 运行速度, 安全性, 扩展性, 可维护性, 操作性……人者见人, 智者见智, 每个人对软件理解不一样, 答案自然也不尽相同, 也正是由于对软件理解的这种不同, 使得我们在实现过程中有所偏重的部分, 也有所淡化的部分. 偏重那些我们认为对软件品质影响较大因素,而淡化那些他认为较为次要的因素, 并且被淡化的那些因素不是作者认为它对于软件没有影响, 而是有限的人月不可能照顾到软件的方方面面, 既然有所保留, 自然会有所放弃.
答案的不同会因人因物而不同. 一个对安全性特别嗜好的产品经理可能会使手下所有的员工都重视软件安全, 一个对界面有特别兴趣的项目经理可能让员工用更多的精力在软件的首页(主界面)上;另一方面一个银行系统可能对安全性要求特别高, 而一个点歌系统可能对易操作性或者界面要求比较高.
但是如果大家仔细观察会发现一个有趣的现象: 无论任何系统对于运行速度的要求都是只增不减的. 而且有一种迹象: 随着生活节奏加快, 各个行业对于软件的运行速度的要求只会更高. 有一个很有趣的现象可以作为这种说法的佐证: 网页上一个链接如果打开超过2秒会有人抱怨它很慢, 如果超过5秒则会直接取消链接操作;但是那个网页如果是必须要打开的, 超过5秒还没有进入时很多时候会我们会强制刷新, 刷新后如果又超过5秒则会直接关闭浏览器然后重启. 我们可以允许自己等女朋友2个小时, 但绝不允许一个网页使自己等待5秒.
其实这是一种极普遍的现象, 现代社会生活节奏加快, 人们对于速度的要求越来苛刻, 有人统计过: 一般中午我们在餐馆等菜超过5分钟时便会提醒服务员快点, 而如果超过10分钟会起身催促老板, 时间再长会出现提高嗓门叫喊的, 有不吃骂着脏话闪人的…
你可以想象这样一些场景会有多么折磨人: 火车票售票系统对于售票员的每一个操作反应超过0.5秒; 操作系统对于每一个文件夹的打开超过1秒; 打开一个网页超过2秒; 登录一个系统超过10秒; 连接数据库超过45秒; 加载一张地图超过1分种……当然如果您每次启动您的爱机超过2分种您肯定会先抽根烟一边解解心中的郁闷一边看着那个进度条在那不停地无限循环着转.
如果你了解Oracle 的体系结构, 会发现它始终围绕着一条主线在开发 : 那就是 处理数据的速度. 速度就是Oracle 体系结构的一根筋. 无论从存储结构上分析还是从软件结构上分析, Oracle几乎一直在达到一个目的: 提高处理数据的速度! 以软件结构中的内存结构为例说明 Oracle是如何把它当作命根的, 我们知道一个软件程序, 必须先要在内存中为其指令代码和缓存数据申请, 划分出一个区域, 再将其从磁盘上读入, 放置到内存, 然后才能执行. 对此, Oracle 的作法是 : 将内存分为二个区, 一个SGA (System Global Area, 系统全局区), 一个 PGA (Program Global Area, 程序全局区). 其中SGA为所有用户共享, 然后他的做法是 当访问的数据只在数据文件中时, Oracle 将读取磁盘上的数据文件, 然后将其放入数据高速缓存中, 再对数据进行处理, 如果被访问的数据已经位于数据高速缓存中时, Oracle 将直接使用数据高速缓存中的数据, 而不必再读取磁盘中的数据文件了, 由于读取内存的速度比读取磁盘快很多倍, 所以这种机制能提高数据库的整体效率. 同样的道理, Oracle 在写日志时并不将重做记录信息直接写入磁盘的重做日志文件中, 而是首先被写入重做日志高速缓存, 当重做日志高速缓存中的重做记录达到一定数量后, 再由日志写进程将其写入重做日志文件中.
这只是 Oracle 提高处理数据速度而使用的技术中的冰山一角, 其实 Oracle 的每一步操作总是 “先内存后磁盘” 的, 这样设计的原由可能大家现在都已心知肚明.
……
而在我们平时的编程中, 有很多并不合理的现象存在. 有人总喜欢把所有的 SQL都写在前台, 宁愿把服务器累死也不写一个存储过程;一堆一堆的网站开发人员开发了大半辈子的网站却从没用过任何缓存技术;总有一些人借着实现 ajax 技术而将所有的功能代码都用 javascript实现. 我见过最厉害的程序员可以一次性把表中所有的数据全部读取然后只用其中一条…
…….
影响软件品质的各种因素的要求都在慢慢发生着变化: 界面要求简单而大方, 功能要求精简而强大, 操作要求简易而不繁琐…唯独对于运行速度的要求, 没有最高, 只有更高! 可以说影响软件品质的因素的重要性正在 “内化”, 客户都希望自己拿到的软件使用起来 “很舒服”, 至少不能折磨人! 用户不希望自己被软件的速度超慢而气的得肺炎, 不愿意因为软件速度的原因砸他的鼠标, 敲他的桌子, 摔他的书;用户可以允许软件稍微难看一点, 但绝不允许它慢一丁点, 所有的用户这个时候都是 “急性子”, 容不得半点等待. Google 懂这个道理, Oracle 懂这个道理, 微软也早就明白这个道理……俗话话的好, 长的难看不是你的错, 但出来折磨人就是你的不对了!
每个人都有自己对软件的理解, 当他需要实现一个软件时在他便会在心里告诉自己首先应该解决什么问题. 这里并没有否认其他因素重要性的意思, 只是认为运行速度要求对于软件开发来讲已经上升到主要位置, 已经成为影响软件品质的最重要的因素. 同时也提醒大家在软件开发需要更多的考虑速度问题, 考虑用户的感受, 做到真正的 “人性化服务”. 如果您还不明白这个道理: 您可以稍微回想一下每当您自己碰到一个运行速度十分不理想的操作时您当时的感受是什么? 您当时是不是有说脏话的冲动?
如果筋断了, 再漂亮的肌肉也会很快成为一堆烂肉--因为它不可用.