zoukankan      html  css  js  c++  java
  • 实验二 结构化分析与设计

    作业属于课程 AHPU-软件工程导论
    作业要求链接 实验二 结构化分析与设计
    作业目标 完成实验二实验报告
    学号 3180701110

    一.实验目的

    (1)掌握结构化的需求分析方法;

    (2)掌握分层数据流图的绘制、数据字典和加工说明的编制;

    (3)掌握数据流图映射为软件结构图的方法;

    (4)掌握需求说明书和设计说明。书的主要内容,学习软件需求说明书和设计说明书的编写;

    (5)掌握测试的基本方法。

    二.实验内容

    (1)参考一个熟悉的系统,如,机票预订系统/教材订购系统/ATM自动取款机,讨论其用户需求、系统需求和业务需求;

    (2)绘制系统的分层数据流图,并给出数据字典;

    (3)将系统的分层数据流图映射为软件结构图,绘制软件结构图;

    (4)为关键模块进行详细设计,如绘制关键模块的流程图;

    (5)实现系统部分功能并测试。

    【实例1】机票预订系统

    参考:

    (1)携程网:https://flights.ctrip.com/international/search/domestic

    (2)去哪儿:https://www.qunar.com/?ex_track=auto_4e0d874a

    为了方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行

    时间、旅行目的地等)输入该系统,系统为旅客安排航班,旅客在飞机起飞前一天凭取票通知和账单交款取票,系统核对无误即印出

    机票给顾客

    【实例2】教材订购系统

    销售系统的工作过程为:首先由教师或学生提交购书单,经教材发行人员审核是有效购书单后,开发票、登记并返给教师或学生领

    书单,教师或学生即可去书库领书。

    采购系统的主要工作过程为:若是脱销教材,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书单通知给教材发

    行人员。

    【实例3】图书管理系统

    参考:http://lib.ahpu.edu.cn/

    三.实验步骤

    (1)复习结构化的分析与设计方法的主要过程;

    结构化的分析方法:结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原理和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等 结构化的设计方法:图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。
    
    结构化的设计方法:结构化设计方法是以自顶向下,逐步求精,模块化为基点,以模块化,抽象,逐层分解求精,信息隐蔽化局部化和保持模块独立为准则的设计软件的数据架构和模块架构的方法学。结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它通常与结构化分析方法衔接起来使用,以数据流图为基础得到软件的模块结构。SD 方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。
    

    (2)讨论系统存在的用户角色、工作流等;

    一个机票预定系统可能存在用户角色可能有
    ①旅客:产生订票、退票等一系列要求
    ②机场管理人员:根据旅客需求和订票系统进行操作
    工作流:

    (3)对关键功能绘制数据流图,给出数据字典,并反复讨论数据流的合理性;

    数据流图

    数据字典是用来规范描述数据具体内容的工具,也是对数据汇总分析的一个总结。一般来说,可为每个数据建立一张二维表。在本系统中,分别为旅客信息、旅客订票信息、候补旅客信息、航班机票信息、取票通知和售出机票信息建立了数据字典,具体如下表所示。




    (4)对应数据流图,设计系统的功能结构图,关键模块的流程图;

    数据流图
    关键模块流程图

    系统的功能结构图

    (5)选择对应的结构化程序设计语言,实现并测试部分功能模块

    源程序:

    *系统管理*/
    void xiugai()
    cout<<"输入航班号: "<<endl;
    int num;cin>>num;
    for(int i=O;i<len;i++)
    if(fl[i].a1==num){num=i;
    cout<<"起飞时间:";cin>>fl[num].a2;cout<<"达到时间:
    ";cin>>fl[num].a3;cout<<endl;break;}
    if(i==len)cout<<"航班号错误! "<<endl;
    void tuichu(
    ofstream nfile2("cus.dat".ios_base:binary);
    nfile2.close();//关闭文件
    ofstream infile2("cus.dat".ios_base:binaryios_base::app);
    for(int i=0;i<A;i++)
    {infile2.write(reinterpret_cast<char*>(&cu[i])),sizeof(customer));cout<<"写入成功!"<<endl;}//将乘客信息写入文件
    infile2.close();//关闭文件
    ofstream nfile1("airline.dat".ios_base::binary);
    nfile1.close();//关闭文件
    ofstream infile1("airline.dat",ios_base::binaryios_base::app);
    for( i=O;i<len;i++)
    infile1.write((reinterpret_cast<char*>(&fl[i])),sizeof(flight));
    infile1.close();
    void dupu()//读取文件信息
    {
    ifstream infile1("airline.dat".ios_base::binary);
    while(infile1.peek()!=EOF)
    infile1.read((reinterpret_cast<char *>(&fl[len])),sizeof(flight));
    cout<<"I***航班信息**容*1<<endk<<"航班号:"<<fl[len].al<<'t'<<"起飞时间:"<<fl[len].a2<<'t<<"降
    落时间:"<<fl[len].a3<<"t'<<”起飞城市:"<<fl[len]J.a4<<'t'<<"降落城市:"<<fl[len].a5<<'t'<<”票
    价:"<<fl[len].a6<<'	'<<"折扣:"<<fl[len].a7<<'t'<<"剩余票量:"<<fl[len].a8<<endl;
    len++;
    infile1.close();//关闭文件
    ifstream infile2("cus.dat".ios_base:binary);
    while(infile2.peek()!=EOF)
    {infile2.read((reinterpret_cast<char *>(&cu[A++])),sizeof(customer));}
    infile2.close();//关闭文件
    getchar();system("cls");
    }
    

    软件测试(条件组合覆盖):
    正常情况下(判断条件的是否用字母代替)
    2)处: a有直达、b无直达
    3)处:c换座、d不换座
    6)处:e有航班、f无航班
    8)处:g乘坐、h不乘坐
    9)处:i有票、j无票
    11)处:k订票、1不订票
    利用条件组合的测试方法,利用C语言代码可以如下64种组合:
    a c e g i k   a c e g i l   a c e g j k
    a c e g j l   a c e h i k   a c e h i l
    a c e h j k   a c e h j l   a c f g i k
    a c f g i l   a c f g j k   a c f g j l
    a c f h i k   a c f h i l   a c f h j k
    a c f h j l   a d e g i k   a d e g i l
    a d e g j k   a d e g j l   a d e h i k
    a d e h i l   a d e h j k   a d e h j l
    a d f g i l   a d f g i k   a d f g j k
    a d f h i k   a d f g j l   a d f h i l
    a d f h j l   a d f h j k   b c e h j l
    b c e g i l   b c e g i k   b c e g j l
    b c e h i k   b c e g j k   b c e h i l
    b c e h j k   b c f g i k   b c f g i l
    b c f h j l   b c f g j k   b c f g j l
    b c f h i l   b d e g j l   b c f h i k
    b c f h j k   b d e g i k   b d e g i l
    b d e g j k   b d e h i k   b d e h i l
    b d f g i l   b d e h j k   b d e h j l
    b d f g i k   b d f g j k   b d f g j l
    b d f h i k   b d f h i l   b d f h j k
    b d f h j l
    说明:选取其中的一些就可以满足条件覆盖标准再配合其余的方法就可以补充漏掉的,以达到完善。
    在航班推迟以及航班取消的情况:(判断条件的是否用字母代替)
    13)处: a换乘、b 不换乘
    15)处:c换乘、d不换乘
    17)处:e有票、f无票
    19)处:g乘坐、h不乘坐
    利用条件组合的测试方法,可以16种组合:
    说明:选取其中的一些就可以满足条件覆盖标准,再配合其余的方法就可以补充漏掉的,以达到完善。

    四.思考题

    1.简述需求说明书,概要设计,详细设计说明书的主要内容。

    (1)需求说明书

    软件需求说明书,又称为软件规格说明书,是分析员在需求分析阶段需要完成的文档,是软件需求分析的最终结果。软件需求说明主要包括引言、任务概述、需求规定、运行环境规定和附录等内容。

    (2)概要设计说明书

    概要设计说明书又可称系统设计说明书,这里所说的系统是指程序系统。编制的目的是说明对程序 系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织结构、模块划分、功能分配、接口设计、运行设计、安全设计、数据结构设计和出错处理设计等,为程序的详细设计提供基础。

    (3)详细设计说明书

    详细设计说明书又可称程序设计说明书。编制目的是说明一个软件系统各个层次中的每一个程序 (每个模块或子程序)的设计考虑,如果一个软件系统比较简单,层次很少,本文件可以不单独编写,有关内容合并入概要设计说明书。

    2.结构化分析方法与面向对象分析方法有无本质上的不同?

    (1)结构化分析方法:

    结构化分析方法可能存在的风险在于:在得到问题本质性的描述之前,不断分解出的结论和需要处理的信息越来越多、越来越复杂,使得“只见树木不见森林”的风险大大增加。
    结构化分析方法运用得好,要求系统分析员具有一种“俯视全局”的能力,能够透过问题的表象直接把握到问题本质。
    当软件项目较小、系统分析员能力足够高的时候,结构化方法能快速的找到简洁、高效率的逻辑模型。结构化方法对复杂问题的帮助有限。但结构化方法有助于使用面向分析方法的系统分析员确认系统初的高阶模型。

    (2)面向对象方法:

    提供了一种方便的、可持续观测和扩展系统的机制。面向对象抽象出的对象是健壮的、可控制和容易维护的。
    总是试图抽象出更公用的类,因此对系统分析员抽象事物和把我初分析方向的要求很高。常常难以控制抽象对象的层次、粒度,甚至抽象出与问题本质面目全非的对象模型。掌握难度高于结构化分析方法。
    通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障的代价大。尤其时继承的深度很大时。
    对于需求变化频繁的系统,得到一个高度可复用的面向对象软件系统设计是很困那的事情。

    结论:两种方法不是对立的,没有谁先进谁过时之说,可在项目中结合使用。恰当的运用方法解决问题才是根本性的问题。在运用时应关注运用方法的成本和价值。

    3.对数据流图进行审查有何意义?

    检查图中是否存在错误或不合理(不理想)的部分

    确保两大特性:
    一致性:分层DFD中不存在矛盾和冲突。
    完整性:是否有遗漏的数据流、加工等

    4.给出一次完整的会议讨论纪要,包括议题,最终结果。

    五.实验小结

    掌握结构化的需求分析方法以及分层数据流图的绘制、数据字典和加工说明的编制;这成为我未来课程学习中的坚实基础。

  • 相关阅读:
    Xcode升级7.3 自动补全不提示导入的自定义类解决方案
    workspace & subProject & target
    iOS开发笔记:编译时出现的错误和解决办法
    Apple iOS推送证书配置和生成教程
    UITextField总结--博主总结的真好
    maven库
    数据库事务四种属性
    redis 相关知识
    MySQL索引
    Mybatis 常用标签
  • 原文地址:https://www.cnblogs.com/wjhne/p/14094931.html
Copyright © 2011-2022 走看看