软件体系结构第四章作业
1. 请把基于体系结构的软件开发模型与其他软件开发模型进行比较。
答:一、基于体系结构为基础的基于构件组装的软件开发模型,如基于构件的开发模型和基于体系结构的开发模型等。基于体系结构的开发模型是以软件体系结构为核心,以基于构件的开发方法为基础。然后采用迭代增量方式进行分析和设计,将功能设计空间映射到结构设计空间,再由结构设计空间映射到系统设计空间的过程。该开发模型把软件生命周期分为软件定义、需求分析和定义、体系结构设计、软件系统设计和软件实现5个阶段.
特点:是利用需求分析结果设计出软件的总体结构,通过基于构件的组装方法来构造软件系统。
优点:基于构件的开发方法使得软件开发不再一切从头开发,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程。构件组装模型导致了软件的复用,提高了软件开发的效率。软件体系结构的出现使得软件的结构框架更清晰,有利于系统的设计、开发和维护。并且软件复用从代码级的复用提升到构件和体系结构级的复用。
缺点:由于采用自定义的组装结构标准,缺乏通用的组装结构标准,因而引入了较大的风险。可重用性和软件高效性不易协调,需要精干的有经验的分析和开发人员,一般开发人员插不上手。客户的满意度低,并且由于过分依赖于构件,所以构件库的质量影响着产品质量。
二、以软件需求完全确定为前提软件开发模型,如瀑布模型等。
特点:软件需求在开发阶段已经被完全确定,将生命周期的各项活动依顺序固定,强调开发的阶段性;
优点:开发流程简单。
缺点:是开发后期要改正早期存在的问题需要付出很高的代价,用户需要等待较长时间才能够看到软件产品,增加了风险系数。并且如果在开发过程存在阻塞问题,则影响开发效率。
三、在开始阶段只能提供基本需求的渐进式开发模型,如螺旋模型和原型实现软件开发模型等。
特点:软件开发开始阶段只有基本的需求,软件开发过程的各个活动是迭代的。通过迭代过程实现软件的逐步演化,最终得到软件产品。在此引入了风险管理,采取早期预防措施,增加项目成功几率,提高软件质量;
优点:强调了其他模型均忽略了的风险分析。逐步调整原型使其满足客户的要求,而同时也使开发者对将要做的事情有更好的理解。使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于庞大、复杂并具有高风险的系统。
缺点:由于需求的不完全性,从而为软件的总体设计带来了困难和削弱了产品设计的完整性,并要求对风险技能管理水平的高要求。
2. 请把基于体系结构的软件设计方法与其他软件设计方法进行比较。
答:基于体系结构的软件设计方法为产生软件系统的概念体系结构提供构造,概念体系结构是由HofimeisterNordSoni提出的四种不同的体系结构中的一种,它描述了系统的主要设计元素及其关系。概念体系结构代表了在开发过程中作出的第一个选择,相应地,它是达到系统质量和商业目标的关键,为达到预定功能提供了一个基础。
体系结构驱动,是指构成体系结构的商业、质量和功能需求的组合。
使用基于体系结构的软件设计方法,设计活动可以在体系结构驱动一决定就开始,需求抽取和分析活动与设计活动并行。特别是在不可能预先决定所有需求时,例如产品线系统或长期运行的系统,快速开始设计是至关重要的。
基于体系结构的开发方法从系统的总体结构入手,将一个系统的体系结构显示化,以在高抽象层次处理诸如全局组织和控制结构、功能到计算元素的分配、计算元素间的高层交互等设计问题。
  基于体系结构的开发方法相比其他软件设计方法,出现了基于构件、基于框架、基于模板的开发技术,项目利用基于体系结构开发的思想,从需求到高层框架设计、架构设计、平台实现,充分体现了基于体系结构开发中从高层设计入手,复用体系结构框架、设计和实现可复用的构件的原则。
此外,与其他软件设计方法的区别还有:
1、 在基于软件体系结构的开发方法中,单个用户界面和业务逻辑的改动不会影响到系统整体,可根据新的需求选择或设计新的构件进行组装。
2、 在基于软件体系结构的开发方法中,开发人员的组织用户界面和业务逻辑的定制可由领域人员来完成,不必专业计算机软件人员参与;专业计算机人员则集中精力做构件库的部分,完成业务逻辑的抽象,制作不同粒度的构件,完成模型的开发。
3、 在基于软件体系结构的开发方法中,不同业务对象有相似的业务逻辑,可直接复用其构件。不同的业务逻辑可以有相似业务流程、业务规则、和原子数据操作,这些都直接可复用构件库,这种构件级的重用将大大节省了开发成本
4、 在基于软件体系结构的开发方法中,在针对新的需求的开发,可以复用原有系统的设计和实现,在系统维护过程更新某一模块,不会影响系统的其它部分。
3. 如何才能提高软件系统的可演化性。
答: 在生物学里面演化又称进化,是指生物在不同世代之间具有差异的现象,以及解释这些现象的各种理论。但是在计算机软件领域里,“演化”这个术语一般是指在性质和特性方面的递增式的改变。在某种意义上来说,这个在某个方面或某些方面属性的改变的过程,导致了新特性的出现或进行改进。一般来说,这种改变都是诸如改变类的成员以适应环境的改变。改变会使得它们更有用或更有意义,而且在某种程度上会增加它们的价值。与此同时,演化也会去掉一些不合适的特性。也可以认为,软件系统的演化指的是在软件系统的生命周期内软件维护和软件更新的行为和过程。在软件系统的生命周期中,演化是一项贯穿始终的活动。
在如何提高软件系统的可演化性上,Lehman提出了软件演化的八条规律:
(1)必须频繁地变化以适应要求。
(2)软件的复杂度不断地增长。
(3)通过自我调节以符合产品需求和过程特性。
(4)在软件的生命周期中保持一定的组织稳定性。
(5)不同的版本之间保持一定的连贯性。
(6)功能持续地增加。
(7)在没有严格的维护和适应性修改的情况下会出现质量衰退。
(8)是一个反馈系统。
第五章作业
1. 为什么要评估软件体系结构?
答:对一个系统的体系结构进行评估,是为了在系统被构建之前预测它的质量,并不需要精确的评估结果,通过分析SA体系结构对于系统质量的主要影响,进而提出改进。此外,软件体系结构的设计是整个软件开发过程中关键的一步。而对于当今世界上庞大而复杂的系统来说,若没有一个合适的体系结构,却想要要有一个成功的软件设计几乎是不可想象的。不同类型的系统需要不同的软件体系结构,甚至一个系统的不同子系统也需要不同的体系结构。因此,体系结构的选择往往会成为一个系统设计成败的关键。
2. 从哪些方面评估软件体系结构?
答:可以从以下9个方面来评估软件体系结构
1、性能
性能是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段事件内系统所能处理的事件的个数。
    经常用单位时间内所处理事务的数量或系统完成某个事务处理所需的时间来对性能进行定量的表示。
2、可靠性
可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。
可靠性可以分为两个方面:
(1)容错。在错误发生时确保系统正确的行为,并进行内部“修复”。例如在一个分布式软件系统中失去了一个与远程构件的连接,接下来恢复了连接。在修复这样的错误之后,软件系统可以重新或重复执行进程间的操作直到错误再次发生。
(2)健壮性。这里说的是保护应用程序不受错误使用和错误输入的影响,在遇到意外错误事件时确保应用系统处于已经定义好的状态。值得注意的是,和容错相比,健壮性并不是说在错误发生时软件可以继续运行,它只能保证软件按照某种已经定义好的方式终止执行。
3、可用性
可用性是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
4、安全性
安全性是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性是根据系统可能受到的安全威胁的类型来分类的。
安全性又可划分为机密性、完整性、不可否认性及可控性等特性。其中,机密性保证信息不泄露给未授权的用户、实体或过程;完整性保证信息的完整和准确,防止信息被非法修改;可控性保证对信息的传播及内容具有控制的能力,防止为非法者所用。
5、可修改性
  可修改性是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。可修改性包含四个方面:
(1)可维护性。这主要体现在问题的修复上:在错误发生后“修复”软件系统。
(2)可扩展性。这一点关注的是使用新特性来扩展软件系统,以及使用改进版本来替换构件并删除不需要或不必要的特性和构件。
计算机软件系统包括(3)结构重组。这一点处理的是重新组织软件系统的构件及构件间的关系,
(4)可移植性。可移植性使软件系统适用于多种硬件平台、用户界面、操作系统、编程语言或编译器。
6、功能性
    功能性是系统所能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
7、可变性
可变性是指体系结构经扩充或变更而成为新体系结构的能力。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的体系结构。当要将某个体系结构作为一系列相关产品(例如,软件产品线)的基础时,可变性是很重要的。
8、可集成性
  可集成性是指系统能与其他系统协作的程度。
9、互操作性
作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用。为了支持互操作性,软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其他编程语言编写的软件系统的交互作用就是互操作性的问题,这种互操作性也影响应用的软件体系结构。
10、概念完整性
能够统一所有层面系统设计概念的能力
11、可分解性
    支持生产系统某个子集的能力
3. A公司是一家相对较大的软件和硬件企业,专业从事网络设备的开发。从单一的产品开始,现在,已经延伸到包括摄相服务器、扫描服务器、光盘服务器以及其他的存储服务器在内的产品。公司原来的产品都是一个一个地开发,每个软件组织一个项目组。为了适应快速变化的市场,降低开发成本,公司想引入产品线方法。然而,软件产品线开发涉及了一个软件开发组织的多个产品,选择了软件产品线意味着要承担由此带来的许多风险。
所以,公司的CTO王总决定在弄清三个问题之后再做决定,首先就是本公司的业务范围是否适合使用产品线方法,其次是如何在原有产品的基础上建立产品线,最后是成功实施产品线的主要因素是什么?
[问题1]请用100字以内文字说明A公司是否适合采用产品线方法?为什么?
[问题2]请用200字以内文字说明如何在原有产品的基础上建立产品线?