liu's profileALEX&ALICEPhotosBlogLists Tools Help

Blog


    September 01

    从概率的角度分析程序出错的可能性

    今年终于完成了风险管理这门课程前两周的练习,总算赶上一门课程的进度,当初学概率用英文还一知半解的东西,现在竟要用英文学习。好在现在所学的概率只是一些简单理论的应用,而计算则大部分由已经编好的程序完成。

    在正式开始本文重点内容之前,先简单总结一下所学的内容。

    本文导读:

    1. 关于概率
    2. 关于计划分析(Schedule analysis)
    3. 想法:从概率的角度分析程序出错的可能性
    4. 理论联系实际:应用构想
    5. 附录:相关资料

    关于概率

    1. 概率的基本概念:随机事件、样本空间、概率定义、随机变量
    2. 贝叶斯法则(Bayes rule)
    3. 概率分布:函数、期望值、中值、标准差、双期望值定理(Double Expectation
    4. 常用概率分布曲线:Normal、Exponential、Triangular、PERT Distribution
    5. 概率分布的运算:Sum, Product, Maximum

    关于计划分析(Schedule analysis):

    1. 网络图:起点、终点、活动、里程碑、不确定性、虚拟节点、顺序
    2. 目的:为整个项目过程、部分活动或里程碑建立累计的概率分布函数;衡量项目中某个活动导致整个项目延迟的可能性;
    3. Critical Path Method(CPM):利用Most likely value找出网络中的关键路径(最长),但是此方法缺陷是只能用于处理确定的活动,无法处理过程中的不确定性因素。
    4. Program Evaluation and Review Technique(PERT):用于将不确定性因素考虑在内的关键路径上的衡量,但是此方法的缺陷在于,如果存在多条期望时间重叠的路径,此方法无法处理。
    5. Successive Schedule Planning(SSP):将项目过程中所有活动纳入分析范围,考虑到各个节点、路径的不确定因素,可以完整的分析和衡量整个项目过程消耗时间的方法,最终建立一个累积的概率分布曲线。
    6. Monte Carlo Simulatoin:通过大量随机实验,获得数据绘制分布曲线,从曲线上读数。

    这门课程头两张的内容比较抽象,练习也都是概念上的计算题。从这两周的课程中我认识到一点,从不确定性以及概率的角度看待工作活动似乎更加合理。倒不是说一定要用这些公式或模型去套用,只是因为工作中不确定性的因素太多,你要接受它们,并充分估计不确定性因素所带来的负面影响。

    想法:从概率的角度分析程序出错的可能性

    工作的时候,一直有个想法。想法的背景是这样的:因为几乎每个新写的程序都是独特的,相当大数目的程序从开发到传输的生命周期不超过40人时,甚至不超过10人时。在如此短促的开发过程中,几乎没有可能应用所谓的软件工程或质量保证什么的,因为那样会极大的增加成本。

    我的想法是,能否用一种自动化的方法,衡量程序的质量或复杂程度?我曾经在工作中通过对程序文法分析获得程序中的IF、LOOP、CHECK、SUBROUTINE等代码块的数量,为每一种代码块设定一个参数,将各方面数据做累加,用于衡量程序的复杂度。当时遇到了一些问题,就是无法将各种代码块有效、合理的组合在一起,并且没能设定合理的参数。

    应用构想

    这个想法现在看来仍然值得继续尝试,在这两周学习的背景知识下,作出如下调整:

    • 分析历史数据(变更、版本),获取一部分数量的样本数据,50~100个程序,其中包含各类以及小、中、大规模的程序,按如下方式记录,此表格中的缺陷概率(M)将作为特征代码缺陷概率的中值(MEAN),其中 缺陷概率= 缺陷次数/出现次数,缺陷比重=缺陷次数/缺陷总次数

      特征代码 出现次数 缺陷次数 缺陷概率(M) 缺陷比重
      IF…ELSE… 150 9 6% 20.9%
      WHILE 50 2 4% 4.7%
      CHECK 15 4 26.6% 9.3%
      SELECT… 300 25 8.3% 58%
      DELETE… 40 3 7.5% 6.9%
             
      TOTAL/AVG 555/111 43/8.6 10.48% 100%
    • 假定我们有一个程序:Program A,其中包含各种特征代码,相关数据如下表所列:

      特征代码 正确概率 出现次数 正确概率的n次方,n=出现次数
      IF…ELSE… 94% 2 0.8836
      WHILE 96% 3 0.884736
      CHECK 73.4% 1 0.734
      SELECT… 91.7% 5 0.648405
      DELETE… 92.5% 4 0.732094
          概率乘积 P(A)=27%(整个程序的正确概率)
      事实上,在本例中,我们将本程序分解为15个相互独立的随机事件,那么所有缺陷事件均不发生的概率就是每个事件正确概率的乘积。
    • 根据工作需要,设定P(A)的临界值,如当P(A)<=40%时,需经过非程序员本人的质量测试方可传输。

    这其中的参数(主要是缺陷概率)可通过对历史数据的观察获得初始值,并随项目进展更新,缺陷概率随开发人员水平不同而变化,随开发时间不同而变化,本构想尚未对其他参数进行设定,但增加相应参数则可以扩展模型的适用范围及准确度。

    此工具在工作中的应用,可以自动、快速的分析程序结构,依据历史数据计算程序出错的概率,开发人员可直观判断一个程序的风险,并增加相应的质量保证活动。对于短周期、小规模开发、频繁变更的项目尤其有效。若能在应用的同时增加数据的收集,可用于矫正模型参数以及评估质量改进的效果。

    目前,这还只是一个构想,写到这里,我想我又犯了一个错误:在写下这些构想之前,没有翻阅资料,也许这些想法早有人实现甚至有成熟的工具,也有可能这根本就是没有意义的胡言乱语,总之下次,我会在构想一件事之前,看看别人是怎么想的。

    附录:一些相关资料

    http://www.alicenalex.com/2009/09/analyzing-program-error-rate-from-possibility-aspect/

    August 30

    挪威最大教学平台——It's Learning简介

    请访问我的独立博客:http://www.alicenalex.com/2009/08/its-learning-the-largest-education-platform-in-norway/ 

    It's LearningNTNU 教学活动中一个非常重要应用程序,这是一个基于Web的应用,主要用户是老师和学生。今年已经是该系统在NTNU应用的第4年,目前所有学生以及老师都是这个系统的用户。

    It's Learning 现在的版本是3.3,是世界上领先的教学支持平台,拥有超过100万活跃用户,该平台可以用于支持学生与老师学习过程的各个方面。该平台结合了易用性以及支持高级应用的可能,并且适合个个年龄层次的教学活动。该平台拥有从小学开始包括中学、大学、说是一直到博士生阶段的用户。可见其应用的广泛性。

    在功能方面,老师可以通过该平台全面了解学生学习、作业的进度,可以轻松为个别学生提供针对性教学支持,可直接与学生进行沟通,可与同事共享资源,可以在教学中引入多种外部数字资源等等;学生则可以用此全面管理自己的学习、任务以及进度,可以在线提交多种格式的作业,如文本、图像、声音或是视频,可以和老师直接沟通等等。更多信息请访问It's Learning产品页面

    从我个人对此平台的使用来看,作为学生,我可以从这个平台上了解很多信息,该系统同时承载着学校、院系或老师集中发布信息的重要作用。该系统中最重要的功能莫过于课程管理,老师可以上传各种与课程相关的资料,如课件、阅读资料等,老师可发布通知,作业提交要求,发布活动等。该系统以树状结构组织各种资料,并且提供Dashboard综合浏览各方面信息,非常方便。学生则可以下载课件,提交作业,获取老师发布的各种信息,学生还可以组建小组,完成Group Assignments。

    itslearning

    由于有这套系统,老师随时可以发布信息,而不必非得在上课的时间;老师可以随时将准备好的材料上传到系统,也无需同学们自带U盘或者用邮件分发。学生也可以随时了解到课程进度及下载资料,并且可以在任何时间提交作业,当然,如果超过了作业提交期限,就会很麻烦了。

    事实上,在NTNU使用It's Learning之前使用的是另外一套教学支持平台,但是4年前由于不能很好的满足需求,那套系统由现在的It's Learning取而代之。It's Learning以及先前使用的那套系统一样,都是由第三方软件供应商提供,而NTNU没有自己开发该平台的原因是成本可能更高也难以满足需求。在整个挪威全国范围,此类教学支持平台的广泛应用始于8年前,也就是2000~2001年,当时正在发生一场全球的经济危机,相信此类系统的应用与经济危机造成的成本压力不无关系。

    国内的教育支持平台我没有研究过,但是我所上的大学并没有此类教学平台,我们上学的时候需要拿着U盘去找老师考课件,而事实上,也不是所有的老师都有电子课件。我所在的学校应该也算是硬件设施比较好的学校了,因此有理由相信,大部分学校应该都没有此类大规模的、集中的教学平台支持。

    鉴于此,我认为此类系统在国内教育机构的应用将是一个不小的机会,只是当下时机尚未成熟,在此,我列举一些理由:

    1. 硬件水平较低:计算机、互联网普及程度以及应用程度较浅,IT基础设建设施投入不足,如计算机、打印机、内网、存储、VPN等。
    2. 教学模式较为传统:计算机应用起步较晚,多数老师仍然习惯使用粉笔而不是电子课件,学生也更为习惯上课听讲,下课看书的学习方式。
    3. 人力、时间成本较低,实施成本相对较高:中国低廉的劳动力与时间成本,让IT应用的价值难以体现,并且相对高人力成本的发达国家,实施成本则相对很高。
    4. 保守的性格:中国人的保守性格源于5000年的历史以及地大物博的国土,保守使得新事物被接受的时间大大延长,直接的体现就是不愿改变,或是尝试新的事物。
    5. 人口众多:中国人多,虽然人多本身不是什么问题,但是因为人多,所谓众口难调,新事物往往很难满足所有人的需求,因此也就难以满足作用为整体的教育机构的需求。

    我不知道中国的教育机构IT应用能否在未来5年或是10年达到这种全民皆用户,遍地是电脑的水平,但是我知道这将是一条漫漫长路,对于IT应用来说,中国的用户基础、硬件基础、知识和技能水平仍处于较低的水平。我不是因为看到了挪威的高水平而贬低中国的国情,恰恰相反,从挪威过去30年因为石油财富而快速崛起的过程,我试图寻找在国内的发展机会,我希望自己能用2年的时间,学到更多先进的东西,将来回到祖国,建设自己的家园。

    我的意大利室友跟我说,曾经一度意大利只是一个普普通通的国家,是大量归国的留学生促使意大利成为了一个发达的国家。我没有考证这样的历史,但是我相信世界各国都鼓励学生出去学习,都是希望将来他们能回国为国出力。

    如果大家有对国内此类教学支持平台应用有所了解或者也感兴趣的话,希望能和我联系。