软件工程

来源:互联网 发布:庖丁解牛中乎 编辑:程序博客网 时间:2024/06/02 21:16

 

经过两年多的学习,对软件开发也有了初步地了解,通过阅读大量的软件开发文档和源代码,从各软件项目中学习了很多知识,以下是我对软件开发各阶段的理解以及可能出现的问题做了简单的总结,不成熟的总结,请指教。
1.1调研与方案阶段
本阶段主要是进行产品调研、制定产品研制方案、进行软件需求分析、拟制《软件设计任务书》,本阶段是整个软件开发流程的最重要的阶段,是其它一切的基础,制定软件的各项功能、软件的性能要求和设计约束条件,其内容包括软件中所涉及的概念、定义、目标、指标、功能、控制逻辑、算法、环境、时序、执行过程和特点等。它们如果出现微小的错误或者某些地方出现遗漏,将会产生非常严重的问题,改进或者完善这些问题是非常困难的。如:一些项目中,在进行项目方案(不一定是软件的问题)阶段没有准确把握到外界条件影响大小,导致在项目完成时产品性能不太理想,只能花大量的时间来解决这个问题。
这阶段可能出现的问题是:
a:没有准确理解用户功能需求,用户关注的焦点是否把握的恰到好处值得仔细分析。
b:对真实环境或者条件的影响考虑的不是非常全面,导致在设计阶段出现局部错误或者遗漏,包括软件理论上能够实现功能性能要求,但硬件平台是否能够满足要求。
 
1.2设计与编程阶段
本阶段是根据《软件设计任务书》进行编写软件的概要设计,确定软件的设计语言、主体结构、模块划分、功能实现、模型建立、算法实现等。在本阶段中主体结构、模块划分和功能实现是建立在模型建立、算法实现的基础上的、是上层建筑。从“织物仿真系统”中,个人觉得可以很好地学习这种设计思想:软件的用户需求是根据纱线外观参数能够仿真织物的外观形状,这个需求具体包括两个方面:仿真过程的实现(隐式方面)和结果的显示(外观表现)。仿真过程的实现就是模型的建立过程,根据纱线的立体模型和织物的种类不同(针织物和机织物),从而生成相应的模型;结果的显示设计者选择画家算法、视觉光照原理等相应的算法或原理来实现的。(如果概要设计做的不是很合理,将会给详细设计、编码阶段、测试验收阶段、维护阶段带来很大的困难,很容易让这些阶段产生错误,我不知道这算不算问题,因为我不知道问题是如何进行划分的)。
完成软件的概要设计后就是进行详细设计,当然,如果要求不是非常严格,可以把这两个阶段合二为一,详细设计是对概要部分进行详细的规划,对细微的部分考虑如何才能达到最好,对算法实现过程做到精益求精,对模型的设计使之最大可能的符合实际情况,对资源的利用合理分配。换句话说,概要设计其实就是程序(伪程序)。(详细设计产生问题一般都是考虑不周到造成的,也可以说是设计的不周造成的,对原理的理解、方法的把握、过程的控制、类型的限制没有精雕细琢,导致出现一些错误,如《数字图像处理》教科书中多处出现这种问题)
完成概要设计后,就是进入实际的编码阶段,其实就是把伪代码翻译成相应的软件语言,按道理说本阶段出现的问题都应该是语言方面的问题,如数据类型使用不匹配、指针使用错误、数据拷贝出错、数据使用错误等,不应该出现一些其它方面的问题,如软件某处异常退出、操作失败没有相应的处理。(软件测试发现的问题很大一部分是在实际编码阶段产生的,特别是没有进行详细的设计就进行编码的软件,那基本上都是本阶段产生的,如异常处理方面)
以我自己为例,在进行尝试编写某个小程序时,经常都是这样做的:需求分析(这点符合要求,因为基本上都是单一小功能或验证某个问题)、设计(这部分包括结构的搭建、控件选择等)、编写代码。
编写过程中,会出现一些问题:a)语言使用方面出现问题,不了解使用方法,这个问题严重影响效率(属于对编程环境语言掌握不够)。b)归纳综合的不够,导致代码可能多次出现重复的现象(属于设计做的不够的问题,不是先确定一般规律再编码,而是编码中发现规律在总结,这种问题造成的原因是没有进行细致设计、一般都是做了再说)。c)使用时命名出现混乱的现象。(通过这段软件测试时间的学习,在软件中条件的限制、类型的设限、出错处理、语言规范等方面的问题已经大大减少出现的次数了,基本上都能考虑到,这最好是能够养成这方面的习惯)
 
根据我个人的体会,我觉得整个阶段可能会出现以下的问题:
a:没有进行详细的设计,软件缺乏整体感觉,代码可能多处重复。(指的是同类的代码,可以进行归纳出一般规律的)
b:编程语言知识(主要指开发环境)掌握的不够,在使用时碰到问题时只求能够解决,对解决的是否合理、是否带来潜在的问题无法得知。
c:开发语言规范掌握的不够,在使用时没有严格按照开发语言规范进行编程,如:数据拷贝是否异常、指针是否为空等没有相应的判断,没有严格按照规范进行开发。
d:软件可能没有严格按照《设计任务书》要求,无法达到目的。
 
1.3测试验收阶段
本阶段主要是根据《软件设计书》进行工作的,根据用户需求,制定详细的测试计划,设计合理的测试用例,验证软件是否满足《设计任务书》的要求,因此本阶段的最重要的一点是对《设计任务书》的理解和用户需求的把握,只有如此才能设计测试用例对软件进行准确的测试。
本阶段可能存在以下问题:
a:需求理解不够或者没有统一的标准,导致无法确定其是否存在问题
b:测试条件受限,无法确定某些功能性能指标是否满足要求
 
1.4软件运行和维护阶段(包括再开发)
本阶段是软件生命周期中最长的一个阶段,是软件体现价值的阶段,在本阶段可能会出现如下的问题:
a:维护人员(或开发人员)对软件的整体了解不够,在维护或再开发的过程中无法从整体上考虑软件,可能带来软件更加复杂、不易理解的问题。比如:添加的功能与原软件在整体上感觉不协调等。
b:在使用过程中,没有最大的发挥软件的功能,说句不好听的话,就是不尊重软件的设计人员的劳动成果。如:某些分析类型的软件,是真实情况的归纳、总结,应该是最能满足用户需求的和帮助用户的,对这类的软件,我们应该使之发挥最大的功能。

 

原创粉丝点击