发表于:2011/7/29 7:27:24
#0楼
723事故和控制软件的安全问题
灵芯实验室 plc.lingcore.com
动车事故的原因目前已有官方调查结果,是通讯设备设计问题。究竟是硬件问题还是软件问题,现在不明朗。我们对于铁路软件不了解,但是,一般而言,要保证嵌入式软件的安全性,难度很大。
ATP系统和信号系统中的软件称为嵌入式软件,在国外这类软件价格很昂贵,因为它们的设计和调试都很困难。据说日本在向中国转让高铁技术时,没有转让软件技术。这些技术确实是核心中的核心。
有程序设计经验的人都知道,编程过程中错误难免,一个程序需要反复改错才能达到基本正确。普通程序写完之后可以直接在带有终端屏幕的计算机上运行,因此发现错误相对而言比较容易。嵌入式软件与此不同,它们通常要安装到现场机器中进行调试。这样做不但代价高时间长,而且还很难全面覆盖各种可能出现的情况。虽然有些软件辅助程序的调试,但功能不够。
我们可以提供一组有据可查的例子来说明国内软件出错率比较高。
我们灵芯实验室(plc.lingcore.com)正在进行PLC程序测试技术的研发(高铁控制中很可能也使用这种计算机,负责CTCS-2的和利时公司是中国最大的PLC厂商之一)。在研发过程中,我们检查了一些公开的PLC程序例子,发现许多错误。
一些非常简单的控制程序,人们也许以为其中不会有软件错误,但我们却发现其中存在多个程序错误。
比如,一个只占半个屏幕的音乐喷泉小程序居然有三个错误:
http://plc.lingcore.com/page12.html#top
喷泉程序的功能仅仅是控制几个喷口在指定时刻喷发或停止,为什么这么简单的程序也会有错呢?原因是几个动作混合在一起时,程序就容易混乱。这个程序中有三个喷口,每个喷口要做几个喷发和停止动作,因此就乱了。
再看红绿灯控制,我们总共检查了三个程序。第一个只做基本控制,第二个程序加入了强通控制,第三个程序加入了人行道控制。第一个没发现错误,后两个都错。一个在强通控制结束后系统没有及时复原,另一个在关闭系统之后两边的人行道灯同时保持红灯。由此可见,程序做了一点扩展之后,复杂度立即增加许多,错误率大大上升。
http://plc.lingcore.com/page4.html
查错的时候,需要把各种情况都考虑到,不能只查典型情况。比如,一个5楼电梯程序,测试时需要考虑人在1楼到5楼每层电梯外面按电钮的情况,对其中的任何一层,还需考虑电梯在1到5层的情况,这样就有25种情况;然后还要考虑人在电梯里面,电梯在任何一层的情况,多人同生死按下按钮的情况等等。在我们检查的一个电梯程序中,二,三,四楼用户呼唤电梯都能得到正常结果,但是一楼用户呼唤电梯就出错。这个程序是上述几个程序中最复杂的一个,程序也不算长,仅仅两个屏幕。
我们查出的这些错误,结论不一定都对,我们也会犯错误。但是,一旦我们给出一个错误列表,专业人员很容易验证这些错误是否属实。
喷泉程序,红绿灯程序,电梯程序都是很普通的技术,程序也不长。但查错并不容易。读者可试一下去检查电梯程序http://bbs.gkong.com/Dispbbs.asp?id=268923,在不了解何种错误的情况下,看看要花多长时间才能发现程序的错。
在这些简单程序中都存在多错误,铁路那么复杂的系统,要保证程序安全性难度的确很高。
发现程序错误需要花费很长时间,发现之后要找出原因也要花费时间,在改正错误之后往往还会引起新的错误。因此改完之后还需要做大量的测试工作。
灵芯实验室 plc.lingcore.com
动车事故的原因目前已有官方调查结果,是通讯设备设计问题。究竟是硬件问题还是软件问题,现在不明朗。我们对于铁路软件不了解,但是,一般而言,要保证嵌入式软件的安全性,难度很大。
ATP系统和信号系统中的软件称为嵌入式软件,在国外这类软件价格很昂贵,因为它们的设计和调试都很困难。据说日本在向中国转让高铁技术时,没有转让软件技术。这些技术确实是核心中的核心。
有程序设计经验的人都知道,编程过程中错误难免,一个程序需要反复改错才能达到基本正确。普通程序写完之后可以直接在带有终端屏幕的计算机上运行,因此发现错误相对而言比较容易。嵌入式软件与此不同,它们通常要安装到现场机器中进行调试。这样做不但代价高时间长,而且还很难全面覆盖各种可能出现的情况。虽然有些软件辅助程序的调试,但功能不够。
我们可以提供一组有据可查的例子来说明国内软件出错率比较高。
我们灵芯实验室(plc.lingcore.com)正在进行PLC程序测试技术的研发(高铁控制中很可能也使用这种计算机,负责CTCS-2的和利时公司是中国最大的PLC厂商之一)。在研发过程中,我们检查了一些公开的PLC程序例子,发现许多错误。
一些非常简单的控制程序,人们也许以为其中不会有软件错误,但我们却发现其中存在多个程序错误。
比如,一个只占半个屏幕的音乐喷泉小程序居然有三个错误:
http://plc.lingcore.com/page12.html#top
喷泉程序的功能仅仅是控制几个喷口在指定时刻喷发或停止,为什么这么简单的程序也会有错呢?原因是几个动作混合在一起时,程序就容易混乱。这个程序中有三个喷口,每个喷口要做几个喷发和停止动作,因此就乱了。
再看红绿灯控制,我们总共检查了三个程序。第一个只做基本控制,第二个程序加入了强通控制,第三个程序加入了人行道控制。第一个没发现错误,后两个都错。一个在强通控制结束后系统没有及时复原,另一个在关闭系统之后两边的人行道灯同时保持红灯。由此可见,程序做了一点扩展之后,复杂度立即增加许多,错误率大大上升。
http://plc.lingcore.com/page4.html
查错的时候,需要把各种情况都考虑到,不能只查典型情况。比如,一个5楼电梯程序,测试时需要考虑人在1楼到5楼每层电梯外面按电钮的情况,对其中的任何一层,还需考虑电梯在1到5层的情况,这样就有25种情况;然后还要考虑人在电梯里面,电梯在任何一层的情况,多人同生死按下按钮的情况等等。在我们检查的一个电梯程序中,二,三,四楼用户呼唤电梯都能得到正常结果,但是一楼用户呼唤电梯就出错。这个程序是上述几个程序中最复杂的一个,程序也不算长,仅仅两个屏幕。
我们查出的这些错误,结论不一定都对,我们也会犯错误。但是,一旦我们给出一个错误列表,专业人员很容易验证这些错误是否属实。
喷泉程序,红绿灯程序,电梯程序都是很普通的技术,程序也不长。但查错并不容易。读者可试一下去检查电梯程序http://bbs.gkong.com/Dispbbs.asp?id=268923,在不了解何种错误的情况下,看看要花多长时间才能发现程序的错。
在这些简单程序中都存在多错误,铁路那么复杂的系统,要保证程序安全性难度的确很高。
发现程序错误需要花费很长时间,发现之后要找出原因也要花费时间,在改正错误之后往往还会引起新的错误。因此改完之后还需要做大量的测试工作。