问答题
阅读以下关于软件系统架构选择的说明,根据要求回答下问题。
[说明]
某公司欲针对Linux操作系统开发一个KWIC(Key Word in Context)检索系统。该系统接收用户输入的查询关键字,依据字母顺序给出相关帮助文档并根据帮助内容进行循环滚动阅读。在对KWIC系统进行需求分析时,公司的业务专家发现用户后续还有可能采用其他方式展示帮助内容。根据目前的需求,公司的技术人员决定通过重复剪切帮助文档中的第一个单词并将其插入到行尾的方式实现帮助文档内容的循环滚动,后续还将采用其他的方法实现这一功能。
在对KWIC系统的架构进行设计时,公司的架构师王工提出采用共享数据的主程序—子程序的架构风格,而李工则主张采用管道—过滤器的架构风格。在架构评估会议上,大家从系统的算法变更、功能变更、数据表示变更和性能等方面对这两种方案进行评价,最终采用了李工的方案。
问答题
在实际的软件项目开发中,采用恰当的架构风格是项目成功的保证。请用200字以内的文字说明什么是软件架构风格,并对主程序—子程序和管道—过滤器这两种架构风格的特点进行描述。
【正确答案】
【答案解析】 软件架构风格是描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。
在主程序—子程序架构风格中,所有的计算构件作为子程序协作工作,并由一个主程序顺序地调用这些子程序,构件通过共享存储区交换数据。
在管道—过滤器架构风格中,每个构件都有一组输入和输出,构件接受数据输入,经过内部处理,然后产生数据输出。这里的构件称为过滤器,构件之间的连接件称为数据流传输的管道
根据卡内基·梅隆大学软件工程研究所等权威机构的定义,软件架构风格是描述某一类特定应用领域中软件系统的组织方式和惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。
主程序—子程序架构风格是一种调用/返回风格,所有的计算构件作为子程序协作工作,并由一个主程序顺序地调用这些子程序,构件通过共享存储区交换数据。该架构风格由单线程控制,把问题划分为若干处理步骤,构件即为主程序和子程序。子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。调用关系具有层次性,其语义逻辑表现为子程序的正确性取决于它调用的子程序的正确性。
管道—过滤器架构风格是一种数据流风格,每个构件都有一组输入和输出,构件接收数据输入,经过内部处理,然后产生数据输出。这个过程通常通过对输入流的变换及增量计算来完成,包括通过计算和增加信息丰富数据,通过浓缩和删除精炼数据,通过改变记录方式转化数据,递增地转化数据等。在输入被完全消耗之前,输出便产生了。这里的构件称为过滤器;构件之间的连接件称为数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
问答题
请完成表中的空白部分(用“+”表示优、“-”表示差),对王工和李工提出的架构风格进行评价,并指出采用李工方案的原因。
【正确答案】
【答案解析】 (1)+
(2)-
(3)-
(4)-
(5)+
(6)-
理由:
①根据题干描述“用户后续还有可能采用其他方式展示帮助内容”,说明该KWIC系统对功能变更要求较高。
②根据题干描述“后续还将采用其他的方法实现这一功能”,说明该KWIC系统对实现某一个功能的算法变更要求较高。
③该KWIC系统是一个支持用户交互的窗口界面程序,因此对性能要求并不高。
④该KWIC系统的显示帮助内容为文本,数据的表示基本不变,因此对数据表示变更要求不高
共享数据的主程序—子程序在算法变更方面灵活性较差,算法变更时一般需要重新编译整个系统;在功能变更方面也比较差;在数据表示变更方面也表现比较差,当需要变更时,意味着程序传递参数的变化以及整个程序的调整;在性能方面,由于整个程序处在一个紧耦合的状态下,因此性能较高。
管道—过滤器架构风格在算法变更方面实现比较简单,只需要修改过滤器的实现即可;在功能变更方面也比较简单;在数据表示变更方面相对比较复杂,需要同时改变数据格式和过滤器的结构;在性能方面,由于整个系统是松耦合连接在一起的,因此性能不高。
结合题干描述信息“后续还将采用其他的方法实现这一功能”,说明KWIC系统对实现某一个功能的算法变更要求较高。通读整个案例,结合常识可知,KWIC是一个支持用户交互的窗口界面程序,因此对性能要求并不高;KWIC系统的显示帮助内容为文本,数据的表示基本不变,因此对数据表示变更要求不高。综合这些考虑,该公司采用了管道-过滤器的架构风格。
问答题
下图是李工给出的架构设计示意图,请将恰当的功能描述填入图中的(1)~(4)。
【正确答案】
【答案解析】 (1)文档检索
(2)查询结果按字母表排序
(3)剪切行首单词
(4)单词插入行尾
根据题干给出的关键信息“该系统接收用户
输入
的
查询
关键字,
依据字母顺序给出相关帮助文档
并根据帮助内容进行循环滚动阅读”和“公司的技术人员决定通过重复
剪切帮助文档中的第一个单词
并将其
插入到行尾
的方式实现帮助文档内容的循环滚动”,结合管道—过滤器架构风格的基本框架,该KWIC检索系统的流程是:输入→文档检索→查询结果按字母表排序→剪切行首单词→单词插入行尾→输出。
提交答案
关闭