我对软件工程的理解

这是我对软件工程的自己的一些观点。
以前我一直认为软件开发过程中技术是第一,设计分析是第二。但是有时候不能不承认设计分析是软件成败的关键。
当今的软件开发思想比较常用的是1 传统的瀑布开发模型    2  快速原型开发
这2个开发模型我没有什么具体的实践经验,在程序设计当中触及到一些,还是有一些的。
1 传统的瀑布开发模型
        简单一点说开发模型是提供一种开发模式,大家在开发软件的时候要尽可能遵循的一种开发准则,
提高开发质量和速度。
        传统的瀑布开发是按照: 计划-->需求分析-->设计-->编码-->测试-->维护-->运行
        
      其实现在的开发,计划部分我认为基本上就是问题的提出,把项目提出来。进行技术可行性和效益可行性分析。

      每项开发活动接受本项活动均应具备以下特征:
      1   上一项活动作为本项活动的输入。2  利用这一输入实施本项活动应完成的工作内容
      3   给出本项活动的工作成果,作为输出传递给下一项活动。 4 对本项活动实施的工作进行评审。
      若其工作得到确认,则进行下一项活动。
      (我个人认为我们的项目用此方法是比较危险的,因为需求分析不能够确定需要经常变化的情况下,
      常常是代码已经写出来了,需求分析却有改变的,这是瀑布开发最大的缺陷,也是致命的缺陷)
      但是瀑布开发模型是所有开发模型的一个基础,如果不理解瀑布开发其他的是不会明白的。
      不要小看这些开发过程,其实开发过程的每一个部分都有相应的要求,国家颁布的有国家标准(GB/T8566-1995)
      具体标准的说明是比较复杂的,以前我开发Software也是按照这样的标准做的,但是根据软件的难度,我省掉
      很多的说明文档。
      http://www.codechina.net/resource/gotores.php?articleid=15038(这里有具体一点的说明)
      但是瀑布流程生成的很多文档是必须的,对与大一点的项目来说
      
      1  需求分析中的 《软件需求分析计划》 《数据流图》(DFD:data flow diagram)   
      《数据字典》(DD:data dictionary)      这些我还是比较熟悉的,以前的软件开发却是需要一点这样的东西。
      Jackson 系统开发方法 (JSD) :面向数据结构的分析方法 也是必须的,但是没有怎么用过。不过应该很重要
      
      2  软件设计中目标和任务的确定是比不可少的。当然必须以需求分析作为基础,
      不然就是虚幻的,没有什么意义。
      这以部分又包括1  概要设计   2 详细设计 每一部分都有响应的工作要求。
       概要设计 
       <1>写出相应的设计计划制定规范 ,就是协调大家要共同遵守的标准。以便协调成员之间的工作。(我感觉就
       是说明书的格式规范要确定下来)
       <2>软件系统的总体设计  就是模块分析,当然内容很多。设计的标准是“高内聚,低耦合”。也就是模块内部和
        模块之间的关系要有个确定.要产生结构图(structure chart),根据是上一步的数据流图(DFD).        
       <3>处理方式的确定.具体我没有实践过这部分,但是并不代表不重要。我感觉就是对软件要实现的性能
       进行一下分析。
       <4>数据结构的设计。东西太多,但是不是我们《数据结构》那本书的东西,是另外的东西。
       <5>可靠性设计。  也叫质量设计,就是要考虑软件如何易于修改和维护
       <6>编写概要设计阶段的文档。文档格式标准见:GB/T8566-1995
       <7>概要设计的审计。瀑布流程中审计过程其实是很重要的,内容也很多。要从很多方面进行审评。
       当然在这个步骤上要确定数据库的大概的结构,当然只是一个雏形,不是最终的结构
         以上<1>.<2>,<6>,<7>都是很关键的。我感觉。
       我以前用的比较多的是1 结构图 2 模块关系确定  
       3 数据库概要设计(步考虑数据库的具体实现),这是很复杂的,要软件工程以外的知识,以后我再提及。
         有面向数据流的分析方法,和面向数据结构的分析方法。

       3  详细设计
       详细设计步同于编码,详细设计要决定各个模块的实现算法,并精确表达这些算法。
       具体实现:
       <1>程序流程图
         <2>N-S图
       <3>PAD图
       <4>PDL图
       如果概要设计做的好的话,这些就是概要设计对模块的一个详细化过程。在我以前的Software 中这些也经常用到,
       经常是多个方法并用比较好一点。但是要杜绝出现多义性,不然程序员在编码的时候会出现困惑的。

         4 编码
       这时候可以确定用何种语言进行编写,数据库需要确定(Access,Sql server ,或者Oracle)
       但是编程的时候要注意 1 符号命名,特别是公用符号的命名       2  程序的注释。(他的关键性就步需要进行太多
       的说明了)。   3  视觉组织要好一点,现在的编译器已经可以自动做到这些,不需要人工处理了。4 语句结构
       就是我们常提到的,顺序,条件,循环。  5  输入和输入风格的设计。(我认为这是一项单独的技术,应该从
       软件工程中分离出来)  6 当然还要考虑 程序复杂性的度量,这样才能保证进度。(有响应的度量方法)

       5 测试
       测试用例的设计(我们的项目如果没有大量原是数据测试用例是很难确定的)
       包括:白盒测试 盒 黑盒测试
       还要考虑测试的策略。4种策略 单元测试,组装测试,确认测试,系统测试。单元和组装测试我认为在编码阶段
       就需要进行。然后调试派错。
       对于程序员来说,测试出现问题只需要修改 4 编码部分。不需要考虑1,2,3。修改比较大的情况是3 进行一下
       变化,如果这时候对1,2 进行修改对于软件来说简直就是致命的。

       6,7 是维护和文档的管理,内容较多。

2 原型方法论
      在需求分析阶段得到完整准确的设计规格说明不是一件容易的事情。原型开发方法正好弥补这方面的缺陷。
      我对原型设计的理解还很肤浅,就是说瀑布流程的一个重复循环的过程。这种开发方法对前期的需求分析
      已经不像瀑布模型那样要求的严格了。瀑布模型循环而已。
      但是有一点很关键,也是我一直认为我们的项目需要注意的地方就是每一个原型产生以后需要大量的原始
      数据进行测试,以便进入下一个原型。坚决不要出现1个原型完成以后,等了好长时间由于没有原始数据
      而使项目停滞,好长时间以后开始了下一个原型。
      http://www.uml.org.cn/SoftWareProcess/rjgc39.htm 等有时间需要看看,我也没有看过。

所有的这些都需要有原始的数据进行测试为基础,不然就是空中楼阁。
以上是我的理解。
2005 1 12
      






      


      







        
posted @ 2005-01-12 10:38  jhtchina  阅读(4707)  评论(0)    收藏  举报