1.叙述软件工程中可修改性,有效性,可靠性,可理解性,可维护性,可重用性,可适应性,可移植性和可追踪性等概念的含义,并指明这些概念的重要性
- 可修改性(modifiability):可修改性是指允许对系统进行修改而不增加原系统的复杂性.它支持软件的调试与维护,但度量起来比较困难.
- 有效性(efficiency):有效性是指软件系统能最有效地利用计算机的时间资源和空间资源,一般将系统的时/空开销作为衡量软件质量的一项重要技术指标.牺牲时间效率换取空间有效性或牺牲空间效率换取时间有效性时/空折中经常出现.
- 可靠性(reliability):可靠性是指软件在给定环境和时间下不发生故障的概率. 对于实时嵌入式计算机系统,可靠性是非常重要的目标,如宇宙飞船的导航,核电站的运行等.
- 可理解性(understandability):可理解性是指系统具有清晰的结构,能直接反应问题的需求.有助于软件系统的复杂性,支持软件的维护,移植或复用.
- 可维护性(maintainability):可维护性是指交付软件产品后能够方便地对它进行修改,以改正潜在的错误以及改进性能和其他属性,使软件适应环境的变化等.可理解和可修改性有利于软件的可维护性.
- 可重用性(reusability):概念或功能相对独立的一个或一组相关模块定义为一个软部件.可重用性有助于提升软件产品的质量和开发效率,有助于降低软件的开发和维护费用.
- 可适应性(adaptability):可适应性是指软件在不同的系统约束下,使用户需求得到满足的难易程度.软件应采用广为流传的程序设计语言编码,在广为流行的操作系统环境中运行,采用标准的术语和格式书写文档.适应性强的软件较容易推广和使用
- 可移植性(portability):可移植性是指软件从一个计算机系统或环境移植到另一个计算机系统或环境的难易程度.可移植性支持软件的可复用性和可适应性.
- 可追踪性(traceability):可追踪性是指根据软件需求对软件设计,程序进行正向追踪,或根据程序,软件设计对软件需求进行逆向追踪的能力,降低系统的复杂性会提高软件的可追踪性.
2.软件设计应该包含哪些要素? 软件设计最终要提供一种解决方案,用于描述如何实现一个满足需要的软件,应包含以下组成要素: (1)目标描述.设计方案需要清楚地描述它要解决的问题和将要达到的目标. (2)设计约束.设计目标的获得通常要在某些约束的限制范围内,这些约束定义了要解决问题的解空间. (3)产品描述.设计活动的结果必须以一种对被设计的产品进行描述的方式呈现出来. (4)设计原理.工程化的设计活动必须以一定的科学原理和技术手段为基础,它们将表明问题可以通过该设计得到合理的解决. (5)开发规划.工程化的设计活动不仅需要让人知道该设计能解决问题,还需要让人们了解该设计在实际开发中是可行的,以及如何实现该设计. (6)使用描述.产品经常在某些特定条件下才能被可靠,高效地使用,并达到最初的设计目标.因此描述产品如何使用非常重要.
(1) 1.假设要开发一个简单的网络购物平台,可以实现基本的用户登录,浏览商品,购买商品,生成订单,支付等功能.请给出该系统中存在的一些主要类的类图. (2) 2.试叙述UML用例图在软件需求建模中的用途.请给出上一题网络购物平台的用例图. 3.UML交互图包含哪些视图?请针对第一题网络购物平台中的某个场景(如登录,把商品加入购物车等)给出相应的顺序图. 4.UML活动图和状态图之间有何不同?给出第一题网络购物平台中订单类的状态图. 区别:状态图是描述某一对象的状态转化的,它主要是展示的是对象的状态。描述的是一个对象的事情。从状态图中我们可以看出,对象在接受了事件刺激后,会做出什么样的反应。 活动图是描述系统在执行某一用例时的具体步骤的,它主要表现的是系统的动作,描述的是整个系统的事情。
1.内聚度,耦合度分别指什么?为什么软件设计要追求高内聚低耦合?
内聚度:指该模块内各成分间彼此结合的紧密程度,内聚按其高低程度可分为不同等级,内聚度越高越好.从低到高:偶然性内聚–>逻辑性内聚–>时序内聚–>过程性内聚–>通信性内聚–>顺序性内聚–>功能性内聚 耦合度:是对软件结构中模块间的关联程度的一种度量.耦合的强弱取决于模块间接口的复杂性,进入或调用模块的位置以及通过接口传送数据的多少等.在设计软件时应追求尽可能松散耦合的系统,这类系统中模块的设计测试和维护相互独立.错误传播的可能性和范围会较低. 从低到高:非直接耦合–>数据耦合–>特征耦合–>控制耦合–>外部耦合–>公共耦合–>内容耦合 为什么要追求高内聚低耦合:高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。
2.软件设计过程中包含哪些主要活动?分别介绍这些活动的主要目标.
(1)软件设计计划:明确设计过程的输入制品并使其处于就绪状态,定义设计过程的目标,输出制品及其验收准则,确定覆盖设计过程中各个阶段的全局性设计策略,分配设计过程相关人员职责,针对设计过程中的活动制定工作计划. (2)体系结构设计:建立软件系统的体系结构,有时也称“顶层架构”. (3)界面设计:为用户使用目标软件系统以实现其所有业务需求而提供友好的人机交互界面. (4)模块/子系统设计:确定模块的具体接口定义并设计模块的内部结构,明确它们之间的协作关系. (5)过程/算法设计:对模块内部的工作和执行过程进行描述,给出有关处理的精确说明. (6)数据模型设计:确定设计模型中需要持久保存的数据条目,基于关系数据模型设计这些数据条目的组织方式,必要时还需要设计特定于本软件项目将采用的关系数据库管理系统的优化机制,以提高持久数据操作的性能.
3.哪些要素可以用来评价软件设计的质量?
- a.结构良好
- b.充分性
- c.可行性
- d.简单性
- e.实用性
- f.灵活性
- g.健壮性
- h.可移植性
- i.可复用性
- j.标准化
4.试总结本章列举的软件体系结构设计方法各有何特点.结合自己的开发经验,讨论如何选择合适的软件体系结构设计方法
-
1.软件体系结构的多视图建模:适合处理大规模系统,复杂性较高(Rational公司4+1)
-
2.基于评估与转换的软件体系结构设计:针对功能特性
-
3.模型驱动的软件体系结构设计:主要指如何以复用体系结构风格为基础设计软件体系结构
-
4.领域特定的软件体系结构设计:领域工程分析应用领域的共同特征和可变特征,对刻画这些特征的对象和操作进行选择和抽象,形成领域模型,并进一步生成DSSA
-
5.软件产品线方法:是软件复用发展的一个更高阶段,它并不仅仅局限于以前人们在软件复用中考虑的对函数,模块,类体系结构甚至子系统的重用
-
6.其他软件体系结构设计方法:(1)基于目标图推理的体系结构设计方法(2)基于属性的体系结构设计方法
第四章:面向对象的软件设计方法
1.什么是概念模型设计?为什么需要建立软件概念模型?
定义:为了把现实世界中的具体事物抽象、组织为某一数据库管理 系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个数据库管理系统(DBMS)支持的数据模型,而是概念级的模型,称为概念模型。
原因:由于概念模型用于信息世界的建模型,是现实世界到信息世界的第一层抽象,是用户与数据库设计人员之间进行交流的语言,因此概念模型一方面具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识,另一方面它还简单、清晰、易于用户理解。
2.阐述设计精化的作用和主要内容
设计精化主要内容:精化软件结构、调整软件构成类、精华交互模型、精华类之间的关系
设计精化作用:经过分析和设计,已建立起一-定程度的设计模型,其包含了较完整的静态结构模型(顶层架构图、分析类图)和动态行为模型(交互图),以及用户界面设计和数据模型设计,但其设计模型的抽象层次与软件实现之间还有一定差距,有必要对这些模型再进行分析,细化和优化,己生成高质量的设计模型,为后续的实现阶段奠定坚实基础