软件缺陷

来源:lsy 发布时间:2013-07-22 18:36:37 点击数:

  软件具有连接人与人,简化复杂问题,治愈疾病,娱乐大众的种种能力。我们现在面对很多全球性的的问题,气候异常,人口过剩,致命疾病,全球金融崩溃,能源危机等等。不解决这些问题,人类在不久的将来就可能灭亡。这些问题的解决方案都离不开软件。解决这些问题都需要先建立科学模型,然后使用软件来模拟各种条件加以证明。但是人类并不完美,难免会犯错,由人类创造和发明的软件自然也继承了这个特性。
  软件缺陷的根源来自于软件开发本身。很清楚,我们不可能先开发出完美的软件,缺陷这个术语从软件行业刚出现时就被广泛运用,现在在办公室、车库、宿舍、数据中心、实验室、卧室、咖啡馆或任何一个软件开发场所,它无处不在。世界上第一个软件含有缺陷,最新开发的软件也有缺陷,这一过程中的自然也不待言。软件现在不是毫无缺陷的,将来多半也不会是。这里主要介绍两种缺陷:程序员引入的缺陷和运行环境导致的缺陷。
  让开发人员寻找自己程序代码中的缺陷,这种方法的有效性很值得怀疑。如果他们善于发现缺陷,难道他们不应该在编写这些代码的时候就避免引入这些缺陷吗?因为开发人员是从编写的角度出发,所以他们必然会有盲点。这就是为什么很多关注软件质量的企业都会聘用不同的人来测试程序,这样的测试过程不会带有开发人员的固有成见。这不是说开发人员不需要做任何测试。有很多情况,如格式化、数据验证和异常条件等,都需要在开发过程中被及时发现处理。即使这样,我们还需要第二双眼睛来检查一些更微妙的情况,这样可以保证在用户使用软件之前发现这些缺陷。
  对缺陷的检测,测试人员一般使用两种形式的动态测试;自动化测试和手工测试,自动化测试是通过编写代码来测试一个应用程序,手工测试是使用程序的用户界面,手工输入数据进行测试。对自动化测试首先必须编写这些代码,这意味着测试人员也必须是一个开发人员。编写一个简单的程序,就可以执行无数测试用例,还可以发现很多软件缺陷。在应用程序的代码改变后或需要进行回归测试时,自动化测试代码可以被多次重复使用。自动化测试就只能找到那些最极端的问题,比如程序崩溃、死机或突发异常的情况。因为自动化测试本身就是一个软件,所以不仅被测试的软件会崩溃,测试代码也常常会发生崩溃。
  手工测试需要测试人员手脑并用,充分发挥聪明才智,才能设计出那些可以导致软件失效或是符合软件设计效果的真实场景。由人来进行手工测试,可以最大程度地发挥人的主观能动积极性,设计出真实的用户情况,在真实的用户环境中使用真实的用户数据,同时可以识别出那些显而易见的缺陷和那些比较难以觉察的缺陷。如果想发现与应用程序业务逻辑相关的缺陷,手工测试是最理想的选择。业务逻辑指的就是实现用户需求的代码,换句话说,即用户为它才购买软件的代码。业务逻辑往往非常复杂,需要真人检测是否正确,这里使用自动化测试,一般不能获得理想的效果。