尚纳游戏
您的当前位置:首页软件工程心得体会 篇18

软件工程心得体会 篇18

来源:尚纳游戏


  软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。软件工程(SoftwareEngineering,简称为SE)是针对软件这一具有特殊性质的产品的工程化方法。SE涵盖了软件生命周期的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作。任何事物都是从无到有的,软件当然也不例外。上世纪中期,软件产业从零开始起步,经过半个多世纪的发展,其大致经历的3个阶段:程序设计阶段、软件设计阶段和软件工程时代,现已成为推动人类社会发展的龙头产业,随着信息化时代的发展,软件对人类社会也将越看来越重要。人们对软件的认识自然经历了一个由浅入深的过程,在得到巨大需求的同时,也遇到了一系列严重问题,即软件危机。所谓软件危机,是指在计算机软件的开发和维护过程中所遇到的一些严重问题,其实质是软件产品的供应赶不上需求的增长。概括的说包含两方面的问题:一、如何开发软件,以满足不断增长,日趋复杂的要求;二、如何维护数量不断膨胀的软件产品。为研究和解决软件危机,一门新兴的学科软件工程,应运而生。

  软件工程的概念是为了有效地控制软件危机的发生而被提出来的,它的中心目标就是把软件作为一种物理的工业产品来开发,要求“采用工程化的原理与方法对软件进行计划、开发和维护”,它的主要对象是大型软件,它的最终目的是摆脱手工生产软件的现状,逐步实现软件开发和维护的自动化。软件工程的概念自提出来后,经过几十年的发展,虽然软件危机没有得到彻底的解决,但在软件开发方法和技术方面已经有了很大的进步,提出了软件工程知识体系、软件工程三段论、软件工程生存期模型、服用原则等等。

  软件开发过程大致经过7个阶段:可行性分析、需求分析、概要设计、详细设计、编码、测试、提交与维护。接下来逐一分析本人见解:

  一、可行性分析:顾名思义,就是看项目究竟“能不能做”。有3个方面:技术可行性、经济可行性和操作可行性。要确定项目,首先要客观的、科学的了解项目的规模、难度和时间,才可以确定应该投入多少人力、物力和财力去做这个项目,必须准确的估计项目的规模与难度。看项目是否有价值去做,如果没有价值,就放弃;如果有价值,就要看目前的资源是否能满足项目的开发。如果项目有价值,且有必需的资源,那么就可以确定能做这个项目了。

  二、需求分析阶段:解决“做什么、不做什么”的问题。围绕两个核心问题开展需求分析:应该了解什么?通过什么方式去了解?

  1、了解什么:应该先了解宏观的问题,再了解细节的问题。最好为每个需求注释“为什么”,这样可以让程序员了解需求的本质,以便选用最合适的技术来实现此需求。同时,需求说明不可有额二义性,更不能前后矛盾,如果有二义性货前后相矛盾,则要重新分析此需求。然后,选择合适的生存周期,建立合适的需求模型;

  2、通过什么方式去了解:直接与客户交谈;有些需求客户讲不清楚,分析人员又猜不透,这是就要请教行家。需求分析是非常重要的阶段,如果做不好的话,后果很麻烦。

  三、概要设计:解决“怎么做”的问题。将需求描述的“做什么”问题变为一个实施方案的创造性过程,使得整个项目在逻辑上和物理上能够得意实现。概要设计是第一个开发活动,也是最重要的活动,是软件项目实现的关键阶段。设计质量的高低直接决定了软件项目的成败,缺乏或者没有软件设计的过程会产生一个不稳定的、甚至是失败的软件系统。一个良好的软件设计是进行快速软件开发的根本,没有良好的设计,会将时间花在不断的调试上,无法添加新功能,修改时间越来越长,随着给程序打上一个有一个的补丁,新的功能需要更多的代码实现,就变成一个恶性循环了。概要设计是软件设计级别中的高级设计,是从需求出发,描述了总体上系统架构应该包含的要素。概要设计尽可能模块化,因此描述了各个模块之间的关联,主要是根据需求规格或规格定义,合理、有效地实现产品规格中定义的各项需求,完成软件模块的划分并描述模块之间的关系,并不断分解系统模块,从高层分解到低层分解。它注重框架设计、总体结构设计、数据库设计、接口设计、网络环境设计等,将产品分割成一些可以设计和实现的部分并保证各个部分可以和谐的工作。此过程中画数据流图、IPO图、E-R图、界面设计等。

  四、详细设计:解决“具体做什么”的问题,将解决问题的办法进行具体化。软件设计的低级设计,亦即详细设计,主要描述实现各个模块的算法和数据结构以及用特定计算机语言实现的初步描述,是针对程序开发部分来说的,但这个阶段不是真正编写程序,而是设计

  出程序的详细规格说明,这种规格说明类似于其他工程领域中工程师经常使用的工程蓝图,程序员根据其中所包含的必要的细节写出实际的程序代码。用另一种方式说就是,详细设计是将概要设计的框架内容具体化、明细化,将概要设计转化为可以操作的软件模型,但在实际项目进行过程中,依据项目的具体情况和项目要求,这个过程可能可以省略(逻辑上没有省略,表现在概要设计阶段或者编码阶段),直接按照概要设计进行编码;不过,个人认为最好有,有详细设计可以更好的保证编码顺利的进行,可以预先扫清编码过程中的障碍,提高代码的质量和编码的效率。主要包括模块描述、算法描述、数据描述,可以采用图形、表格或者文字描述等方式表达出来。

  五、编码:实现项目。由项目的概要设计和详细设计,将设计变为代码需要通过编码过程来完成。实现设计有很多种选择,有很多实现语言、工具等可供选择,但一般而言,在设计中会直接或间接地确定了实现语言。编码过程的一个主要标准时变成与设计的对应性和统一性。如果编码没有按设计的要求进行,设计就失去意义了。设计过程中的算法、功能、接口、数据结构都应该在编码过程中体现。如果需求发生变更,设计业对应地发生变更,同时代码也应该一致地发生变更,这可以通过配置管理配置控制。可见,如果编码和设计不一致,很容易“跑偏”,走火入魔。编码时要严格遵循编码标准和规范,并提供必要的程序注释,增加可读性。另一个就是重构的理解,所谓重构是对软件内部的一种调整,目的是在不改变软件基本功能和性能的前提下,提高其可理解性,降低成本,当添加功能、修改代码和复查

  代码的时候,更不要错过重构,另外,重构可以和设计互补。还有一点值得注意,要在必要的时候部署编码文档。

  六、测试:看软件是否符合标准。软件编码完成之后,将软件提交给用户之前,需要对软件进行测试,这是保证软件产品质量的一个重要标准,也是评估产品质量的主要手段。软件测试是从软件工程中演化出来的一个分支,有着非常广泛的内容,并且随着软件产业的发展,它已经变得越来越重要。软件与生俱来就可能存在缺陷,为了防止和减少这些可能存在的缺陷,进行软件测试是有必要的,测试是最有效的的排错和防止缺陷和故障的手段。最原始的测试莫过于直接运行软件了,后来测试手段逐渐多样化。测试手段有静态测试、动态测试面向对象的测试、自动化测试等等之分。静态测试或称静态分析是指一种不通过执行程序来进行测试的一种技术,主要是检查软件的表示和描述是否一致,覆盖程序的编码格式、程序语法、检查语句的结构和使用等,主要包括代码检查、静态结构分析、代码质量等等,可以通过人工进行,亦可借助工具(如:语法分析器)自动进行。动态测试是运行被测试的程序,通过输入测试用例,对其运行情况进行分析,以达到检测的目的,显然动态测试封像我们通常意义上的“测试”。动态测试主要包括白盒测试、黑盒测试、灰盒测试(介于黑盒和白盒之间)。其他测试不再一一介绍。

  七、提交与维护:测试完之后,就要把软件交给用户使用了。提交不是剪裁,给人家就行了,还要教会客户怎么使用这个系统。如果用户不会使用系统,就会不满意系统的性能,那之前的努力就白费了,

  打水漂了。为了保证成功地将我们开发的软件提交给用户,我们需要对用户进行培训,同时提交必要的文档及用户手册软件。维护就不用多说了,就是售后服务了。维护需要分析人员、编码人员和设计人员等角色的参与,有纠错行维护、适应性维护、完善性维护、预防性维护等。维护后,要写软件维护过程文档,至少提交一个软件维护记录。以上是软件工程及其几个阶段的介绍,知道怎样开发软件只是软件工程的一部分,搞好团队合作也是很重要的。项目是一个很大的工程,需要一个团队的统筹规划,团结协作,集思广益,举一反三,才能够按预期完成。

显示全文