您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 结构设计 > 软件工程结构化分析与设计
第三章结构化分析与设计需求分析结构化系统分析模块化设计思想结构化系统设计模块设计3.1需求分析准确、完整、规范化的软件需求是软件开发成功的关键软件项目中40-60%的问题是在需求阶段埋下的祸根让用户和开发者共同明确将要开发的是一个什么样(what)的系统第一:建立分析模型描述软件需求的一组模型,是形成需求说明、进行软件设计的基础第二:得到《软件需求规格说明书》准确、一致、清晰、无二义、直观易读需求分析的任务需求获取(调研)形式:联合分析小组手段:客户访谈、问答、原件收集目标:功能、界面、质量...需求分析的步骤开发方用户方(代表)专家需求分析的步骤需求提炼:分析建模结构化分析面向对象分析数据流图实体关系图状态转换图控制流图...类图状态图活动图...用例图需求分析的步骤需求描述:撰写软件需求规格说明书(SoftwareRequirementSpecificationSRS)在标准模板基础上剪裁需求验证(复审)组成复审小组:用户方+外来专家实例(教材购销系统)学生学生张秘书王会计李出纳赵保管购书购书购书申请证明发票领书单书学生学生审查有效性开发票开领书单发书购书购书购书申请证明发票领书单书学生学生审查并开发票开领书单发书购书购书申请发票领书单书学生学生审查并开发票开领书单购书申请发票领书单无效书单当前系统目标系统缺书单需求获取的常用方法常规需求获取方法联合分析小组、客户访谈、问题分析与确认快速原型法在需求分析中的应用两个层次:联机屏幕、外部特征过程:规格说明→检查→生成/修改原型→用户评估基础:快速开发技术和工具(4GT)分析建模软件分析模型:信息(数据)模型、功能模型、行为模型分类:结构化分析(SA)、面向对象分析(OOA)方式:图形+自然语言3.2结构化系统分析DDE-RDFDCFDSTD控制说明数据对象说明加工说明3.2.1结构化分析模型的组成数据流图(DFD)数据字典(DD)加工说明(PSPEC)实体关系图(E-R)(1)数据流图(DFD)加工或变换输入输出:加工:数据的源点或终点:数据的流向:数据文件或数据库数据流图(DFD)DFD不同于程序流程图。DFD可以表现大到整个系统,小到一个模块分层数据流图学生学生审查并开发票开领书单购书申请发票领书单无效书单各班学生用书表教材存量表(2)数据字典(DD)对软件中的每个数据规定一个定义条目,以保持数据在系统中的一致性数据项:只含一个数据,又称为数据元素数据流:由多个相关数据项组成数据文件(数据库):符号:=、+、[]、{}、()、**数据流发票=(学号)+姓名+{书号+单价+数量+总价}+书费合计数据流名:发票别名:购书发票组成:学号+姓名+{书号+单价+数量+总价}+书费合计备注:数据文件学生用书表={系编号+专业和班编号+年级+{书号}}系编号=2{数字}2文件名:学生用书表别名:组成:{系编号+专业和班编号+年级+{书号}}备注:按系、专业和班编号从小到大排列系编号由两位数字组成数据项年级=[F/M/J/S]数据项名:年级别名:取值及含义:F:一年级,M:二年级,J:三年级,S:四年级备注:F、M、J、S可用1、2、3、4代表数据字典例题请给出安徽汽车的车牌号码的数据字典定义,如合肥的车牌是“皖A-23002”,芜湖的车牌是“皖B-00235”等,只考虑后面五位是数字的情况某个航空售票系统需要保存所有的航班信息,每个航班的属性包括航班号、出发地、目的地、若干个中途停靠站、头等舱座位数量及价格(固定)、公务舱座位数量及价格、普通舱座位数量及价格。有些航班没有头等舱。采用数据字典描述航班信息车牌号码=皖[A-Z]-5{数字}5航班=航班号+出发地+目的地+{停靠站}+(头等舱数量)+(头等舱价格)+公务舱数量+公务舱价格+普通……例题请给出购书申请的数据字典定义:一份申请对应一个学生,内容包括学生的学号、姓名、班级和他(她)所领全部教材的书号、书名和数量。其中学号由阿拉伯数字组成,姓名可选。购书申请=学号+(姓名)+{书号+书名+数量}学号={数字}(3)加工说明(PSPEC)三部分:输入数据、加工逻辑、输出数据描述不宜过细,过细就变成了设计描述工具结构化语言判定表判定树结构化语言描述加工说明把学生学号和姓名写到发票上检索“学生用书表”,获得该生当年书单对购书单上每一个书号如果书单上无此书号则把书号写到无效书单上否则检索“教材存量表”,获得该书的单价和库存如果库存购数单*数量则把书号写到无效书单上否则将书号、单价、数量、总价写入发票更新“教材存量表”的库存,累计书费合计把书费合计写到发票上判定表描述加工说明推销奖金策略规则条件1234推销金额10000≤1000010000≤10000预收货款50%50%≤50%≤50%动作置奖金率8%6%5%4%如果推销员月薪1000另加奖金500300300200判定树描述加工说明奖金≤1000—8%+5001000—8%工资奖金≤1000—5%+3001000—5%≤1000—6%+3001000—6%≤1000—4%+2001000—4%≤50%50%≤50%50%≤1000010000预收货款推销金额例题一个加工用来完成商店促销活动中的金额计算,规定:消费不超过100元,享受8折;消费100-500,享受7折;消费超过500享受6折。且如果是会员则再减20。用判定树描述该加工说明消费额会员优惠优惠策略100100-500500是否是否是否8折-208折7折-207折6折-206折(4)E-R图备注:若关系没有属性,则可以省略E-R图向数据表的转换一对一:两个实体可合并成一个表学生床铺1:10:1学生{学号,姓名,床铺号,上下,……}E-R图向数据表的转换一对多:两个实体分别转换成两个表,在“多”的标中建立指向“1”的表中的外关键字部门员工1:n1:1部门{编号,名称,职责,……}员工{工号,姓名,性别,……,所在部门编号}E-R图向数据表的转换多对多:两个实体分别转换成两个表,另建立一个新表保存它们之间的关系,新表中应包括这两个表的关键字及关系的属性产品原材料1:n1:n产品{产品编号,名称,价格,……}原材料{原料编号,名称,价格,……}单耗{产品编号,原料编号,单耗量,……}例题以我校为例,画出学生、班级、课程、教师的E-R图3.2.2结构化分析方法结构化分析(SA):一种面向数据流的分析方法基本步骤:由顶向下对系统进行功能分解,画出分层数据流图;由后向前定义系统的数据和加工,编制DD和PSPEC;最终写出SRS。(1)画分层数据流图从基本模型开始(整个系统是一个加工)逐层分解重复这种分解,直到加工足够简单(基本加工)由顶向下、逐步细化(求精)顶层数据流图学生教材购销系统书库保管员购书单领书单缺书单进书通知外部项目标系统发票二层数据流图学生书库保管员购书单领书单缺书单进书通知1销售2采购进书通知F1教材存量表F2缺书登记表发票三层数据流图—销售子系统学生学生1.1审查有效性1.2开发票1.3打印发票1.4登记售书打印领书单1.5登记缺书1.6产生补售书单采购F2缺书登记表F1教材存量表F4售书登记表F3学生用书表购书单无效书单有效书单发票发票领书单进书通知补售书单暂缺书单三层数据流图—采购子系统2.1按书号汇总2.2按出版社汇总2.3进书处理书库保管员销售F2缺书登记表F1教材存量表F5代购教材表F6教材一览表缺书单进书通知进书通知分层DFD的优点便于实现逐步细化,避免一次引入过多细节,有利于控制问题的复杂度便于使用便于阅读,有针对性(2)确定数据定义与加工策略从数据的终点开始,由后向前领书单=学号+姓名+{书号+数量}发票=学号+姓名+{书号+单价+数量+总价}+书费合计1.4的PSPEC:从发票中提取数据生成领书单;登记售书售书登记表={领书单}={学号+姓名+{书号+数量}}确定数据定义和加工策略有效购书单=学号+姓名+{书号+数量}教材存量表={书号+单价+数量}1.2的PSPEC:核对存量;如果够则计算书费,并更新存量;如果不够则产生暂缺书单暂缺书单=学号+姓名+{书号+数量}补售书单=学号+姓名+{书号+数量}缺书登记表={学号+姓名+{书号+数量}}(3)需求分析的复审父图和子图的不平衡父图和子图的输入数据和输出数据应分别保持一致,称为父子平衡。可以有“例外”未区分局部文件和局部外部项各层负责各层,保持图面简洁分解速度太快每次分解2—4个,一般不超过7个不遵守加工编号规则思考题分析一个网上购物系统,其过程是:用户首先输入待购买商品名称(如:手机),然后在所有商品中选择自己中意的品牌(如:诺基亚8210)和欲购买的数量,系统检查库存,如果库存不够则提示用户交易失败,如果够就接受交易,并将订单显示给用户。其中:订单=商品名称+品牌+单价+数量+总价+交易时间要求:1、画出分层数据流图2、描述“接受交易”的加工说明3、给出DFD中所有数据文件的数据定义用户用户查询请求订单网上购物系统购买请求1查询商品2接受订购3检查库存4接受交易用户查询请求商品库存表商品列表购买请求购买请求有效购买请求用户订单用户无效请求商品库存表={商品名称+{品牌型号+单价+库存数量}}接受交易加工说明接受购买请求查询商品库存表中对应请求中的商品的单价计算本次购买金额,查询系统时间,生成订单更新库存表中的商品数量3.3模块化设计思想把大型软件按照规定的原则划分成一个个较小的、相对独立但又相互关联的模块,叫做模块化设计分解模块独立性自顶向下与由底向上设计3.3.1模块独立性模块独立性由内聚和耦合来度量模块独立性越高,块内联系越强,块间联系越弱高内聚、低耦合3.3.1模块独立性C(P1+P2)C(P1)+C(P2)E(P1+P2)E(P1)+E(P2)分解的模块数量不能过大、也不能过小3.3.2内聚偶然性内聚功能性内聚时间性内聚逻辑性内聚过程性内聚顺序性内聚通信性内聚弱强(1)偶然性内聚模块内各组成成分在功能上互不相关,组合纯属偶然voidm1(){inti,j,k;i=2;j=m3()+2;}(2)逻辑性内聚由若干个逻辑功能相似的成分组成intcalPoint(intflag){intave,max,total,num;total=num=0;FileReaderfr=newFileReader(“c:/gradePoint.txt”);BufferedReaderbr=newBufferedReader(fr);Strings=br.readLine();while(br.ready()){if(flag==1){total+=Integer.parseInt(s);num++;}else{max=maxInteger.parseInt(s)?max:Integer.parseInt(s);}s=br.readLine();}returnflag==1?total/num:max}(3)时间性内聚模块内成分有相同的执行时间联结到一起intcalPoint(intflag){intave,max,total,num;total=num=0;FileReaderfr=newFileReader(“c:/gradePoint.txt”);BufferedReaderbr=newBufferedReader(fr);Strings=br.readLine();while(br.ready()){if(flag==1){total+=Integer.parseInt(s);num++;}else{max=maxInteger.parseInt(s)?max:Integer.parseInt(s);}s=br.readLine();}returnflag==1?total/num:max}BufferedReaderinitFile(){FileReaderfr=newFileReader(“c:/gradePoint.txt”);BufferedReaderbr=newBufferedReader(f
本文标题:软件工程结构化分析与设计
链接地址:https://www.777doc.com/doc-5965332 .html