《软件测试与缺陷管理.ppt》由会员分享,可在线阅读,更多相关《软件测试与缺陷管理.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第五章五章五章五章软件测试与缺陷管理软件测试与缺陷管理软件测试与缺陷管理软件测试与缺陷管理在毕业设计项目中,我们将采取什么方法来进行进度管理在毕业设计项目中,我们将采取什么方法来进行进度管理?面试时,面试官问你面试时,面试官问你“如何实现一个权限系统如何实现一个权限系统”,你将如,你将如何回答?何回答?回顾回顾回顾回顾回顾回顾预习检查预习检查预习检查预习检查预习检查预习检查毕业设计项目中,我们使用什么工具来管理测试用例?毕业设计项目中,我们使用什么工具来管理测试用例?实现动态系统菜单的实现动态系统菜单的ASP.NET方法有哪些?方法有哪些?简单描述实现简单描述实现TreeView菜单的思
2、路?菜单的思路?本章任务本章任务本章任务本章任务本章任务本章任务编写编写“用户管理用户管理”测试用例测试用例使用使用ASP.NET技术实现系统功能菜单技术实现系统功能菜单本章目标本章目标本章目标本章目标本章目标本章目标建立软件质量观念建立软件质量观念了解软件测试的意义和方法了解软件测试的意义和方法学会编写测试用例学会编写测试用例了解缺陷管理的流程了解缺陷管理的流程会使用会使用TreeView控件实现系统菜单控件实现系统菜单 为什么要做软件测试为什么要做软件测试(1)?软件缺陷和软件故障案例软件缺陷和软件故障案例案例案例1 迪斯尼的狮子王,迪斯尼的狮子王,19941995 兼容性问题兼容性问题案
3、例案例2 跨世纪跨世纪“千年虫千年虫”问题问题 设计考虑不周全设计考虑不周全案例案例3 爱国者导弹防御系统炸死自家人爱国者导弹防御系统炸死自家人 系统时钟误差积累系统时钟误差积累 为什么要做软件测试为什么要做软件测试(2)?系统故障原因:硬件故障系统故障原因:硬件故障:软件故障软件故障=10:1 运行软件的驻留故障密度运行软件的驻留故障密度(每千行代码的故障数目每千行代码的故障数目):要求很高的关键财务或财产软件为:要求很高的关键财务或财产软件为:110个软件缺陷个软件缺陷/千行代码千行代码关键的生命软件为:关键的生命软件为:0.011个故障个故障/千行代码千行代码软件失败时,也许仅仅是给我们
4、带来了不便软件失败时,也许仅仅是给我们带来了不便(案例案例1),也可能是灾难性,也可能是灾难性的的(案例案例3)。我们需要。我们需要软件测试软件测试,来保障软件质量。,来保障软件质量。什么是软件缺陷什么是软件缺陷(Bug)?软件缺陷的定义软件缺陷的定义软件未达到产品说明书中已经标明的功能软件未达到产品说明书中已经标明的功能软件出现了产品说明书中指明不会出现的错误软件出现了产品说明书中指明不会出现的错误软件未达到产品说明书中虽未指出但应当达到的目标软件未达到产品说明书中虽未指出但应当达到的目标软件功能超出了产品说明书中指明的范围软件功能超出了产品说明书中指明的范围软件测试人员认为软件难以理解、不
5、易使用,或者最终用户认为该软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不良软件使用效果不良计算器的例子计算器的例子 小结小结1 这时,漂亮的空姐过来宣布:这时,漂亮的空姐过来宣布:“旅客朋友们请放心,我们飞旅客朋友们请放心,我们飞机安装有先进的安全控制系统,机安装有先进的安全控制系统,该系统是由著名的该系统是由著名的公司(你公司(你所在的公司)开发的,所在的公司)开发的,.”假如你现在坐在飞机上,忽然飞机开始颤抖假如你现在坐在飞机上,忽然飞机开始颤抖.要想真正设计、编写出高质量的软件,首先需要我们在做事要想真正设计、编写出高质量的软件,首先需要我们在做事的时候,脑子里
6、具有的时候,脑子里具有质量意识质量意识。这时,你是顿时感到踏实,还是忽然觉得什么都完了?这时,你是顿时感到踏实,还是忽然觉得什么都完了?什么是软件测试?什么是软件测试?什么是软件测试什么是软件测试定义:软件测试是为了发现软件缺陷而执行程序的过程定义:软件测试是为了发现软件缺陷而执行程序的过程软件测试的依据软件测试的依据需求规格说明书(需求规格说明书(重中之重重中之重););相关的设计说明(概要设计,详细设计等);相关的设计说明(概要设计,详细设计等);已经基本成型的已经基本成型的UI(可以有针对性地补充一些用例)。(可以有针对性地补充一些用例)。软件测试方法软件测试方法(1)按照测试方法来分,
7、软件测试分为:按照测试方法来分,软件测试分为:黑盒测试黑盒测试白盒测试白盒测试软件测试方法软件测试方法(2)思想思想已知程序内部工作流程,通过测试检验程序内部动作是否按规已知程序内部工作流程,通过测试检验程序内部动作是否按规格说明书规定正常运作格说明书规定正常运作依据依据程序的内部逻辑结构,针对程序的逻辑路径设计测试用例程序的内部逻辑结构,针对程序的逻辑路径设计测试用例特点特点必须了解程序的内部工作流程必须了解程序的内部工作流程白盒测试白盒测试 思想思想根据已知程序的功能和性能根据已知程序的功能和性能(而不是内部细节而不是内部细节),通过测试检验,通过测试检验每个功能和性能是否正常每个功能和性
8、能是否正常依据依据程序的功能和性能描述程序的功能和性能描述特点特点知道程序的功能和性能,不必了解程序的内部结构和处理细节知道程序的功能和性能,不必了解程序的内部结构和处理细节软件测试方法软件测试方法(3)黑盒测试黑盒测试 软件测试阶段软件测试阶段按照测试阶段来分,软件测试分为:按照测试阶段来分,软件测试分为:需求分析需求分析概要设计概要设计详细设计详细设计编码编码单元测试单元测试集成测试集成测试确认测试确认测试软件开发过程软件开发过程软件测试阶段软件测试阶段用户需求用户需求验收测试验收测试什么是测试用例?什么是测试用例?测试用例的定义测试用例的定义测试用例就是一个测试用例就是一个“情况情况”,
9、软件程序在这种情况下,必须能够,软件程序在这种情况下,必须能够正常运行并且得到预期的结果。正常运行并且得到预期的结果。一个简化的测试用例:一个简化的测试用例:用例:用例:用户登录用户登录前置条件:前置条件:用户进入到用户进入到“用户登录页面用户登录页面”输入:输入:合法用户在系统中的用户名和密码合法用户在系统中的用户名和密码期待结果:期待结果:用户提交正确的用户名和密码后,顺利进入系统用户提交正确的用户名和密码后,顺利进入系统测试结果:测试结果:成功成功/失败失败测试用例的设计原则测试用例的设计原则测试用例的设计原则测试用例的设计原则对应需求编写测试用例对应需求编写测试用例 测试用例要全面覆盖
10、需求规格说明书中的软件功能点测试用例要全面覆盖需求规格说明书中的软件功能点便于发现有价值的缺陷便于发现有价值的缺陷 系统要求上传系统要求上传2M以下的文件,一般上载以下的文件,一般上载1M多一点的文件绝不会有问多一点的文件绝不会有问题。这时题。这时“敏感敏感”会让我们设计测试用例时,尽量去注意边界条件,会让我们设计测试用例时,尽量去注意边界条件,上载上载1.9M的文件会不会出问题?上载正好的文件会不会出问题?上载正好2M的文件呢?上载的文件呢?上载2M多一多一点的文件呢?点的文件呢?测试用例的组织方式测试用例的组织方式测试用例的组织方式测试用例的组织方式系统模块系统模块功能点功能点用例编号用例
11、编号用例说明用例说明前置条件前置条件输入输入预期结果预期结果测试结果测试结果失败原因失败原因教员讲解教员讲解小结小结2软件测试按测试方法来分,分为哪两种?两种方法各有什软件测试按测试方法来分,分为哪两种?两种方法各有什么特点?么特点?设计测试用例的两个原则是?设计测试用例的两个原则是?为什么要做缺陷管理?为什么要做缺陷管理?看看缺陷会给我们的软件开发过程造成怎样的混乱?看看缺陷会给我们的软件开发过程造成怎样的混乱?每发现一个每发现一个Bug,都要惊动整个项目组,都要惊动整个项目组 例:例:测试人员发现了一个测试人员发现了一个Bug,当作发现新大陆一样告诉给项目组长,项,当作发现新大陆一样告诉给
12、项目组长,项目组长找到开发组长,开发组长再找程序目组长找到开发组长,开发组长再找程序.Bug没有指明修改人,大家都不闻不问没有指明修改人,大家都不闻不问例:例:测试人员将几十个测试人员将几十个Bug邮件群发给开发组,开发组先是一片混乱,然邮件群发给开发组,开发组先是一片混乱,然后立刻平静下来。事不关己,高高挂起后立刻平静下来。事不关己,高高挂起.Bug的沟通成本往往很高的沟通成本往往很高例:例:测试人员发现小张测试人员发现小张Bug后立即发给程序员小王,小王每次都需要和小后立即发给程序员小王,小王每次都需要和小张进行大量的张进行大量的“沟通交流沟通交流”来理解来理解Bug。缺陷管理缺陷管理可以
13、帮助我们解决上述问题,将缺陷可以帮助我们解决上述问题,将缺陷(Bug)按按严重程度划分等级,按特定的流程来进行管理。严重程度划分等级,按特定的流程来进行管理。如何进行缺陷管理如何进行缺陷管理(1)1、缺陷等级划分、缺陷等级划分严重的缺陷:所导致的问题会导致系统罢工、工作不正常严重的缺陷:所导致的问题会导致系统罢工、工作不正常 例:例:windows的蓝屏、死机。的蓝屏、死机。一般的缺陷:主要工作运作不完全,所产生的问题虽然严重,但一般的缺陷:主要工作运作不完全,所产生的问题虽然严重,但是不影响下一步的测试。是不影响下一步的测试。例:软件异常。例:软件异常。轻微的缺陷:功能运作正常,可是有改进的
14、空间。轻微的缺陷:功能运作正常,可是有改进的空间。例:对例:对“必填必填”的文本框未作校验。的文本框未作校验。如何进行缺陷管理如何进行缺陷管理(2)2、缺陷管理中的角色、缺陷管理中的角色开发负责人(项目组长)开发负责人(项目组长)负责负责制定缺陷管理计划和流程制定缺陷管理计划和流程,将测试工程师发现的问题,将测试工程师发现的问题指派指派给指定开给指定开发工程师,发工程师,协调协调缺陷管理流程中的问题。缺陷管理流程中的问题。测试工程师测试工程师将发现的将发现的问题提交问题提交到缺陷管理系统中,写明问题的描述、严重程度,问到缺陷管理系统中,写明问题的描述、严重程度,问题重现方法;负责题重现方法;负
15、责重新测试重新测试开发工程师修改过的缺陷。开发工程师修改过的缺陷。开发工程师开发工程师确认并修改确认并修改指定给自己的软件缺陷。指定给自己的软件缺陷。如何进行缺陷管理如何进行缺陷管理(3)3、缺陷管理流程、缺陷管理流程缺陷管理工具缺陷管理工具专业缺陷管理工具专业缺陷管理工具BugzillaBugzilla是一款很专业的缺陷管理工具。它具有一般缺陷管理系统所是一款很专业的缺陷管理工具。它具有一般缺陷管理系统所必须的功能:必须的功能:提供一个开发和测试交互的平台,将测试和改错程序化。不需要提供一个开发和测试交互的平台,将测试和改错程序化。不需要测试人员就每一个问题和开发人员直接交流,也避免了发生错
16、误测试人员就每一个问题和开发人员直接交流,也避免了发生错误被遗忘的问题被遗忘的问题提供错误检索功能,供项目经理和测试经理掌握测试和修改情况提供错误检索功能,供项目经理和测试经理掌握测试和修改情况毕业设计项目中的缺陷管理毕业设计项目中的缺陷管理在毕业设计中,我们将使用在毕业设计中,我们将使用常见问题列表常见问题列表管理缺陷管理缺陷常见问题列表常见问题列表将放在将放在VSS服务器上,由小组组长维护。服务器上,由小组组长维护。小组内人员发现问题后,在问题列表中提出问题,组内各成员经常查小组内人员发现问题后,在问题列表中提出问题,组内各成员经常查看该问题列表,遇见自己可以解答的问题,将解决方案写入表格
17、。看该问题列表,遇见自己可以解答的问题,将解决方案写入表格。教员讲解教员讲解小结小结3软件缺陷按严重程度可以分为三个等级、分别是什么?软件缺陷按严重程度可以分为三个等级、分别是什么?简单说说在你以前的项目(包括毕业设计项目)中,是如简单说说在你以前的项目(包括毕业设计项目)中,是如何进行缺陷管理的?何进行缺陷管理的?ASP.NET中常用来实现动态菜单的两种方法中常用来实现动态菜单的两种方法系统功能菜单的系统功能菜单的ASP.NET解决方案解决方案 用用TreeView实现动态菜单实现动态菜单 用用Accordion实现动态菜单实现动态菜单 教员讲解两种方式的区别和应用场景教员讲解两种方式的区别
18、和应用场景使用使用TreeView控件动态生成菜单控件动态生成菜单(1)我们以两层菜单为例来讲解动态菜单我们以两层菜单为例来讲解动态菜单 MyOffice中中SysFun表数据信息表数据信息 属性名称属性名称 说说 明明NodeId系统菜单的系统菜单的IDIDDisplayName系统菜单显示的文本系统菜单显示的文本NodeURL系统菜单的连接地址系统菜单的连接地址ParentNodeId父菜单父菜单IDID,IDID为为“0”0”,表示第一级菜单,表示第一级菜单DisplayOrder在系统中显示出来的顺序在系统中显示出来的顺序SysFun表字段信息表字段信息实现后的菜单效果实现后的菜单效果
19、使用使用TreeView控件动态生成菜单控件动态生成菜单(2)动态生成第一级菜单动态生成第一级菜单 展示所有的展示所有的ParentNodeId为为“0”的菜单的菜单布局母版页布局母版页MasterPage.master使用使用TreeView控件动态生成菜单控件动态生成菜单(3)protected void Page_Load(object sender,EventArgs e)if(!Page.IsPostBack)DisplayUserMenu();protected void DisplayUserMenu()tvUserRightMenu.Nodes.Clear();IList pa
20、rentSysFun=SysFunManager.GetAllParentNodeInfo();foreach(SysFun sfParent in parentSysFun)string nodeId=sfParent.NodeId.ToString();string displayName=sfParent.DisplayName;TreeNode fatherNode=this.CreatTreeNode(displayName,nodeId,“”,“Images/menuclose.gif”);tvUserRightMenu.Nodes.Add(fatherNode);生成第一级菜单后
21、台关键代码生成第一级菜单后台关键代码得到系统菜单表中所有的第一级菜单得到系统菜单表中所有的第一级菜单得到第一层节点的得到第一层节点的ID得到第一层节点的显示名得到第一层节点的显示名根据节点信息,根据节点信息,创建第一层节点创建第一层节点将节点添加到将节点添加到TreeView中中public static IList GetAllParentNodeInfo()return SysFunService.GetAllParentNodeInfo();对应的业务处理层关键方法对应的业务处理层关键方法public static IList GetAllParentNodeInfo()string s
22、ql=select*from sysfun where ParentNodeId=0;return GetSysFunBySql(sql);对应的数据访问层关键方法对应的数据访问层关键方法查看生成第一级菜单关键后台代码查看生成第一级菜单关键后台代码使用使用TreeView控件动态生成菜单控件动态生成菜单(4)这时添加这时添加RoleManage.aspx运行,只能看到第一级菜单运行,只能看到第一级菜单如何生成父菜单对应的子菜单呢?如何生成父菜单对应的子菜单呢?protected void Page_Load(object sender,EventArgs e)if(!Page.IsPostBa
23、ck)DisplayUserMenu();protected void DisplayUserMenu()tvUserRightMenu.Nodes.Clear();IList parentSysFun=SysFunManager.GetAllParentNodeInfo();foreach(SysFun sfParent in parentSysFun)string nodeId=sfParent.NodeId.ToString();string displayName=sfParent.DisplayName;TreeNode fatherNode=this.CreatTreeNode(d
24、isplayName,nodeId,“”,“Images/menuclose.gif”);CreateChildTree(nodeId,fatherNode);tvUserRightMenu.Nodes.Add(fatherNode);在此处添加创建子菜单方法在此处添加创建子菜单方法使用使用TreeView控件动态生成菜单控件动态生成菜单(5)private void CreateChildTree(string nodeId,TreeNode fatherNode)IList childSysFun=SysFunManager.GetSysFunByParentNodeId(int.Pars
25、e(nodeId);foreach(SysFun sfChild in childSysFun)string childNodeId=sfChild.NodeId.ToString();string childDisplayName=sfChild.DisplayName;string nodeURL=ResolveUrl(sfChild.NodeURL.Trim();TreeNode childNode=this.CreatTreeNode(childDisplayName,childNodeId,nodeURL,Images/CloseTree.gif);AddTree(fatherNod
26、e,childNode);生成子菜单后台关键代码生成子菜单后台关键代码获得父节点为获得父节点为nodeId的所有子节点的所有子节点将路径转换为在客户端可用的将路径转换为在客户端可用的URL根据节点信息,根据节点信息,创建第二层节点创建第二层节点将子节点添加到父节点中将子节点添加到父节点中对应的业务处理层关键方法对应的业务处理层关键方法public static IList GetSysFunByParentNodeId(int parentNodeId)string sql=select*from sysfun where ParentNodeId=+parentNodeId +;return
27、 GetSysFunBySql(sql);对应的数据访问层关键方法对应的数据访问层关键方法public static IList GetSysFunByParentNodeId(int parentNodeId)return SysFunService.GetSysFunByParentNodeId(parentNodeId);查看生成子菜单关键后台代码查看生成子菜单关键后台代码这时运行程序实现动态菜单效果这时运行程序实现动态菜单效果实现不同登录用户拥有不同的菜单项实现不同登录用户拥有不同的菜单项(1)不同的登录用户显示不同的菜单不同的登录用户显示不同的菜单 权限分配需要用到的四张表之间的关键
28、权限分配需要用到的四张表之间的关键实现不同登录用户拥有不同的菜单项实现不同登录用户拥有不同的菜单项(2)各表的关键数据信息各表的关键数据信息权限分配原则是:一个用户对应一个角色,一个角色对应多个权限权限分配原则是:一个用户对应一个角色,一个角色对应多个权限以系统管理员和普通用户身份分别登录以系统管理员和普通用户身份分别登录系统管理员登录系统管理员登录后看到的菜单后看到的菜单普通用户登录普通用户登录后看到的菜单后看到的菜单实现不同登录用户拥有不同的菜单项实现不同登录用户拥有不同的菜单项(3)实现这个功能,只要在前面生成实现这个功能,只要在前面生成TreeView菜单的基础上修改菜单的基础上修改即
29、可即可protected void Page_Load(object sender,EventArgs e)UserInfo user=(UserInfo)SessionCurrentUser;if(!Page.IsPostBack)DisplayUserMenu(user.UserId);protected void DisplayUserMenu(string userId)tvUserRightMenu.Nodes.Clear();IList parentSysFun=SysFunManager.GetAllParentNodeInfoByUserId(userId);foreach(S
30、ysFun sfParent in parentSysFun)string nodeId=sfParent.NodeId.ToString();string displayName=sfParent.DisplayName;TreeNode fatherNode=this.CreatTreeNode(displayName,nodeId,“”,“Images/menuclose.gif”);CreateChildTree(nodeId,userId,fatherNode);tvUserRightMenu.Nodes.Add(fatherNode);获得登录用户信息获得登录用户信息修改显示用户菜
31、单方法修改显示用户菜单方法添加用户添加用户Id参数参数根据用户根据用户Id获得获得对应父节点信息对应父节点信息创建子节点创建子节点生成第一层节点修改后的后台代码生成第一层节点修改后的后台代码实现不同登录用户拥有不同的菜单项实现不同登录用户拥有不同的菜单项(4)生成子节点修改后的后台代码生成子节点修改后的后台代码private void CreateChildTree(string nodeId,string userId,TreeNode fatherNode)IList childSysFun=SysFunManager.GetSysFunByParentNodeIdAndUserId(in
32、t.Parse(nodeId),userId);foreach(SysFun sfChild in childSysFun)string childNodeId=sfChild.NodeId.ToString();string childDisplayName=sfChild.DisplayName;string nodeURL=ResolveUrl(sfChild.NodeURL.Trim();TreeNode childNode=this.CreatTreeNode(childDisplayName,childNodeId,nodeURL,Images/CloseTree.gif);Add
33、Tree(fatherNode,childNode);根据用户根据用户Id和父节点获和父节点获得对应的子节点信息得对应的子节点信息实现不同登录用户拥有不同的菜单项实现不同登录用户拥有不同的菜单项(5)对应的业务处理层和数据访问层代码都要进行必要的修改对应的业务处理层和数据访问层代码都要进行必要的修改查看修改后的业务处理和数据访问关键代码查看修改后的业务处理和数据访问关键代码对数据访问层用到对数据访问层用到的的4张表创建视图张表创建视图select a.NodeId,a.RoleId,b.UserId,b.UserName,c.DisplayName,c.NodeURL,d.RoleName,c
34、.ParentNodeId,c.DisplayOrder from RoleRight a,UserInfo b,SysFun c,RoleInfo d where a.RoleId=b.RoleId and a.RoleId=d.RoleId and a.NodeId=c.NodeId order by c.NodeId 系统管理员登录系统管理员登录后看到的菜单后看到的菜单普通用户登录普通用户登录后看到的菜单后看到的菜单实现不同的登录用户拥有不同的菜单权限实现不同的登录用户拥有不同的菜单权限小结小结4生成生成TreeView菜单可以按哪两个过程来实现?菜单可以按哪两个过程来实现?用户控件文件的后缀是什么?用户控件文件的后缀是什么?Thank you