问题提出:
虽然表6.3所示的方法适合于以前编写过的那些类型的小程序,但是,它并不适合于较大的或是新的程序类型,原因就是即使是再小的程序也是由数和过程构成的。对于较大的程序,很难把某个新的程序与以前开发的程序联系起来。请举例说明较大程序规模估计。
问题解答:
表6.5 学生Y的程序规模估计
学生 学生Y
日期 9/30/96
教员 先生Z
课程 CS1
程序 |
代码行 |
以前的功能 |
估计的功能 |
最小 |
平均 |
最大 |
Loops |
|
|
|
|
|
|
4 |
10 |
简单的While-Loop循环 |
|
|
|
|
5 |
14 |
中等的repeat-until循环 |
Repeat until |
7 |
11 |
14 |
|
|
|
|
|
|
|
Case |
|
|
|
|
|
|
2 |
11 |
小的Case语句 |
Case |
5 |
8 |
11 |
3 |
14 |
大的Case语句 |
|
|
|
|
|
|
|
|
|
|
|
Data |
|
|
|
|
|
|
6 |
18 |
小的链表 |
|
|
|
|
|
|
|
|
|
|
|
Calc. |
|
|
|
|
|
|
1 |
20 |
小的计算 |
Calculation |
10 |
15 |
20 |
|
|
|
|
|
|
|
估计 |
|
|
|
22 |
34 |
45 |
解决这个问题的一种方法就是使用如表6.5所示的一种表格。这里列出了不同的程序或程序函数和过程。有了大量的与程序有关的数据,可以像学生Y在表6.5中那样把一份清单分成几类(循环Loop、选择Case、数据结构data和计算calculation)。其他有用的类的示例有文本、控制、逻辑、显示和打印。目的就是建立一个历史记录,把以前编写的各个无素以及它们各自所包含的代码行的有关数据收集在一起。当考虑一个新程序的功能时,就可以估计每一个功能的规模,然后把所有这些功能的估计加在一起就得到了对整个程序的估计。
表6.5给出了如何使用这种方法的进行规模估计的示例。这里,学生Y已经收集了各类程序的一些数据。但是由于这些程序都很小,她仅列出这些程序的总规模。在估计新程序可能包含的代码行数时,她就判断新程序可能需要的各种类型的功能有多少行代码。
学生Y作估计时,首先查看新程序的需求并且建立如何构造此程序的一般策略。她希望使用一个repeat-until循环和一个简单的case语句,还希望作一个相当简单的计算。但是在作这些估计时,她不能完全肯定各个程序的规模,所以对每一个功能都估计出一个最小规模、一个最大规模和一个平均规模。虽然作估计时通常会用平均规模的数据,但考虑最大和最小规模有助于避免将规模估计的过大或过小。
|