<<软件工程概论>>
实验报告
姓名:
学号:
班级: 网工1001
指导教师:
实验一 “图书馆系统”结构化需求分析
上机任务:
用结构化需求分析方法完成下列任务:
(1)对“图书馆系统”问题进行描述;
(2)对该系统进行功能分析;
(3)建立数据流图;
(4)建立实体 - 关系图;
(5)建立数据字典;
一、图书馆系统的问题描述:
① 一个图书馆藏有图书和期刊杂志两大类书籍,每种图书/杂志可以有多册。
② 图书馆可以维护(注册、更新和删除)图书资料。
③ 图书馆管理员负责与借书者打交道。
④ 借书者可以预约目前借不到的书或杂志。
⑤ 所有人员都可以浏览图书馆的图书信息和各种告示。
⑥ 系统能在流行的技术环境下运行,有一个良好的图形交互界面。
⑦ 系统应具有良好的可扩展性。
二、图书馆系统功能分析:
① 浏览功能:所有人员都可以浏览图书馆的图书信息。
② 借还功能:借书者可以借/续借、还、预约图书。
③ 图书管理功能:图书管理人员可以做录入、更新和销毁等图书信息维护工作。
④ 借书者管理:系统管理人员可进行注册、更改、注销借书者信息等维护工作。
三、建立数据流图:
1、图书馆系统的基本逻辑模型:
2、借/还功能数据流图:
(1)借/还功能(第一步)DFD:
(2)借/还功能(修改)DFD:
3、维护功能数据流图:
(1)维护功能(第一步)DFD:
(2)维护功能(修改) DFD:
4、借书功能细化的数据流图:
四、建立实体 - 关系图:
图书馆系统实体-关系图:
五、建立数据字典:
建立数据字典:
六、实验总结:
通过这次实验对Rational Rose和Visio两款画图软件有些认识,这两个软件在以前从来没有见过也没有听过,第一次打开的时候完全不知道怎么操作。
不知道怎么做出指导书里面的画图,不知道一些功能打开。但是自己慢慢的百度慢慢的摸索之后这个软件的基本功能还是会使用了,在试验的同时对于需求分析的整个过程也有了更多的了解,同时在一些问题的解决上依靠课本,对于课本也更加的熟悉了。
实验二 “图书馆系统”OOA需求分析
上机要求:
(1)首先对该系统进行非形式化描述、并进行功能需求分析;
(2)采用面向对象分析(OOA)的方法,用可视建模语言UML,给出该系统的用例视图、类图、借/还书功能的时序图和协作图、以及借/还书业务层的活动图;
一、对该系统进行非形式化描述、并进行功能需求分析:
(1)问题描述:
①一个图书馆藏有图书和期刊杂志两大类书籍,每种图书、杂志可以有多册。
② 图书馆可以维护(注册、更新和删除)图书资料。
③ 图书管理员在系统的支持下,负责与借书者打交道。
④ 借书者可以预约目前借不到的书或杂志。
⑤ 所有人员都可以浏览图书馆的图书信息和各种告示。
⑥ 系统能够在所有流行的技术环境下运行,有一个良好的图形交互界面。
⑦ 系统应该具有良好的可扩展性。
(2)功能需求分析:
① 浏览功能:所有人员都可以浏览图书馆的图书信息。
② 借还功能:借书者可以借/续借、还、预约图书。
③ 图书管理功能:图书管理人员可以做录入、更新和销毁等图书信息维护工作。
④ 借书者管理:系统管理人员可进行注册、更改、注销借书者信息等维护工作。
二、采用面向对象分析(OOA)的方法,用可视建模语言UML:
(1)图书馆系统的用例视图
(2)图书馆系统的CRC卡
(3)图书馆系统的类图
(4)图书馆系统的时序图
(5)图书馆系统的协作图
(6)图书馆系统的活动图
三、实验总结:
这次的实验让我对面向对象分析(OOA)的方法有了深入的认识,对OOA方法的过程以及步骤也比较清楚。实验过程中,加深了我对书本中知识点的复习,让我获益良多。
同时,这次的实验使我对Rational Rose和Visio这两款画图软件有了更深入的认识。
实验五 电梯控制系统OOD设计
一、电梯控制系统的OOD:
(1)确定类的行为(方法):
◆电梯系统有7个类模型,即按钮、电梯、电梯按钮、电梯门、电梯控制器、楼层按钮、请求。
◆电梯系统的功能模型必须包含设计的各种行为描述,反映行为的数据如何流动,而不反映行为的次序。一个行为可以分配给一个对象,也可以分配给向这个对象发送消息的客户。分配行为的方法:一是基于信息隐蔽原则,二是使用责任驱动的设计。
◆把行为(方法)分配给不同的类,可得到电梯控制系统的类列表。
A)、电梯系统的功能模型:
B)、电梯系统的类列表 :
(2)根据对象的客户设计产品:
◆面向对象产品的结构通常是由一个简单的主程序来启动一个产品,然后所有的工作由各个对象来接管。
◆必须找出不是其他对象的客户的那些对象进行初始化,这由main方法完成。
◆使用电梯系统类模型和类列表,画出对象的客户图。
◆电梯控制器对象向其他5个对象发送信息。启动时,main方法必须先调用电梯控制器对象。显然,电梯控制器类需要一个方法,以便main方法调用。于是电梯控制器对象增加一个电梯控制器循环方法。
A)、电梯系统的客户-对象关系图:
(3)对象的详细设计:
◆使用任何合适的技术,例如,逐步求精设计方法,对main方法和各个对象进行详细设计。
二、实验总结:
通过这次实验,让我对电梯控制系统OOD设计有了很好的了解,在书本知识的基础之上,也有了更好的体会。
20##-2012(2)《软件工程导论》实验报告
学院:计算机学院
班级:软件工程114
姓名: XXX
学号:XXX
目录
实验1:项目计划、分析和设计
实验2;编码
实验3:代码复查、编译
实验4:项目测试总结
软件工程导论 实验一:项目计划、分析和设计
[ 实验日期 ] 2012 年 4 月 20 日
[ 实验目的 ]
初步了解结构化分析、设计方法的原理、步骤以及各阶段的文档,练习撰写简要的需求文档、设计文档。
[ 实验内容 ]
贪吃蛇程序:贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物则表示食物被蛇吃掉,这时蛇的身体长一节,同时计1分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体,游戏结束。根据编写贪吃蛇的游戏规则,我们利用c语言来进行编辑具体步骤,从而使游戏能够运行,根据编写贪吃蛇程序,掌握软件工程思想及要领,进一步巩固编程思想和掌握画图函数底层,依据项目可行性研究的结果,进行需求分析和设计,编写简要的需求规格说明书,绘制程序流程图。
[ 实验原理和步骤 ]
当前的建模方法主要有传统的结构化分析、设计方法(SA/D)和面向对象分析、设计方法(OOA/D)两种。
分析阶段:
结构化分析(SA)是一种建模技术 ,它通过一定方法帮助开发人员定义系统需要什么功能,系统需要存储和使用哪些数据,以及为完成这些功能,系统需要什么样的输入和输出以及如何把这些功能结合在一起来完成任务。
设计阶段:
分总体设计和详细设计两阶段。总体设计阶段的任务主要是确定系统由哪些模块组成,以及这些模块之间的相互关系;详细设计阶段的任务主要是设计每个模块的处理过程。常用的结构化设计(SD)方法有面向数据流分析(DFA)的设计方法和面向数据的设计方法。DFA设计技术实施的通用步骤:(1)复查并精化DFD;(2)确定DFD类型;(3)把DFD映射到系统模块结构,设计出模块结构的上层;(4)基于DFD逐步分解高层模块,设计出下层模块〈初步结构〉;(5)根据模块独立性原理,精化模块结构,得到更为合理的软件结构;(6)模块接口描述;(7)修改和补充数据词典;(8)制定测试计划。
详细设计阶段的任务主要是确定每个模块的处理过程,包括(1)确定每个模块的算法。(2)确定每一个模块的数据组织。(3)为每个模块设计一组测试用例。(4)编写详细设计说明书。详细设计阶段采用的方法是结构化程序设计(SP),与SA,SD方法衔接。目标是给出可以直接用以编码的程序逻辑结构,强调清晰第一。
这个程序的关键点是表示蛇的图形以及蛇的移动。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块。为了便于理解,定义了两个结构体:食物和蛇。
[ 需求规格说明书 ]
主要功能陈述:这是一款适合各年龄阶层小游戏,它可以使人们休息时的一种放松方式也可以是孩子们的娱乐游戏;另外对于一些对于有一定的C语言基础的,可以一边在玩的时候,感受在其中的编程思想并且自己进行尝试。
IPO图:
数据字典:先进行蛇与食物的定义,再制定游戏中蛇的光标处理方法,初始化蛇的位置坐标,接着创建整个游戏的活动界面从而确定游戏的整体的框架。初始化游戏的计分系统,设置初始化分数,再增加分数统计系统确立分数处理的方法。接着编写游戏的规则,蛇的走动方法与吃到食物增长的处理以及游戏中碰壁或碰到自身的处理,最后进行对游戏失败的处理以及游戏的清屏处理。
[ 详细设计说明书 ]
模块的文字描述:
main()主函数:这是程序的大体流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数画出开始画面,调用函数,即玩游戏的具体过程与分数的增加,游戏结束后调用关闭图形系统清理屏幕,结束程序
画界面函数: 设计游戏的活动界面,就是一个密封的围墙加上一个数据处理界面,利用printf来构建游戏的大体框架与各个部分的具体内容
游戏具体过程函数: 这一部分是游戏的重要组成,调用这个函数是游戏的主要部分,重点是一次次反复表示蛇与食物的新位置并进行对前一次的反复清屏。采用的方法是每次移动的时候从最后一节开始到倒数第二节,将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可。蛇的方向通过w a s d键进行控制数组的加减。如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根据蛇的方向改变坐标值,并判断蛇是否撞到了墙或自己吃了自己,如果出现这两种情况之一,则蛇死,调用游戏结束函数结束本次游戏或重新开始。如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。如果有按键,则识别键值。如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变代表蛇方向的变量的值,要考虑相反方向键无效。
游戏结束函数:游戏结束,显示游戏结束信息。
HIPO 图:[详细设计说明书]:
[注意事项]
1.程序流程图应符合结构化思想:单入口、单出口。
[实验总结 ]
通过本次试验让我加深了对程序设计的理解,对程序结构化设计有了进一步的认识,同时也是对自己编程思想的优化和编程能力的提高,认识到了如何将程序设计工程化,同时也发现了自己诸多问题,对软件工程思想没有很好的理解,以及IPO图和HIPO图的绘制与编写出现了问题,我觉得在画图之前首先要确定具体框架,然后根据框架进行补充。此次试验让我发现了很多问题,我认识到编写任何程序无论难或易都要进行实验前的准备,对实验的步骤有个具体了解并且能够理清实验思路才能够进行实验。这些发现让我能够及时的进行自我反思从而对自己进行相应的改进。总体说,这次实验让我学到了很多宝贵的经验与思想,为以后打好基础。
软件工程导论 实验二:编码
[ 实验日期 ] 2012 年 4 月 20 日
[ 实验目的 ]
通过对本次贪吃蛇程序的编写,了解各种不同的编程方法和不同的编程风格,从而在这次实验以及以后学习过程中养成属于自己的良好的编程风格与编程方法技巧。
[ 实验内容 ]
通过实验一的基础,先制定基本框架,然后在这个基础上详细的进行编注,整体按照相应的结构化思想编写代码,在相应的地方做出对自身的注释,从而能够使自己和他人能够更好的理解。
[ 实验原理和步骤 ]
编码的原理包括几方面,首先编码风格要强调“清晰易读”,不能过分个性化或过多的插入个人技巧,要做到自己编的程序对于那些会编程的人都能够轻易理解并能够在不足的地方进行修改。编码过程中要注意变量或函数的名字要赋予相应的意义,做到每个代码都有自己存在的意义与作用。编码中的表达式和语句要一目了然,排版风格、循环语句风格要保持一致,使人在阅读你的程序是能够很快理解你要表达的意思与目的。在函数宏的定义,常数的定义,注释方面要全面。注释包括序言性注释、函数模块注释和程序语句注释。
[具体步骤]
首先制定相应的程序框架,然后根据实验一种相应的模块进行相应的填充。当整体程序基本成型后,再通过反复测试,找出其中的不足,进行不断地完善。然后对程序中相应的模块与需要理解的地方进行合理的简洁的注释,使他人能够跟快的理解。对每个函数前写模块注释,重要语句写功能性注释,变量或函数的名字要有意义,排 版,从而使程序变得美观易懂。
[ 程序源代码 ]
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int snake_len=1;//蛇的长度
int snake_loc[50][2]={31,12};//整条蛇的位置,最长为50
int snake_head[2]={31,12};//蛇头位置,初始值为11,12;
int food[2];//食物位置
char snake_direction='s';
int delay=200; //蛇每delay个时间走一步
int eat_flag=0;//1表示吃了食物,0表示未吃
int liv_stat=0;//1表示死了,游戏该结束了;0表示还活着
void gotoxy(int x, int y)//定位光标,x为行坐标,y为列坐标
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void hidden()//隐藏光标
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=0;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(hOut,&cci);
}
void init()//初始化
{
int i;
snake_len=1;//蛇的长度
snake_loc[0][0]=31;//整条蛇的位置
snake_loc[0][1]=12;
snake_head[0]=31;//蛇头位置,初始值为11,12;
snake_head[1]=12;
snake_direction='s';
delay=200;
eat_flag=0;
liv_stat=0;
for(i=1;i<50;i++)
{
snake_loc[i][0]=0;//整条蛇的位置
snake_loc[i][1]=0;
}
}
void create_window()//创建窗口
{
gotoxy(0,0);
printf("********************************************************************************");
printf("* * *");
printf("* * *");
printf("* * 分数:1 *");
printf("* * 按键说明: *");
printf("* * 上:w *");
printf("* * 下:s *");
printf("* * 左:a *");
printf("* * 右:d *");
printf("* * 暂停:空格 *");
printf("* * 退出:Esc键 *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("* * *");
printf("********************************************************************************");
}
void update_score()//更新分数
{
gotoxy(73,3);
printf("%2d",snake_len);
}
void create_food()//产生食物的位置
{
time_t t;
srand(time(&t));
while(1)
{
food[0]=rand()%62+1;//生成1~62之间的随机数,其中random函数生成0~77之间的随机数
food[1]=rand()%22+1;//生成1~22之间的随机数,其中random函数生成0~17之间的随机数
if(food[0]!=snake_head[0]&&food[1]!=snake_head[1])break;
}
gotoxy(food[0],food[1]);
printf("*");
}
void direction()
{
char keyhit=0,i;
while(kbhit()!=0)keyhit=getch();
if( ((keyhit=='a') || (keyhit=='d') || (keyhit=='w') || (keyhit=='s')) && (abs(snake_direction/16-keyhit/16)==1) )snake_direction=keyhit;
else if(keyhit==' ')
{
gotoxy(30,24);
system("pause");
gotoxy(30,24);
for(i=0;i<19;i++)printf(" ");
}
else if(keyhit==27)exit(0);
}
void state()//判定蛇死没死
{
if(snake_head[0]<1||snake_head[0]>62||snake_head[1]<1||snake_head[1]>22)liv_stat=1;
}
void eat()//判定蛇吃没吃上,并对根据方向对蛇头位置进行更新
{
switch(snake_direction)
{
case 'w': snake_head[1]--;break;
case 's': snake_head[1]++;break;
case 'a': snake_head[0]--;break;
case 'd': snake_head[0]++;break;
}
if((food[0]==snake_head[0]) && (food[1]==snake_head[1]) )
{
eat_flag=1;
switch(snake_direction)
{
case 'w': snake_head[1]--;break;
case 's': snake_head[1]++;break;
case 'a': snake_head[0]--;break;
case 'd': snake_head[0]++;break;
}
}
}
void show_snake()//更新蛇在屏幕中的位置
{
gotoxy(snake_head[0],snake_head[1]);
printf("*");
gotoxy(snake_loc[snake_len-1][0],snake_loc[snake_len-1][1]);
printf(" ");
}
void update_maxtrix()//更新存储蛇位置的数组
{
int i;
if(eat_flag!=1)
{
for(i=snake_len-1;i>0;i--)
{
snake_loc[i][0]=snake_loc[i-1][0];
snake_loc[i][1]=snake_loc[i-1][1];
}
}
else
{
snake_len++;
if(snake_len>3 && delay>100)delay-=30;
for(i=snake_len-1;i>1;i--)
{
snake_loc[i][0]=snake_loc[i-2][0];
snake_loc[i][1]=snake_loc[i-2][1];
}
snake_loc[1][0]=food[0];
snake_loc[1][1]=food[1];
eat_flag=0;
create_food();
update_score();
}
snake_loc[0][0]=snake_head[0];
snake_loc[0][1]=snake_head[1];
}
void main()
{
int flag;
long password=123456;
int i=1;
long pw;
printf("请输入密码\n");
scanf("%ld",&pw);
if(password!=pw)
while(1)
{
i++;
printf("密码错误\n请重新输入:");
scanf("%ld",&pw);
if(password==pw)
{
printf("密码正确,欢迎使用\n");
flag=1;
break;
}
if(i==3)
{
printf("请稍后再试\n");
flag=0;
break;
}
}
else
{
printf("密码正确,欢迎使用");
flag=1;
LOOP:
system("cls");
init();
create_window();
hidden();
create_food();
while(1)
{
int i;
Sleep(delay);
direction();
eat();
show_snake();
update_maxtrix();
state();
if(liv_stat==1)
{
for(i=1;i<snake_len;i++)
{
gotoxy(snake_loc[i][0],snake_loc[i][1]);
printf(" ");
}
gotoxy(food[0],food[1]);
printf(" ");
gotoxy(30,12);
printf("Game over!\n");
gotoxy(25,13);
printf("继续请按y,退出请按n");
while(1)
{
i=getch();
if(i=='y')goto LOOP;
else if(i=='n')break;
}
break;
}
}
}
}
[注意事项]
1.模块的逻辑描述应该清晰第一、使用标准的、规范的控制结构、正确可靠
[实验总结 ]
通过对实验二的学习让我对程序的编写有了更深的理解也对编程的谨慎性有了更深层次的体会,即使在小的疏忽或错误都会影响整个实验的进行。但是实验二也给我带来巨大收益,通过本实验我进一步对编程思想进行了优化,在编程过程中也能够更加注意细节 ,能够更好的利用程序框图进行一步一步的前进。对与以后的学习与实践,我会进一步做到认真仔细,在编程前更好的准备与思考。对于实验二的整体感受,我觉得我的编程技巧与思路得到提升,自己能够在编程时注意自己的思考与对代码合理性的思考。总体说来,实验二是对我在编写代码上的一个巨大提升以及对我在编写代码理念上的一次进步;
软件工程导论 实验三:代码复查、编译
[ 实验日期 ] 2012 年 4 月 20 日
[ 实验目的 ]
在实验代码编写运行过程中,总会出现部分或大或下的错误,实验三就是学习如何通过代码运行过程中的错误来进行对自己编写的代码程序的快速有效的复查,从而发现程序中的不足与错误。
[ 实验内容 ]
本实验是通过对代码复查脚本的学习来进行对自己编写的程序的复查,检查出其中的错误和不足,在利用代码复查检查表检查源代码的同时还要利用相应的表格进行记录,然后反复多次进行测试修改直到程序趋于完善同时填写缺陷记录日志。实验后利用错误统计记录表来对自身进行思考,发现自己在那方面的不足,对自己进行反思。
[ 实验原理和步骤 ]
如果想发现和改正程序的每一个缺陷,就必须遵照一个精确的规程。检查表可以帮助确保遵循这个规程。检查表也是一个构思的来源。当按照检查表去做时,就知道如何进行代码复查。检查表包括了个人的经验。通过不断地使用和改进个人检查表,可以更好地发现在程序中的缺陷。
首先整体检查一遍自己编写的整个代码,然后运行看有无错误;发现有不足或错误,则进行代码复查。熟悉复查表中相应的错误点,首先在代码中寻找平时自己易错点,看是否错误,然后按照复查表中规则一一对应对代码进行深层次的精确的检查,不断检查思考,记录错误点;检查完全,确定代码没有错误后来对本次编写的代码进行反思,找出自己的不足与需要改进之处。
[ 填写代码复查检查表]
C++代码复查指南和检查表
程序名和程序号#
[ 填写缺陷记录日志 ]
[注意事项]
注意对程序进行总体测试,完成程序同时,通过一次次编译找出其中错误,再做出相应的处理。实验中要逻辑清晰,修改是要保持耐心,填写表格要规范。
[实验总结 ]
通过对本次实验结果的分析,我发现平时对于我们来说,编程过程中犯大错误的机率是比较小的,而且即使犯了,我们通过实验检查也能很快找到并且能够自己及时改进;但往往实验中总会出现一些简单的错误,这些错误往往对于我们都是致命,这些都是来自平时我们的习惯,我们一般很难找到这些;对于本次实验我觉得我应该在平时编程过程中药有意识的改正,尽量培养出编程的谨慎心理,那么在以后编程过程中就能够有意识的避免犯这些低级错误;对于实验三这整个实验,我觉得我学的东西都是非常实用的,根据代码复查脚本来进行查找错误这使我在以后编程过程中找错误有了一个标准,极大地方便程序的优化过程。记录缺陷日记能够让我们在平时积累编程的错误,这样我们对编程的错误就能够更加熟悉,在以后编程过程中就会有意识的去避免这些错误,这样有利于我们在编程上更大的提升。
软件工程导论 实验四:项目测试总结
[ 实验日期 ] 2012 年 4 月 20 日
[ 实验目的 ]
通过对贪吃蛇程序的运行及测试,体验其中的编程思想,完成后通过对实验一、实验二、实验三的总结,尤其对实验三中的数据进行总结得出测试总结;
[ 实验内容 ]
通过程序运行并且没有错误产生,再对所有实验进行一次总结,对实验进行一次系统性浏览,在完成后把所有数据填写到测试表,缺陷分析表中,完成对这次实验的最后总结。
[ 实验原理和步骤 ]
按等价类、边界值设计测试数据,对程序进行总结,对实验三中数据进行分类,做出表格并填写相关数据,完成所有测试,并记录测试结果;填写缺陷分析表并按类型排序。
[ 测试表 ]
[ 缺陷分析表 ]
[注意事项]
填写表格要规范,再统计数据时要认真仔细,对任何一个数据都要有一个清晰的认识并且做出正确的判断,最后对数据填写时要有条理、简洁易懂,规范标准。
[实验总结 ]
通过实验四的学习,我发现平时我比较容易犯一些基本错误,我在以后学习过程中要慢慢改正,我学会进行实验测试并且从其中找出错误并将所有实验结果数据进行统计,了解对一般软件的多方面测试从而确定它的可行性;
实验项目名称MicrosoftVisio软件的使用实验项目名称软件概要设计实验项目名称软件详细设计日期11月16日地点实验中心40…
20xx20xx2软件工程导论实验报告学院计算机学院班级软件工程114姓名黄芳恺学号119xx4258目录实验1项目计划分析和设计…
<<软件工程概论>>实验报告姓名:XX学号:XX班级:网工1001指导教师:XX实验一图书馆系统结构化需求分析上机任务:用结构化需…
武夷学院实验报告课程名称软件工程项目名称需求分析姓名专业计科班级1班学号同组成员无1注1实验预习部分包括实验环境准备和实验所需知识…
软件工程实验报告院系:数学与信息科学学院_______班级:________________________学号:________…
软件工程总结报告序言本期软件工程专业导论课程结束后,为圆满完结本期此课程的学习,特此总结个人学习所得以求些许回报先生无私教导。主体…
学生信息管理系统可行性分析报告1引言11编写目的随着高校招生规模的逐步扩大和人事制度的改革在校学生人数将不断增加而学生管理人员则相…
实验一项目计划分析和设计实验日期2010年6月8日实验目的初步了解结构化分析设计方法的原理步骤以及各阶段的文档练习撰写简要的需求文…
软件工程实验报告一软件的数据模型设计学院计算机科学学院班级网络工程0901班姓名刘晓兰学号40909040139西安工程大学实验报…