软件验收报告资料Word文档格式.docx
《软件验收报告资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件验收报告资料Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
学生管理系统软件实际运行的生产环境为验收环境。
⏹硬件平台
计算机
⏹软件平台
Window操作系统:
windowxp、window7、window8
验收标准
2.4.1项目验收原则
1、审查提供验收的各类文档的正确性、完整性和统一性,审查文档是否齐全、合理;
2、审查项目功能是否达到了合同规定的要求;
3、审查项目有关服务指标是否达到了合同的要求;
4、审查项目投资以及实施进度的情况;
对项目的技术水平做出评价,并得出项目的验收结论。
2.4.2验收流程
本项目的验收采取项目验收流程的方式进行验收。
具体流程如下图所示。
2.4.3系统功能标准
严重程度
描述
A
学生信息管理系统由于出现问题不能继续运转(崩溃)
学生信息管理系统的数据出现错误。
B
某项业务无法进行。
学生信息管理系统产生数据错误。
C
学生信息管理系统中某一操作不能继续运转或错误,但不影响业务的进行。
(有替代办法)
学生信息管理系统打印的凭证或流水不符合需求所提出的标准。
D
其他学生信息管理系统在某种状态下产生的错误,不影响正常功能。
如果各模块验收测试结果如下表所述则视为验收合格,否则将进行修改,以进行再次验收评审。
关系
发生个数
=
<=
10
验收范围
用户以及监理方进行验收确认。
验收确认包括以下两方面确认内容:
1.参照《验收标准》确认合同所涉及的功能以及项目组的实施工作是否完成;
2.抽取客户端进行测试,确定系统能够稳定运行。
验收人员
单位
人员
职责/任务
联系方式/Email
备注
哈师大学生
张紫娜
组长
第三章项目验收内容
实施工作验收
工作阶段
工作内容
工作是否完成
需求调研
通过与用户的沟通,根据项目实际情况编写提交《需求说明书》、《概要设计》、《详细设计》。
□完成□未完成
系统开发
根据《概要设计》内容,完成《详细设计》并根据《详细设计》开发系统和测试。
每周提交项目进度及情况报告、测试报告。
系统安装
安装产品,对系统进行部署。
用户培训
编写用户使用手册,对用户进行使用培训。
系统运行
跟踪监控系统运行。
对使用中发现的问题进行记录和评估,在不影响系统结构的情况下对发现的问题进行修正。
软件平台验收单
验收人:
验收时间:
序号
软件类型
软件名称
验收结果
1
系统软件
学生管理系统
完成
功能模块验收单
功能模块
验收内容
合同要求
登录验证
能否正常登陆
必须实现
合格
2
密码模块
能否修改密码
3
学生模块
正常实现添加修改功能
可以有差错
4
课程模块
5
成绩模块
6
退出模块
正常退出系统
项目文档验收单
文档名称
用途
软件需求分析
分析软件的需求,为后续的工作
软件测试用例
对以实现的软件进行测试
运行结果验收
系统运行内容
是否符合要求
a.软件登录
符合
b.软件测试
C.软件查询
d.软件修改
e.软件退出
第四章验收结论
经过严格的测试本软件达到要求标准,符合验收要求。
第五章交付物清单
文档提交清单
源码提交清单
源程序清单(仅给出核心代码部分)
typedefcharbool;
#defineFILEPATH"
c:
\\"
#defineINFOPATH"
#defineMAXSPACECOUNT10ub_id=i+1;
fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);
}
ub_id=i+1;
fcntl(seek,WRITE,mystuinfo,STUINFOSIZE);
myfileinfo->
stucount++;
countmax++;
//删除学生的核心函数
voiddelstu(longdelstuseek)
{
if(!
delstuseek)seterr("
delstu:
parameterzero"
);
myfileinfo)
{
myfileinfo=NEW(fileinfo);
fcntl(0,READ,myfileinfo,FILEINFOSIZE);
}
mystuinfo)mystuinfo=NEW(stuinfo);
memset(mystuinfo,0,STUINFOSIZE);
fcntl(delstuseek,READ,mystuinfo,STUINFOSIZE);
mystuinfo->
flag)seterr("
parameterinvalid"
mystuinfo->
flag=0;
fcntl(delstuseek,WRITE,mystuinfo,STUINFOSIZE);
stucount--;
spacecount++;
intcount=myfileinfo->
spacecount;
if(count<
MAXSPACECOUNT)
seek[count]=delstuseek;
elsemyfileinfo->
spacecount--;
//编辑一个已存在学生的核心函数
voideditstu(longeditstuseek,pmystutempstu)
tempstu)seterr("
editstu:
parameternull"
fcntl(editstuseek,READ,mystuinfo,STUINFOSIZE);
flag)
seterr("
editstuinvalid"
plinklinkhead=search(tempstu->
stu_schid,SEARCH_SCHID);
if(linkhead&
&
linkhead->
data-editstuseek)
databaseschidcollision"
memcpy(&
stu_privacy,tempstu,MYSTUSIZE);
fcntl(editstuseek,WRITE,mystuinfo,STUINFOSIZE);
//添加新的学科的核心函数
voidaddsub(psubinfonewsub)
newsub)seterr("
addsub:
if(newsub->
sub_term<
1||newsub->
sub_term>
8)
sub_rate<
||newsub->
sub_rate>
6)
if(search(newsub->
sub_name,SEARCH_SUB))
databasesubcollision"
intsubcount=myfileinfo->
subcount;
if(subcount>
=MAXSUBCOUNT)
subjectfull"
psubinfopsubtemp=myfileinfo->
sub;
newsub->
flag=1;
inti;
for(i=0;
i<
MAXSUBCOUNT;
i++,psubtemp++)
psubtemp->
newsub->
sub_id=psubtemp->
sub_id;
memcpy(psubtemp,newsub,SUBINFOSIZE);
break;
if(i>
subjectallinuse"
subcount++;
//删除一个已经存在学科的核心函数
voiddelsub(intsubid)
if(subid<
1||subid>
MAXSUBCOUNT)
delsub:
subidinvalid"
if(myfileinfo->
subcount<
=0)
subcountzero"
psubinfosubtemp=myfileinfo->
sub+subid-1;
subtemp->
flaginvalid"
subtemp->
myfileinfo->
subcount--;
longseek=DATASEEK;
psubmarkmarktemp=NULL;
stucount;
i++,seek+=DATATRANS)
fcntl(seek,READ,mystuinfo,STUINFOSIZE);
if(!
flag){i--;
continue;
marktemp=mystuinfo->
stu_mark+subid-1;
if(marktemp->
{
memset(marktemp,0,SUBMARKSIZE);
mystuinfo->
stu_markcount--;
}
elsecontinue;
fcntl(seek,WRITE,mystuinfo,STUINFOSIZE);
makeavemark(seek);
//编辑一个已经存在的学科的核心函数
voideditsub(psubinfonewsub)
newsub)
editsub:
newsubnull"
newsub->
newsubinvalid"
intsubid=newsub->
intterm=newsub->
sub_term;
if(term<
1||term>
subterminvalid"
doublerate=newsub->
sub_rate;
if(rate<
||rate>
subrateinvalid"
intsize=strlen(newsub->
sub_name);
if(size>
=20)newsub->
sub_name[19]=0;
plinklinkhead=search(newsub->
sub_name,SEARCH_SUB);
next)
searchinvalid"
data-subid)
memcpy(subtemp,newsub,SUBINFOSIZE);
inti;
longseek=DATASEEK;
count;
//编辑某学生某科目的核心函数
voideditmark(psubmarknewmark,longstuseek)
newmark||!
stuseek)
addmark:
intsubid=newmark->
-1||subid>
MAXSUBCOUNT||!
subid)
editmark:
doublemark=newmark->
sub_mark;
if(mark<
0||mark>
100)
submarkinvalid"
fcntl(stuseek,READ,mystuinfo,STUINFOSIZE);
studentinvalid"
psubmarkmarktemp=mystuinfo->
intflag1=marktemp->
flag,flag2=newmark->
flag;
flag1&
!
flag2)
markflaginvalid"
memcpy(marktemp,newmark,SUBMARKSIZE);
flag2)mystuinfo->
stu_markcount++;
if(flag1&
fcntl(stuseek,WRITE,mystuinfo,STUINFOSIZE);
makeavemark(stuseek);
//计算某学生的加权分数的核心函数
voidmakeavemark(longstuseek)
stuseek)seterr("
makeavemark:
subcount||!
stu_markcount)
mystuinfo->
stu_avemark=0;
fcntl(mystuinfo->
stu_seek,WRITE,mystuinfo,STUINFOSIZE);
return;
stu_mark;
doublemarksum=,rate,ratesum=;
i++,subtemp++,marktemp++)
marktemp->
flag)continue;
rate=subtemp->
ratesum+=rate;
marksum+=marktemp->
sub_mark*rate;
if(ratesum<
||marksum<
elsemystuinfo->
stu_avemark=marksum/ratesum;
fcntl(mystuinfo->
/*本函数承担着数据库的所有搜索任务
包括由组名搜索组的ID,由学生的姓名和学号搜索学生,
并返回该生在文件中的偏移地址*/
plinksearch(char*pdata,intsearchtype)
{
plinklinkhead=NULL,linktemp=NULL;
if(searchtype==SEARCH_SUB)
psubinfosubtemp=myfileinfo->
for(i=0;
i++,subtemp++)
if(subtemp->
flag&
strcmp(subtemp->
sub_name,pdata))
linkhead=NEW(link);
memset(linkhead,0,LINKSIZE);
linkhead->
data=subtemp->
next=NULL;
returnlinkhead;
if(strlen(pdata)>