软件工程学习心得

软件工程学习心得

通过这一学期的软件工程和计算机三级数据库的学习,对软件工程学和软件的开发过程有了一些初步的认识,也意识到了工程思想在软件开发过程中的作用。

(一)      软件工程学:

“软件工程(SE)”的概念是为了有效地控制软件危机的发生而被提出来的,是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术结合起来,以经济地开发出高质量的软件并有效维护它。

◇    软件项目过程包括开发、管理、改进三个部分——软件工程三段论

软件工程学习心得  

1、 软件开发:

软件工程学习心得 

2、 软件改进过程:相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。

软件工程学习心得

 3 、项目管理:

项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程。

◇软件生存期模型:软件工程有很多环节,软件工程模型用一定的流程将各个环节连接起来,并用规范的方式造作全过程,就可以形成不同的生存期模型,这个生存期模型就是在项目规划过程中选择的策略。常见的生存期模型有:瀑布Waterfall;V模型V-shaped;原型Prototyping;增量Incremental;螺旋式Spiral。

   这些模型各有特点,在实际应用中应该根据需求进行选择,例如:WaterFall model要求一个阶段的输出是下阶段的输入,没有反馈,项目目标固定不变(WaterFall model过于理想化,不适合现代软件开发;但其“线性”思想易为掌握,在其他模型中都能找到其影子)所以适合于:

▲在项目开始前,项目的需求很明确;

▲在项目开始前,解决方案也很明确;

▲类似的项目如:公司的财务系统、库存管理系统、短期项目。

(二)     软件开发过程:

ⅰ 可行性研究:说明该软件开发项目的实现在技术上、经济上和社会条件上的可行性,评述为合理地达到开发目的可能选择的各种方案。

1、经济可行性:进行成本效益分析,评估项目的开发成本,估算开发成本是否会超过项目预期的全部利润.分析系统开发对其它产品或利润的影响。

2、技术可行性:根据客户提出的系统功能,性能及实现系统的各项约束条件,从技术的角度研究实现系统的可行性。

3、法律可行性:研究在系统开发过程中可能涉及的各种合同,侵权,责任以及各种于法律相抵触的问题。

4、开发方案的选择性:提出并评价实现系统的各种看法方案.从中选出一种用于软件项目开发。

ⅱ 需求分析:软件项目的失败大半源于需求分析没有做好,软件开发人员首先应该明确用户的意图和要求,正确获取用户的需求,然后形成一个软件需求规格,它是软件开发的重要基础。需求分析一章介绍了需求分析如下的5个过程及基本任务(需求获取->需求分析->需求规格说明->需求验证以及变更管理)并重点介绍了需求分析中的建模方法:

软件工程学习心得

软件需求分析的基本原则:

(1)必须能够表达和理解问题的数据域和功能域

(2)必须按自顶向下,逐层分解的方式对问题进行分解和不断细化

(3)要给出系统的逻辑视图和物理视图

需求建模方法

1、关联模型——定义系统与环境的关联关系 (ATM系统)

2、行为模型——是描述系统的总体行为:数据流模型;状态机模型

3、数据模型——定义系统处理的数据逻辑形式(E-R图与数据流程图)

4、结构化方法——最早的开发方法,其中有代表性的是美国的Coad/Yourdon的面向数据流的开发方法、欧洲Jackson/Warnier-Orr的面向数据结构的开发方法,以及日本小村良彦等人的PAD开发方法(业务流程图、数据流图、数据字典的使用)

5、面向对象模型——将现实世界的“视图”转化为用对象来描述的模型描述对象之间的各种关系,以满足软件系统的要求。面向对象的建模工具——UML(Rose、visio:可以利用代码生成器将UML转换成多种程序设计语言代码,或反向)

6、原型方法——按照用户的需要,快速形成一个操作流程界面,可能只是一个框架,具体的功能没有实现,只是结果静态的操作流程,以便与用户快速就需求达成一致;主要考虑系统的功能需求,很少考虑非功能需求(类型:进化型、抛弃型)

 ⅲ 设计阶段:包括概要设计、详细设计、编码三部分,依次推进,概要设计文档是详细设计的基础,详细设计文档又是编码的基础。

概要设计部分主要从结构化和面向对象两个角度较少设计方法。分块介绍了数据设计(以数据库设计为核心)、架构设计、界面设计、模块设计等设计模型。同时介绍了主机、C/S、B/S的体系结构,详细介绍了应用程序框架的概念及MVC设计模型的应用。概要设计根据需求规格对系统的结构、接口、模块等进行设计,并根据设计结果产生概要设计文档。

详细设计过程根据概要设计形成的结果对各个模块的内部实现进行规划设计,并根据设计结果产生详细设计文档。详细设计部分介绍了如何采用结构化和面向对象的方法从视图、控制、模型三层模型上细化概要设计的各个模块,并完成伪代码为编码阶段做准备。

编码阶段依据详细设计文档实现设计中的算法、功能、接口、数据结构并通过配置管理控制管理变更,并形成编码文档。这部分主要介绍了编码的结构化和面向对象化的方法,以及编码过程中的标准和规范,重用原则。

   设计阶段流程:需求分析经评审通过后,开发部组织人员进行系统设计;系统设计完成后,开发部组织相关专业部门进行评审并获得用户的确认。系统设计和系统详细设计均属于评审范围。

ⅳ  编码测试阶段

       第7章主要讲述了测试的方法、技术、测试级别以及测试的管理过程。透过这章学习,我了解了静态测试和动态测试的方法,黑、灰、白盒测试的区别及应用。课本从测试方法讲起,在白盒测试的方法中介绍了结构化的测试方法和面向对象的测试方法,重点讲述了传统的结构化的逻辑覆盖方法。在黑盒测试中引入了等价类划分、边界值测试、错误猜测、规范导出等方法。讲授了在不同单元、集成、系统以及接受等不同级别测试中采用的不同的测试方法以及包括测试计划、测试开发、测试执行、测试跟踪、测试评估等的测试管理过程。

工作流程:系统设计完成并经评审通过后,开发部组织人员进行代码编制(如采用外包方式编码,开发部要组织专门人员为外包单位提供代码编制规范和技术文档要求,并负责监控整个编码过程)。编码过程中,开发部相关人员应对完成后的每一模块组织进行过程测试;编码完成后,开发部组织相关人员对系统进行测试。测试分符合性测试和功能性测试两步进行,测试完成后,开发部组织相关专业部门对系统进行整体测评。

ⅴ  项目提交阶段

主要讲述产品提交需要完成的主要——提交产品和进行培训。提交产品的同时要提交相应的手册等,包括用户使用手册、管理员手册等。要求一个说明书,双方在提交产品说明书上签字,以说明产品提交结束。

ⅵ  项目维护

阐述了维护的类型和任务:使用户和系统服务员使用得满意;预测变更,惊醒更多的跟踪和控制。维护过程也是软件中非常重要的一个环节,在软件开发中占得时间和人力比重都比较大,必须重视!

                                                                                                                   

 

第二篇:《软件工程》学习心得 蒋

《软件工程》学习心得

一、软件工程的定义

软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。

二、软件工程的目标

在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。

三、软件工程的原则

是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。软件工程的原则有以下四项基本原则:1)选取适宜开发范型;2)采用合适的设计方法;3)提供高质量的工程支持;4)重视开发过程的管理。

四、软件工程的由来

据说上个世纪60年代的程序员都是天才,写程式就像写日记一样,吃过晚饭没事干随手就可以写几个出来玩,第二天还可以拿去卖钱。所以那时候程序员在大家眼中,跟那些搞美术,音乐的是一类的,被称为“艺术家”。

但事过境迁,就像任何人都不会嫌钱多一样,永远都不会有人嫌CPU快的。于是,随之而来的就是硬件的迅猛发展和越来越变态的软件。记得以前常去同学家拷游戏,通常几张软盘就可以搞定,而现在的游戏,两三张CD-ROM都算少的了。像如此庞大复杂的怪物,就算你是如何的天才,一个人肯定是搞不定的,否则,等你把程式写出来,人家Intel连奔腾N都开发出来了。既要开发大型的软件还要追求速度(这样才能赚钱),于是很自然地,合作的概念被提了出来。

在开始合作的初期,由于大家都习惯了当很有个性的“艺术家”,结果可想而知,一个是毕加索派的,而另一个是意大利印象派的,再加上一个画泼墨山水画的,要是像这样凑出来的东西都能不出问题的话,那么Bill早就转行了。所以,那时侯的大型软件,据说“蓝屏”比WINDOWS 98还多。

马克思告诉我们,万物都是从量变到质变的。随着问题的不断涌现,一些master们开始尝试去总结经验,并归纳了一些规范去指导软件的分析,设计,实现,测试,维护,人员交流协作,项目预算及时限控制等方方面面,这就是软件工程的前身。

软件工程到现在已发展了30多年,可以说是相当成熟的了。现在开发软件,据说都是一大帮人排排坐,按着一整套的规章制度来干活。于是,软件开发成了“工程”,程序员也就沦为“工人”了。

五、软件工程的核心

软件工程,说白了,就是这样一套用于软件的团队开发,以提高软件质量和程序员工作效率为目的的规范。其核心就是,对于软件开发的5个重要组成部分:需求分析,设计,编码,调试,维护,如何组织这5个部分的工作,以及如何完成每一个工作。简单来说,就是对于总体的组织和对于局部的实现。

六、软件开发过程

开发软件,就像是解决一个逻辑问题。想想自己平时是怎样写程序的。首先是要有一个想法,即我写的这个程序是要干什么的;然后就是对要实现的核心功能大概构思一种或多种实现方法,并从中选出一种自认为是较好的;接下来就是将涉及的各种主要或次要功能分成各个模块;最后就是分模块来编码和DEBUG。除了第一步外,其余的步骤应该是一个循环的过程。既然软件开发是一个具有不可预知性和变化性的动态的过程,那么,对其每一个步骤的组织,即周期模型,就必须包容它的这种性质。

具体到每一步的工作要怎样完成,是非常灵活的,只要把握住大体的方向就行。在进行分析,设计,编码,调试,维护这几部分的工作的时候,最核心的就是文档的编写。文档的作用在于以下3个方面:一是可以帮助整理思路。把要完成的目标,系统的结构,每一个模块的功能等整理一下,然后分门别类地写下来,这样在开发的过程中,就有据可依,在需要回过头来修改设计的时候,也有证可考。二是便于交流。想象一下开会时的情形。一大帮子人争先恐后,激烈辩论,然后会终人散,思想灵感也就随之散了,结果是开了半天会,什么也没讨论出来。这就是后来会议记录被发明出来的原因。在脑子里的东西一多,就会散而且乱,用语言表达的时候,很容易会丢三落四,别人也很难把握住你的思想。但经过整理写在纸上以后,则会清晰得多,无论是别人还是自己,看起来都可以一目了然。三是可以作为以后维护时的参考资料。有一句名言:“笔和纸永远都比大脑可靠”,意思就是说,放在大脑里的东西说不准哪天就忘了,但写在纸上的东西,只要不发生什么意外,一般是丢不了的。当过了一段时间,你需要再回过头来修改你的程序的时候,你就会发现,你以前写下的文档实在太有价值了。别指望你的源代码,对于复杂一点的程序来说,单纯的源代码几乎会扼杀掉你所有的时间。

可行性分析 就是关于当前项目能不能干的分析结果。主要考虑的方面包括:是否能把这个项目开发出来;假如可以的话,预计需要多少时间,能否满足客人的时间要求;需要多少人力和资金的投入;最重要的是,这个项目能否赚钱,能赚多少。还要对可能存在的风险进行评估。

七、软件工程学习感悟

在以前,我一直对软件存在一些偏见或则是误解,认为软件就是程序,软件的开发就是编写程序,只要编完了程序,一切也就ok了,而且我还片面的认为只要我掌握了时下最新的语言和工具,那么我就能写程序了。一个人,只要会编程,就能写软件,就是程序员;一个公司,只要招聘一些程序员,就能开发好的软件产品。只要有几个有经验的程序员,再找些兼职的大学生,就能组成一个软件公司。

但是通过了《软件工程》这门课的学习,使我认识到了我以前的错误。软件其实不仅仅是程序,软件开发其实也不仅仅是编写程序,软件是思想在硬件上的载体和体现,处理的是逻辑和信息。唯有对软件和软件的开发过程,有充分的认识,才能更好的开发出,过程受控、质量受控的软件产品。

而且在以前,我一直以为软件的开发其实是一件很轻松快乐的事情,只要一天坐在电脑旁敲敲键盘,那么一切就可以了,但是现在我才发现,我以前的很多的思想是多么的肤浅可笑。编程其实是一种乐趣和苦恼共存的一项创造性活动。因为编程不仅能够满足我们内心深处进行创造的渴望,而且还能愉悦我们内在的情感。

而且通过学习《软件工程》,我还学到了很多其他的东西。比如通过学习《软件工程》,特别是该书的课程解读和实际的软件现场例子的讲解,为我提供了一个尽早接触世界工作和真实项目的机会。让我知道如何在以最小的成本中,训练自己的基本工程素质和能力,如何激发自己的积极性等。而且通过学习《软件工程》,还让我认识和培养了我的团队协作能力,特别是对于我们这些在校的学生来说,这种学习更是能让我在以后工作中少走很多的弯路。 也让我知道要学习软件工程,学会如何系统的思考,以及养成良好的编码习惯,想学好软件工程,就必须知道软件工程的目标、过程和原则:

软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。

软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。

软件工程的原则:指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。

在软件工程的学习中我知道了软件工程的目标、过程及其原则,了解到了软件并非是一些代码这么简单,在开发软件的过程中,编写代码的工作量其实只占不到所有工程量的30%,而后期的管理和维护更是占了60%到80%之多。一个完整的项目规划须包括,软件的定义,可行性分析报告,项目开发计划,软件需求说明书,概要设计说明书,详细设计说明书,用户操作手册,测试计划,测试分析报告,开发进度报告,项目开发总结报告,软件维护手册,软件问题报告,软件修改报告,等多个文档,每个文档都要上级验收审查,而文档数量众多,要做好这点真的不是很容易,而恰恰写好文档正能保证完成软件工程其中一个目的的关键,既研究如何用最小的开销做出生存期较长的软件,再加上各个阶段都要进行周密的策划、详细的分工部署和人员安排,且各阶段要据具体情况不断的反复才能达成,所以代码只是开发软件这个浩大的工程的一个小小的过程。在学习中,我们还要注意比较三种方法的优缺点,例如:传统方法虽然使软件摆脱了混乱和无序,但其在适应需求变化的方面不够灵活,而且传统方法要么面向行为,要么面向数据,缺乏两者的有机结合。而面向对象方法的程序设计和问题求解更符合人们日常自然的思维习惯,适合大型、复杂及交互性比较强的系统。形式化方法则是一中基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。

软件工程课程虽已结束,但我对于软件工程的学习才刚刚开始。通过对软件开发流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。掌握网络系统管理的基本知识与应用技能,能进行网络系统的安全设置。我体会到项目管理的重要性,随着软件规模、复杂度的不断增加,项目开发中更多的是协作、管理和控制。我学习到很多一般性的方法,例如:需求获取、模块化、计划等等。同时,我也认识到使用计算机解决实际问题的复杂性,人们认识表达的过程不断反复、逐步深化,软件工程方法要提供给程序员们一种更加有效的对客观世界问题域进行形式化的过程方法。

通过《软件工程》的学习,我是真的学习到了很多有用的东西,让我明白了很多的道理。在此我对老师的辛勤教育表示感谢,因为你我学习到了这些,使我获益良多。我明白只有在今后的学习中多读书、多思考、多练习、多讨论,不断熟悉书本的基础,并以此为基础将其扩散开来,才能对今后的实践做到得心应手。不断锻炼自己,向一名合格的程序设计师迈进。

相关推荐