结构化的软件设计的工具有哪些?各有什么特点?
表示软件结构的图形工具:
1)层次图和HIPO图:层次图描绘软件的层次结构,一个矩形框代表一个模块,框间的连线表示调用关系,每个方框可带编号,带编号的层次图称为HIPO图
2)结构图:结构图是进行软件结构设计的工具,同层次图。位于上方的方框代表的模块调用下方的模块,可不用箭头只用直线表示模块间的调用关系。带注释的箭头表示模块调用过程中来回传递的消息。尾部是空心圆表示传递的是数据,尾部是实心圆表示传递的是控制信息。
面向数据流的设计方法:
数据流图:在概要设计阶段使用。数据流分为变换型数据流和事务型数据流。变换:把输入的数据处理后转变成另外的输出数据。事务:非数据变换的处理,将输入的数据流分散成许多数据流,形成若干加工,选择其中一个路径来执行。
面向数据结构的设计方法:
1)Jackson:将数据结构分为:顺序型结构、选择型结构、循环型结构。顺序型结构:数据由一个或多个元素组成,按照确定的次序出现一次。
2)Warnier
数据设计:
1)程序级的数据结构设计:伪代码的方式定义数据结构
2)应用级的数据库设计:物理级的E-R图
过程设计:
流程图:
1)数据流程图
2)程序流程图:顺序型、选择型、先判定型循环、后判断型循环、多分支选择型。不便于逐步求精;可随意控制转移
3)系统流程图
4)程序网格图
5)系统资源图
N-S图:用类似盒子的矩形及矩形之间的嵌套来表示语句或语句序列。内部无箭头,控制流程不能随意控制转移;方便确定作用域、嵌套关系和模块间的层次
PAD图:也称问题分析图,用二维树形结构的图来表示程序的控制流及逻辑结构。执行顺序,自上而下,自左向右;自顶向下、逐步求精;只用于结构化设计;不仅表示程序逻辑,还表示数据结构
#######
请简述面向数据流的设计方法。
面向数据流的设计方法:
数据流图:在概要设计阶段使用。数据流分为变换型数据流和事务型数据流。变换:把输入的数据处理后转变成另外的输出数据。事务:非数据变换的处理,将输入的数据流分散成许多数据流,形成若干加工,选择其中一个路径来执行。
#######
如何理解软件生命周期的内在特征?
软件生命周期是从设计该软件的构思开始,到软件的需求确定、软件设计、软件实现、产品测试与验收、投入使用以及产品的不断更新、到最终被市场淘汰的全过程。分为若干个阶段,每个阶段都完成特定的相对的独立的任务,由于每个阶段的任务相对于总任务的难度大幅降低,在资源分配和时间把握和项目管理上都比较容易控制,合理划分生命周期的各个阶段,是每个阶段即相互联系又相互区别,为每个阶段赋予特定任务。
分为:可行性研究、需求分析、软件设计、编码、软件测试、软件维护
#######
简述E-R图的作用。
表明了数据库的概念结构,提供了表示实体数据对象、属性、联系的方法,用来描述现实世界的概念模型,
#######
请对比白盒测试和黑盒测试。分别有哪些方法?
黑盒测试:将软件系统看作黑盒子,不关心盒子的内部结构和特性,只关注软件的输入数据和输出结果
1)等价类划分法、边界值分析法、错误推测法、因果图法、正交实验设计法
等价类划分法:有效、无效等价类
2)边界值分析法:选择等价类边界的测试用例
3)错误推测法:直觉+经验
4)因果图法:输入条件的各种组合方式、各个输入条件之间的相互制约关系
白盒测试:又称玻璃盒测试,将被观测程序看作透明盒子,关注软件产品的内部细节、逻辑结构
1)逻辑覆盖法:语句、分支、条件、分支-条件、条件组合、路径覆盖
语句覆盖:设计若干测试样例,运行被测试程序,每个可执行程序至少执行一次
分支覆盖:每个判断的取真、取假分支至少执行一次
条件覆盖:每个判断的所有逻辑条件的每种可能取值至少执行一次
分支-条件覆盖:同时满足分支覆盖和条件覆盖的要求
条件组合覆盖:每个判断语句的所有逻辑条件的可能取值组合至少执行一次
路径覆盖:覆盖被测试程序中所有可能的路径
2)基本路径法:在程序控制流程图的基础上,通过分析控制构造的环路复杂度,导出基本可执行程序的路径集合,从而设计测试用例的方法
#######
软件测试应该划分为几个阶段,各个阶段应重点测试的内容是什么?
软件测试步骤:单元测试、集成测试、系统测试、验收测试
单元测试:软件测试的基础,侧重模块的内部处理逻辑、数据结构,利用构件级设计描述作为指南,测试重要的控制路径以发现模块内的错误
集成测试:多个单元的集合,单元组合成模块,模块聚合成子系统 / 系统
体系结构设计、模块设计、接口设计、集成测试策略分析
1)非增量式集成测试:"一步到位"
2)增量式集成测试:自顶向下、自底向上
#######
请比较结构化软件设计方法和面向对象软件设计方法?
结构化软件设计的任务从软件需求规格说明书出发,设计整体结构,形成具体设计方案,解决"怎么做"。
1)概要设计
2)详细设计
面向对象设计原则:
1)模块化
2)抽象化
3)信息隐藏
4)低耦合
5)高内聚
6)复用性
#######
类间的外部关系有几种类型?每种关系表达什么语义?
对象或类之间的关系:依赖、关联、聚合、组合、泛化、实现
1)依赖:"非结构化",短暂,一个对象会影响另一个对象
2)关联:"结构化",对象之间的连接
3)聚合和组合:特殊的关联,强调整体和部分之间的从属性,组合是聚合的一种,组合的整体和部分具有很强的归属关系和一致的生命周期
4)泛化和类间的继承相似
5)实现针对类与接口的关系
#######
如何着手从自然语言描述的用户需求中画出用例图?
用例图从用户的角度描述系统的功能,由用例和参与者及它们之间的连线组成。
用例:从用户骄傲都描述系统的行为,将系统的一个功能描述为一系列的事件,这些事件最终对操作者产生有价值的观测结果
参与者:与系统交互的外部实体,可能是使用者,也可能是与系统交互的外部系统、基础设备等
分析用例名称是否合适时,将参与者和用例连在一起,是否构成一个完整的场景或句子
1)包含:不同用例的共同行为,带箭头的虚线
2)拓展:异常行为,带箭头虚线
3)泛化:用例的一般与特殊,带三角形箭头的实线