基于极限编程的潮流上机实践教学探索

2012-06-21 09:57孙英云刘宝柱
电气电子教学学报 2012年3期
关键词:数组上机潮流

孙英云,董 雷,刘宝柱,艾 欣

(华北电力大学电气与电子工程学院,北京 102206)

0 引言

“电力系统潮流上机计算”是我校精品课程“电力系统分析基础”的实践课程,也是我校电气工程及其自动化专业学生的必修课程。由于本专业C语言课程安排在大学一年级,而本课程安排在大三春季学期末,中间近两年多的时间缺乏编程训练,多数学生还不具有独立编程能力。同时,学生在理论课的学习中对计算机潮流计算的理解也不够深刻,还需要在本门实践课程中加以深化。

我校“电力系统潮流上机计算”实践课程要使学生理解电力系统的计算机潮流算法和原理,初步掌握利用计算机语言实现潮流计算软件开发的基本方法[1]。

近年来软件工程领域涌现出了诸多新成果,由Kent Beck在1996年提出的极限编程是一种新型轻量级的软件工程方法[2]。该方法成为商业软件开发的指导原则,其核心理念包括测试优先开发和双人结对编程等。

我们将极限编程XP(Extreme Programming)思想的两个核心理念引入到“电力系统潮流上机计算”课程教学当中,取得了较好的教学效果。

1 极限编程核心理念

测试优先是极限编程方法中的一条重要原则,即在编写正式代码前先编写好测试代码。测试优先的编程思路非常符合面向对象的编程技术原则:即面向接口而不是面向实现。这一方面可以帮助学生分析具体函数的输入与输出,实现通过接口设计将复杂程序进行解耦;另一方面也可帮助学生对程序逻辑错误进行定位,而这种程序逻辑错误在传统编程方法中通常难于发现。

结对编程是极限编程的另外一条重要原则,即两位程序员坐在同一台电脑前合作完成同一段代码或同一组测试。与两位程序员各自独立工作相比,结对编程的好处是通过相互讨论,加深程序员对问题的理解,提高代码的可读性和质量,同时也可提高编程效率。

由于本专业全部学生都要完成潮流上机实践课程,机房中的计算机数量不足。同时考虑参与上机实践的学生计算机水平良莠不齐,我们要求计算机水平较高的学生和水平较低的学生结对,在答辩时问题主要由水平较低的学生回答。两人结对编程,在碰到困难时通过两人讨论来克服,有效避免了单人编程时由于畏难情绪而消极等待的情况。

2 由浅至深的教学步骤

2.1 Hello World

此一步骤向学生讲述VC6中工程的建立,帮助学生回忆C语言课程中编程、调试和运行程序的基本过程。

2.2 读入输出数据

计算机潮流计算需要准备数据,本例即是帮助学生完成潮流计算中的数据准备工作。学生应当从IEEE标准算例中读取母线和线路数据,存入相应的结构数组当中,并通过输出至屏幕和文件两种方式验证读入数据程序的正确性。

教师首先给出读入母线数据的示例程序,学生则根据示例程序完成读入线路数据,并输出到屏幕和文件的工作。在此步骤完成之后,绝大多数学生均基本掌握了C语言中数组和循环语句的用法,为下一步工作打好了基础。

2.3 节点导纳阵生成

在数据准备完毕之后,即可进行节点导纳矩阵的生成工作。教师在本教学步骤中,指导学生利用已有的线路和母线数组建立节点导纳阵。

2.4 节点不平衡功率的计算

在节点电压、相角和节点导纳阵已知的情况下,即可进行节点不平衡功率的计算。此例的主要难度在于节点不平衡功率中节点的排列顺序和数据文件中给定的节点顺序不一致。我们决定引入测试优先的编程思路:教师先行给出平启动下节点不平衡功率的结果(一个一维数组),学生可利用测试代码将自己的计算结果和所给结果进行对比,发现不一致结果出现的位置后进行相应的处理。

2.5 Jacobi矩阵的生成

Jacobi矩阵的生成是潮流计算中最困难的部分之一。其困难之处在于利用二维数组表示矩阵以及矩阵元素在矩阵中所处的位置问题。由于在前两个示例中,学生已学会数组调用及如何处理数组元素排列顺序的方法,因此可较顺利的完成Jacobi矩阵的生成。

2.6 线性方程组的求解(选做)

由于在电力系统稳态分析的教学中,对线性方程组的计算机求解不做要求,因此教师提供了线性方程组的求解程序及其示例代码。学生可根据示例程序直接调用该程序即可得出结果。对于部分编程能力较强,进度较快的学生可根据自己的实际情况选做这部分内容。这样既保证了大多数学生的进度,也可使部分优秀学生有充分发挥其潜力的空间。

教学实践中发现,在顺利完成上述6个步骤的基础上,绝大多数学生均可顺利完成潮流上机实践,并完成最终的报告。最终答辩时发现学生对潮流计算的理解及计算机能力均有了明显的提高[3,4]。

3 测试优先的编程思路

在潮流上机实践中,节点导纳阵、节点不平衡功率的计算以及Jacobi矩阵的生成是主要难点。为此,我们采用了测试优先开发原则。下面以节点导纳矩阵的生成为例进行说明。具体到潮流上机实践中,我们提供了如下具体程序结果。

(1)给出节点排列顺序,即可给出节点导纳阵;

(2)给出节点电压初值、潮流方程类型(极坐标或直角坐标)和方程排列顺序情况下第一次功率不平衡量结果(一维数组);

(3)给出节点电压初值、方程排列顺序、潮流方程类型及变量排列顺序后的Jacobi矩阵元素的值(二维数组);

先将节点导纳阵、给定节点电压初值(平启动)的第一次Jacobi矩阵和节点不平衡功率,以文本文件的方式提供给上机学生。学生在编写正式程序之前先编写测试程序,只有当程序计算结果和所给结果一致(绝对值误差小于1e-5)时测试才能通过。

在实际上机操作时发现,学生在实践中所出问题主要可分为两类,其一是公式写错,其二是矩阵或数组的索引写错。而不论是何种错误,测试优先的编程原则都可以帮助学生迅速定位错误,显著提高了编程效率。

4 测试优先方法实践

下面我们以节点导纳阵的编写为例,具体说明测试优先方法的实施过程。经过对现有单元测试工具的综合比较之后,我们选用了Cppunit作为本教学实践中单元测试的工具。Cppunit是开源和跨平台的用于C++的单元测试工具[5],具有易于使用等、手册翔实和例程丰富等优点。

在正式使用之前,需要教师在集成开发环境(IDE)中完成Cppunit的安装。现以VC6为例,采用如下步骤。

1)首先从网站上下载Cppunit,并按照其说明进行编译,也可直接下载相应操作系统下已编译好的静态或动态链接库(lib或dll文件);

2)在VC6中将CppUnit的头文件和库文件引入到潮流计算工程当中,如图1和图2所示。

图1和图2的下方列表框中最后一行分别是Cppunit的头文件和类库所在目录。点击OK按钮即可将其添加到VC6的工作目录当中,这样学生就可直接在自己的程序中调用Cppunit的类和方法。

3)学生在正式编程之前,需要完成测试代码的编写工作,测试代码主要是判断所生成节点导纳矩阵的元素值和教师所给出的相应结果的误差值是否小于1e-5。只有节点导纳矩阵所有元素均满足上述条件时才能通过测试。

图1 Cppunit头文件配置图

图2 Cppunit库文件配置图

4)学生在完成测试代码后,方可进行节点导纳矩阵生成代码的编制工作。当编写完成且编译通过后,即可利用测试程序进行测试。如果没有通过测试,学生可根据Cppunit提供的信息对节点导纳矩阵中出错的元素进行定位,进而对代码进行检查并修改,以通过测试。测试通过则说明学生编写的节点导纳矩阵生成程序是正确且可用的。

和传统的潮流上机教学方法相比,测试优先的编程思路的优势主要体现在两个方面:①可以将复杂的潮流程序划分成相对较小的模块,每个模块均可单独测试,降低了问题的复杂度;②通过测试的代码不但没有编译错误,同时也最大限度降低了逻辑错误发生的可能性,而后者往往是初学者常犯且难于定位的错误。

5 结语

电力系统潮流上机实践的顺利开展对于学生掌握计算机潮流计算流程,加深对稳态分析课程的理解极有帮助。笔者将软件工程领域的最新理论—极限编程相关理念引入到课程教学当中,进行了有益的探索和尝试。通过课程结束对所有上课学生的调查发现,不但所有学生都圆满完成了潮流计算程序,而且90%多的学生都表示这门课程收获很大,有60%多的学生表示有兴趣进行更高难度的编程尝试。这说明本教学探索在圆满实现预定的课程目标的同时,也激发了学生动手实践的兴趣。

[1]沈才梁,宋雯霏,高职计算机类课程上机实践环节教学研究,宜昌:三峡大学学报(人文社会科学版),2005,(27):272-273

[2]Kent Berk,Cynthia Andres.Extreme Programming Explained:Embrace Change(2nd Edition)[M].Addison-Wesley Professional,2004

[3]陈珩.电力系统稳态分析(第三版)[M].北京:中国电力出版社,2007

[4]王锡凡,现代电力系统分析,北京:科学出版社,2003

[5]CppUnit,http://sourceforge.net/projects/cppunit/[EB/OL]

猜你喜欢
数组上机潮流
周金应
JAVA稀疏矩阵算法
标准化护理程序对体外膜肺氧合术患者上机各阶段用时的影响
JAVA玩转数学之二维数组排序
上机数控“可疑”的高毛利率
Excel数组公式在林业多条件求和中的应用
潮流
潮流
潮流
从2014到2015潮流就是“贪新厌旧”