示例:一个范本软件需求规格说明书
本软件需求规格说明书范例对应的软件测试计划请参照:
软件测试——测试计划
PDF文档及更多软件测试内容请参考:https://github.com/xyjigsaw/software-testing
一、 引言
1.1 定位与目标
计算机技术高度发达的今天,利用信息技术对大量复杂的信息进行有效的管理成为一种普遍而实用的手段。一方面,这极大的减少了簿记和人力的开销,另一方面,现代计算机强大的计算能力和网络的普遍部署,大大简化了大量信息的处理和流动。学生在线考试系统是评测学生能力的一个重要组成部分,他对教师的工作效率有很大的提高,它不但可以降低对纸质试卷的要求,同时也体现了节约型社会的要求。该系统涉及了学生在线程序能力测评考试,学习成绩插询,以及很多相关信息的综合处理。为了方便配合教师对学生成绩的进一步了解,开发学生在线考试系统是当务之急。学生在线考试系统把试题、电脑改卷、成绩查询的部分管理工作集成到一个统一的平台,各管理人员分工协作、相互配合,及时了解学生编程水平。同时,也可以方便教师针对学生个体不同情况进行分层次指导。
1.2 对象
本《软件需求规格说明书》的预期读者是:
- 程序教学平台开发经理
- 技术部经理
- 项目组所有人员
- 测试组人员
- SQA 人员
- 开发公司授权调阅本文档的其他人员
1.3 软件需求分析理论
软件需求分析是研究用户需求得到的东西,完全理解用户对软件需求的完整功能,确认用户软件功能需求, 建立可确认的、可验证的一个基本依据。软件需求分析是一个项目的开端, 也是项目实施最重要的关键点。 据有关的机构分析结果表明, 设计的软件产品存在不完整性、 不正确性等问题 80%以上是需求分析错误所导致的,而且由于需求分析错误造成根本性的功能问题尤为突出。因此,一个项目的成功软件需求分析是关键的一步。
1.4 软件需求分析目标
对实现软件的功能做全面的描述,帮助用户判断实现功能的正确性、一致性和完整性,促使用户在软件设计启动之前周密地、全面地思考软件需求。了解和描述软件实现所需的全部信息,为软件设计、确认和验证提供一个基准。
为软件管理人员进行软件成本计价和编制软件开发计划书提供依据。
需求分析的具体内容可以归纳为六个方面: 软件的功能需求, 软件与硬件或其他外部系统接口,软件的非功能性需求, 软件的反向需求, 软件设计和实现上的限制,阅读支持信息。
软件需求分析应尽量提供软件实现功能需求的全部信息, 使得软件设计人员和软件测试人员不再需要需求方的接触。 这就要求软件需求分析内容应正确、 完整、一致和可验证。此外,为保证软件设计质量,便于软件功能的休整和验证,软件需求表达无岔意性,具有可追踪性和可修改性。
二、 需求概述
2.1 项目背景
将要开发的软件名为《计算机程序能力在线测评系统》,本项目的提出者是安徽大学计算机科学与技术学院,而开发者是16级安徽大学软件工程班负责,主要用户是安徽大学本科生级研究生, 该软件独立于其他系统,自成一个完整的系统,应用方便。
2.2 需求概述
下面就对算机程序能力在线测评系统的设计进行需求分析。
首先,因为考试是面向特定的某些对象的,所以考试者进入系统应该进行身份验证。考试者进入考试系统后,应该能根据自己的需要选择考试能力水平,所以该 系统还应具有考试难度选择(分为*、甲级、乙级)的功能。为了在线考试做到规范,对于每个应试者来说,试卷的试题和题量都应是相同的,但试题并不相同。在线考试基于网络环境,试卷应该从服务器的数据库随机抽取试题后动态生成的。另外,系统还应该对考试时间进行控制,时间到了会要求考试者交卷。考试者选择答案提交后,应该由计算机自动判卷,得到成绩后显示出来。考试完毕后,可以返回登录界面或查询成绩与排名。
2.3 系统结构
图2.1 系统结构
三、 系统功能需求
3.1 功能总览
表 3.1 功能总览
3.2 业务流程图
该系统是基于网络技术的一种在线测评系统,管理员通过网络对题库进行维护,添加试题、修改试题、删除试题等操作;考生通过系统完成考试、分数查询等操作;系统自动组卷并且完成试卷的批阅、分数的统计等操作。
图3.1 业务流程图
3.3 数据流分析
学生登陆系统后从试题库中选出一套试题,然后开始答题,答题完后提交给系统,由系统完成对试卷的批阅统计出成绩,学生可以登陆查询。 管理员登陆系统后对系统进行维护更新。
图3.2 数据流图
3.4 数据字典
数据项条目,用于标识实体。数据字典是数据库的重要部分,它存放有数据库所用的有关信息,对用户来说是一组只读的表。它是关于数据信息的集合。它是数据流图中所有要素严格定义的场所,这些要素包括数据流、数据流的组成、文件、加工小说明及其他应进入字典的一切数据,其中每个要素对应数据字典中的一项条目。其中,对引用的一些关键字进行说明 : PK(主键 ),FK(外键 ), Check(检 查的范围约束),Not null(不为空值)。
表3.2 考生信息表
编号 |
字段名称 |
字段含义 |
字段类型 |
字段长度 |
是否主键 |
默认值 |
---|---|---|---|---|---|---|
1 |
uuid |
考生考号 |
Varchar |
10 |
√ |
|
2 |
name |
考生姓名 |
Varchar |
14 |
||
3 |
gender |
性别 |
Bool |
1 |
||
4 |
password |
密码 |
Varchar |
20 |
123456 |
|
5 |
邮箱 |
Varchar |
40 |
|||
6 |
phone |
电话 |
Varchar |
12 |
表3.3 试题难度系数表
编号 |
字段名称 |
字段含义 |
字段类型 |
字段长度 |
是否主键 |
默认值 |
---|---|---|---|---|---|---|
1 |
idl |
难度编号 |
Varchar |
3 |
√ |
|
2 |
dsl |
难度描述 |
Varchar |
30 |
NULL |
表3.4 题目信息表
编号 |
字段名称 |
字段含义 |
字段类型 |
字段长度 |
是否主键 |
默认值 |
---|---|---|---|---|---|---|
1 |
idq |
题目号 |
Varchar |
10 |
√ |
|
2 |
idl |
难度编号 |
Varchar |
3 |
||
3 |
nameq |
题目名称 |
Varchar |
10 |
||
4 |
des_q |
题目表述 |
Varchar |
100 |
NULL |
|
5 |
index_q |
索引编号 |
Varchar |
20 |
||
6 |
pass_n |
通过人数 |
Longint |
16 |
0 |
|
7 |
att_n |
提交次数 |
Longint |
16 |
0 |
表3.5 试卷信息表
编号 |
字段名称 |
字段含义 |
字段类型 |
字段长度 |
是否主键 |
默认值 |
---|---|---|---|---|---|---|
1 |
idp |
试卷号 |
Varchar |
10 |
√ |
|
2 |
score_t |
总分 |
Int |
8 |
100 |
|
3 |
nameq |
题目名称 |
Varchar |
10 |
||
4 |
des_p |
试卷表述 |
Varchar |
100 |
NULL |
|
5 |
start_p |
开始时间 |
Date |
16 |
Date() |
|
6 |
end_p |
结束时间 |
Date |
16 |
Date() |
表3.6 管理员信息表
编号 |
字段名称 |
字段含义 |
字段类型 |
字段长度 |
是否主键 |
默认值 |
---|---|---|---|---|---|---|
1 |
uuid_a |
工号 |
Varchar |
10 |
√ |
|
2 |
name_a |
姓名 |
Varchar |
8 |
||
3 |
password_p |
密码 |
Varchar |
20 |
||
4 |
mail_p |
邮件 |
Varchar |
40 |
||
5 |
phone_p |
联系电话 |
Varchar |
12 |
表3.7 考场信息表
编号 |
字段名称 |
字段含义 |
字段类型 |
字段长度 |
是否主键 |
默认值 |
---|---|---|---|---|---|---|
1 |
uuid_s |
考场号 |
Varchar |
10 |
√ |
|
2 |
name_s |
考场名称 |
Varchar |
20 |
||
3 |
des_s |
考场描述 |
Varchar |
100 |
3.5 E-R图
图3.3 试题E-R图
图3.4 考生E-R图
图3.5 成绩单E-R图
四、 软硬件及外部系统接口需求
4.1 用户界面
用户界面是程序中用户能看见并与之交互作用的部分,设计一个好的用户界面是非常重要的,本设计将为用户提供美观,大方,直观,操作简单的用户界面。
4.2 硬件需求
移动终端硬件配置应遵循如下原则:具有高的可靠性,可用性和安全性。【描述系统中软件和硬件每一接口的特征。这种描述可能包括支持的硬件类型、软硬件之间的交流的数据和控制信息的性质以及使用的通信协议。】
4.3 运行环境
- Web 浏览器:0+、Chrome、Opera、Safari、Firefox及任何支持HTML5标准的浏览器。
- 标准分辨率:1024*768、1920*1080、2K
五、 可靠性与可用性需求
5.1 性能需求
- 处理能力
由于是在线测评系统,其处理能力主要考虑系统能承载的最大并发用户数,按照实际情况的规划,系统至少能承载的最大并发用户数要求达到全校学生总人数*φ,φ为0至1的常数,随服务器容量而定。
- 响应时间
为了能够快捷地提供在线测评服务,系统应该能够快速地响应在线测评请求。用户最终得到结果的响应时间除了与系统响应速度有关外,还与网络状况有关。因此对Web服务器端需要较高的要求。
表 5.1 相应时间分析
5.2 安全性需求
传输的数据都采用高强度的加密算法加密 (DES),使得数据即使泄漏、被截获后,也无法识别相关的数据内容,确保数据安全。对于客户端与服务器交互的数据,使用安全套接子层 (SSL,SSL 加密传输主要是针对 WEB的数据传输,基于重要信息的传输安全考虑而设计的) 进行信息交换,并在客户移动终端和服务器之间重要的信息的交换。
六、 参考文献
[1] 卢正鼎, 张照, 周裕强,等. 面向工程设计应用的数据库管理系统EDDBMS[J]. 计算机研究与发展, 1997(s1):328-332.
[2] 蔡长安, 王琪. 基于B/S模式的学生信息管理系统设计与实现[J]. 计算机工程与设计, 2006, 27(14):2585-2587.
[3] 李文新, 郭炜. 北京大学程序在线评测系统及其应用[J]. 吉林大学学报:信息科学版, 2005(S2):170-177.
相关文章
- 软件测试——白盒测试
- 软件测试——黑盒测试
- 软件测试——测试计划
- Web链接测试——Omegaxyz.com测试报告
- 奥威尔:老大哥在看着你-软件公司十诫
- 解释器模式C++实现
- 迭代器模式C++实现
- 组合模式与职责链模式编程实现
- 享元模式C++实现(flyweight)
- 装饰模式C++实现(decorator)
推荐阅读
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
示例:一个范本软件需求规格说明书