软件验收报告资料Word下载.docx
《软件验收报告资料Word下载.docx》由会员分享,可在线阅读,更多相关《软件验收报告资料Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
2.4验收标准
2.4.1项目验收原则
1、审查提供验收的各类文档的正确性、完整性和统一性,审查文档是否齐全、合理;
2、审查项目功能是否达到了合同规定的要求;
3、审查项目有关服务指标是否达到了合同的要求;
4、审查项目投资以及实施进度的情况;
对项目的技术水平做出评价,并得出项目的验收结论。
2.4.2验收流程
本项目的验收采取项目验收流程的方式进行验收。
具体流程如下图所示。
2.4.3系统功能标准
严重程度
描述
A
学生信息管理系统由于出现问题不能继续运转(崩溃)
学生信息管理系统的数据出现错误。
B
某项业务无法进行。
学生信息管理系统产生数据错误。
C
学生信息管理系统中某一操作不能继续运转或错误,但不影响业务的进行。
(有替代办法)
学生信息管理系统打印的凭证或流水不符合需求所提出的标准。
D
其他学生信息管理系统在某种状态下产生的错误,不影响正常功能。
如果各模块验收测试结果如下表所述则视为验收合格,否则将进行修改,以进行再次验收评审。
关系
发生个数
=
<=
10
2.5验收围
用户以及监理方进行验收确认。
验收确认包括以下两方面确认容:
1.参照《验收标准》确认合同所涉及的功能以及项目组的实施工作是否完成;
2.抽取客户端进行测试,确定系统能够稳定运行。
2.6验收人员
单位
人员
职责/任务
联系方式/Email
备注
哈师大学生
紫娜
组长
第三章项目验收容
3.1实施工作验收
工作阶段
工作容
工作是否完成
需求调研
通过与用户的沟通,根据项目实际情况编写提交《需求说明书》、《概要设计》、《详细设计》。
□完成□未完成
系统开发
根据《概要设计》容,完成《详细设计》并根据《详细设计》开发系统和测试。
每周提交项目进度及情况报告、测试报告。
系统安装
安装产品,对系统进行部署。
用户培训
编写用户使用手册,对用户进行使用培训。
系统运行
跟踪监控系统运行。
对使用中发现的问题进行记录和评估,在不影响系统结构的情况下对发现的问题进行修正。
3.2软件平台验收单
验收人:
验收时间:
序号
软件类型
软件名称
验收结果
1
系统软件
学生管理系统
完成
3.3功能模块验收单
功能模块
验收容
合同要求
登录验证
能否正常登陆
必须实现
合格
2
密码模块
能否修改密码
3
学生模块
正常实现添加修改功能
可以有差错
4
课程模块
5
成绩模块
6
退出模块
正常退出系统
3.4项目文档验收单
文档名称
用途
软件需求分析
分析软件的需求,为后续的工作
软件测试用例
对以实现的软件进行测试
3.5运行结果验收
系统运行容
是否符合要求
a.软件登录
符合
b.软件测试
C.软件查询
d.软件修改
e.软件退出
第四章验收结论
经过严格的测试本软件达到要求标准,符合验收要求。
第五章交付物清单
文档提交清单
源码提交清单
源程序清单(仅给出核心代码部分)
typedefcharbool;
#defineFILEPATH"
c:
\\stuinfo.dat"
#defineINFOPATH"
\\test.txt"
#defineMAXSPACECOUNT10//系统所记录的最大冗余块数
#defineMAXSUBCOUNT20//系统所允许存储的最多科目数
#defineRANDSTUCOUNT100//系统将自动产生的学生个数
#defineRANDSUBCOUNT20//系统将自动产生的科目个数
#defineBUFSIZE20//字符缓冲区大小
#defineSHOWMAX6//屏幕最大显示的科目数
#defineTRUE1
#defineFALSE0
#defineREAD0x81
#defineWRITE0x82
#defineSEARCH_SCHID0x83//通过学生的学号进行搜索
#defineSEARCH_NAME0x85//通过学生的进行搜索
#defineSEARCH_SUB0x86//通过学科的名称进行搜索
#defineSHOW_PRIV0x87//显示单个学生的个人信息
#defineSHOW_PERMARK0x89//显示单个学生的个人成绩
#defineSHOW_ALLMARK0x90//显示所有学生的某科成绩
#defineSORT_DECLINE0x92//以降序排列
#defineSORT_INCLINE0x93//以升序排列
#defineALPHAWORD0x94//以字母构成的字符串(用于随机产生学生的
#defineNUMBERWORD0x95//以数字构成的字符串(用于随机产生学号
#defineADDSUB0x96//科目编辑模式为添加
#defineEDITSUB0x97//科目编辑模式为修改
#defineBIGNUMBER0x0ffffff//系统延迟采用的循环中的大数
#defineLONGSIZEsizeof(long)
#defineINTSIZEsizeof(int)
#defineLINKSIZEsizeof(link)
#defineSTUINFOSIZEsizeof(stuinfo)
#defineSUBINFOSIZEsizeof(subinfo)
#defineTCHINFOSIZEsizeof(tchinfo)
#defineSUBMARKSIZEsizeof(submark)
#defineFILEINFOSIZEsizeof(fileinfo)
#defineMYSTUSIZEsizeof(mystu)
#defineDATASEEK(FILEINFOSIZE+LONGSIZE)
#defineDATATRANS(STUINFOSIZE+LONGSIZE)
#defineSETERR(S){printf(S);
returnFALSE;
}//显示出错信息并返回
#defineNEW(I)(I*)malloc(sizeof(I))//开辟新的存空间
typedefstruct_submarkinfo
{
boolflag;
//flag=0表该块无效
intsub_id;
//科目的id号
doublesub_mark;
//该科目的成绩
}submark,*psubmark;
//科目成绩信息
typedefstruct_stu
charstu_name[20];
//学生
charstu_schid[20];
//学生学号
intstu_sex;
//学生性别0=man1=woman
charstu_major[20];
//学生专业和班级(电子0606)
}mystu,*pmystu;
//学生个人信息
typedefstruct_stuinfo
//flag=0表该生作废
intstu_sysid;
//学生id号
//系统将为每个学生产生唯一的ID号
mystustu_privacy;
//学生个人信息
longstu_seek;
//在文件中的地址
intstu_markcount;
//已有的成绩数
doublestu_avemark;
//学生加权平均分
submarkstu_mark[MAXSUBCOUNT];
//学生成绩数组
}stuinfo,*pstuinfo;
//学生信息(包括个人信息和系统信息)
typedefstruct_subinfo
//flag=0表该块无效
intsub_term;
//科目开课的学期
doublesub_rate;
//科目所占的学分
charsub_name[20];
//科目名称
}subinfo,*psubinfo;
//科目信息
typedefstruct_fileinfo
intstucount;
//已注册的学生人数
intcountmax;
//最大学生数,用于产生id
intspacecount;
//文件冗余块数
longseek[MAXSPACECOUNT];
//文件冗余块在文件中的地址
intsubcount;
//已注册的科目的个数
subinfosub[MAXSUBCOUNT];
//科目信息数组
}fileinfo,*pfileinfo;
//学生信息文件头
typedefstruct_link
doublemark;
longstuseek;
struct_link*next;
}link,*plink;
//该结构体用于产生链表
//链表用于对成绩排序之用
核心功能函数:
//本函数设置系统错误,并终止程序
voidseterr(char*err)
memset((void*)myerr,0,errnosize);
intn=strlen(err);
if(n>
errnosize-1)
n=errnosize;
memcpy(myerr,err,n);
printf("
\n\n%s\n\n"
err);
exit(0);
}
/*本函数用于清理所有全局变量
包括文件指针和全局结构体指针*/
voidfreeparam()
if(fp)fclose(fp);
fp=NULL;
if(myfileinfo)free(myfileinfo);
myfileinfo=NULL;
if(mystuinfo)free(mystuinfo);
mystuinfo=NULL;
//本函数用于对文件进行操作,将常用的文件操作集于一身
voidftl(longseek,inttlmode,void*pdata,intsize)
if(!
fp)fp=fopen(FILEPATH,"
rb+"
);
fp)initfile();
rewind(fp);
fseek(fp,seek,SEEK_SET);
pdata)return;
size)seterr("
ftl:
parameternotmatched"
switch(tlmode)
{
caseREAD:
fread(pdata,size,1,fp);
break;
caseWRITE:
fwrite(pdata,size,1,fp);
default:
seterr("
tlmodeinvalid"
}
//初始化数据库
voidinitfile()
wb+"
myfileinfo)
myfileinfo=NEW(fileinfo);
memset(myfileinfo,0,FILEINFOSIZE);
myfileinfo->
seek[0]=DATASEEK;
inti=0;
for(;
i<
MAXSUBCOUNT;
i++)
sub[i].sub_id=i+1;
ftl(0,WRITE,myfileinfo,FILEINFOSIZE);
//添加学生的核心函数
voidaddstu(pmystunewstuinfo)
newstuinfo)
seterr("
addstu:
newstuinfonull"
if(search(newstuinfo->
stu_schid,SEARCH_SCHID))
seterr("
databaseschidcollision"
myfileinfo=NEW(fileinfo);
ftl(0,READ,myfileinfo,FILEINFOSIZE);
intspacecount=myfileinfo->
spacecount;
if(spacecount>
=MAXSPACECOUNT)
parameterinvalid"
longseek=myfileinfo->
seek[spacecount];
if(spacecount)
myfileinfo->
seek[spacecount]=0;
spacecount--;
elsemyfileinfo->
seek[spacecount]+=DATATRANS;
mystuinfo)mystuinfo=NEW(stuinfo);
memset(mystuinfo,0,STUINFOSIZE);
memcpy(&
(mystuinfo->
stu_privacy),newstuinfo,MYSTUSIZE);
mystuinfo->
stu_seek=seek;
flag=1;
inti;
stu_sysid=myfileinfo->
countmax+1;
for(i=0;
mystuinfo->
stu_mark[i].sub_id=i+1;
ftl(seek,WRITE,mystuinfo,STUINFOSIZE);
stucount++;
countmax++;
//删除学生的核心函数
voiddelstu(longdelstuseek)
delstuseek)seterr("
delstu:
parameterzero"
ftl(delstuseek,READ,mystuinfo,STUINFOSIZE);
mystuinfo->
flag)seterr("
flag=0;
ftl(delstuseek,WRITE,mystuinfo,STUINFOSIZE);
stucount--;
spacecount++;
intcount=myfileinfo->
if(count<
MAXSPACECOUNT)
seek[count]=delstuseek;
//编辑一个已存在学生的核心函数
voideditstu(longeditstuseek,pmystutempstu)
tempstu)seterr("
editstu:
parameternull"
ftl(editstuseek,READ,mystuinfo,STUINFOSIZE);
flag)
editstuinvalid"
plinklinkhead=search(tempstu->
stu_schid,SEARCH_SCHID);
if(linkhead&
&
linkhead->
data-editstuseek)
stu_privacy,tempstu,MYSTUSIZE);
ftl(editstuseek,WRITE,mystuinfo,STUINFOSIZE);
//添加新的学科的核心函数
voidaddsub(psubinfonewsub)
newsub)seterr("
addsub:
if(newsub->
sub_term<
1||newsub->
sub_term>
8)
sub_rate<
0.5||newsub->
sub_rate>
6)
if(search(newsub->
sub_name,SEARCH_SUB))
databasesubcollision"
intsubcount=myfileinfo->
subcount;
if(subcount>
=MAXSUBCOUNT)
subjectfull"
psubinfopsubtemp=myfileinfo->
sub;
newsub->
i++,psubtemp++)
psubtemp->
newsub->
sub_id=psubtemp->
sub_id;
memcpy(psubtemp,newsub,SUBINFOSIZE);
break;
if(i>
subjectallinuse"
subcount++;
ft