以前从没学过软件工程这门课,只是听学长学姐们说过,这是一门很深奥的课程,据说是有工程师称号的高手才摆弄的东西。学过之后才发现,其实这门课真的很高深,就连老师也说他也有很多问题还没有解决呢。下面我就谈谈我个人在本学期学习中一些总结和体会,希望对为学习本课程的人有一些帮助。

一、软件工程基础

什么是软件工程呢?软件工程是一类求解软件的工程,为了克服软件危机,人们研究和借鉴工程学的原理和方法,形成了一门新的学科—软件工程学。目前比较认可的一种定义是:软件工程是为了研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何让把经过时间考证而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。从以上这些关于软件工程的定义,我们可以对软件工程这门工程学科有一个全面的整体性认识。软件工程学的主要内容包括:1、软件开发方法(需求分析、设计、编程、测试和维护);2、软件工具(泛指开发一切帮助开发软件的软件);3、软件工程环境(以软件工程为依据,支持典型软件生产的系统);4、软件工程管理学(对软件工程生存期内的各个阶段的活动进行管理)。(一)软件工程的三要素和基本目标

1、软件工程以关注软件质量为目标,由过程、方法和工具三要素组成。

(1)软件工程过程:在软件工具的支持下所进行的一系列软件工程活动,它是将技术层结合在一起的凝聚力,使得计算机软件能够合理地和及时地开发出来,是生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。

(2)软件工程方法:完成软件开发任务的技术方法,它依赖于一组基本原则,这些基本原则控制了每一技术区域,且包含建模活动和其他描述技术。软件工程方法学主要包括传统方法(结构化方法)和面向对象方法。

(3)软件工程工具:是对过程和方法提供了自动的或半自动的支持。

软件工程三个要素之中软件工程过程是基础,方法是实现过程的技术,工具为过程和方法提供自动化或半自动化支持。三者以有组织的质量保证为核心。

2、软件工程的目标是提高软件的质量与生产率,最终实现软件的社会化大生产。

(二)软件工程原理

软件工程专家学者们总结了开发软件的经验,提出了软件工程的7条基本原理。这7条原理被认为是确保软件产品质量和开发效率的原理的最小集合,又是相互独立、缺一不可、相当完备的最小集合。这7条原理是:

1、用分阶段的生命周期计划严格管理。这是吸取前人的教训而提出来的,在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。

2、坚持进行阶段评审。软件的质量保证工作不能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。评审过程应该包括完成者在内的各种不同角色的人参与,利用人的差异提高评审质量。

3、实行严格的产品控制。开发人员最痛恨的事情之一就是改动需求。但是实践告诉我们,需求的改动往往是不可避免的。这就要求我们要采用可续的产品控制技术来顺应这种要求。也就是要采用变动控制(基准配置管理)。当需求变动时,其他各个阶段的文档或代码也随之变动,以保证软件的一致性。

4、采纳现代程序设计技术。采用先进的技术既可以提高软件开发的效率,又可以减少软件维护的成本。

5、结果应能清楚地审查。软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难以评价和管理。为了更好地进行管理,应根据软件开发的总目标及完成期限,尽量明确地规定开发小组的责任和产品标准,从而使所得到的标准能清楚地审查。

6、开发小组的人员应少而精。开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。有以下原因:

(1)高素开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯得错误也少的多。

(2)当开发小组为N人时,可能的通信信道为N(N-1)/2,可见随着人数N的增大,通信开销将急剧增大。

7、承认不断改进软件工程实践的必要性。这是基于上述六条基本原理的总结和归纳。

(三)软件的生存周期

一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。软件的生存周期可分为八个阶段:①问题定义;②可行性研究;③需求分析;④总体(概要)设计;⑤详细设计;⑥编码与单元测试;⑦综合测试;⑧软件维护等。

(四)软件开发模型

瀑布模式:是传统的软件开发模式,其中的“瀑布”是对这个模式的形象表达,由山顶倾泻下来的水,自顶向下、逐渐细化。其特点是:线性化过程;分为分析、设计、编码、集成等几个阶段,并且各阶段逐级推进,不允许跨越。里程碑管理;阶段评审;文档驱动;简洁便于工程应用的线性化过程步骤,并可以通过里程碑管理机制而使项目进程量化。其明显的优点就是没个阶段结束前都要对所完成的阶段成果进行评审,这使得软件的错误能够在个阶段内尽早发现并尽早解决,总的来说瀑布模式具有良好的质量保证机制,有很强的生命力。

原型进化模式:对软件进行直接模拟或仿真,只需要分析需求框架后进行原型创建,再对原型系统进行逐步细化与完善,通过版本更新逐步满足用户对于软件的多方面需要。

增量模式:开发过程有三个任务域,分别是设计结构、开发构件和集成系统,它既有完善的工程管理机制,又能适应用户需求变更,有利于质量的监控,并且各局部基于构件构造,有利于逐步构建与完善;由于先交付核心构件可利于降低项目的技术风险。

螺旋模式:是一种可较好的规避开发风险过程的模式,项目是基于任务的螺旋式推进,每个螺旋由内之外分别是需求分析、软件设计、系统集成、验证与交付。

(五)软件的开发过程

 1、需求分析:系统开发前期需求分析很重要,它是为了有效解决用户问题的需要进行的一项工程活动,所需要考虑的需求问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。其步骤有三个:①获取客户需求,客户泛指某个人或机构部门等,一般方法是调查,包括访谈、座谈、问卷、跟班和收集资料,需求规约可表达用户的软件价值。②建立需求模型,它是用户需求的图解,一些常用的模型有:业务树图、用例图、活动图。分别用于结构化需求建模、系统业务举例和反映系统工作流程。③进行需求验证,要验证的主要内容有:有效性验证、一致性验证、完整性验证、现实性验证和可检验性验证。

2、概要设计:是对需求规格说明书中提供的软件系统逻辑模型进行进一步的分解,从而建立软件系统的总体结构和各个子系统之间、各个模块之间的关系,定义各子系统接口界面和各功能模块的功能描述等。

3、详细设计:将概要设计产生的功能模块进一步细化,形成可编程的程序模块,设计其具体细节,并设计模块的单元测试计划。阶段产品:详细设计规格说明和单元测试计划等。

4、实现:包含编码和单元测试。(详细介绍在课本79页)阶段产品:可运行并通过单元测试的程序和详细的单元测试报告等。

5、综合测试:包含组装测试和验收测试。(详细介绍在课本79页)阶段产品:

(1)满足概要设计要求、可运行的软件系统和源程序。

(2)组装测试报告。

(3)可供用户使用的软件产品。

(六)用例模型

1、UML简介

 UML是统一建模语言,有统一的语法、语义和语用规则,其建模过程的特点是:用例驱动、以构架为中心和增量迭代,通过包实现对模型的有效的一体化管理。包括三部分:①用例建模,它面向用户需求的,能够反映系统的用户价值,用例图的基本元素有用例、参与者、交流;用例之间有泛化、延伸和包含关系。②活动建模,活动图用于描述系统动态过程,主要图形元素有:活动、转换、起点、终点、判断、并发、同步、泳道等。可描述高层业务级活动,涉及整个业务流程,针对每个用例活动建模,反映用例内部活动细节。③类分析建模,这里就只考虑实体类,实体类所代表的数据相互之间通常有一定的关系,依靠这种关系可形成有组织的程序数据结构。实体类之间的主要数据关系有:关联、聚类、泛化。

2、使用visio绘制用例图

StartUML是一款开放源码的UML开发工具,由韩国公司主导开发。

 例如,过程协作图

用例图包含了角色、用例、以及角色和角色、用例和用例、角色和用例之间存在的关系。

上面大部分是参考的,改了些,因为自己写不到那个程度。下面内容都是自己写的。

二、个人感想

《软件工程》课程强调概念和知识的理解和掌握,侧重软件项目的分析、设计、实现和维护的基本技能。比较注意“点”和“面”的结合。是一门理论性较强的学科。对于理论性太强的学科,把握起来真的很困难。书上列举很很多不错的例子,本书既可以当有趣的故事书来读,又可以当教科书来用,由此可见编者的水平有多高啊!我们这门课的老师水平也很高,我对他的印象真的很好,这是一位好老师,也是一位负责的老师。最近听一个大四的学长说他软件工程没怎么学,现在答辩文档的组织能力和代码的规范都不合格,他很是为此发愁,因此更要要好好学习这门课程。这学期一晃又过去了,总感觉什么东西也没学到。不过我感觉还是过的很充实的。我相信:希望就在明天!(上网修改的)

就这12周的学习中写的个人项目、结对项目、团队项目来说,我很不喜欢结对项目,团队项目因为这个项目是需要合作,就结对项目中,对方不做,老师让完成什么作业都不关心,结对项目都是自己一个人去做的,自己手头都有许多事情,一个人做2个人的量,真有那么几天我想放弃,最后为了最后的成绩把结对项目做完了。最后得分也就那个了,不能说很低,也不能说很高,太憋屈了,打下那么些分只能说自己实力不够吧。最后做团队项目,我本着一个相把这个项目做好的过程,这团队有大牛(这也是全班想对来说可以谈的来的人),还有些比我好的同学在,但是呢事与愿违,前期我想尽全力去做可是,大家都不是很配合或许是我表达的不清楚吧,每天到那些人寝室去督促,跟队长交流该怎么做,可是,大家都不配合,这个说这个有事,那个说那个有事,比较庆幸的是大家都还或多或少做了些,相对,我也学了些东西,但是跟自己的预期差的太远了,或许这也是我自己实力不行,号召力不行。我督促了几次,我感觉不行,我感觉大家的眼神,语言都有点嫌弃的感觉(这是个人观点),毕竟谁也不希望每天有人去催,我自己也受不来这种感觉了,我都感觉我自己就是一个要债的人。那段时间我都不想干了,还有考研,学校的作业,再加上自己本身天赋就是很差的那种,我需要时间整学校其他的科目。中途,也跟团队里的其他人吵过,因为对方做的事情,对方不做;老师也评估一次博客成绩,这是我最伤心的事情,一个队了谁都不关心这个事情,我尽我所能把我该做的做完了,其他人的事情都写好题目了(实际也就2个在做这个事情),可是对方跟自己预期差的很远,博客里的事情大家谁都不关心,就老师留言了需要改什么,大家谁都不看,我某天稍微有点事时间了看到了,就一个重新拍照的过程3分钟事情,需要跟着这个聊你什么时候有时间,我们什么时候拍,计划什么时候拍,大家都不动,一直拖用了2天,拍完没有一个人上传这个照片,照片就在组里的某个人手中,我手机像素不行,一周后我看到照片依然没有上传,在等我吗,我都感觉我都要奔溃了节奏,老师留的作业我都清楚说这个做什么,但是,为什么都不做啊,不按时做呢,非要等到最后一天做啊,可是,没有做完,一个9分作业(具体多少我没有记清楚,应该是>=9的),我组就完成了4分,我看到这个成绩我瞬间奔溃了,这是我上大学以来第一次打的如此的低,得分那天我专门去问过另一个同学他做的什么样了,哎都不知道截止实际这个事情,我不知道该说些什么了,什么都没有说,我难受了一段时间,看了许多别人的博客(这次是我很认真的去看了别人的博客),我分析了自己的原因,团队的原因,学习别人的长处,我想离开这个团队,我真的很累,可是,这是一个团队项目我一个人根本做不完,也来不及,最后,我选择随遇而安了,毕竟这个组大家都不是很着急,我一个人着急也无法改变现状,我只能尽我最大的努力去做好每一件老师和组长给的任务,最后跟预期的结果一样前期大家都不努力做,也就做了那些事情,后期学校考试(单片机),全部就3-5个人会的,谁愿意花时间做这个呢,最后事情也就前期的哪些工作,后期工作只好现在做了,可是我没有时间了,4级需要时间,考研课时间,学校其他科目需要时间。最后,我也只能尽我所能做我自己的事情了。自己个人理解这个团队项目,自己做的事情很少。

最后,总结:若是很多事情尤其是涉及遇人合作的事情,我只能说我尽我所能做我要做的事情,下次团队作业一定要分工十分明确。

我一直赞同《海贼王》中说过的一段话,

团队精神到底是什么啊!

互相帮助互相袒护就算是吗?

也有人这么认为吧!

我是认为那根本只是唬人, 应该是每个人抱着必死的决心做自己的事。

“我做好自己的部分了”

“接下来轮到你了”

“做不好的话我就揍扁你”

要有这种决心才算是起码的团队精神吧!

所以从这点考虑的话 ,就算伙伴都是特例独行的人也没什么大不了的 。

 从我的全部成绩来看,我一直很纳闷,我的成绩博客成绩一直高不了,怎么说,我时间投入了许多,我可以这样说,这个学期大部分时间都被软工和单片机时间所占用,我自认为我写的很多,我投入的时间很多,但是成绩一直提升不上去,我承认,我的一些软实力不行,例如,写文章,文章排版……,我也很努力。每次成绩发布后,我都看了那些好的博客,他们许多没有我写多,为什么成绩一直要比我好,或许是态度的不同吧,我是以完成任务的心态去做的,尽我的努力吧,我看了许多人,今天终于发现问题了,我只能说我已经尽力去做,一些话没有说到点上,别人话少但是都说在点上了,我没有想过读者看博客时候的感觉,我再看我的博客差距很大,所以我的博客成绩一直不如别人,他们确实比我好许多,确实我的成绩也就值那些分数。总之是学到了许多东西,我学到了许多书本上没有的知识,例如:文章的排版,语言的表达……。这次成绩我上的差距让我看到了许多,暴露了许多我不完善的地方,现在发现问题总比以后在工作中发现问题要好。结束,谢谢软工的作业。

这个黄杉,我必须说明,这个黄杉并不是我实实在在完全靠实力得到的,一部分的实力再加一部分的运气。而是本身黄杉是轮不到我的,毕竟差距在哪里摆的,因为我知道我自己的实力。结果发黄杉的那天,这个黄杉应该给的人没有来,根据以往的经验,那就是谁没来,那就顺着名次给下一个。我那天,刚好下课问老师题,老师跟我说:那个人没有来,就给我了。

posted on 2016-05-11 09:38  冷热  阅读(340)  评论(3编辑  收藏  举报