外卖订餐管理系统的质量保证与测试

学生姓名:                             

学    号:                                    

班    级:                                  

学年学期: 2021-2022学年第二学期

课程名称:   软件质量保证与测试  

目录

1   引言............................................................ 1

1.1  目的....................................................... 1

1.2  背景....................................................... 1

2   系统分析概述.................................................... 2

2.1  系统需求分析............................................... 2

2.2  系统功能分析............................................... 3

2.3  系统结构图................................................. 5

2.4  详细设计流程图............................................. 5

3   系统详细设计.................................................... 7

3.1  测试计划................................................... 8

3.2  测试用例设计.............................................. 10

4   测试执行....................................................... 17

5  缺陷报告....................................................... 20

  1. 引言

1.1 目的

本系统在上线前将在多种测试方法下,通过大量模拟数据来进行测试以保证软件质量的可靠性。

基于不同的立场,系统的软件测试目的不同,从用户角度出发,希望通过软件测试暴露软件中隐藏的错误和缺陷,避免在上线使用后对消费者和商家带来经济上的损失和生活上的不便。从软件开发者角度触发,则希望通过测试能够表面该产品不存在系统上的错误和缺陷,验证该产品已确实实现了用户的要求,确立用户对软件质量的信心,提高用户信誉。

1.2 背景

随着电子商务的普及,越来越多的人接受了电子商务这种便捷、快速的交易形式,网上订餐系统的顺势而出很快受到了大家的欢迎。互联网的应用已普及千家万户这为网络订餐提供了良好的发展空间。同时,网上订餐服务的直观、有效、便捷等优点是传统的电话订餐业务无法比拟的。调查数据显示,白领更乐于选择网上订餐服务,网上订餐将是白领一族捕获餐店信息、进行订餐的发展趋势,同时对于当下的年轻大学生,学生食堂的饭菜已经满足不了它们的胃口,通过网上订餐购买校外的美食也成为了一大趋势。网络订餐随着互联网的成长会逐渐被人们所喜爱,正如几年前手机移动的短信一样,为企业带来的几百个亿的业务收入。在互联网世界里面,谁早一步在应用上创新,谁就掌握了未来的方向。

  1. 系统分析概述

2.1 系统需求分析

本系统主要的针对的客户有2类:消费者和商家。

对于消费者,消费者可以通过本系统进行线上订餐、订餐配送情况查询、个人订单查询、个人信息管理比如电话和配送地址等。

对于商家,商家可以通过本系统进行线上售餐、查询历史订单、统计营业额等。

本系统为用户提供了外卖订餐平台,主要针对的消费者为寻求便利的年轻人和工作忙碌的打工人,主要针对的商家是各类餐饮企业或个体户。

2.2 系统功能分析

    商家功能分析:

    登录功能

    输入:账号、密码

    输出:账号密码验证结果

    性能:安全可靠性高,会对登录流程进行多重判断。

    添加员工

    输入:员工基本信息(姓名、电话、身份证号等)

    输出:新增结果

    性能:安全性高,对于插入数据会进行判断,防止有空缺字段。

    编辑员工信息

    输入:员工新信息

    输出:修改员工信息结果

    性能:安全性高,对于新数据会进行判断,防止有空缺字段和违规字段。

    禁用员工

    输入:员工id

    输出:修改结果

    性能:可靠性好,会对操作人和被操作人进行权限判断。

    添加菜品种类

    输入:新增种类信息(名称、评级)

    输出:新增结果

    性能:安全可靠性好,防止重复种类插入

    删除菜品种类

    输入:种类id

    输出:删除结果

    性能:安全可靠性好、会对删除菜品进行判断、防止删除种类里包含菜品。

    添加菜品

    输入:菜品基本信息(名称、口味、种类、价格等)

    输出:添加结果

    性能:安全可靠性好,防止新增重复菜品和检查菜品信息是否完整。

    编辑菜品

    输入:菜品新信息

    输出:编辑结果

    性能:安全可靠性好,检查菜品信息是否完整。

    禁售菜品

    输入:菜品Id

    输出:修改结果

    性能:安全可靠性好,会对操作人进行权限判断。

    删除菜品

    输入:菜品Id

    输出:删除结果

    性能:安全可靠性好、会对操作人进行权限判断,同时检查是否有套餐包含该菜品。

    新增套餐

    输入:套餐信息(名称、价格、包含菜品等)

    输出:新增结果

    性能:安全可靠性好,会检查套餐信息是否完整并且符合规范。

    编辑套餐

    输入:套餐新信息

    输出:修改结果

    性能:安全可靠性好,会检查修改信息是否符合规范。

    禁售套餐

    输入:套餐id

    输出:修改套餐状态结果

    性能:安全可靠性好,会对操作人进行权限判断。

    删除套餐

    输入:套餐id

    输出:删除结果

    性能:安全可靠性好,会对操作人进行权限判断。

    订单明细

    输入:订单id

    输出:订单信息

    性能:响应速度快,响应时间不会超过2秒。

    用户功能分析:

    登录注册功能

    输入:用户名、密码

    输出:验证结果

    性能:稳定性好、吞吐量大,能够支撑上千用户同时登录。

    添加购物车功能

    输入:菜品信息、套餐信息

    输出:添加结果

    性能:安全稳定性好,能准确记录用于选择菜品或套餐。

    下单支付功能

    输入:菜品信息、套餐信息、用户信息、金额时间等

    输出:下单支付结果

    性能:安全稳定性高,对于多表同时操作能保证一致性,同时能支持上万用户同时下单的并发量。

    个人信息管理功能

    输入:修改信息

    输出:修改结果

    性能:安全可靠性好,会检查修改信息是否符合规范。

    配送地址管理功能

    输入:修改地址信息

    输出:修改结果

    性能:安全可靠性好,会检查修改信息是否符合规范。

    个人订单查询

    输入:用户id

    输出:用户历史订单

    性能:响应速度快,不会超过2秒。

2.3 系统结构图

2.4 程序设计流程图

商家登录程序流程图

商家新增员工程序流程图

商家删除种类程序流程图

商家新增菜品程序流程图

订单查询程序流程图

用户登录程序流程图

用户订餐程序流程图

3. 系统测试设计

3.1 测试计划

测试目标:

(1)为测试各项活动制定一个现实可行的、综合的计划,包括每项测试活动的对象、范围、方法、进度和预期结果。

(2)为项目实施建立一个组织模型,并定义测试项目中每个角色的责任和工作内容。

(3)开发有效的测试模型,能正确地验证正在开发的软件系统。

(4)确定测试所需要的时间和资源,以保证其可获得性、有效性。

(5)确立每个测试阶段测试完成以及测试成功的标准、要实现的目标。

(6)识别出测试活动中各种风险,并消除可能存在的风险,降低由不可能消除的风险所带来的损失。

测试内容:测试软件系统的功能是否完整有效、性能是否达标。对于商家,要测试5个功能模块,1:员工管理模块,要测试管理员新增员工、编辑员工和删除员工功能是否有效;2:种类管理模块,要测试店员新增种类和删除种类功能是否有效,对于删除种类,要严格注意该种类下是否有菜品,如果有菜品,应该无法删除;3:菜品管理模块,要测试店员新增菜品、编辑菜品、禁售菜品和删除菜品功能是否有效;4:套餐管理模块,要测试店员新增套餐、编辑套餐、禁售套餐和删除套餐功能是否有效;5:订单明细模块,要测试商家查看订单,根据订单号、开始时间和结束时间查询订单功能是否准确。对于用户,要测试用户登录功能、修改个人信息、编辑收货地址和下单功能是否有效。其中下单功能要严格周密测试。

测试计划:

1、单元测试:对各个功能单元进行测试,采用和白盒测试方法,测试用例要涉及语句覆盖、判定覆盖、条件覆盖和判定-条件覆盖,由编码人员自行完成。

2、集成测试:对多个功能单元集成进行测试,采用黑盒测试方法,测试用例设计采用等价划分法和边界值法。

      3、系统测试:对整个软件系统进行功能、性能和安全测试。

3.2 测试用例设计

用户注册登录功能单元测试用例设计

采用白盒测试

根据用户登录流程图绘制控制流图

  1. 语句覆盖

输入数据(用户名、密码)

期望输出

实际输出

测试路径描述

user、123456

密码格式错误

登录成功

1 2 3 4 5 6 7

Null、123456

用户名不能为空

用户名不能为空

1 2 3 8 7

user、null

密码不能为空

密码不能为空

1 2 3 4 9 7

user、111

用户名或密码错误

用户名或密码错误

1 2 3 4 5 10 7

  1. 判定覆盖

输入数据(用户名、密码)

期望输出

实际输出

测试路径描述

user、123456Aa

登陆成功

登录成功

1 2 3 4 5 6 7

  1. 条件覆盖

输入数据(用户名、密码)

期望输出

实际输出

测试路径描述

user、123456Aa

登陆成功

登录成功

1 2 3 4 5 6 7

Null、123456

用户名不能为空

用户名不能为空

1 2 3 8 7

null、null

用户名不能为空

用户名不能为空

1 2 3 8 7

user、null

密码不能为空

密码不能为空

1 2 3 4 9 7

user、111

用户名或密码错误

用户名或密码错误

1 2 3 4 5 10 7

  1. 判定-条件覆盖

输入数据(用户名、密码)

期望输出

实际输出

测试路径描述

user、123456Aa

登录成功

登录成功

1 2 3 4 5 6 7

Null、123456

用户名不能为空

用户名不能为空

1 2 3 8 7

null、null

用户名不能为空

用户名不能为空

1 2 3 8 7

user、null

密码不能为空

密码不能为空

1 2 3 4 9 7

user、111

用户名或密码错误

用户名或密码错误

1 2 3 4 5 10 7

商家推出菜品功能测试用例设计

采用白盒测试

根据商家新增菜品流程图绘制控制流图

  1. 语句覆盖

输入数据(菜品名称、菜品价格、菜品种类、菜品口味选择)

期望输出

实际输出

测试路径描述

红烧肉、99.00、徽菜、null

添加成功

添加成功

1 2 3 4 5 6 7 8 9

null、99.00、徽菜、null

菜品名称不能为空

菜品名称不能为空

1 2 3 4 5 10 9

红烧肉、null、徽菜、null

菜品价格不能为空

菜品价格不能为空

1 2 3 4 5 6 11 9

锅包肉、99.00、徽菜、null

菜品名称重复

菜品名称重复

1 2 3 4 5 6 7 12

9

  1. 判定覆盖

输入数据(菜品名称、菜品价格、菜品种类、菜品口味选择)

期望输出

实际输出

测试路径描述

红烧肉、99.00、徽菜、null

添加成功

添加成功

1 2 3 4 5 6 7 8 9

  1. 条件覆盖

输入数据(菜品名称、菜品价格、菜品种类、菜品口味选择)

期望输出

实际输出

测试路径描述

红烧肉、99.00、徽菜、null

添加成功

添加成功

1 2 3 4 5 6 7 8 9

红烧肉、99.00、徽菜、(微辣、中辣、重辣)

添加成功

添加成功

1 2 3 4 5 6 7 8 9

红烧肉、99.00、null、null

添加成功

添加成功

1 2 3 4 5 6 7 8 9

null、99.00、徽菜、null

菜品名称不能为空

菜品名称不能为空

1 2 3 4 5 10 9

null、null、null、null

菜品名称不能为空

菜品名称不能为空

1 2 3 4 5 10 9

null、99.00、null、(微辣、中辣、重辣)

菜品名称不能为空

菜品名称不能为空

1 2 3 4 5 10 9

红烧肉、null、徽菜、null

菜品价格不能为空

菜品价格不能为空

1 2 3 4 5 6 11 9

红烧肉、null、null、null

菜品价格不能为空

菜品价格不能为空

1 2 3 4 5 6 11 9

红烧肉、null、徽菜、(微辣、中辣、重辣)

菜品价格不能为空

菜品价格不能为空

1 2 3 4 5 6 11 9

锅包肉、99.00、徽菜、null

菜品名称重复

菜品名称重复

1 2 3 4 5 6 7 12

9

锅包肉、99.00、徽菜、(微辣、中辣、重辣)

菜品名称重复

菜品名称重复

1 2 3 4 5 6 7 12

9

  1. 判定-条件覆盖

输入数据(菜品名称、菜品价格、菜品种类、菜品口味选择)

期望输出

实际输出

测试路径描述

红烧肉、99.00、徽菜、null

添加成功

添加成功

1 2 3 4 5 6 7 8 9

null、99.00、徽菜、null

菜品名称不能为空

菜品名称不能为空

1 2 3 4 5 10 9

红烧肉、null、徽菜、null

菜品价格不能为空

菜品价格不能为空

1 2 3 4 5 6 11 9

锅包肉、99.00、徽菜、null

菜品名称重复

菜品名称重复

1 2 3 4 5 6 7 12

9

用户下单功能集成测试用例设计

采用黑盒测试

  1. 等价类划分法

划分有效等价类和无效等价类

输入条件

有效等价类

无效等价类

下单信息是否完整(用户名、用户手机号、地址、菜品、备注)

user != null(1)

phone != null (2)

address != null(3)

dish != null (4)

mark != null(5)

user = null(6)

phone = null(7)

address = null(8)

dish = null (9)

mark = null(10)

  1. 设计有效等价类的测试用例

用例输入

期望输出

实际输出

覆盖等价类

user、13845678956、江汉区新城花园4栋301、单人套餐*1、微辣

下单成功

下单成功

1、2、3、4、5

  1. 设计无效等价类的测试用例

用例输入

期望输出

实际输出

覆盖等价类

user、13845678956、null、单人套餐*1、微辣

收货地址不能为空

收货地址不能为空

8

user、13845678956、null、null、null

收货地址不能为空

收货地址不能为空

8、9、10

user、13845678956、null、null、微辣

收货地址不能为空

收货地址不能为空

8、9

user、13845678956、null、单人套餐*1、null

收货地址不能为空

收货地址不能为空

8、10

user、13845678956、江汉区新城花园4栋301、null、微辣

菜品不能为空

菜品不能为空

9

user、13845678956、江汉区新城花园4栋301、null、null

菜品不能为空

菜品不能为空

9、10

  1. 边界值分析法

用例输入

期望输出

实际输出

覆盖等价类

user、13845678956、江汉区新城花园4栋301、单人套餐*1、null

下单成功

下单成功

1、2、3、4、5

user、13845678956、null、单人套餐*1、微辣

收货地址不能为空

收货地址不能为空

8

user、13845678956、null、null、null

收货地址不能为空

收货地址不能为空

8、9、10

user、13845678956、null、null、微辣

收货地址不能为空

收货地址不能为空

8、9

user、13845678956、null、单人套餐*1、null

收货地址不能为空

收货地址不能为空

8、10

user、13845678956、江汉区新城花园4栋301、null、微辣

菜品不能为空

菜品不能为空

9

user、13845678956、江汉区新城花园4栋301、null、null

菜品不能为空

菜品不能为空

9、10

4. 测试执行

  • 用户登录流程测试用例执行
  1. 测试结果
  1. 语句覆盖测试用例测试结果

  1. 判定覆盖测试用例测试结果

  1. 条件覆盖测试用例测试结果

  1. 判定-条件覆盖测试用例测试结果

  1. 测试代码

private String username;

    private String password;

    private String expected;

    private static UserService userService = new UserService();

    @Parameterized.Parameters

    public static Collection<?> prepareData(){

        Object [][] object = {

                {"user","123456","密码格式错误"},

                {"null","123456","用户名不能为空"},

                {"user","null","密码不能为空"},

                {"user","111","用户名或密码错误"}

        };

        return Arrays.asList(object);

    }

    public ceshi(String username, String password, String expected){

        this.username = username;

        this.password = password;

        this.expected = expected;

    }

    @Test

    public void testDate(){

        userService.login(username,password);

        Assert.assertEquals(expected, username.getReuslt());

}

  • 商家推出菜品测试用例执行
  1. 测试结果
  1. 语句覆盖测试用例测试结果

  1. 判定覆盖测试用例测试结果

  1. 条件覆盖测试用例测试结果

  1. 判定-条件覆盖测试用例测试结果

  1. 测试代码

private String dishName;

    private double price;

    private String category;

    private List<String> flavors;

    private String expected;

    private static DishService dishService = new DishService();

    @Parameterized.Parameters

    public static Collection<?> prepareData(){

        Object [][] object = {

                {"红烧肉",99.00,"徽菜",null,"添加成功"},

                {"红烧肉",99.00,"徽菜",{"微辣","中辣","重辣"},"添加成功"},

                {"红烧肉",99.00,null,null,"添加成功"},

                {null,99.00,"徽菜",null,"菜品名称不能为空"},

                {null,null,null,null,"菜品名称不能为空"},

                {null,99.00,null,{"微辣","中辣","重辣"},"菜品名称不能为空"},

                {"红烧肉",null,"徽菜",null,"菜品价格不能为空"},

                {"红烧肉",null,null,null,"菜品价格不能为空"},

                {"红烧肉",null,"徽菜",{"微辣","中辣","重辣"},"菜品价格不能为空"},

                {"锅包肉",99.00,"徽菜",null,"菜名名称重复"},

                {"锅包肉",99.00,"徽菜",{"微辣","中辣","重辣"},"菜品名称重复"}

        };

        return Arrays.asList(object);

    }

    public ceshi(String dishName, double price, String category, List<String> flavors, String expected){

        this.dishName = dishName;

        this.price = price;

        this.category = category;

        this.flavors = flavors;

        this.expected = expected;

    }

    @Test

    public void testDate(){

        dishService.addDish(dishName,price,category,flavors);

        Assert.assertEquals(expected, dishService.getReuslt());

}

  • 用户下单流程测试用例执行
  1. 测试结果
  1. 有效等价类测试结果

  1. 无效等价类测试结果

  1. 边界值分析法测试用例测试结果

  1. 测试代码

private String username;

    private String userphone;

    private String address;

    private String dishes;

    private String mark;

    private String expected;

    private static OrderService orderService = new OrderService();

    @Parameterized.Parameters

    public static Collection<?> prepareData(){

        Object [][] object = {

                {"user","13845678956","江汉区新城花园4栋301","单人套餐*1",null,"下单成功"},

                {"user","13845678956",null,"单人套餐*1","微辣","地址不能为空"},

                {"user","13845678956",null,null,null,"地址不能为空"},

                {"user","13845678956",null,null,"微辣","地址不能为空"},

                {"user","13845678956",null,"单人套餐*1",null,"地址不能为空"},

                {"user","13845678956","江汉区新城花园4栋301",null,"微辣","菜品不能为空"},

                {"user","13845678956","江汉区新城花园4栋301",null,null,"菜品不能为空"}

        };

        return Arrays.asList(object);

    }

    public ceshi(String username, String userphone, String address,String dishes, String mark, String expected){

        this.username = username;

        this.userphone = userphone;

        this.address = address;

        this.dishes = dishes;

        this.mark = mark;

        this.expected = expected;

    }

    @Test

    public void testDate(){

      orderService.makeOrder(username,userphone,address,dishes,mark);

        Assert.assertEquals(expected, orderService.getReuslt());

    }

5. 缺陷报告

模块名称

用户登录页面

版本号

V1.1

测试人

缺陷类型

功能错误

严重级别

B

可重复性

缺陷状态

New

测试平台

Win10

浏览器

Chrome

简述

系统规定密码必须大于8为数,且包含字符

操作步骤

1.进入外卖系统用户前台登录页面

2.输入用户名密码

3.点击同意协议按钮

4.点击登录

5.登录成功

实际结果

登录成功

预期结果

密码格式错误

注释

建议修改代码,在收到密码后先进性格式校验,再从数据库查询用户是否存在。

模块名称

用户下单页面

版本号

V1.1

测试人

缺陷类型

功能错误

严重级别

A

可重复性

缺陷状态

New

测试平台

Win10

浏览器

Chrome

简述

从实际生活上来说,用户下单并不是必须填写备注,而本系统不填写备注就无法下单。

操作步骤

1.进入外卖系统用户前台登录页面

2.输入用户名密码

3.点击同意协议按钮

4.点击登录

5.选择菜品添加至购物车

6.点击去下单

7.选择收货地址

8.点击下单

实际结果

显示服务端错误

预期结果

下单成功

注释

建议修改后端判定信息是否完整部分的代码,同时检查数据库表设计,备注项是否设置为非空,如果是非空,建议修改。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐