版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章,软件测试与缺陷管理,在毕业设计项目中,我们将采取什么方法来进行进度管理? 面试时,面试官问你 “如何实现一个权限系统”,你将如何回答?,回顾,预习检查,毕业设计项目中,我们使用什么工具来管理测试用例? 实现动态系统菜单的ASP.NET方法有哪些? 简单描述实现TreeView菜单的思路?,本章任务,编写“用户管理”测试用例 使用ASP.NET技术实现系统功能菜单,本章目标,建立软件质量观念 了解软件测试的意义和方法 学会编写测试用例 了解缺陷管理的流程 会使用TreeView控件实现系统菜单,为什么要做软件测试(1)?,软件缺陷和软件故障案例 案例1 迪斯尼的狮子王,19941995
2、兼容性问题 案例2 跨世纪“千年虫”问题 设计考虑不周全 案例3 爱国者导弹防御系统炸死自家人 系统时钟误差积累,为什么要做软件测试(2)?,系统故障原因:硬件故障:软件故障 = 10:1 运行软件的驻留故障密度(每千行代码的故障数目): 要求很高的关键财务或财产软件为:110个软件缺陷/千行代码 关键的生命软件为:0.011个故障/千行代码,软件失败时,也许仅仅是给我们带来了不便(案例1),也可能是灾难性的(案例3)。我们需要软件测试,来保障软件质量。,什么是软件缺陷(Bug)?,软件缺陷的定义 软件未达到产品说明书中已经标明的功能 软件出现了产品说明书中指明不会出现的错误 软件未达到产品说
3、明书中虽未指出但应当达到的目标 软件功能超出了产品说明书中指明的范围 软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不良,计算器的例子,小结1,这时,漂亮的空姐过来宣布:“旅客朋友们请放心,我们飞机安装有先进的安全控制系统,该系统是由著名的公司(你所在的公司)开发的,. .”,假如你现在坐在飞机上,忽然飞机开始颤抖.,要想真正设计、编写出高质量的软件,首先需要我们在做事的时候,脑子里具有质量意识。,这时,你是顿时感到踏实,还是忽然觉得什么都完了?,什么是软件测试?,什么是软件测试 定义:软件测试是为了发现软件缺陷而执行程序的过程 软件测试的依据 需求规格说明书(重中之重
4、); 相关的设计说明(概要设计,详细设计等); 已经基本成型的UI(可以有针对性地补充一些用例)。,软件测试方法(1),按照测试方法来分,软件测试分为: 黑盒测试 白盒测试,软件测试方法(2),思想 已知程序内部工作流程,通过测试检验程序内部动作是否按规格说明书规定正常运作 依据 程序的内部逻辑结构,针对程序的逻辑路径设计测试用例 特点 必须了解程序的内部工作流程,白盒测试,思想 根据已知程序的功能和性能(而不是内部细节),通过测试检验每个功能和性能是否正常 依据 程序的功能和性能描述 特点 知道程序的功能和性能,不必了解程序的内部结构和处理细节,软件测试方法(3),黑盒测试,软件测试阶段,按
5、照测试阶段来分,软件测试分为:,需求分析,概要设计,详细设计,编码,单元测试,集成测试,确认测试,用户需求,验收测试,什么是测试用例?,测试用例的定义 测试用例就是一个“情况”,软件程序在这种情况下,必须能够正常运行并且得到预期的结果。 一个简化的测试用例: 用例: 用户登录 前置条件:用户进入到“用户登录页面” 输入: 合法用户在系统中的用户名和密码 期待结果:用户提交正确的用户名和密码后,顺利进入系统 测试结果:成功/失败,测试用例的设计原则,测试用例的设计原则 对应需求编写测试用例 测试用例要全面覆盖需求规格说明书中的软件功能点 便于发现有价值的缺陷,系统要求上传2M以下的文件,一般上载
6、1M多一点的文件绝不会有问题。这时“敏感”会让我们设计测试用例时,尽量去注意边界条件,上载1.9M的文件会不会出问题?上载正好2M的文件呢?上载2M多一点的文件呢?,测试用例的组织方式,测试用例的组织方式 系统模块 功能点 用例编号 用例说明 前置条件 输入 预期结果 测试结果 失败原因,教员讲解,小结2,软件测试按测试方法来分,分为哪两种?两种方法各有什么特点? 设计测试用例的两个原则是?,为什么要做缺陷管理?,看看缺陷会给我们的软件开发过程造成怎样的混乱? 每发现一个Bug,都要惊动整个项目组 例:测试人员发现了一个Bug,当作发现新大陆一样告诉给项目组长,项目组长找到开发组长,开发组长再
7、找程序. Bug没有指明修改人,大家都不闻不问 例:测试人员将几十个Bug邮件群发给开发组,开发组先是一片混乱,然后立刻平静下来。事不关己,高高挂起. Bug的沟通成本往往很高 例:测试人员发现小张Bug后立即发给程序员小王,小王每次都需要和小张进行大量的“沟通交流”来理解Bug。,缺陷管理可以帮助我们解决上述问题,将缺陷(Bug)按严重程度划分等级,按特定的流程来进行管理。,如何进行缺陷管理(1),1、缺陷等级划分 严重的缺陷:所导致的问题会导致系统罢工、工作不正常 例:windows的蓝屏、死机。 一般的缺陷:主要工作运作不完全,所产生的问题虽然严重,但是不影响下一步的测试。 例:软件异常
8、。 轻微的缺陷:功能运作正常,可是有改进的空间。 例:对“必填”的文本框未作校验。,如何进行缺陷管理(2),2、缺陷管理中的角色 开发负责人(项目组长) 负责制定缺陷管理计划和流程,将测试工程师发现的问题指派给指定开发工程师,协调缺陷管理流程中的问题。 测试工程师 将发现的问题提交到缺陷管理系统中,写明问题的描述、严重程度,问题重现方法;负责重新测试开发工程师修改过的缺陷。 开发工程师 确认并修改指定给自己的软件缺陷。,如何进行缺陷管理(3),3、缺陷管理流程,缺陷管理工具,专业缺陷管理工具Bugzilla Bugzilla是一款很专业的缺陷管理工具。它具有一般缺陷管理系统所必须的功能: 提供
9、一个开发和测试交互的平台,将测试和改错程序化。不需要测试人员就每一个问题和开发人员直接交流,也避免了发生错误被遗忘的问题 提供错误检索功能,供项目经理和测试经理掌握测试和修改情况,毕业设计项目中的缺陷管理,在毕业设计中,我们将使用常见问题列表管理缺陷,常见问题列表将放在VSS服务器上,由小组组长维护。 小组内人员发现问题后,在问题列表中提出问题,组内各成员经常查看该问题列表,遇见自己可以解答的问题,将解决方案写入表格。,教员讲解,小结3,软件缺陷按严重程度可以分为三个等级、分别是什么? 简单说说在你以前的项目(包括毕业设计项目)中,是如何进行缺陷管理的?,ASP.NET中常用来实现动态菜单的两
10、种方法,系统功能菜单的ASP.NET解决方案,用TreeView 实现动态菜单,用Accordion 实现动态菜单,教员讲解两种方式的区别和应用场景,使用TreeView控件动态生成菜单(1),我们以两层菜单为例来讲解动态菜单,MyOffice中SysFun 表数据信息,SysFun表字段信息,实现后的菜单效果,使用TreeView控件动态生成菜单(2),动态生成第一级菜单,展示所有的ParentNodeId为“0”的菜单,布局母版页MasterPage.master,使用TreeView控件动态生成菜单(3),protected void Page_Load(object sender, E
11、ventArgs e) if (!Page.IsPostBack) DisplayUserMenu(); protected void DisplayUserMenu() tvUserRightMenu.Nodes.Clear(); IList parentSysFun = SysFunManager.GetAllParentNodeInfo(); foreach (SysFun sfParent in parentSysFun) string nodeId = sfParent.NodeId.ToString(); string displayName = sfParent.DisplayN
12、ame; TreeNode fatherNode = this.CreatTreeNode(displayName, nodeId, “”, “Images/menuclose.gif”); tvUserRightMenu.Nodes.Add(fatherNode); ,生成第一级菜单后台关键代码,得到系统菜单表中所有的第一级菜单,得到第一层节点的ID,得到第一层节点的显示名,根据节点信息, 创建第一层节点,将节点添加到TreeView中,public static IList GetAllParentNodeInfo() return SysFunService.GetAllParentNo
13、deInfo(); ,对应的业务处理层关键方法,public static IList GetAllParentNodeInfo() string sql = select * from sysfun where ParentNodeId = 0; return GetSysFunBySql(sql); ,对应的数据访问层关键方法,查看生成第一级菜单关键后台代码,使用TreeView控件动态生成菜单(4),这时添加RoleManage.aspx运行,只能看到第一级菜单,如何生成父菜单对应的子菜单呢?,protected void Page_Load(object sender, EventAr
14、gs e) if (!Page.IsPostBack) 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; T
15、reeNode fatherNode = this.CreatTreeNode(displayName, nodeId, “”, “Images/menuclose.gif”); CreateChildTree(nodeId,fatherNode);tvUserRightMenu.Nodes.Add(fatherNode); ,在此处添加创建子菜单方法,使用TreeView控件动态生成菜单(5),private void CreateChildTree(string nodeId, TreeNode fatherNode) IList childSysFun = SysFunManager.G
16、etSysFunByParentNodeId(int.Parse(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,
17、nodeURL, Images/CloseTree.gif); AddTree(fatherNode, childNode); ,生成子菜单后台关键代码,获得父节点为nodeId的所有子节点,将路径转换为在客户端可用的URL,根据节点信息, 创建第二层节点,将子节点添加到父节点中,对应的业务处理层关键方法,public static IList GetSysFunByParentNodeId(int parentNodeId) string sql = select * from sysfun where ParentNodeId = + parentNodeId + ; return Get
18、SysFunBySql(sql); ,对应的数据访问层关键方法,public static IList GetSysFunByParentNodeId (int parentNodeId) return SysFunService.GetSysFunByParentNodeId(parentNodeId); ,查看生成子菜单关键后台代码,这时运行程序实现动态菜单效果,实现不同登录用户拥有不同的菜单项 (1),不同的登录用户显示不同的菜单,权限分配需要用到的四张表之间的关键,实现不同登录用户拥有不同的菜单项 (2),各表的关键数据信息,权限分配原则是:一个用户对应一个角色,一个角色对应多个权限,
19、以系统管理员和普通用户身份分别登录,系统管理员登录 后看到的菜单,普通用户登录 后看到的菜单,实现不同登录用户拥有不同的菜单项 (3),实现这个功能,只要在前面生成TreeView菜单的基础上修改即可,protected void Page_Load(object sender, EventArgs e) UserInfo user = (UserInfo)SessionCurrentUser; if (!Page.IsPostBack)DisplayUserMenu(user.UserId); protected void DisplayUserMenu(string userId) tvU
20、serRightMenu.Nodes.Clear(); IList parentSysFun = SysFunManager.GetAllParentNodeInfoByUserId(userId); foreach (SysFun sfParent in parentSysFun) string nodeId = sfParent.NodeId.ToString(); string displayName = sfParent.DisplayName; TreeNode fatherNode = this.CreatTreeNode(displayName, nodeId, “”, “Ima
21、ges/menuclose.gif”); CreateChildTree(nodeId, userId, fatherNode); tvUserRightMenu.Nodes.Add(fatherNode); ,获得登录用户信息,修改显示用户菜单方法,添加用户Id参数,根据用户Id获得 对应父节点信息,创建子节点,生成第一层节点修改后的后台代码,实现不同登录用户拥有不同的菜单项 (4),生成子节点修改后的后台代码,private void CreateChildTree(string nodeId, string userId,TreeNode fatherNode) IList childSysFun = SysFunManager. GetSysFunByParentNodeIdAndUserId(int.Parse(nodeId), userId); foreach (SysFun sfChild in childSysFun) string childNodeId = sfChil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高一学生期末评语课件
- 健康宣教日活动策划
- 高效员工职业发展管理
- 机械操作工面试技巧
- 临床急诊采血多功能治疗车优化改造护理创新
- 高一地理中图版(2019)第2周周末小测卷
- 医院医保新增医疗服务项目申报制度
- 2005年1月国开电大行管本科《行政法与行政诉讼法》期末纸质考试试题及答案
- 2026电子厂面试题目及答案
- 2圆锥体的投影
- “北京大学医学部2025年医学影像学试题及答案”
- 平安家医介绍课件
- 无人机应用技术专业开设论证报告
- 检测机构数据管理办法
- 山东省德州市2024-2025学年高二年级下册期末考试生物试卷(含答案)
- 2024-2025学年浙江省杭州二中高一(下)期末数学试卷(含解析)
- 鞍山市高校毕业生“三支一扶”计划招募考试试题(含答案)
- 人类辅助生殖管理制度
- 2025年上海市中考语文备考之文学常识汇编
- 锂电行业铜锌镍禁令标准
- 2025年二级风力发电运维值班员职业技能鉴定考试题库(浓缩500题)
评论
0/150
提交评论