第三章 需求分析
1.为什么要进行需求分析?通常对软件系统有哪些需求?
需求问题是软件工程项目失败的主要原因。一个高质量的软件,很大程度上取决于对要解决的问题的认识,以及如何准确的表达用户的需求。需求分析就是要解决这个问题。
通常,对一个软件系统的需求可以有功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求等多个方面。
2.怎样与用户有效地沟通,以获得用户的真实需求?
访谈、情景分析,以及面向数据流的自顶向下求精等方法,编制简易的系统规格说明文档,创建原型等,是获取真实需求的有效方法。
3.需求分析的任务是什么?
确定对待开发系统的综合要求。
4.通常系统的需求可以分为哪几个层次?
一般可以分成5个层次:
(1) 功能需求:系统必须做什么?
(2) 业务需求:反映客户组织机构对系统高层次的目标要求。 (3) 运行需求:运行环境、软硬件配置等。
(4) 属性需求:包括用户关心的属性,如效率、灵活性、完整性、可靠性等;开发者关心的属性,如可维护性、可复用性、可移植性等。
(5) 未来可能的扩充需求:如HDIS各组的合并,3维虚拟现实的效果等等。
5.进行需求分析的步骤有哪些?
1.确定系统的综合要求 2.分析系统的数据要求 3.导出逻辑模型
4.修正系统开发计划
6.简述建立原型模型对软件需求分析的作用。
可以快速构建旨在演示目标系统主要功能的可运行程序,帮助用户确定及提供更为精准的需求,以利用户和开发者能够在目标系统应该“做什么”这一问题上尽快达成一致。
7.解释实体-联系图及其用途。
实体-联系图是按照用户的观点对数据建立的模型。描述从用户角度看到的数据,反映用户的现实环境,并且与在软件系统中的实现方法无关。
8.说明为什么需要进行需求验证及验证的步骤有哪些?
进行需求验证是为了确保软件开发的质量,降低开发成本。通常对需求进行验证的步骤有:验证需求的一致性、验证需求的现实性、验证需求的完整性和有效性。
第四章 总体设计
3.简单说明系统总体设计的步骤。
典型的总体设计包括以下9个步骤: 1、确定最佳方案 2、选取合理方案 3、推荐最佳方案 4、功能分解 5、软件结构设计 6、设计数据库 7、制定测试计划 8、书写文档 9、审查和复审
5.为什么要尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合?
减少模块之间的关联度,提高模块的独立性。
因为内容耦合会导致一个模块修改另一个模块的内容,使得程序逻辑发生严重问题。
而公共耦合是若干模块通过一个公共数据环境相互作用,公共部分的改动将影响所有调用它的模块,公共部分的数据存取无法控制,并且复杂程度也会随耦合模块的个数增加而增加。
控制耦合是一个模块通过传递开关、标志、名字等控制信息,明显地控制选择另一个模块的功能。由于接口单一,因此仍然会影响被控模块的内部逻辑。
而数据耦合只是模块间通过数据参数来交换I/O信息,因此不会对其它模块产生任何等影响。
6.为什么模块的规模要适中?
过大不易理解;太小则接口开销过大。
7.请说明为什么模块控制的宽度和深度要适度。
深度过大表示分工过细,而宽度过大则表示系统复杂度大,所以模块控制的宽度和深度要适度。
8.简述面向数据流设计方法的基本思想。
将由数据流图描绘的信息在系统中加工和流动的情况映射成软件结构。
9.常用数据流类型有哪些?
变换流和事务流。
10.面向数据流的设计方法主要有哪几个步骤?
主要有下面7个步骤: 1.复查基本系统模型 2.复查并精化数据流图
3.确定数据流图具有变换特性还是事务特性
4.确定输入流和输出流动边界,从而孤立出变换中心 5.完成“第一级分解” 6.完成“第二级分解”
7.使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化
第五章 详细设计
1.详细设计的任务是什么?
包括模块的算法设计、模块内的数据结构设计、模块接口设计、其它根据软件特点需要完成的设计、模块测试用例设计、设计文档编写、设计评审。
2.在对系统做详细设计时,应遵循哪些原则?
① 模块的逻辑描述应清晰易读、正确可靠; ② 设计的处理过程应该简明易懂;
③ 选择恰当的描述工具来描述模块算法。
3.简述结构化设计的特点。
① 自顶向下、逐步求精;
② 具有单入、单出的控制结构(取消GOTO语句)
4.结构化程序设计中有哪几种基本控制结构?分别描绘在程序流程图、盒图和PDA图中这些基本控制的图例。
(1) 顺序结构 (2) 选择结构
(3) 先判定型循环结构 (4) 后判定型循环结构 (5) 多情况选择
7.试说明ISO为什么要建议停止使用程序流程图,而推荐使用PDA图?
由于程序流程图中的GOTO语句回严重地损害程序结构,而无法实行结构化设计。PDA图则既吸取了程序流程图好学、好用、好懂,方便、灵活的优点,又保留了N-S图结构化设计的特点,很好地满足了软结构构设计图形工具的要求,以及PDA图所具有的① 结构清晰,层次分明,易读;② 支持逐步求精的设计思想;③ 容易将PAD自动转换为高级语言源程序等特点,因此,ISO要推荐使用PDA图。
9.试说明Jackson方法是一种怎么样的程序设计方法。它有哪些工作步骤?
Jackson方法是以数据结构(data structure)为基础设计每个模块的处理过程,将数据结构转化成程序结构。具体工作步骤有:
第1步:用Jackson图描述 I\\O 的数据结构
第2步:在两个图中指出有直接因果关系、可以同时处理的单元 第3步:将数据结构映射到程序结构
第4步:列出所有操作条件,并分配到上幅程序结构图中 第5步:用Pseudocode 表示程序
第六章 实现
1.说明什么是程序编码?为什么程序设计语言的特点和编码风格会影响到程序的可靠性、可读性、可测试性和可维护性?
所谓“编码”,就是将在低级抽象层次得到的详细设计结果,翻译成用某种程序设计语言书写的程序。是软件设计的自然结果。
而程序设计语言是否有理想的结构化、模块化机制,是否有可读性好的控制结构和数据结构等特性,以及程序设计语言提供的编译、软件工具等,再加上程序的设计风格会很深刻的影响软件的质量和可维护性、可测试性、可靠性等。
2.用户界面设计的最一般原则,即所谓“黄金规则”是什么?
1.置用户于控制之下;2.减少用户的记忆负担;3.保持界面一致。
3.软件界面设计包含了哪几个方面的基本内容?
界面设计包括三个方面:1.软件构件间接口;2.软件与其它系统的接口;3.软件与操作者之间的接口,即用户界面。
4.用户界面提供系统服务的方式通常有哪两种?
命令驱动和屏幕菜单驱动
5.WIMP界面是屏幕菜单驱动用户界面的一种形式,其设计准则有哪些?
(1) 明确的动作:在屏幕上指点并操纵对象 (2) 即时反馈:操作结构即见
(3) 增量效应:图标应被拖曳连续移动,而非跳跃 (4) 可视交互:交互操作与用户概念模型匹配 (5) 剥皮式学习:学习系统功能复杂性逐层加深 (6) 可逆动作:也即应有退回操作
(7) 事先验证:只允许合法操作产生效果
6.为什么说软件界面设计的质量会直接影响到用户对软件产品的评价?
用户界面(User-interface)又称人机界面(man-computer interface),是用户和计算机联系的中间媒介,是系统中最重要、最关键的部分之一。用户界面设计的好坏,直接影响到系统设计的成败。
这是因为,如果一个界面设计的不好,也即通常所说的用户界面不友好,可以使用户在使用时感到不便,甚至制造麻烦,系统就难以发挥应有的效益,甚至可能被用户弃用。
7.什么是系统响应时间?系统响应时间有哪些重要属性?
系统响应时间指从用户完成某个控制动作,到系统给出预期响应的时间。 系统响应时间有2个重要的属性:长度和易变性。
8.在设计软件系统的用户帮助设施时,需要注意解决哪些问题?
1.在用户与系统交互期间,是否任何时候都能获得关于系统任何功能的帮助信息? 2.用户怎样请求帮助? 3.怎样显示帮助信息?
4.用户怎样返回到正常的交互方式中? 5.怎样组织帮助信息?
9.软件出错处理设计,即软件安全性设计。一个交互式出错处理程序应该具备哪些功能和属性?
1.信息应该使用用户可以理解的术语描述。
2.信息应该提供有助于从错误中恢复的建设性意见。
3.信息应该指出错误可能导致的后果。 4.信息应该伴随感官提示。 5.信息不能带有指责色彩。
10.测试的最基本目标是什么?
以尽可能小的代价,发现尽可能多的错误。
11.软件测试的原则有哪些?
① 应当把“尽早和不断的测试”作为座右铭 ② 测试应由独立的专业测试机构来完成 ③ 测试工作要全面,但不可能实现“穷举” ④ 只能尽可能查错,不能证明程序中没有错 ⑤ 软件测试符合2-8(Pareto)原理 ⑥ 应妥善保存测试文档
⑦ 制定严格、合理的测试计划
⑧ 错误经过修改后,相关的测试必不可少
12.软件测试的方法有哪几种?
黑盒测试和白盒测试。
13.简单说明什么是白盒测试,什么是黑盒测试。
黑盒测试是把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程的测试方法。黑盒测试又称功能测试。
白盒测试是对程序的执行细节进行测试,通过设计测试数据,验证程序模块的每个路径的执行情况。白盒测试又称结构测试。
14.简述软件测试的步骤。
(1) 单元测试 —— 程序设计 & 代码bugs (2) 子系统测试 —— 模块连接
(3) 系统测试 —— 需求确认 & 系统设计 (4) 验收测试 —— 用户加入
(5) 平行运行 —— 新旧系统比较运行结果
16.为什么单元测试必须由编程者自己完成?
单元测试是对程序逻辑结构的测试。而对程序结构最为熟悉的,莫过于编程者。再者,高质量的程序模块是构造系统的基础,因此编程者必须向下一道工序提交符合质量要求的产品。
17.单元测试的主要手段有哪些?
代码审查、计算机测试等。
18.单元测试主要从哪5个方面进行?
主要测试以下五个方面: 1. 模块接口 2. 局部数据结构 3. 重要的执行通路 4. 出错处理通路 5. 边界条件
19.为什么人工代码审查十分重要?
一次审查可发现多个错误,不必改一个测一个。