1、1)分解:把一个大的,错综复杂的问题划分为一个一个相对简单、独立的
问题
2)模块化:模块化是把问题分解成容易理解,便于控制,便于实现的
子问题的一个重要手段,是实现控制复杂性的方式
3>逐步求精:不要求一步就编制成可执行程序,而是分若干步进行.
逐步求精
4>软件测试:描述一种用来促进鉴定软件正确性,完整性、安全性
和质量的过程
5>测试需求:组件/系统中能被一个/多个测试用例验证的条目/事件.
6>测试设计:由测试用例,层次测试,测试工具和自动化测试框架.
组成的测试方案
7>测试覆盖:测试所包含的软件特征,元素成分等方面的程度与范围
8>调试:理解程序的行为,发现可能的错误并排除
9>缺陷:产品开发或维护过程中所存在的错误毛病以及实现某种
功能的失效与违背。
10)软件质量:反映软件产品或服务满足明确的和隐含的能力总和
(1)编程风格:如何命名标识符、注释程序,编排程序格式
3.
一种算法,一种数据结构:线性表基本运算(求长度)
一种数据结构,一种算法:线性表的插入(头插法、尾插法)。
多种数据结构一种算法:用栈,二叉树实现四则运算
多种数据结构,多种算法:背包问题,降维计算
5.模块化原则
1.模块可分解性:2.模块可组装性.3、模块可理解性
4、模块连续性.
5.模块保护性.
模块化程序以函数作为基本单元,有助于了解转软件设计,使软件结构清晰,容易阅读与理解,并且容易测试与调试,提高软件可修改性。
7.耦合性是一个模块与系统内其他模块及与外部世界关联程度的度量
①非直接耦合
#include<stdio.h>
Void main()
{int a, b;printf("printaninteger mumber.“)
scanf(“%d,&a);
if(a<0)
printf("data emor!”);
else {b=fac(a);prt(b);}]
int fac(int n){.
intf;if(n0,n1)f÷1;
else f=fac(n-1)n; netum(f);}
void prt (int x)
此时。函数fac与prt之间为非直接耦合,因为他们之间的联系
完全通过主模块控制和调用来实现
②数据耦合
一个模块访问另一个模块,彼此之中是通过数据参数。
int.Multiply(int.xj.inty)
Multiply与main之间
{retum(Xy);}
为数据耦合
Veid main()l intx=0;
inty=0;
scanf(“%d%d”,&x,&y);
标记耦合
通过参数表传递记录信息
main(){ int j, b[1o];
for(i=0;j<10;j++)
b[j]=j;add(b[10]}
Void add (int a(10]).
{int s=0;s=a[3]+1;
printf(“%d\n”,s);}
main 与子函数之间为标记耦合。
控制耦合。
一个模块通过传送开关,标志,名字等控制信息明显控制另一模块功能。
static beol Signal;
Vaid. AdultOrNot(int.age)
{if(age>182
{Signal=1;}
else {signal==1;3}.
Void Wine OrNot(){
if(Signal==1){
printf(“%s\n”“已成年”了
else{
printf(“%s\n”“未成年”了)
int main()9 intAge=o;.printf.(“%s”“请输入年龄:”);
scanf(“%d”,&Age);
Adultor Not Age);}
外部耦合
一组模块都访问同一全局变量而不是同一金局数据结构。
int.a.b.
Vaid main()
{pin();b=a+l;prt();}
aidpi(){.printf (°pmiat aninteger number:“);
Scanf(%d&a);}
Void.prt().
fprintf(”%d/n“b);了
三个函数都存在外部耦合
公共耦合:若一组模块都访问同一个公共数据环境。
内容耦合:一个模块直接访问另一模块内部数据