1、1软件需求分析图形表示与形式描述传统图形描述技术建模及语义中国谚语:Ein Bild Zeigt ueber Tausend Saetze.(A picture shows more than 1000 sentences.)1、三种主要传统图形描述技术(1)数据流图技术 DFD(Data Flow Diagram)描述一个信息系统的数据(信息)流。(2)实体关系图技术 ERD(Entity Relationship Diagram )描述一个信息系统的逻辑数据结构。(3)状态转换图技术 STD(State Transition Diagram)描述一个信息系统的状态转换过程。2、基于图形描述
2、技术的需求分析模型(1)需求分析模型的基本功能2 描述用户需求 建立创建软件设计的基础 定义软件开发后的验证条件集合(2) 需求分析模型结构图 2-1 给出了基于图形描述技术的需求分析模型结构。图 2-1:需求分析模型结构( 摘自 Pressman, Software Engineering, P300)其中(1)核心部分Data Dictionary(DD,数据字典):3- 存储所有软件使用或产生的对象数据的描述。(2)中间层 Data Flow Diagram(DFD,数据流图)- 描述数据在经过系统时的转换过程- 图示数据流函数 Entity Relationship Diagram(E
3、RD,实体关系图)- 图示数据之间的关系 State Transition Diagram(STD,状态转换图)- 描述系统接收外部事件后的状态变化(3)外部层 Process Specification(PSPEC,过程规约)- 描述 DFD 中定义的每个函数 Data Object Description(数据对象描述)- 描述 ERD 中每个数据对象的属性 Control Specification(CSPEC ,控制规约)- 描述软件控制外观的附加信息231 数据流图 DFD 及语义1定义(DFD)数据流图 DFD 技术描述流经一个信息系统的数据(信息)流,主要包括:(1) 数据的输入
4、与输出:数据是如何进入系统或从系统离开;4(2) 数据处理站点:在哪里数据是怎样处理的;(3) 存储单元:数据是在哪里存储的。2定义(DFD 符号):数据(信息)的源点/终点:数据(信息)加工或逻辑处理:数据(信息)存储:数据(信息)流 3实例研究:汽车租赁数据流图(1)一个汽车租赁数据流图 EuRent DFD 见图 2-2。图 2-2:EuRent DFD( 摘自 Haggenmueller, Wirsing: Methoden der Software-Entwicklung, P29)图中5Kunde:用户或汽车租赁者Make Bookings:租车登记Obtain Payment:得
5、到支付Vehicle Departures Funct F;Pred P;S generated by C;- 定义公理axiomsEendaxioms 其中,S: 规约中包括的所有数据类型的集合F: 所有函数符号的集合P: 所有谓词符号的集合C: S 的构造操作符集合,且 C FE: 公理集合,表示所有的特性( Characteristic Properties)上述规约可书写成如下:17规约 SP = 标记 ,公理 E. Boolth Value 的规约设计(1)公理规约(Axiomatic Specification)BOOL0 = - signature- sortSort Bool;
6、- functions symbolFunct true Bool;false Bool;- predicate symbolsPred notBoolBool;- axiomsAxioms, x:Boolnot ( true ) = false;not ( not(x)) = xendaxioms; 18(2) Prolog 规约 (Prolog Specification)Remark: n 个变量的函数将通过 n+1 变量的关系定义,函数的值变量置于 n+1 个关系的最后一位BOOL_PL = - signature- sortSort Bool;- functions symbolFu
7、nct true Bool;false Bool;- predicate symbolsPred Not Bool Bool;- axiomsaxioms x,y BoolNot ( true, false );Not ( x, y ) = Not ( y, x )endaxioms ; 19(3) 逻辑规约(Logic Specification)Remark: 一个自变量的布尔函数将通过一个变量的关系表达BOOL_L = - signature- sortSort Bool;- functions symbolFunct true Bool;false Bool;- predicate s
8、ymbolsPred Not Bool ;- axiomsaxiomsNot (false) ; Not (true ) endaxioms; 20(4) 带构造操作符的公理规约(Specification with Constructor)BOOLT = - signature- sortSort Bool;- functions symbolFunct true Bool;false Bool;- constructor axiom: Induction principle for truth valueBool generated by true, false;-Non-construc
9、tor symbolFunct notBool Bool;- axiomsaxioms xBoolnot ( true ) = false;not (not (x ) ) = xendaxioms; 21322 标记 Signature1定义(Signature):一个标记是一个三元组=(S ,F, P) ,其中S 是一个类集( Set of Sorts) ,F 是一个定义在 SS 上的函数符号集,其中S 为定义域,sS 为函数 F , s 的值域,P 是一个定义在 S上的谓词符号集。Remark:(1) 标记描述规约的语法(Syntax of Specification)(2) fF , s
10、 可写成 fs 1 s2 , sn s(3) pP 可写成 P s1 s2 , sn(4) 规约 SP 的标记 可写成 sig(SP ): SP 2. 案例研究例 1:上述逻辑规约(Logic Specification) BOOL_L 的标记sig(BOOL_L):S = BoolF =(F )Bool n n 0且F = true,false - 常量F = otherwise - 空集P=(P )Bool n n 0且22P = Not,= -其中 =为布尔运算P = otherwise 例 2:公理规约 BOOL0 及 BOOLT 的标记sig(BOOL0)=sig(BOOLT)S =
11、 Bool;F =(F )Bool n n 0且F = true,false - 常量F = not - 函数F = otherwise ; - 空集P=(P ) Bool n n 0且P = = -其中 =为布尔运算P = otherwise 思考:(1) 找出程序中所有类型与运算符号有利于程序理解;(2) 可用于程序测试、项目管理、程序度量等;(3) 可用于研究程序体系结构等;(4) 语法、语义匹配,语义查询等;(5) 基于语义的 web 服务应用等。3定义:标记被称为是代数的,只有当等式“=”是其中唯一的关系运算符。例:上述规约 BOOL0 和 BOOLT 的标记是代数的;23规约 BO
12、OL_L 不是代数的,因为存在关系运算符“not” 。323 项(Term)每个标记= (S ,F,P)定义了一个表达式的集合,称为项集,其中项元素是由自由变量 x 和中的函数符号构成。x:S所有程序中的表达式都是由和 X 构成的。1定义(项的归纳定义):(1)设为标记,X =(X s) sS 为标识符(identificator)的集合,则对每个 sS, T(,X) s 为最小项集并满足下列特性:a)对每个 x Xs 满足 xT(,X) s,则 x 是一个项;b)若 fF 并满足 fT(,X) s,则 f 是一个常量,同时f 也是一个项;c)若 fF , s 且 tiT(,X) si,i=1
13、, , n,则f(t1, , tn) T(,X);(2) 不含变量的项称为基项(ground term ) ,即当 X=时,所有的tT(,) s 是基项;(3) 标记被称为是敏感的(sensitive) ,如果每个类 sS 都存在一个基项 tT(,) s,即s S T(,) s 成立;(4) 项 tT(,X) s 的类型为 s;24(5) T(,X)= def (T(,X) s) sS2举例:数学表达式中的项表达式: a2 + ab b2项: a2 ,ab , b2324 结构(Structure)一个结构可看作对标记中符号的进一步定义和说明,其中(1)每个类对应一个值的集合;(2)每个函数符
14、号定义一个函数;(3)每个谓词运算符号定义一个关系。1定义(结构):一个结构(也称代数)A 包括:(1)一个家族(Family,或集合的集合) (A s) sS ,其中 As 为非空的值的集合;(2)一个函数集 f:A s1 As2Asn As,其中 fF , s ;(3)一个谓词集 p s1 s2 , sn,其中 pP 。所有的具有标记为的结构的类(Class)表示为 Struct() 。2案例研究例:设=sig(BOOLT) ,则结构包括:25(1) 真值的标准模块 BBBool = T, F;trueB = T; falseB = F;notB( T)= F ;not B( F)= T;
15、x=By iff x=y;(2) 在自然数上定义的结构 NBNBBool = N;trueNB = 1;false NB = 0;notNB(2i)= 2i+1;not NB(2i+1)= 2i; - i 0x=NBy iff x=y;(3)非标准模块 NB1NB1Bool = N;trueNB1 = 1;false NB1 = 0;notNB1(i+1)= 0;not NB1(0)= 1; - i= 0, 1, 2, x=NB1y iff x=y=0 or (x 0 y0) ;(4)定义在整数上的结构 ZBZBBool = Z;trueZB = 1; falseZB = 0;26notZB(
16、1)= 0;not ZB(0)= 1;notZB(i)= i, for i0 i1,iZ;x=ZBy iff x=y;(5)定义在整数上的结构 ZB1ZB1Bool = Z;trueZB1 = 1; falseZB1 = 0;notZB1(1)= 0;not ZB1(0)= 1;notNB1(i)= i+1, for i0 i1,iZ;x=ZB1y iff x=y;(6) 最小的结构 UBUBBool = 1;trueUB = falseUB = 1;notUB(1)= 1;(= UBBool)= def 1 1;说明:1 软件的实现是多样化的;2 软件的正确性是相对的。27325 公理/代数
17、规约Remark:简单公理规约可以通过其标记和一个好形公式( WFF)集合E 定义。1定义(公理规约):设=( S,F,P)是一个标记,E 是一个定义的好形公式集合,则 SP = ,E是一个公理规约。Note:(1)公理规约 SP 是代数的,如果等式“=”是唯一的谓词符号,即 =s P s, s(2)好形公式 WFF(Well-Formed-Formula)的定义见离散数学相关教材和参考资料。 一阶谓词逻辑 First Order Logic; 只包含函数符和等式“=” ; 由原子公式、布尔运算符及量词(全称量词和存在量词)组成。2定义(规约语义):规约 SP = ,E的语义可通过标记和模型类
18、(Class of Models)定义,即标 记: sig(SP )= sig(,E )=,28模型类: mod(SP)= mod(,E)= AStruct () A G for all GE ,其中,A 为模型,Struct()为结构,A G 为“A 满足于 G”,GE 表示 G 为公理集合 E 中的等式,mod(SP)可表示成SP 。3实例研究证明上述结构 B、NB、NB1、ZB、UB 为规约 BOOL0 的模型;ZB1 不是规约 BOOL0 的模型。证明:(1) B 是规约 BOOL0 的模型证明义务:需证明 B 结构定义使 BOOL0 中的每个公理成立。not(true B)= not
19、(T) = F = falseB;- definitionnot(not(x) )= not(not(T ) )= not(F)= T= trueB=x,当x=trueB; = not(not(F) )= not(T)= F= falseB=x, 当x=falseB。(2) NB 是规约 BOOL0 的模型29证明义务:需证明 NB 结构定义使 BOOL0 中的每个公理成立。not(true NB)= not(1)= 0 = false NB;not(not(x) )= not(not(2i) )= not(2i+1)= 2i= x,当 x=2i NB; = not(2i)= 2i+1 =x,
20、当 x=2i+1NB。(3) NB1 是规约 BOOL0 的模型证明义务:需证明 NB1 结构定义使 BOOL0 中的每个公理成立。not(true NB1)= not(1)= 0 = false NB1;not(not(x) )= not(not(0) )= not(1)=0, 当 x=0 NB1; = not(not (i+1 ) )= not(0)=1=i+1 ,当x=i+1NB。(4) UB 是规约 BOOL0 的模型证明义务:需证明 UB 结构定义使 BOOL0 中的每个公理成立。not(true UB)= not(1)= 1 = false UB;not(not(x) )= not
21、( not(1) )= not(1)=1=x ,当 x=1。(5) ZB 是规约 BOOL0 的模型证明义务:需证明 ZB 结构定义使 BOOL0 中的每个公理成立。not(true ZB)= not(1)= 0 = falseZB;30not(not(x) )= not( not(0) )= not(1)= 0,当 x=0; = not(not(1) )= not(0)=1,当 x=1; = not(not(x) )= not(x)= x,当 x=i 且 x0,x1。(6) ZB1 不是规约 BOOL0 的模型证明义务:需证明 ZB 结构定义不能使 BOOL0 中的每个公理成立。not(true ZB1)= not(1)= 0 = falseZB1;not(not(x) )= not( not(0) )= not(1)= 0, 当 x=0; = not(not(1) )= not(0)= 1, 当 x=1; = not(not(i) )= not(i+1 )= i+2 i,当 x=i 且x0,x1。例: 设 iZ: -3 -2 -1 0 1 2 3 4 则 not ZB1 (i)=i+1 -2 -1 0 1 0 3 4 5 显然 not ZB1 (not ZB1 ( i ) i, for i 0,i1326 规约实例设计