请简述软件设计与需求分析的关系
软件设计可看作将需求规格说明书逐步转换为软件源代码的中间过渡过程。
- 活动输入:需求规格说明书。
- 活动输出:设计规格说明书
- 活动目标:需求模型转换成设计模型
- 活动过程:层层分解,逐步求精
请简述软件设计的工作目标和任务
- 软件设计的目标:将需求模型细化为设计模型,形成“设计规格说明书”。
- 软件设计的任务:概要设计和详细设计。概要设计是根据需求确定软件和数据的总体框架,详细设计是将其进一步精化成软件的算法表示和数据结构。
在软件设计的过程中需要遵循的规则
- 模块化
- 抽象化
- 逐步取精
- 信息隐藏
软件设计如何分类有哪些活动
- 从活动任务来看,软件设计是对软件需求进行:数据设计、体系结构设计、接口设计、构件设计和部署设计。
- 从工程管理角度来看,软件设计分为概要设计和详细设计。前期进行概要设计,得到软件系统的基本框架,后期进行详细设计,明确系统内部的实现细节。
什么是模块,模块化设计为什么要模块化h3>
- 模块:是完成特定功能的程序实体。模块是构成程序的基本构件。
- 模块化:是指解决一个复杂问题时自顶向下逐层分解成若干模块的过程。每个模块完成一个特定的子功能,所有模块按系统结构组合起来,完成整个系统所要求的功能。
- 模块化设计:
- 将问题简化,划分模块可使每一个模块完成单一的功能
- 可以独立地进行模块的编码测试,便于软件开发工作的组织
- 把每一个模块要解决的问题局限在有限的范围,减少出错的机会
- 便于纠错
- 便于对特定的模块进行优化处理
- 一个模块可以被重复使用,提高软件产品的复用率
- 程序易于理解
- 利于估计工作量和开发成本
为什么说“高内聚,低耦合”的设计有利于提高系统的独立性h3>
- 内聚和耦合往往密切相关,模块的高内聚通常意味着低耦合。
- 低耦合因为模块之间的耦合程度低,相互影响小,发生异常后产生连锁反应的概率就低。
- 在修改一个模块时,低耦合的系统可以把修改范围尽量控制在最小的范围。
- 对一个模块进行维护时,其他模块的内部程序的正常运行不会受到较大的影响。
请简述界面设计应遵循的原则
-
置界面于用户的控制之下:
- 以不强迫用户进入不必要或不希望的动作的方式来定义交互方式
- 提供灵活的交互
- 允许用户交互可以被中断和撤销
- 当技能级别增长时,可以使交互流水化并允许定制交互
- 为用户隔离内部技术细节
- 应允许用户和出现在屏幕上的对象直接交互
-
减少用户的记忆负担:
- 减少对短期记忆的要求
- 建立有意义的缺省
- 定义直觉性的捷径
- 界面的视觉布局应该基于真实世界的隐喻
- 以不断进展的方式揭示信息
-
保持界面一致:
- 如果过去的交互模式已经建立了用户期望,不要改变它,除非有不得已的理由
- 允许用户将当前的任务放入有意义的语境
- 在应用系列内保持一致
改进的Jackson图和传统的Jackson图相比有哪些优点h3>
- 将问题简化,划分模块可使每一个模块完成单一的功能
- 可以独立地进行模块的编码测试,便于软件开发工作的组织
- 把每一个模块要解决的问题局限在有限的范围,减少出错的机会
- 便于纠错
- 便于对特定的模块进行优化处理
- 一个模块可以被重复使用,提高软件产品的复用率
- 程序易于理解
- 利于估计工作量和开发成本
- 内聚和耦合往往密切相关,模块的高内聚通常意味着低耦合。
- 低耦合因为模块之间的耦合程度低,相互影响小,发生异常后产生连锁反应的概率就低。
- 在修改一个模块时,低耦合的系统可以把修改范围尽量控制在最小的范围。
- 对一个模块进行维护时,其他模块的内部程序的正常运行不会受到较大的影响。
请简述界面设计应遵循的原则
-
置界面于用户的控制之下:
- 以不强迫用户进入不必要或不希望的动作的方式来定义交互方式
- 提供灵活的交互
- 允许用户交互可以被中断和撤销
- 当技能级别增长时,可以使交互流水化并允许定制交互
- 为用户隔离内部技术细节
- 应允许用户和出现在屏幕上的对象直接交互
-
减少用户的记忆负担:
- 减少对短期记忆的要求
- 建立有意义的缺省
- 定义直觉性的捷径
- 界面的视觉布局应该基于真实世界的隐喻
- 以不断进展的方式揭示信息
-
保持界面一致:
- 如果过去的交互模式已经建立了用户期望,不要改变它,除非有不得已的理由
- 允许用户将当前的任务放入有意义的语境
- 在应用系列内保持一致
改进的Jackson图和传统的Jackson图相比有哪些优点h3>
改进的Jackson图表达选择型或循环型结构时,选择条件或循环条件可以在图上直接飙戏拿出来,并且框间连线为直线,方便打印输出
软件设计优化的准则
- 划分模块时,尽量做到高内聚、低耦合,保持模块的相对独立性。模块划分的准则:将相的各部分放在一起,无关的东西不要放在一起。
- 模块的大小要适中
- 模块的接口要简单、清晰、含义明确,便于理解,易于实现,易于测试和维护
- 一个模块的作用范围应在其控制范围内,且判定所在的模块,应与受其影响的模块在层上尽量靠近。
- 软件结构的深度、宽度、扇入、扇出应适当。
- 力求设计单入口和单出口的模块,避免“病态连接”,防止内容耦合。
- 设计功能可预测的划分,应防止功能过分局限。
请简述结构化设计的优点
- 减少设计复杂性。将大化小,使复杂问题简单化
- 结构独立。将程序划分成多个相对独立的模块
- 模块功能单一化,可使软件设计获得最大的益处
- 易于进行软件修改
- 易于开发和维护
- 加强了代码的可重用性
请比较结构化软件设计方法和面向对象软件设计方法
结构化软件设计方法
- 结构化软件设计方法更注重于系统的功能,采用自顶向下、逐步求精的设计过程,以模块为中心来解决问题,按照工程标准和严格的规范将目标系统划分为若干功能模块。
- 面向数据流的方法和面向数据结构的方法是两种常用的结构化软件设计方法。
- 面向数据流的设计方法大多在概要设计阶段使用,借助于数据流图来进行设计工作
- 面向数据结构的设计方法在详细设计阶段使用,按照输入。输出以及计算机内部存储信息的数据结构进行软件结构的设计,从而把对数据结构的描述转换成为对软件结构的描述
面向对象软件设计方法
- 与结构化软件设计方法相比,面向对象软件设计方法的使用范围更广。
- 与传统的软件工程方法不同的是,面向对象的方法不强调需求分析和软件设计的严格区分。
- 从分析到设计的过渡,是一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程
- 面向对象的设计可以分为系统设计和对象设计两个阶段。
- 系统设计关注于确定实现系统的策略和目标系统的高层结构
- 对象设计是对需求分析阶段得到的对象模型的进一步完善、细化或扩充
对基于面向对象思想的设计而言,有哪些方法或机制可以实现信息隐藏h3>
- 通常,模块的信息隐藏可以通过接口来实现
- 模块通过接口与外部进行通信,而把模块的具体实现细节隐藏起来
- 一般来说,一个模块具有有限个接口,外部模块通过调用相应的接口来实现对目标模块的操作。
请简述面向对象的启发规则
- 设计结果应该清晰易懂
- 一般一特殊结构的深度应适当
- 设计简单类
- 使用简单的协议
- 使用简单的操作
- 把设计变动减至最小
请简述何为面向对象设计
面向对象设计是在面向对象方法在软件设计阶段应用与扩展的结果,就是根据在问题域中已建立的分析模型,运用面向对象技术进行系统软件设计,并且补充实现的细节部分,如人机界面、数据存储、任务管理等,形成符合成本和质量要求的、抽象的系统实现方案,在求解域中建立设计模型。
如何优化对象设计
- 确定优先级
- 提高效率
- 调整继承关系
面向对象实现应该选用哪种程序设计语言么h3>
在选用编程语言时,应该考虑的首要因素是哪个语言能最好地表达问题域语义。一般来说,应该尽量选用面向对象程序设计语言来实现面向对象分析、设计的结果。
面向对象程序设计语言主要有哪些技术特点h3>
- 支持类与对象概念的机制
- 实现整体——部分结构的机制
- 实现一般——特殊结构的机制
- 实现属性和服务的机制
- 类型检查
- 类库——大多数面向对象程序设计语言都提供一个试用的类库
- 效率
- 持久保存对象
- 参数化类
- 开发环境——软件工具和软件工程环境对软件生产率有很大影响。
选择面向对象程序设计原因时主要应该考虑那些因素
- 将来能否占主导地位
- 可重用性
- 类库和开发环境
- 其他因素
良好的面向对象程序设计风格主要有哪些准则
- 提高可重用性
- 提高可扩充性
- 提高健壮性
测试面向对象软件时,单元测试、集成测试和确认测试各有哪些新特点h3>
- 最小的可测试单元是封装起来的类和对象。一个类可以包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。因此,对于面向对象的软件来说,单元测试的含义发生了很大变化,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。
- 面向对象软件的集成测试有两种不同的策略
- 基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的一组类集成起来分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。
- 基于使用的测试。这种方法首先测试几乎不使用服务器类的那些类(称为独立类),把独立类都测试完之后,接下来测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。
- 和传统的确认测试一样,面向对象软件的确认测试也集中检查用户可见的动作和用户可识别的输出。为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的情景。
面向对象的测试和传统开发方法的测试有什么不同h3>
- 二者都可以分成4个阶段进行。但传统测试的最小单元是模块,而在面向对象环境下,最小的可测试的单元是封装了的类或对象,而不是程序模块。
- 因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向上的集成策略意义不大。每次将一个操作集成到类中常常行不通,这事因为在构成类的各个部件之间存在各种直接和非直接的交互。对于面向对象系统的集成测试,存在两种不同的测试策略。
- 最小的可测试单元是封装起来的类和对象。一个类可以包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。因此,对于面向对象的软件来说,单元测试的含义发生了很大变化,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。
- 面向对象软件的集成测试有两种不同的策略
- 基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的一组类集成起来分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。
- 基于使用的测试。这种方法首先测试几乎不使用服务器类的那些类(称为独立类),把独立类都测试完之后,接下来测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。
- 和传统的确认测试一样,面向对象软件的确认测试也集中检查用户可见的动作和用户可识别的输出。为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的情景。
面向对象的测试和传统开发方法的测试有什么不同h3>
- 二者都可以分成4个阶段进行。但传统测试的最小单元是模块,而在面向对象环境下,最小的可测试的单元是封装了的类或对象,而不是程序模块。
- 因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向上的集成策略意义不大。每次将一个操作集成到类中常常行不通,这事因为在构成类的各个部件之间存在各种直接和非直接的交互。对于面向对象系统的集成测试,存在两种不同的测试策略。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!