软件质量的浅谈

软件质量的浅谈

议题:什么是质量?

目的:希望通过探索质量,探求质量提升之道。

目标读者:项目经理、测试员、程序员

图片不显示,想要的联系我[email protected]

今天就“质量”一词,再来谈谈这个老生常谈的话题。当然,都是个人的一些观点和总结,不同意可以拍砖或者来探讨。

  “质量”这个词用得太普遍以至于混乱,有时候它表示质量这个指标,有时候它隐含质量好的意思。而且不可避免的,好的质量常常和它的反面联系在一起,就好像《中国质量万里行》,或者《央视3.15晚会》,列出的都是质量方面的问题,好像很少宣扬质量好的产品。所以很多时候,我们看质量是从反面(缺陷,或者质量不好的地方)来看的。这就跟我们总喜欢听成功人士怎么成功,却不喜欢听失败的人士怎么失败一个道理,容易产生判断偏差。因此,在下面讨论的时候我也会用或正或反的例子来论述。  

Quality scope 1: 实现与需求一致

  这一点蛮好理解,即实现客户要求的功能。这是一个很基本的要求。但是这是一个可以轻松实现的目标吗?显然不是,面临的困难有很多,诸如:

  1. 需求真的清晰吗?客户真正想要的跟表达出来的一致吗?项目经理理解的跟客户表达的(或真正想要的)一致吗?
  2. 需求实现有技术难度吗?
  3. 项目时间足够实现所有需求吗?

以上三点我们一一道来,首先是第一条需求沟通、传递的问题:

我们的做法

  1. 编码前用AXURE原型图跟客户沟通、确认
  2. 需求沟通后,整理需求说明书给客户签字确认,以此确定我方理解与实际需要无出入

这种做法的优缺点:

通过提前项目可视化(所见即所得)和用户签字确认的方式,可有效避免返工,大幅降低项目风险,并可在项目验收结算时提供必要证明。

不足之处是,UI设计时更多的从页面美观性出发,可能会设计出客户没有提的需求,或逻辑上不合理的功能字段,或者技术实现难度较大的呈现方式, 导致其他成员对需求产生歧义, 甚至导致项目范围定义不清、项目严重拖期、预算偏差过大等严重后果。

应对策略:

n  需求沟通时项目经理、UI、测试人员共同参与;

n  UI设计完成后,项目经理、技术骨干、测试人员对UI进行仔细的沟通评审;

n  评审完成后制定专人编写需求说明书。

第二条--技术实现的难度:

这一点也好理解,就是客户想要某种效果或功能,但我们没做过也可能不知道怎么做,短期内也难以通过学习来找到解决方案。举个例子来说,客户想要做一个产品类APP,客户想要产品可以按多种样式来排列,比如下图:

这是一个普遍需求的功能,但如果我们没有相应的技术积累,项目周期又短,那么我们可能就无法去实现,无形中就降低了项目的“价值”。如果必须去实现,可能项目就要拖期。。。

我们的做法:

开发自己的框架,建立框架培训体系,完善公司的组织财富库。

这种做法的优缺点:

as u know,一般而言产品是比项目的利润高的。因为项目每次都需要重新开发,而产品某种程度上可以说是“一劳永逸”。项目常常担心项目会不会拖期,而卖产品不用。其实框架也是一个产品,一个好的框架可以为项目的成功提供多大的助力,相信不用我再赘言。

我们需要做的:

       开发并持续完善java、.net、Android、IOS、PHP框架,微信管理平台。

Android:

给大家提供一个链接:http://download.csdn.net/album/detail/2225,这是一个开源的Android空间库,上面有可变布局、左右滑动删除item效果、listview动画效果、聊天表情实现及刷新聊天记录、加载网络图片、testview自动提示输入的源码。

微信管理平台:

我这里也有一整套方案和源码,需要的可以问我要。

ps 在缩短项目周期方面,我部门的要求和建议还有:

  1. 系统测试阶段开始,对数据库结构的改动须用sql脚本进行。并在版本发布时将脚本一并交于测试员--该阶段以后数据库结构变动较小,因此不会给开发人员造成负累。
  2. 对测试的要求:bug的描述需附加截图,并给出清晰的修改期望--减少因bug描述不清而耗费的时间;
  3. 对开发的建议:bug解决后,建议给出问题根源和解决方案,这是一项利人利己的工作--测试人员可以通过BUG的来龙去脉决定是否做一些bug预防措施,即使没法做预防,测试员在遇到类似的bug时也可以“凭经验”快速定位问题根源,进而降低bug修复时间。

Quality scope 2: 一些不言自明的要求

  为什么说是不言自明呢?比如,一个人买洗衣机的时候,可能只会问一下品牌、价格等,可能不会问耗电多少、噪音多少分贝。这并不代表他没有这方面的标准,而是“不言自明”。 如果事先没有说明,这可能会带来一些纠纷,但是最终生产这样的洗衣机的厂家一定是这些问题的受害者。因为大家都会知道这个牌子的洗衣服超耗电,而且噪音大。而如果只按照第一个scope的要求,它可能是一个很合格的产品,而且或许衣服还洗得挺干净的,通过了QA的测试。

对一个软件系统来说,这方面的要求有安全性、性能、外观、稳定性、兼容性等等。

我们的做法:

GUI:已制定相对完善的《设计、开发测试规范》。以后需加强容错性的处理。

安全性:已制定《安全测试指南》,发现了问题以后即对系统或框架进行完善。

性能:需要在需求中做出更明确的要求,并积累性能调优策略。在典型的系统中建议添加用户行为记录,为该类系统的性能测试提供精确的数据积累。

兼容性:目前已经积累了不少《兼容性常见问题和解决策略》,以后继续补充。

稳定性:系统上线前,采用压力临界点进行7*24压力测试。这样可以发现大多数内存泄露和数据量积累后暴漏的问题。

Quality scope 3: 设计符合用户的需求

  在scope #1中,我们提到好的质量的最起码的条件就是实现了宣称的功能。那么引伸出另一个问题是,设计本身是合理的吗? 也可以说,用户想要的就是合理的吗?

我们或多或少的都遇到过这样的情况:客户今天提出一个需求,我们也跟客户确认了,但是过了几天客户又提了一个新想法,可能新想法还跟之前的想法是冲突的!而最终我们觉得客户一直在变想法,需求改了一遍又一遍。最后费了九牛二虎之力终于交付了,客户还总会抱怨我们的系统质量不够好,会给售后服务部门提一个case过来,提出他们的合理(从他们的角度确实是)要求。

我们的做法:

目前来讲,地产全流程方面的业务,或许还算不得专家,但相信我们的产品拿出去,也可以当得一个解决方案。现在跟商派达成合作,不久的将来在电商领域也能迅速积累起自己的口碑和客户。但是在其他方面呢?我们做过不少堪称行业典型的项目,但却算不得“解决方案”--个人觉得如果想叫解决方案,起码得用同一个系统服务过至少两个客户。

  对于我们测试人员来讲,要解决这样的问题,可能有两个方面的要求

  1. 应该更多的从用户的角度来考虑问题。也就是常说的customer insight,从这个角度我们不是完全被动的按着设计走,而是可以挑战它,质疑它为什么做成这样,至少要知道为什么。

  2. 需求阶段就介入(具体工作请查看我写的《如何做好系统测试》)。一开始就应该参与到产品的设计中,并且从用户的角度给出自己的意见。当然,这一部分也依赖于行业知识和个人的经验。

  以上两个方面,对测试人员来讲,是挑战,因为要求更高了,也是机会,因为工作更有value了。

举个最近我做的项目--日日顺大盈家APP来说吧。

项目简介:这是一个B类APP,主要是做产品分销。客户希望将日日顺商城中的商品,结合时下流行的分销模式进行售卖。具体模式是微店主(分销人)在APP中选货添加到自己的微店,然后通过分享到微信、QQ等平台,买家看到分享链接后即可点开进行购买。客户下单后由日日顺(或体验店)直接发货。每售出一单商品,微店主可获得不同的佣金。

针对这个APP,我们在调研阶段,获晓了客户的需求之后,就得考虑如何才能让微店主如何喜欢并“依恋”上我们的APP(在上一期《质量简报》中我们提到一个APP最成功的标志就是让用户“依恋”)。以此对微店主展开痛点分析:

对微店主而言,需求阶段可以分为朴素的需求和进阶的需求,这是一个递进的过程。朴素需求就是选货、拿现货(有库存、未下架)。一方面寻求高利润的货,一方面是寻求高品质的货,有些线下体验店和线上C端店铺可能只做高端货,只做高端用户,这个时候对品质需求相对会更高。同时,微店主(买家)也会自寻求一些高品质、口碑比较好的实体店(微店主)对接并把关系沉淀下去。

进阶诉求方面,除了商品本身,也会对微店主的特殊货源诉求、交易流程、信息链做一些特殊需求的满足。比如货源上,有些人喜欢尖货,有一些喜欢最新上市商品,有一些喜欢最热门商品,有一些想要签约体验店,从体验店上货,既有价格优势,质量体系也比较完整。

作为一个B类APP,跟万金油似的淘宝本质上是相同的,都是物质交换。但是它面对的客户群更单一,这就决定了在选货方面更有指向性,比如推送、banner。同时其在分销的过程中对于交互必然是要保证精确、流畅的,这也是它的核心业务。

再看用户情绪诉求上,如果店铺主在逛App的时候认为App做的太low,从感性角度就很难融入。另一方面,人性有没有受到尊崇,这点也是可以让用户持续领略产品魅力,并且忠于产品的要素。用户需要被主动关怀(做一个有情怀的产品),可以是个性化的。比如推送——猜用户喜欢什么;定制——要什么就能得到什么等等,这是原始欲望的一种发泄。

有了以上这些层面的思考,在设计和测试的时候就有了应对策略,浓缩一下就是:市场丰度的打造、服务链路的桥接、体验腔调的攀爬。

如何去塑造和建立一个高丰度的市场群?这点可以从360软件市场做一些类比参考。现在打开软件管家,感受最多的一是软件足够丰富(全部软件21716个, 貌似我平时常用的软件也不过十几种而已), 二是品类足够全面(各种各样的分类)!

作为一款分销类APP, 我们再从用户的层次进行分析。对于刚接触这个产品的用户,他们上货未必有什么针对性,可能一股脑的全部把货都上架, 分销的时候也是天女散花,随心所欲。对他们而言,可能更看重高佣金、热销的便宜货,对他而言设备的竞争力、新锐程度、品质程度并不是第一优先级。但随着用户经验的丰富,就会产生更有要求、更专业的上货倾向, 比如更看重质量, 或者有底气成为签约用户,或者专做月返商品的分销,或者专做体验店设备的分销,或者更趋向于从线下体验店上货。从这个角度来看,我们需要用一种比较科学的方式为处于不同层次的用户设计不同的上货筛选条件。

最后我们来从买家的角度略作思考,买家也需要按不同的层次来考虑。有喜欢便宜实惠的居家型买家,有喜欢新鲜事物的追新族买家,也有专认某个品牌型号的粉丝型买家,还有只认最高价的土豪流买家。针对不同的买家,我们也需要设计不同的呈现内容。对居家型买家来说,我们设计了通用的秒杀、团购;对追新族买家,我们设计了最新和最热;对于粉丝型买家和土豪流买家来说,店铺主的商品是否提供了便利的筛选方式? 若没有是否意味着我们需要针对这样的用户添加筛选条件, 或者是为专做高端用户群的微店主定制专门的模板?

Quality scope 4: 处理异常情况的能力

  对于这一点我们的处理是把已知的内容整理到《测试工作指南》《输入验证指南》等文档,通过事后的验证进行处理。并把部分优化到框架中,做好事先的bug预防。

Quality scope 5: 易用性

这是一个很重要的也常常被忽视的方面,也是一个没有明确界定的方面。很多时候我们开发产品的人会觉得自己的产品很好用,但是用户不觉得。我想其中一个很重要的原因是我们自己对这个领域很熟悉,而且对产品的各个功能,甚至他们内在的联系很清楚,再者因为工作的原因我们已经用了几十上百遍。这样算来易用性当然不是问题。但是我们不能要求我们的用户如此,因为用户不会(很多产品也不应该)花很多的时间研究学习我们的产品,他们购买我们产品提供的功能,就是要更有效和高效的完成他的工作。如果用户为了完成一件常见的工作,比如修改一项小的设置,就需要去修改很多的地方,而且没有提示要告诉他修改对应的地方,那么这就是我们产品的问题。

  很多时候用户错用或者误用我们产品的功能,除了用户自身知识和经验不足之外,我们也应该反思一下是不是我们的产品做得不好用,流程和界面设计得太让人困惑。

  易用性不只是产品的UI做得比较好看,更多的时候还包括产品的流程和接口的设计。这是一个很大的领域,这里限于自己的了解和篇幅就不详述了。软件就是服务。让我们把服务一起做的更好一些吧。

我们的做法:

  • 通过分享易用性做的好的功能或系统,让易用性“有法可依”。
  • 把自己想象成对产品了解有限的初用者。
  • 找一个不太了解的,给他一些任务,让他去操作,然后去观察,听听他的感受。

Quality scope 6: 维护 

需要加强的方面:系统上线后运营数据的收集, 日积月累, 渐成大数据。

       性能测试: 在做性能测试的时候,最理想的情况是清楚的知道各个页面的用户量是多少,系统各个功能的压力分布情况,用户在每个页面停留的时间,日访问量,月访问量,访问峰值,访问峰谷时间等数据,我希望我们的项目能帮忙收集到该类数据。

推送: 前段时间跟一家推广APP的的公司聊过,得知他们可以通过记录用户手机机型、用户习惯等方式,实现定向推送的功能。我们做的海客会、日日顺是否也可以借鉴一下呢? 用大数据的原理,给每个用户推送其喜欢的消息?

时间: 2024-07-31 07:31:07

软件质量的浅谈的相关文章

浅谈敏捷软件开发与传统软件开发

本文将介绍传统软件开发与敏捷软件开发,并简单分析二者的优缺. 首先我查阅相关资料大致了解了下为什么会爆发"软件危机"和什么是"软件危机".由于在早期的软件开发活动中有明显的个体化特征,开发流程不规范,人们没有将软件与程序加以详细的区别,对程序之外的数据和相关文档资料没有给予重视,对编写程序之外的软件活动也没有给予重视,因此出现了"软件危机"."软件危机"的特点有:开发成本急剧上升.不能按时交付软件.软件难以维护.无法保证软件质

浅谈中间件

浅谈中间件 1. 由来 因为工作的原因,我从金蝶集团调入金蝶中间件公司工作以来,经常遇到一个问题就是中间件公司是个什么公司,中间件是什么?,金蝶不是做ERP的吗?怎么也做中间件?.这是我以前在金蝶集团时无法想象的问题.因为金蝶,金蝶ERP的品牌以及大众对ERP的了解,是无需我解析什么是ERP,什么是财务软件一类的问题的. 毕竟,中间件在实际的应用过程中,是对应用软件起到支撑作用,最终用户并不直接使用中间件,中间件不是大众消费类软件产品.因此,除非是一个行业专业人士,一般不大可能与中间件打交道,不

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜

浅谈html标签

浅谈html各常用标签用法 标题标签:<h1>-<h6>来表示,使标题字体变粗. <br />换行标记 <hr />水平分隔符 &nbsp空格符 &copy版权符 <a href>a标签超链接 href可接链接地址 <p>段落标签<blockquote>引用标签及可用做缩进 <table>表格中的<ul>无序列表<ol>有序列表<dl>自定义列表<row

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b

浅谈C++容器动态内存管理的优化

在信息学竞赛中,C++的容器的用途非常广泛,但经常因常数过大而超时.怎样才能提高它们的效率呢? 我们知道,容器是存储同一类对象的对象,既然"对象"我们无法改变,那么我们只能从"存储"入手,不难想到,不同容器在实现上的根本区别是它们对应着不同的内存组织方式,内存管理无疑是这种实现的核心,所以优化内存管理是加快容器效率的最好途径之一. 一.内存分配器简介 怎样才能优化内存管理呢?很简单,C++为我们提供了这样的接口,我们可以通过自定义容器模板中的最后一个allocato