这篇文章只提供题号为 奇数 的答案,因为是我们的NT老师要求的
1.名词解释:分解,模块化,逐步求精,软件测试,测试需求,测试设计,测试覆盖,软件调试,缺陷,软件质量,编程风格。
分解:把一个大的、错综复杂的问题划分成一个一个相对简单、独立的问题,运用合适的方法分别解决。
模块化:通过把一个程序分解成简单独立、互相作用的模块,对不同的模块设定不同的功能,来实现大型、复杂的程序。
逐步求精:将现实问题经过几次抽象(细化)处理,最后到求解域中只是一些简单的算法描述和算法实现问题。
软件测试:在规定的条件下对程序进行操作,以发现错误,对软件质量进行评估。
测试需求:组件/系统中能被测试用例验证的条目或事件。
测试设计:包含设计测试用例,实施哪些层次的测试、采用哪些测试工具或框架、如何组织人员测试等。
测试覆盖:指测试所包含的软件的特征、元素、成分等方面的程度或范围。
软件调试:指根据程序的出错情况,分析、猜测可能出现错误的程序区域,让程序运行,观察程序的变化来发现错误的根源。
缺陷:程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。
软件质量:软件与明确地和隐含地定义的需求相一致的程度。
编程风格:编写代码的样式规则。
3. 针对算法的数据结构的4种关系,除了本书给出的例子,你还能分别为4种情形举出若干个例子吗?
不能,因为没搜到。
5. 模块化的基本原则是什么?如何评价程序的模块化?
单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特原则,开闭原则
(1)有利于程序复用。
把功能模块化之后有利于程序后续开发的复用,这样可把公共的功能进行深入的抽象、优化。
(2)利于系统开发集成
模块化的功能,明确了本模块的职责,已定的模块只负责该模块的特定功能,这样以系统以后做集成、重构神马的时候将会有很大的便利之处。
(3)利于调试、后续功能拓展
程序模块化后,单个模块既是系统的组成部分,也是个单独的个体,对于系统开发而言,针对单个模块进行调试往往会比整个系统的调试要方便得多。并且在系统要进行后续开发的时候,把要拓展的功能拆分到具体的模块当中这样把大大减轻了开发难度及成本等。
(4)代码结构清晰易读
在编写代码的时候把程序模块化,这样将使得代码的可读性更强。把方法的职责明确且单一化(即一个方法只做一件固定的事情),在以后维护的时候大大减少维护人员在阅读理解代码上时间。
7. 解释模块耦合性的含义,对不同的耦合举例说明
耦合性,也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。
数据耦合
int sum(int a, int b) {
int c;
c = a + b;
return c;
}
main() {
int x, y;
printf("x+y=%d", sum(x, y));
}
主函数与sum函数之间即为数据耦合关系
控制耦合
void output(int flag) {
if(flag) printf("OK!");
else printf("NO!");
}
main() {
int flag;
output(flag);
}
主函数与output函数之间即为控制耦合关系.
内容耦合
public class Product {
public float unitPrice;
......
}
public class Order {
private Product p = new Product();
public void setItem() {
p.unitPrice = 100;
}
}
Product 类与 Order 类构成内容耦合
非直接耦合
void PrintDog() {
System.out.println("汪汪汪");
}
void PrintCat() {
System.out.println("喵喵喵");
}
public static void main(String[] args) {
printDog();
printCat();
}
标记耦合
typedef equation {
int a;
}Equation;
Equation