JDG人脸识别课堂管理系统全栈开发流程报告-软件工程实践报告

JDG人脸识别课堂管理系统全栈开发流程报告-软件工程

⭐️ 本报告的代码部分和程序设计参考了 计算机18-1班张宇哲(学号181002406)同学 在Gitee仓库发布的AI-Attendance,本文档基于软件工程的具体流程,从软件工程的角度细化的张同学的项目,不关注代码,只关注一套相对完整的软工流程。

❤️ 高润 + 姜宇晨 + 丁纪翔 ❤️ | 时间有限,还有诸多问题,欢迎指正!

在这里插入图片描述

文章目录

  • JDG人脸识别课堂管理系统全栈开发流程报告-软件工程
  • 可行性分析
    • 项目背景
    • 项目组织
    • 现有系统的局限性
    • 要求与目标
      • 对所建议系统的说明
      • 改进之处
      • 影响
      • 局限性
    • 技术可行性分析
      • 技术基础
      • 人员基础
    • 投资及效益分析
      • 支出
      • 效益
    • 结论
  • 需求分析
    • 需求获取
      • 功能性需求
      • 非功能性需求
        • 性能需求
        • 环境需求
        • 可靠性需求
        • 安全性需求
        • 用户界面需求
    • 需求分析与建模
      • 开发进度需求分析
      • 功能性分析
        • 管理员
        • 老师
        • 学生
      • 结构化分析
        • 数据流图与数据字典
          • 系统的顶层数据流图与数据字典
          • 系统的中层数据流图与数据字典
          • 学生签到底层数据流图与数据字典
          • 信息上传底层数据流图与数据字典
        • 某门课程的学生状态转换图
  • 系统结构化设计
    • 结构化概要设计
      • 系统结构图
        • 具有边界的中层DFD图
        • 系统的结构图
        • 优化的系统结构图
        • 信息上传模块的结构图
    • 结构化详细设计
      • 签到通知程序的流程图
      • 签到通知程序的N-S图
      • 数据库设计
        • 数据库的所有表单
        • 各个表的结构
        • 数据库代码(可迁移)
  • 面向对象分析与设计
    • UML用例图
  • 原型设计与软件实现
    • 原型设计
      • 老师功能
        • 用户登录
        • 教师功能页
        • 课程创建
        • 课程添加学生
        • 发起签到
      • 学生功能
        • 学生上传照片
        • 学生查看待签到列表
        • 人脸识别签到
    • 软件实现
      • 建立项目
      • 验证码模块实现
  • 软件测试
    • 代码走查
      • 程序结构
      • 函数组织
      • 代码结构
      • 数据类型与变量
      • 循环
      • 输入输出
      • 注释
    • 闰年检测模块的单元测试
      • 闰年检测模块实现代码
      • 闰年检测模块的控制流程图
      • 基于基本路径覆盖法的闰年检测模块的测试用例设计
    • 日期合法性检验模块的集成测试
      • 等价类划分
      • 有效等价类测试用例设计
      • 无效等价类测试用例设计
  • 项目部署
  • 参考文献

可行性分析

随着在线教学的不断完善、信息技术的高速普及,人们对于使用信息技术进行在线课堂教学的要求越来越高。为了保证大学生课堂的出勤率及学生信息的管理,大部分学校选择采取签到的措施。而课堂签到一直以来是师生的痛点问题,手工方式签到费时费力。因此,师生迫切需要一个可行的、高效的签到系统。同时,传统的签到方式具有复杂、繁琐的特点,而使用人脸识别进行签到,是目前较好的解决方案。

项目背景

  • 开发软件名称:JDG人脸识别课堂管理系统

  • 项目开发者:

    • 姜宇晨(1925102018)
    • 高润(1925101007)
    • 丁纪翔(1925102007)
  • 用户:高校的学生和老师

  • 软件开发动机:

    大学里存在许多旷课现象,因为课堂学生人数越来越多,老师点名耗费的精力和时间也随之增加,老师为节约时间,只好采取抽样点名的方法,有时甚至不点名。在这种情况下,学生难免出现不自律、旷课的行为,影响了学生的学习成绩。现有的点名平台并不能避免同学之间代签到的现象,因此我们开发的JDG人脸识别课堂管理系统,只进行人脸识别签到,需要满足效率高、准确性强且无法作弊的需求。

项目组织

  • 高润:可行性分析、需求分析与设计
  • 姜宇晨:原型设计、软件开发
  • 丁纪翔:测试调试、维护管理

现有系统的局限性

  • 学习通

    • 功能冗余,且没有人脸识别签到功能,定位签到虽然可以一定程度上减少学生不来教室就签到的可能性,但是会发生同学进行代签的情况

    • 界面设计简陋,且功能不易寻找,这也是太多不必要的功能的存在带来的结果

  • QQ群接龙

    • 方便快捷但无法确保学生真实出勤

要求与目标

对所建议系统的说明

  • 用户添加
  • 用户登录
  • 学生可上传照片
  • 管理员审核照片
  • 老师创建课程,学生加入课程
  • 老师发起签到
  • 学生进行人脸识别签到
  • 学生查看课程列表及自己的出勤情况
  • 老师得到出勤情况的统计表

改进之处

  • 界面简洁美观
  • 没有冗余功能,方便快速进行签到
  • 人脸识别提高了签到的真实性,一定程度上避免了学生在签到上作弊的情况
  • 老师可以一键导出出勤情况表,方便老师进行存档记录

影响

  • 减少老师点名耗费的时间,老师可将更多的时间用在课堂内容上
  • 一定程度上减少学生旷课的情况,能提高学习成绩
  • 提高学生签到的真实性,一定程度上避免学生之间互相代签到的情况
  • 系统基于Chrome浏览器做适配,同时支持所有主流浏览器,不会对学生和老师的操作造成影响

局限性

  • 缺乏实际课堂的测试
  • 人脸识别的准确度还未进行调整优化,人脸识别模型可能出现过饱和和欠饱和的缺陷,导致同一个学生在不同时间签到的结果不同
  • 功能简单,但无法进行课堂互动,如回答问题的加分等

技术可行性分析

技术基础

  • OpenCV, Dlib
    人脸检测和识别的开源库

  • CNN, RNN, k-NN

    人脸特征提取和分类算法

  • MySQL
    数据存储的数据库

  • LayUI、Bootstrap

    系统的前端框架,易用性强,简单易学

  • Spring Boot
    系统的后端框架,使系统具有更好的可扩展性。使用到的依赖注入、面向对象方法都让整个程序更容易维护和扩展。

  • 墨刀

    项目原型设计

  • Apache Tomcat
    系统的应用服务器

  • Nginx

    开源、高性能、高可靠的 Web 和反向代理服务器,支持热部署

人员基础

项目组的三位成员都有一定的开发基础,对本项目的开发环境较为熟悉,具备研发该项目的能力。

投资及效益分析

支出

  • 开发人员的研究经费
  • 服务器租用费用
  • 保障本系统运行与信息安全设备的使用费用

效益

  • 开支缩减:本人脸识别课堂管理系统除了必要的功能外,尽可能减少不必要的功能,以减少能源损耗,降低错误的发生率,软件存在高度地可改进空间,提高了用户操作的效率;
  • 价值提升:通过本系统的研发工作,项目组三位成员收获良多,不仅实现了系统的开发任务,还完成了一整套软件的开发流程。

结论

综上所述,该项目是可行的,可以按照计划进行项目开发。

需求分析

我们和老师、学生进行了交流对话,在调研阶段,设计了调查问卷,获取了需求,进而对需求进行分析与综合,得到了系统的解决方案和目标系统的详细逻辑模型。

需求获取

功能性需求

  • 学生/老师/管理员的添加和登录

  • 学生:照片提交、加入课程、人脸识别签到

  • 老师:创建课程、发起签到、查看签到统计结果

  • 管理员:审核学生照片、添加学生/老师账号

非功能性需求

性能需求

  • 响应速度:要求每个页面在3秒内得到响应
  • 数据库约束的完整性:数据库应当满足第三范式,即通过外键约束严格保证数据的完整性。对于带有外键约束的修改,必须在满足完整性的前提下进行修改

环境需求

  • 签到平台需要连接网络
  • 尽量使用chrome浏览器、Safari浏览器、火狐浏览器等主流浏览器

可靠性需求

  • 人脸特征提取模型的精度不能设定过高,防止因妆容、光线等情况干扰识别的正确率
  • 上传照片自动压缩,确保传输的速度和稳定性

安全性需求

  • 服务器的安全性需要得到保证,避免学生和老师信息的泄露
  • 为了防止密码泄露,不能使用明文存储和传输密码,应采用MD5加密方法进行加密
  • 要求使用日志记录所有操作。日志按日存储,至少保存30天
  • 为防止介质故障,需要对于数据库进行备份。至少在两个地方进行备份,每个月更新一次备份

用户界面需求

  • 制作简洁、美观的用户界面,用户可以轻松找到功能,易用性很好

需求分析与建模

对所提需求进行分析与综合,具体描述了各个需求,制定了系统的解决方案,得到了目标系统的详细逻辑模型。

开发进度需求分析

根据可行性需求中提出的开发进度,我们制定了项目开发计划。
- 2021.11.05 项目提出
- 2021.11.06 完成可行性研究与撰写项目开发计划
- 2021.11.08 完成需求分析和结构化分析
- 2021.11.11 完成结构化设计与数据库结构设计
- 2021.11.13 软件编程实现了项目
- 2021.11.15 完成单元测试与集成测试
- 2021.11.17 编写用户手册与课程汇报

功能性分析

管理员

  • 教师和学生账号的分配,进行学生、教师密码的管理
  • 学生照片的审核和退回。如果学生的人脸照片不符合要求,那么有权退回并通知学生

老师

  • 课程的创建
  • 生成课程码,邀请学生加入
  • 进入某个课程后可以发起发起点名
  • 可以实时查看点名列表
  • 可以选择课程结束
  • 可以在课程结束后生成签到报告,查看学生总签到情况

学生

  • 上传人脸照片并交给系统管理员审核
  • 通过课程码加入课堂
  • 进入课程后进行人脸签到
  • 获取人脸签到的结果

结构化分析

结构化分析采用“自顶向下,逐层分解”的思想,由于系统规模较少,所以只将数据流图分为三层,分别是顶层、中层和底层。数据字典分为了五个部分,分别是数据流、数据项、数据存储、数据加工、实体数据。

数据流图与数据字典

系统的顶层数据流图与数据字典

在这里插入图片描述

(1)顶层图的数据字典

(1.1)数据流
学生信息={姓名+密码}
老师信息={姓名+密码}
课程信息(老师):课程名+任课教师编号
课程信息(学生):课程名+任课老师姓名
签到信息:课程号+签到结束时间
学生照片={学号+图片数据}
人脸识别签到信息:学号+课程码+签到id+图片数据
照片审核结果:审核状态+备注
课程码:7{数字}7
考勤结果:[考勤成功|考勤失败]
签到结果:[签到成功|签到失败]
照片审核结果:[审核通过|审核未通过]

(1.2)数据项
学生学号:10{数字}10
老师编号:6{数字}6
签到id:9{数字}9
管理员账号:3{数字}3
姓名:2{汉字}4
备注:1{字符}100
课程名:1{字符}30
签到结束时间:日期+时间
审核状态:[审核通过|审核未通过]
密码:8{[数字|字母|英文符号]}20
数据元素名称:图片数据
类型:二进制数据
长度:0~10MB
说明:图片实际储存在硬盘中,数据库中只保存图片的存储地址

(1.3)外部实体
学生={学号+姓名}
老师={编号+姓名}
管理员={管理员账号}

系统的中层数据流图与数据字典

在这里插入图片描述

(2)中层图的数据字典

(2.1)数据流
课程码:7{数字}7
学生照片:学号+图片数据
学生信息={学号+姓名+密码}
老师信息={编号+姓名+密码}
签到统计信息={学生姓名+[已签到|未签到]}
课程信息(学生查询):课程名+任课老师姓名
课程信息(创建课程):课程码+课程名+任课教师编号
课程信息(老师提供):课程名+任课教师编号
签到信息:课程号+签到结束时间
学生签到记录:学号+签到id
照片特征:学号+特征向量
签到结果:[签到成功|签到失败]
审核结果:[审核通过|审核未通过]

(2.2)数据项
学生学号:10{数字}10
老师编号:6{数字}6
管理员账号:3{数字}3
签到id:9{数字}9
姓名:2{汉字}4
备注:1{字符}100
课程名:1{字符}30
签到结束时间:日期+时间
审核状态:[审核通过|审核未通过]
密码:8{[数字|字母|英文符号]}20
特征向量:通过神经网络输出的人脸的128维特征向量
数据元素名称:图片数据
类型:二进制数据
长度:0~10MB
说明:图片实际储存在硬盘中,数据库中只保存图片的存储地址

(2.3)数据存储
学生名单={学号+姓名+密码}
老师名单={编号+姓名+密码}
课程信息={课程码+课程名+任课教师编号}
课程学生记录={课程码+学号}
签到信息库={签到id+课程号+签到结束时间}
学生签到记录={签到id+学号}
照片库={学号+特征向量}

(2.4)数据加工
信息上传:分配学生学号和老师编号
创建课程:分配课程码
签到发起:分配签到id
签到统计:获取课程学生记录和学生签到记录,筛选未签到同学的信息
照片审核:审核未成功的照片删除,反之,CNN处理得到128维照片特征

(2.5)外部实体
学生={学号+姓名}
老师={编号+姓名}
管理员={管理员账号}

学生签到底层数据流图与数据字典

在这里插入图片描述

(3)学生签到底层图的数据字典

(3.1)数据流
学生账号密码:学号+密码
上传照片:学号+学生照片
签到信息=签到id+学号
签到结果:[成功|失败]
签到通知={签到id+课程码+课程名称+任课老师}

(3.2)数据项
姓名:2{汉字}4
课程码:7{数字}7
签到id:9{数字}9
学生学号:10{数字}10
签到结束时间:日期+时间
密码:8{[数字|字母|英文符号]}20
特征向量:通过神经网络输出的人脸的128维特征向量
数据元素名称:学生照片
类型:二进制数据
长度:0~10MB
说明:图片实际储存在硬盘中,数据库中只保存图片的存储地址

(3.3)数据存储
学生名单={学号+姓名+密码}
签到信息库={签到id+课程码+签到结束时间}
照片库={学号+特征向量}
学生签到记录={签到id+学号}

(3.4)数据加工
登录系统:比对学生学号对应的密码是否和学生名单中保存的密码相同,则登录成功,否则登录失败
接收签到通知:寻找签到信息库中签到未结束的签到id,在学生签到记录中查找该学生是否已签到
生成照片特征码:利用CNN生成人脸128维特征向量
特征比对:利用分类算法为特征分类,比较二者对应学号是否相同,相同则识别成功,反之,失败

(3.5)外部实体
学生={学号+姓名}

信息上传底层数据流图与数据字典

在这里插入图片描述

(4)信息上传底层图的数据字典

(4.1)数据流
管理员:管理员账号+密码
管理员信息:{管理员账号+密码}
学生名单={姓名+密码}
老师名单={姓名+密码}
学生信息={学号+姓名+密码}
老师信息={编号+姓名+密码}

(4.2)数据项
姓名:2{汉字}4
管理员账号:3{数字}3
学生学号:10{数字}10
老师编号:6{数字}6
密码:8{[数字|字母|英文符号]}20

(4.3)数据存储
管理员名单={管理员账号+密码}
学生名单={学号+姓名+密码}
老师名单={编号+姓名+密码}

(4.4)数据加工
登录系统:比对管理员账号对应的密码是否和管理员名单中保存的密码相同,则登录成功,否则登录失败
名单检查:检查名单中的各数据项格式是否合法,输出非法名单
学号分配:分配学生的学号
老师编号分配:分配老师的编号

(4.5)外部实体
管理员={管理员账号}

某门课程的学生状态转换图

在这里插入图片描述

系统结构化设计

结构化概要设计

系统结构图

具有边界的中层DFD图

在这里插入图片描述

系统的结构图

根据具有边界的中层数据流图,我们得到了系统的结构图。

在这里插入图片描述

优化的系统结构图

根据信息上传和学生签到底层数据流图,我们优化了上述系统的结构图。

在这里插入图片描述

信息上传模块的结构图

根据信息上传和底层数据流图,我们绘制了信息上传模块的结构图。由底层数据流图可知,信息上传模块是以事务调度为核心的,是事务型的处理模块。

在这里插入图片描述

结构化详细设计

签到通知程序的流程图

签到通知程序的N-S图

我们将签到通知程序的流程图转换为了N-S图,使得模块间嵌套关系和层次关系得到更好地体现,思路清晰,结构良好,易于设计。

在这里插入图片描述

数据库设计

数据库的所有表单

在这里插入图片描述

各个表的结构

在这里插入图片描述

在这里插入图片描述

数据库代码(可迁移)

为了实现数据库的迁移,所以我们给出了数据库创建的代码。

-- phpMyAdmin SQL Dump
-- version phpStudy 2014
-- http://www.phpmyadmin.net
-- 主机: localhost
-- 服务器版本: 5.5.53
-- PHP 版本: 5.4.45SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";--
-- 数据库: `jdg`
---- ----------------------------------------------------------
-- 表的结构 `admin`
--CREATE TABLE IF NOT EXISTS `admin` (`account` char(3) NOT NULL COMMENT '管理员账号',`password` varchar(20) NOT NULL COMMENT '管理员密码',PRIMARY KEY (`account`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统管理员';-- ----------------------------------------------------------
-- 表的结构 `canyu`
--CREATE TABLE IF NOT EXISTS `canyu` (`daka_id` char(9) NOT NULL COMMENT '签到ID',`id` char(10) NOT NULL COMMENT '学号',PRIMARY KEY (`daka_id`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='参与表';-- ----------------------------------------------------------
-- 表的结构 `chos_course`
--CREATE TABLE IF NOT EXISTS `chos_course` (`course_id` char(6) NOT NULL COMMENT '课程码',`id` char(10) NOT NULL COMMENT '学号',PRIMARY KEY (`course_id`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='选修表';-- ----------------------------------------------------------
-- 表的结构 `course`
--CREATE TABLE IF NOT EXISTS `course` (`course_id` char(6) NOT NULL COMMENT '课程码',`course_name` varchar(30) NOT NULL COMMENT '课程名',`teacher_id` char(6) NOT NULL COMMENT '教师编号',PRIMARY KEY (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程表';-- ----------------------------------------------------------
-- 表的结构 `daka`
--CREATE TABLE IF NOT EXISTS `daka` (`daka_id` char(9) NOT NULL COMMENT '签到ID',`course_id` char(6) NOT NULL COMMENT '课程码',`end_time` datetime NOT NULL COMMENT '结束时间',PRIMARY KEY (`daka_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到表';-- ----------------------------------------------------------
-- 表的结构 `student`
--CREATE TABLE IF NOT EXISTS `student` (`id` char(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '学生学号,唯一',`name` varchar(4) NOT NULL COMMENT '学生姓名',`password` varchar(20) NOT NULL COMMENT '密码',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='学生表';-- ----------------------------------------------------------
-- 表的结构 `student_photo`
--CREATE TABLE IF NOT EXISTS `student_photo` (`id` char(10) NOT NULL COMMENT '学生学号,唯一',`tezhengxl` char(128) NOT NULL COMMENT '128维特征向量',PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='学生照片';-- ----------------------------------------------------------
-- 表的结构 `teacher`
--CREATE TABLE IF NOT EXISTS `teacher` (`teacher_id` char(6) NOT NULL COMMENT '教师编号',`name` varchar(4) NOT NULL COMMENT '教师姓名',`password` varchar(20) NOT NULL COMMENT '密码',PRIMARY KEY (`teacher_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='教师表';

面向对象分析与设计

UML用例图

在这里插入图片描述

原型设计与软件实现

原型设计

老师功能

用户登录

此功能需要编写对应的pojo、mappers、controller。

在这里插入图片描述

教师功能页

构造pojo类、Dao类、Service类并编写对应的Mapper。使用GetCourse.do查看自己的课程:设置按钮可以添加课程,使用addCourse.do实现。还要实现添加学生功能,通过将学生加入,形成了完整的课程列表。

在这里插入图片描述

课程创建

在这里插入图片描述

课程添加学生

教师可以添加学生到课程中。通过点击添加学生,并输入studentid,即可添加学生进去。

在这里插入图片描述

发起签到

通过发起签到,可以发起一次签到给学生,之后学生就可以进行签到了。教师发起签到以后,会添加一个check记录进入系统,学生进入系统即可查看到。

在这里插入图片描述

学生功能

学生上传照片

要求学生进入学生界面,可以上传自己的照片到后台数据库。如果想要打回,直接从后台删除,重新上传即可。

在这里插入图片描述

学生查看待签到列表

学生默认什么都看不到,学生需要输入签到ID,搜索之后才能看到这个签到记录。这个ID需要通过教师那里获取,一方面保证了同学一定在线。搜索之后方可查询到对应的签到记录,并且提供了进入签到的入口。点击该入口即可进行签到。

在这里插入图片描述

人脸识别签到

在这里插入图片描述

点击进入签到,即可完成调用摄像头,并提交签到。

软件实现

建立项目

采用Lay-UI的框架,进行导入。默认带了一些页面。

在这里插入图片描述

验证码模块实现

在RandomValidateCode.java中实现。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

软件测试

我们首先进行了代码的走查,由高润、丁纪翔负责对姜宇晨编写的代码进行评价,发现代码潜在的问题。接着着重测试了系统中的每个单独的模块,以确保它作为一个单元来说功能是正确的。我们在单元测试中,主要采用白盒测试,以闰年检测模块的单元测试为例。在所有单元测试完毕后,我们就开始进行集成测试,集成测试中主要使用黑盒测试方法,采用自底向上的增量式集成测试方法,避免了开发大量桩模块,减少开发成本,测试效率得到提升。

代码走查

由高润、丁纪翔负责对姜宇晨编写的代码进行评价,发现代码潜在的问题,并进行更正。

程序结构

  • 所有主要的数据构造描述清楚,合理
  • 结构设计能够满足机能变更

函数组织

  • 所有的变量声明每行只声明一个
  • 函数名少于64个字符

代码结构

  • 每行代码都少于80个字符
  • 所有的变量名都少于32个字符
  • 注释在代码中的位置不太好,不够清晰明了

数据类型与变量

  • 程序没有使用特别的、易误解的、发音相似的命名
  • 数据结构简单以便降低复杂性

循环

  • 循环体不为空
  • 代码不存在无穷次循环

输入输出

  • 显示的文本无拼写和语法错误

注释

  • 注释不清楚,部分主要的语句没有注释
  • 看到代码不一定能快速明确其意义

闰年检测模块的单元测试

在这里插入图片描述

老师发起签到时,要对签到设置的日期进行检验,检查输入的日期信息是否正确。而输入日期中的“日”在闰年2月时有29天,非闰年2月时有28天。因此,想要检测“日”是否正确,就必须要判断“月”是否是闰年2月。

闰年检测模块实现代码

int IsLeap(int year) {if (year % 4 == 0) {if (year % 100 == 0) {if (year % 4 == 0) leap = 1;elseleap = 0;}elseleap = 1;}elseleap = 0;return leap;
}

对闰年检测模块使用基本路径法进行白盒测试。首先通过IsLeap函数的代码,绘制了程序的流程图,进而绘制出如下控制流图G。

闰年检测模块的控制流程图

在这里插入图片描述

在闰年检测模块的控制流图G中,环路复杂度环路复杂度V(G)=P+1=3+1=4,P为图G中判定节点的数目。环路复杂度决定了线性无关的路径的条数,即测试用例最少需要覆盖的图G中的路径的条数。接着,我们设计了覆盖所有4条线性无关路径的测试用例,对InLeap模块进行测试。

基于基本路径覆盖法的闰年检测模块的测试用例设计

在这里插入图片描述

日期合法性检验模块的集成测试

由结构图可知,日期合法性检验模块集成了闰年检测模块。我们已经对闰年检测模块进行了单元测试,并无问题出现。

在这里插入图片描述

集成测试采用自底向上的增量式集成测试方法,避免了桩模块的开发。而且,本项目真正涉及复杂逻辑功能操作的模块多位于底层结构中,所以,采用“自底而上的增量式”能够从最有可能出错的模块开始测试,减少了回测成本,还提高了集成测试的效率,支持故障隔离。日期合法性检验模块由签到发起模块驱动,所以首先设计了该模块的驱动模块“D签到发起”。

对合法性检验模块的集成测试以黑盒测试形式进行,使用等价类划分法。将输入的年、月、日进行等价类划分,从每个等价类中任意挑选一个进行测试用例设计。

等价类划分

在这里插入图片描述

有效等价类测试用例设计

从上述等价类划分表的有效等价类中,选择能够覆盖年月、日的所有四种组合的测试用例。在实际开发中,往往大量的错误都发生在输入的边界值上,因此我们使用边界值分析法,对有效等价类的测试用例进行了补充,得到如下有效等价类测试用例设计表。

在这里插入图片描述

无效等价类测试用例设计

无效等价类测试用例设计中,也结合了边界值分析法的思想。

在这里插入图片描述

项目部署

完成系统的本地测试后,由经验丰富的项目组成员高润进行项目部署。目标是在Ubuntu系统上使用Apache Tomcat部署项目,配置Nginx反向代理。

在这里插入图片描述

参考文献

[1] 吕云翔. 软件工程:理论与实践[M]. 北京: 人民邮电出版社, 2018.5
[2] 刘竹林, 王素贞. 软件工程实践与项目管理[M]. 西安: 西安电子科技大学出版社, 2010.7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈贝叶斯统计

来源:京师统计团总支学生会编辑: ∑Gemini浅谈贝叶斯统计贝叶斯统计是英国学者托马斯贝叶斯在《论有关机遇问题的求解》中提出一种归纳推理的理论,后被一些统计学者发展为一种系统的统计推断方法,称为贝叶斯方法。本文旨在通过实际…

浅析虚拟语气 (Subjunctive mood)

浅析虚拟语气 (Subjunctive mood) 本文旨在通过一种时序逻辑上的联系,帮助读者更好的记忆和运用虚拟语气。文中提及的概念不一定正确,但一定程度上能辅助记忆,最终达到熟练运用的目的。(有些语法不用刨根问底,都是约定…

数论重大突破:120年后,希尔伯特的第12个数学难题借助计算机获得解决

来源:机器之心编辑:nhyilin德国数学家大卫 希尔伯特(David Hilbert)是二十世纪最伟大的数学家之一,被后人称为「数学世界的亚历山大」。他对数学领域做出了广泛和重大的贡献,研究领域涉及代数不变式、代数…

Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟…

美国人测评马斯克的星链服务: 现实太骨感,梦想已破灭

来源: 风闻社区、3D实验室最近看到外国人测评马斯克的starlink服务,满篇吐槽,无数缺陷,而且都是原理上无法克服的那种缺陷,跟大家分享一下。首先星链服务不是你想像的那种一卡在手,天下我有的服务。用它之前…

编译过程中的链接地址对最终编译镜像文件的影响

MDK和交叉编译工具编译时都会指定程序的下载的地址(其实就是告诉程序它将在那个地址上开始执行),这有什么意义吗? 其实这么设计有原因的,因为这里涉及到全局变量和全局函数指针的地址问题,加入当你在编译时…

三维空间中曲线绕任意轴旋转所得的旋转曲面求法

三维空间中曲线绕任意轴旋转所得的旋转曲面求法 对2023汤家凤考研高等数学讲义225页2.三维空间直线旋转曲面的解释和推广 ©️ sylvanding

彩图完美解释:麦克斯韦方程组

来源:微波射频网麦克斯韦方程组麦克斯韦方程组(英语:Maxwells equations)是英国物理学家麦克斯韦在19世纪建立的描述电磁场的基本方程组。它含有四个方程,不仅分别描述了电场和磁场的行为,描述了它们之间的…

基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道

作者:尹航 在前文基于阿里云服务网格流量泳道的全链路流量管理(一):严格模式流量泳道中,我们介绍了使用服务网格 ASM 的严格模式流量泳道进行全链路灰度管理的使用场景。该模式对于应用程序无任何要求,只需…

中国世界工厂地位为什么不会动摇

来源:工信头条文:赵一之在贸易保护主义和疫情的双重影响下,中国作为世界工厂是否会面临大规模制造业外迁,是时常引起关注的问题。复杂产品的供应链彼此环环相扣,缺失任何一环,都会影响到整个行业。疫情指出…

一文彻底解决YOLOv5训练找不到标签问题

YOLOv5 训练找不到标签, No labels found in /path/train.cache 问题的解决方法(亲测可用) ❤️ 网上绝大部分教程所述解决方法都不靠谱,也没有分析问题发生的原因,本文彻底解决了YOLOv5训练时找不到标签,出现 No labels found in /path/trai…

yolov5踩坑记录:标签错位(PIL读取图片方向异常)

PIL踩坑记录:读取图片方向异常(yolov5标签错位) 奇怪的现象 今天用 YOLOv5 做项目时,对数据集的标记出现了奇怪的现象,在下述测试用例中可明显看到,标记框偏离了物体,故发文阐述原因和解决方法…

理解与理论:人工智能基础问题的悲观与乐观

来源:筑土为坛梅剑华,男,1980年生,湖北秭归人,山西大学哲学社会学院教授,博士生导师,先后赴美国罗格斯大学、匹兹堡大学、奥地利萨尔茨堡大学等访学,研究方向是语言哲学与心灵哲学、…

设计模式系列 - 原型模式

所谓原型模式是指为创建重复对象提供一种新的可能。 介绍 当面对系统资源紧缺的情况下,如果我们在重新创建一个新的完全一样的对象从某种意义上来讲是资源的浪费,因为在新对象的创建过程中,是会有系统资源的消耗,而为了尽可能的节…

图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU)

图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU) 编程实现图像的二值化,分析不同的阈值对二值化图像的影响。 问题描述 传统的机器视觉通常包括两个步骤:预处理和物体检测…

全球最快AI超级计算机开动,每秒4百亿亿浮点运算!正拼接最大宇宙3D地图

来源:venturebeat宇宙是在不断膨胀的吗?是的!而令宇宙不断膨胀的「罪魁祸首」就是暗能量。作为是宇宙中最神秘的物质,它看不见摸不着,为了捕捉它,人类在地球上建立了许多相关实验,但都成效甚微。…

基于YOLOv5的中式快餐店菜品识别系统

基于YOLOv5的中式快餐店菜品识别系统[金鹰物联智慧食堂项目] 摘要 本文基于YOLOv5v6.1提出了一套适用于中式快餐店的菜品识别自助支付系统,综述了食品识别领域的发展现状,简要介绍了YOLOv5模型的历史背景、发展优势和网络结构。在数据集预处理过程中&am…

谋局科技创新:两院院士大会释放重要信号

来源:经济参考报作者:班娟娟、钟源从坚持把科技自立自强作为国家发展的战略支撑,到加快建设科技强国,实现高水平科技自立自强;从加强原创性、引领性科技攻关,坚决打赢关键核心技术攻坚战,到强化…

图像加减运算

图像的加减运算 原创文章:转载请注明出处 ©️ Sylvan Ding 图像相加 图像相加常常被用来进行图片降噪处理。令 g(x,y)g(x,y)g(x,y) 是无噪声理想图像 f(x,y)f(x,y)f(x,y) 被高斯加性噪声 η(x,y)\eta (x,y)η(x,y) 污染后的图像,即 g(x,y)f(x,y)η…

随机森林是我最喜欢的模型

来源:机器之心TensorFlow 决策森林 (TF-DF) 现已开源,该库集成了众多 SOTA 算法,不需要输入特征,可以处理数值和分类特征,为开发者节省了大量时间。在人工智能发展史上,各类算法可谓层出不穷。近十几年来&a…