Web开发测试中的18个关键性错误

前几年,我有机会能参与一些有趣的项目,并且独立完成开发、升级、重构以及新功能的开发等工作

  本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出。典型的错误表现在不能很好区分各种开发环境和没有使用缓存和备份等。

  下面以PHP为例,但是其核心思想对每一个Web程序员都是适用的。

  应用程序级别的错误

  1、在开发阶段关闭了错误报告

  我唯一想问的是:为什么?为什么在开发的时候要关闭错误报告?

  PHP有很多级别的错误报告,在开发阶段我们必须将它们全部开启。

  如果你觉得错误不会发生,那么你把程序太理想化了,在现实世界中,错误是必然的。error_reporting和display_error是两个完全不同的方法,error_reporting()设置了错误的级别,而display_errors则是设置错误信息是否要被输出。

  在开发阶段,错误报告的级别应该设置成最高的,比如以下设置: error_reporting(E_ALL);以及ini_set(‘display_errors’, true);

  2、淹没错误

  和上一点相反,很多程序员喜欢将错误淹没了,你明知道错误会发生,但是你选择将错误隐藏掉,然后可以早早回家睡大觉,殊不知将来会发生更严重的错误。

  3、代码中任何地方都没有使用日志

  软件开发的一开始你就要牢记使用日志,不能到项目结束了才去弥补日志功能。很多程序员都会用这样或那样的手段进行日志记录,但是很少有人能真正用日志来记录异常信息,试问一个没有人查看的日志系统有什么用?

  4、没有使用缓存

  在的应用系统中,我们可以在多个系统层次上使用缓存,比如在服务端、应用端和数据库端等。和日志一样,缓存也应该在一开始就应用到系统中去,你可以在开发阶段禁用缓存,等到了产品发布后再将缓存开启。

  5、丢弃了最佳实践和设计模式

  你看到过多少人使用自己的密码加密算法?很遗憾的告诉你,有很多,因为他们认为将更了解它。

  最好的实践方式和设计模式已经由前辈创建了,这往往比你自己再造一个轮子要来的简单奏效,我们开发者只需要熟练掌握这些设计模式并且合理地应用在项目中即可,比如一些加密算法。

  6、没有使用自动化测试

  在每一个Web项目中都会使用到测试,就像日志一样,如果没有人管理和使用,那么测试也是一无是处的。

  运行测试工程是一项枯燥乏味的工作,幸好有一系列工具帮助我们实现自动化测试。在PHP开发中,有一款很好的测试工具叫Jenkins,使用起来非常方便。

  7、没有做代码审查

  在团队中工作是一项非常大的挑战,因为每一个成员都有自己不同的工作习惯和方式,如果没有良好的规范,那么项目开发就会走很多弯路。

  团队中的每一个成员都应该互相审查代码,就像单元测试,它可以帮助项目变得更加干净和一致性。

  8、编程只考虑理想情况

  你是否遇到过自己或者别人的代码在交到客户手中后经常出问题,甚至是乱套了?我当然没有。

  出现这种情况往往是因为开发者懒惰了,只考虑了理想情况,这会导致数据库崩溃了、PHP发生致命错误、甚至是服务器被黑。程序员在写代码时不仅要考虑最理想的情况,更要考虑最坏的情况,思考全面,才能让代码覆盖所有的情况。

  9、没有正确运用面向对象编程的思想

  大部分PHP初学者都不会再其代码中运用面向对象的思想,因为这个概念在刚开始的时候很难理解。

  当然面向对象的概念并不是简单地将一些类组织在一起。

  对象、属性、方法、继承和封装等都是OOP中最基本的概念,开发者正确使用了面向对象设计模式后,就有能力写出更干净、更有扩展性的代码了。

10、“飞行模式”(On-the-fly)编程

  大部分开发者都会遇到这样的情况:“快,客户需要一项新功能,要能运行ASAP”,于是你就在源代码上新增一些功能,然后直接上传到正在运行的服务器上,这种编程方式我们称其为“飞行模式”(On-the-fly)编程。

  我们在开发软件时,尤其是中大型的项目,都必须按照工作流程来进行分析、编程和发布,这将大大减少未来软件的bug。这种“飞行模式”并不可取。

  数据库级别的错误

  11、没有将数据库读写分离

  为了能长时间运行复杂的系统,每一个程序员都应该考虑到系统的可扩展性,系统99%的时间都不需要考虑扩展,因为并没有如此大的流量。

  为什么要数据库读写分离?

  在每一个系统中,数据库将会是第一个出现的瓶颈,在大流量的冲击下,数据库很可能将会是第一个阵亡的。所以大部分情况下我们会用多个数据库来分散流量,开发者经常会使用Master – Slave模式或者Master – Master 模式。Master – Slave是最受欢迎的一种数据库分压模式,它会将指定的select语句路由到每一个Slave服务器,这样Master服务器的压力会减轻不少。

  12、代码只能连接到一个数据库

  这和上一个错误非常像,但是开发者有时候因为某些原因需要连接到多个数据库,比如你会将用户日志、活动信息流、实时数据分析等高负载的数据放到不同的数据库中来缓解对主数据库的压力。

  13、没有检测数据库漏洞

  如果你不对数据库进行漏洞检测,就相当于给大部分黑客敞开了服务器的大门。

  在众多漏洞中,数据库漏洞是最脆弱的,最常见的就是SQL注入。因此定期做数据库漏洞检测还是很有必要的。

  14、数据表不建索引

  索引在数据表中有着非常重要的作用,合适的索引可以提高每张表的性能,这里有一篇文章就讲述了如何创建索引以及何时创建索引。

  15、没有使用事务机制

  数据完整性对Web系统非常重要,如果数据一致性发生错误,那么整个系统都会崩溃并且难以修复。合理地运用数据库的事务机制将有效地解决这个问题。比如你要保存用户数据,在table1中有e-mail, username和password,table2中有first name, last name,和gender age。我们可以利用事务对两张表更新时保证数据同时被更新或者同时不被更新。

  16、没有加密敏感数据

  对于数据库中的敏感信息,如果你不对它们进行加密,或者用简单的算法进行加密,那么在2014年你肯定会遇到一些麻烦的问题,黑客们一旦入侵你的数据库,用户的密码或者其他重要信息就会一览无余。

  PHP5.5中提供了一个哈希加密方法,使用如下:

  $hash = password_hash( $password, PASSWORD_BCRYPT );

  17、没有备份

  看到下面这张图片没,如果遇到这样的情况,你又没有备份,那么一切都over了。

  18、没有监控

  没有监控,你将不知道接下来会发生什么事情,对于监控,要注意以下几个问题:

  有多少人可以直接访问这个应用服务?

  服务器是否在高负载下运行?

  我们需要用另一台数据库服务器来扩展系统吗?

  应用系统的失败点在哪里?

  系统目前正处于离线状态吗?

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-18 07:28:56

Web开发测试中的18个关键性错误的相关文章

Web安全测试中常见逻辑漏洞解析(实战篇)

逻辑漏洞挖掘一直是安全测试中"经久不衰"的话题.相比SQL注入.XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和名誉受损,并且传统的安全防御设备和措施收效甚微.今天漏洞盒子安全研究团队就与大家分享Web安全测试中逻辑漏洞的挖掘经验. 一.订单金额任意修改 解析 很多中小型的购物网站都存在这个漏洞.在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改. 如下图所示: 经常见到的参数大多为 rm

请问大家哪一个版本的火狐浏览器适合做web开发测试?

问题描述 请问大家哪一个版本的火狐浏览器适合做web开发测试? 我正在学习web开发,哪一个版本的火狐浏览器适合做web开发测试? 解决方案 哪个版本都可以 主要是firebug 解决方案二: 测试的目的是检测网页在用户那里能否正确显示.因此优先测试用户最常用的浏览器以及版本.简单来说,用户用什么,你就需要测什么,而不是你测什么,用户用什么. 解决方案三: 都可以吧,我用的是firefox33.1.1+firebug2.06+ Color Zilla2.8 解决方案四: 都可以的,没有限定必须使

学习《flask web开发》中多对多关系时时遇到问题

问题描述 学习<flask web开发>中多对多关系时时遇到问题 class Follow(db.Model): __tablename__ = 'follows' follower_id = db.Column(db.Integer db.ForeignKey('users.id') primary_key=True) followed_id = db.Column(db.Integer db.ForeignKey('users.id') primary_key=True) timestam

web开发-myEclipse中创建新的web project会在工程名上报错

问题描述 myEclipse中创建新的web project会在工程名上报错 开发-myEclipse中创建新的web project会在工程名上报错-myeclipse webproject"> 如图所示,只有在项目名称的上面会有一个错误表示.但是程序可以正常运行. 如果不管这个会不会有什么问题? 解决方案 有错误提示就是有错误了,如果找不到的话,我个人认为是JDK的问题,看你那里是用[myelcipse7.1]的JRE,可以改为jdk6,具体操作:右击JRE System librar

Java Web开发项目中中文乱码解决方法汇总_java

Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存文件内容时,使用的是utf-8的编码格式,然后在jsp页面的开始处添加<%@ pageEncoding="utf-8"%>就可以解决这种中文乱码问题 第二种情况:调用servlet页面显示乱码问题描述:通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码.

web开发-vs2013中怎么用asp.net处理程序做防盗链处理

问题描述 vs2013中怎么用asp.net处理程序做防盗链处理 除了重写url之外,asp.net处理程序怎么防止用户盗用网站图片,css,js等资源文件 解决方案 不用重写url,只要写httphandler,过滤 http://www.cnblogs.com/eflylab/archive/2008/06/16/1223373.html 解决方案二: 最简单的就是referer

asp.net web开发 页面中的所有文本内容来自一个文本文件。

问题描述 页面中的所有文本内容来自一个文本文件.点击读入是显示文本内容,点击清除时内容不显示. 解决方案 解决方案二:首先,你清除的话,是只清除页面内容,还是清除文本内容?解决方案三:文本做成json串,其中一块是内容,一快是是否显示,点清除的时候,显示为隐藏{"isshow":1,"text":"不发布人身攻击信息"}解决方案四:控制显示和隐藏就行了呗解决方案五:读入是读取文本(数据源),清除只是不读取而已,如果清除数据,下次再读入岂不无数据了

阐述Checklist(检查清单)在Web软件产品测试中的应用

Checklist 汇集了有经验的http://www.aliyun.com/zixun/aggregation/9621.html">测试人员总结出来的最有效的测试想法,可以直接有效的指导测试工作,开阔测试人员的思路,能够快速的发现产品的缺陷并实现较好的测试覆盖,更重要的是该 Checklist 在不同的项目中具有很强的通用性.该系列文章中,将在每个部分给出具体的有效的 Checklist 并提供相关应用实例,以便于您的理解和应用. 在 Web 开发测试中,导航和链接为用户提供了丰富的操

圣殿骑兵PHP 2007年Web开发技术预言

前言 2006年即将过去,这一年被广泛地看作是:在线投资新浪潮的一年;更新的web技术和技巧兴起和成长年;在采用web标准上增长年;从未这样采用web能量的新商务模式的兴起(和衰落)的一年. 从SitePoint和Ektron这两家组织提供的调查报告预览版中,其中的数据照射出在技术进化进程中的一丝亮光.大家不妨跟随作者一起放眼遥望一下亮光周围的风景,也许你会听到自己的惊呼,请加入到对"未来"的预言中吧!尝试一下网络对趋势的影响力! 关于SitePoint和Ektron进行的2006/2