9.4.2SAAM评估实例SAAM的评估步骤•1.形成场景•2.描述体系结构•3.对场景进行分类和确定优先级•4.对间接场景进行单个评估•5.评估场景的相互作用•6.形成总体评估•7.SAAM评估日程安排(略)KWIC系统简介•KWIC(KeyWordInContext)系统的基本功能是,输入一些句子,系统把这些句子中的词语重新组合成新的句子,然后按照字母顺序进行输出。•例如,输入:•predictingsoftwarequality•architecturelevelevaluation•则KWIC的输出为:•architeturelevelevaluation•evaluationarchitecturelevel•······1·定义角色和场景•对KWIC系统感兴趣的角色有两个:•最终用户:•(1)修改KWIC程序,使之成为一个增量方式而不是批处理方式。这个程序版本将能一次接受一个句子,产生一个所有置换的字母列表。•(2)修改KWIC程序,使之能删除在句子前段的噪声单词。•开发人员(用户并不了解):•(1)变句子的内部表示(例如:压缩与解压)。•(2)改变中间数据结构的内部表示(例如:即可直接存储置换后的句子,也可存储转换后的词语的地址。)2·描述体系结构•(1)共享内存的解决方案•该体系结构中有一个全局存储区域,被称作Sentences,用来存储所有输入的句子。其执行顺序是:输入例程读入句子存储句子循环转换例程转换句子字母例程按字母顺序排列句子输出。当需要时,主程序传递控制信息给不同的例程。MasterControl1Input1,3CircularShift2,3,4Alphabetize1,3,4Output3,4SentencesShiftedindexAlphabetizedIndex计算构件数据存储数据流控制流共享内存的解决方案示例(2)抽象数据类型解决方案•抽象数据类型(abstractdatatype,ADT),其中每个功能都隐藏和保护了其内部数据表示,提供专门的存取函数作为唯一的存储、检索和查询数据的方式。ADTSentencen有两个函数,分别是set和getNext,用来增加和检索句子;ADTShiftedSentences提供了存取函数setup和getNext,分别用来建立句子的循环置换和检索置换后的句子。•ADTShiftedSentences使用ADTSentence的getNext函数来重新存储输入的句子。ADTAlphabetizedSentences提供了一个setup函数和一个i-th函数,setup函数重复调用ShiftedSentences的getNext函数,以检索已经存储的所有行和进行排序,i-th函数根据参数i,从存储队列中返回第i个句子MasterControl1Input1Set3,4GetNext3,4SentencesSetup4GetNext2,4ShiftedSentencesSetup1,4i-th4AlphabetizedSentencesOutput计算构件数据存储数据流控制流抽象数据类型抽象数据类型解决方案示例3·评估体系结构•既然已经把待评估的体系结构用通用的符号标记了出来,接下来就是评估体系结构满足场景的程度。通过依次考虑每个场景来进行评估。我们所选择的用来评估的所有场景都是间接场景,也就是说,这些场景不能被待评估的体系结构直接执行,因此评估依赖于体系结构的某些修改。(1)场景1•第一个场景是从批处理模式转移到增量模式,也就是说,不是把所有的句子都输入完后,再进行一次性的处理,而是一次只处理一个句子。•对共享内存解决方案而言,这需要修改Input例程,使之在读入一个句子后让出控制权,同时也要修改MasterControl主控程序,因为子例程不再是按顺序一个只调用一次,而是一个迭代调用的过程。还要修改Alphabetized例程,因为使用增量模式后,牵涉到插入排序的问题。我们假设CircularShift例程一次只处理一个句子,且输出函数只要被调用就可以输出。•对ADT解决方案而言,Input函数需要修改,使之在被调用时,一次只输入一行。假设Sentence当存储了输入之后放弃控制权,这无需改变。也假设当ShiftedSentences被调用时能请求和转换所有可获得的句子,这样,该例程也无需改变。在共享内存解决方案中AlphabetizedSentences也必须修改。•综上所述,对于第一个场景而言,两个带评估的体系结构受到的影响是均等的,因此,我们判定其为中性•注意:•我们所做的假设只是针对共享内存解决方案而言的,一般来说,判断的准确性取决于不同的计算构件的内部工作知识。这也就是为什么要期望评估人员中,既有计算构件一般知识的人,也要有特定构件知识的人。(2)场景2•第二个场景要求删除句子中的“噪声”单词。无论是在共享内存解决方案还是在ADT解决方案中,这种需求均可通过修改转换函数很容易的实现。(共享内存体系结构中,修改CircularShift函数,在ADT体系结构中,修改ShiftedSentences函数)。因为在两种体系结构中,转换函数都是局部的,且噪声单词的删除不会影响句子的内部表示,所以,对两种体系结构而言,这种修改是等价的。(3)场景3•第三个场景要求改变句子的内部表示,例如从一个未压缩的表示转换到一个压缩的表示。在共享内存体系结构中,所有函数共享一个公用的表示,因此除了中控函数MasterControl以外,所有函数都受到该场景的影响。在ADT体系结构中,输入句子的内部表示Sentence提供缓冲。因此。就第三个场景而言,ADT体系结构比共享内存体系结构要好。(4)场景4•第四个场景要求改变中间数据结构的内部表示。对于共享内存体系结构,要修改CircularShift,Alphabetized和Output三个例程。对于ADT体系结构,需要修改ADTShiftedSentences和AlphabetizedSentences。因此,ADT体系结构解决方案所受的影响的构件数量要比共享内体系结构解决方案的少。5·比较分析•检查待评估的体系结构,看其有多少个构件受场景的影响,每个构件最多受多少个场景的影响。•从这个方面来看,ADT体系结构要比共享内存体系结构要好。•在两种体系结构中,亮着都有四个构件受场景的影响,但是在共享内存体系结构中,有两个构件受三个场景的影响,而在ADT体系结构中,所有构件最多只受两个场景的影响。6·评估结果场景1场景2场景3场景4比较共享内存体系结构00———ADT体系结构00+++•上表概括了评估结果。其中0表示对于该场景而言,两个体系结构是等价的。•在实际的评估中,还需要根据组织的偏好设置场景的优先级。•如果,功能的增加是风险承担者最关心的问题,那么这两个体系结构是不相上下的(例如场景2)。•如果句子的内部表示的修改是风险承担者最关心的问题(如场景3),那么ADT体系结构显然是要首选的。•使用SAAM方法评估系统的结果通常是容易理解,容易解释,而且和不同的组织的需求目标联系在一起。开发人员、维护人员、用户和管理人员会找到对他们关心的问题的直接回答,只要这些问题是以场景的方式提出的。•SAAM最初提出的目的是针对同一问题的不同的体系结构设计做比较。在许多实例研究中,不同领域的专家根据领域自身的特点和需要提出若干场景来指导评估小组评估软件系统特定方面的性能。针对同一系统,如果提出的场景不同,评估出来的结果也将是不同的。谢谢观赏