软件测试定义
软件测试是利用软件或者人工的方式来检验目标软件是否满足规定的需求或弄清预期结果和实际结果的差别的操作,其旨在评估软件的属性或者能力,考察目标软件是否满足需求。
测试原则
一,测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。
二,程序员应该避免检查自己的程序,软件测试应该由第三方来负责。
三,设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,如网络异常中断、电源断电等。
四,应该充分注意测试中的群集现象。
五,对错误结果要进行一个确认过程。一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。
六,制定严格的测试计划。一定要制定测试计划,并且要有指导性。测试时间安排尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
七,妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
测试目标
1.发现一些可以通过测试避免的开发风险。
2.实施测试来降低所发现的风险。
3.确定测试何时可以结束。
4.在开发项目的过程中将测试看作是一个标准项目。
测试的重要性
因为软件也是一种产品,是反产品都得经过测试才可以流上市场。所以软件产品也需要进行测试是无可厚非的。
在项目生命周期中,测试是最后的一个环节,同时也是给软件质量进行把关的一个重要环节。
俗话说的好,编筐编喽全在收口。如果最后一个环节不能好好的把握。那么之前的工作再出色。设计在好都是个不合格的产品。
所以,不要因小失大,因为没有测试的产品流向市场而把整个产品给葬送了。
我觉得之所以要团队中开展测试工作,因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程中发现软件的bug,要及时让开发人员知道并得到相应的解决办法,在即将发布的时候,从测试报告中得出软件的质量情况。
很明显,好的软件质量是离不开测试团队的合作,而如何在团队中开展测试活动,个人认为建立一个相对完善的测试体系能更好的在团队中开展测试,所谓无规矩不成方圆,没有完善的整套测试体系,那在实际测试工作中肯定是比较混乱的。
以下是关于软件测试的解决问题的几个例子
ERROR Example1
void main(void) { char aaa; while(1) { if(OneSecondPassed())aaa++; if(aaa >200) { Class_Is_over(); }else{ Lesson_to_Lecture(); } } }
因为char的范围为-128到127,而之后程序的范围是200,因此会发生溢出,导致错误
ERROR Example2
void main(void) { unsigned char uc_aaa; while(1) { if(OneSecondPassed())uc_aaa++; if(uc_aaa >300) { Class_Is_over(); }else{ Lesson_to_Lecture(); } } }
其中unsigned char类型的没有符号,因此能表达从0~255,因此当uca++在没有到300是会发生溢出。
Exercise2
#include <stdio.h> int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf(“\n The buffer entered is [%s]\n”,buff); return 0; }
上面代码里的问题在于函数gets()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。这里推荐使用标准函数fgets()代替。
闰年定义
bool isLeapYear( int year ) { return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); }
public static bool IsLeapYear(int year){ System.Diagnostics.Debug.Assert(year >= 1900); if (year % 400 == 0) return true; if (year % 100 == 0) return false; if (year % 4 == 0) return true; return false; }
第二段C#代码是错误的,应该吧if 改为else if ,因为如果是if的话就会每个都判断,会发生错误。