有些同学利用假期进行软件工程实习,那么接下来让那我们看看,他们都有收获了哪些实习得体会?今天为大家整理软件工程实习心得与收获,欢迎阅读!
篇一:软件工程实习心得与收获
20xx年11月下旬,我离开了学校,进入了最后一学期的顶岗实习阶段。从离开学校的那天起,我就当自己是一个正式的员工,做好了经历重重困难的准备,我始终坚信,我的努力与坚持不懈不会白费,我的未来不是梦。
一、实习单位介绍:
南京智风多媒体有限公司是我现在实习的单位,它成立于1998年,是从事教育软件、数字化教学资源、多媒体产品等开发、制作的专业公司;是江苏省信息产业厅认定的双软企业、江苏省新闻出版局审核认定的电子出版物开发制作单位。公司长期承担高校及教育管理部门的数字化教学资源、教务教学、实验科研等管理系统的开发和信息化项目建设。如:《数字化教学资源库-名师名课网系统》、《OA办公系统》等多个系统平台。智风公司多年来致力于网络课程的建设服务工作,拥有一支专业化的开发团队,通过严格的开发流程和创新的教学理念为广大院校提供优质的服务。专业化的研发队伍:从教学设计、技术开发,到交互设计、视觉设计、资源素材制作等各个方面,全面解决您的后顾之忧;丰富的开发经验:业已开发的课程中有42门被评为国家级精品课程,累计开发的网络课程已逾1000门。
二、实习岗位、主要过程、主要内容、主要工作、收获
我在该公司任职软件开发工程师,刚实习的第一个星期,主要的工作是熟悉公司的开发框架及开发流程,及时完成项目经理派发的任务。从第二个星期开始,我就开始接触公司的开发项目。令我印象最深、体会也最深的一个项目是《南京大学110周年校庆系统》。该项目不仅开发时间短(只有一个月的时间),最主要的是需求不清。在客户与公司的双重压力下,我们这组人(共5人)在与客户只沟通了两次的需求下,我们就开始动工。该项目的用户主要分为校领导和嘉宾。针对校领导和嘉宾进行相应的车辆、餐厅、宾馆、会场、时间、志愿者的安排,要有冲突提示功能。如:在一个重叠的时间段内,一个人不能同时参加两项及以上活动;一辆车安排的人数不能超过他的最大承载数等等。在做这些功能的时候,我们有过以人为基础,分配车辆、餐厅等资源,也有考虑过以资源为主,分配人员等种种意见。在每一次意见有了分歧以后,我们都要讨论,各抒己见。这种方式使我乐于表达自己的想法,当我的想法得到了其他同事的认可时,那种感觉无法用言语来表达。即使是自己的想法错了,但听到同事的另一番看法,使我茅塞顿开,也有了收获的喜悦。由于项目太紧,我们经常加班,每晚都要坐末班车回去,好几次回来后倒头就睡,周末也没得休息。正是有了这些无以言表的感觉才使我对这个项目,对这个阶段很难忘。在项目的功能方面,我负责所有基础信息的添加与列表显示。在做这些的时候,与我在学校做的项目的最大不同是分页都是用的存储过程,验证最好要做到客户端和服务端同时验证。还涉及到站内信互发、打印、导出、发邮件等这些我以前看似很神奇的东西,现在我已把神奇变为了现实。
在这半年多的工作实践中,我学到了很多,这些都是作为学生学不到的,如:
1、我参与的都是团队合作的项目,无论是在自己公司,还是在合作公司,我们都讲究团队精神。在信任自己和他人的基础上,思想统一,行动一致,这样的团队一定会攻无不克、战无不胜。我们的很多工作是一起完成的,在这个过程中,大家互相提醒和补充,大大提高了工作效率,所有的工作中沟通是最重要的,一定要把信息处理的及时、有效和清晰。
2、每一个项目在开始着手的第一步,一定要和客户把需求沟通清楚,只有了解了项目的需求,才有可能真正做好一个项目。我们需要向客户提出要求客户提供所有涉及该项目的资料,每次与客户见面都需要熟悉业务与程序的最少一至两个程序员随时记录需求。
3、工作中,有一个无论是技术,还是经验都比较让人肯定的前辈带领,将任务详细化,详细到每个页面、甚至是一个页面中的图片什么时候做好,做到什么程度,这样把工作进度有计划有方向的暂定下来,做事很有效率。
4、每天的工作小结真的很重要,这让我们每天都有计划的知道自己干了什么,不是漫无目的的工作。
5、工作并不是一成不变的,也许有一天你要去其他岗位帮忙,所以同事之间的技术要互相学习,也许有一天,公司需要你发挥其他的技能帮忙,所以互相学习也是很重要的,我在公司,深有感触,除编程之外,切图、界面设计等工作都干过。
三、体会
转眼,出来社会都已大半年,已是半个社会人了。不能再向学生那样,某些时候可以随心随意。顶岗实习,为我们提供了一个很好的实践机会,可以让我们更好的把理论应用于实践,在实践中领悟理论,更可以学习到很多书本上学习不到的、甚至比理论知识更实用的业务知识。而且,这些实习经验,无疑是我们毕业后就业的一大筹码。作为一个成年人,作为一个社会职业人,任何时候都要守规矩,做好自己的本分,承担起自己所需要承担的责任。经历了2家公司的工作,我渐渐的认识到,每一份工作或每一个工作环境都无法尽善尽美,但每一份工作中都有许多宝贵的经验和资源,如失败的沮丧、自我成长的喜悦、温馨的工作伙伴、值得感谢的客户等等,这些都是工作成功者必须体验的感受和必备的财富。如果每天怀着感恩的心情去工作,在工作中始终牢记拥有一份工作,就要懂得感恩的道理,你一定会收获很多很多。在你收获很多很多的同时,你会发现自己已经在锻炼中变得勇敢,坚强,乐观,阔达。这样的你,是不断前进的走在成功的路上的。
篇二:软件工程实习心得与收获
时间过的很快,转眼间已经实习将近5个月,其中有2个月是属于完全被流放的。
最先在内部系统组参与内部管理系统开发(struts+mysql+spring+hibernate),之后是去做网络交换机软件的脚本测试。现在又回归内部系统,虽然在脚本组期间,编码能力被别人甩在后头,但至少具有了一些测试经验。
至少自己做的东西,是真正交付到了客户手上,到也稍微有些成就感。
1、浅谈测试
一直以来,我都认为测试是脱离了软件工程范围的工作,不以为屑。但在实际情况中,测试是既重要且难以精湛的.其真正的压力,在于找不到bug,责任在你,而不在于编码人员。一般的测试人员不懂编码,他们靠的是日以累计的经验总结和想象力。而要做到高级测试工程师,则一定要懂编码,因为这是你完全掌握整个系统的方方面面具体运作的前提。但占主导地位的,还是大型系统的集成测试经验。实际项目中,编码时间一般只占30%左右,真正耗费时间的是IT阶段的找 bug与对应bug,此阶段基本评定了coder的编码质量。
2、程序员的困惑
有些人,以为教学视频和代码看多,自己就懂的多,实际做起来,却不知从何下手,问题在那?如何定位?如何解决?通通跟一样能力有关,debug追踪能力,也称调试。在项目组工作不愁源码资源,但问题是蛋糕摆在面前,你如何去消化?
有位同事告诉我:代码看几遍都没用,要去抄,例如一个查询模块,在此基础上去做具体记录的历史记录查询模块,你可能会觉得很简单,但实际情况却往往报一堆异常,配置问题涉及到方方面面,以及数据库字段,传值问题等等,一大堆对于新人来说很郁闷的问题。但不用怕,只要学会调试,一个个问题去追踪,一个个去解决,自然而然,那段源码才真正属于你。
3、如何调试追踪
如果你能在短短的时间内就看到问题点在那,放下断点去追踪,出去找工作,绝对没问题。出现问题的时候,不要光看代码,要用实际行动去追踪运行期间的具体值,那是最好途径。eclipse是个很爽的ide,这点做的很好。例如页面内容显示不是自己想要的数据,我们要先从数据库查询语句去下手,设置断点,一步一步step over,让sql字段(存取最终sql语句的字符串)运行到有值,inspect进去看,如果还看不出来,就点击它,copy后在sql客户端去实际运行,看看实际查询出来的表是什么,如果是对的,有可能就是页面调用的错误或者action逻辑的传值问题。
页面错误的调试,基本方法是用右键点击实际网页查看源代码,copy到editplus,就能看到具体错误发生在那几行。通常有几种常见的错误,例如:缺少对象这种很多时候是有些被你调用的字段有可能为空的情况出现的,可以加if(xxx=null)语句加保护。追踪的方法基本就是用alert语句,放在有可能出错的地方。
4、一些习惯
遇到问题先自己思考,无从下手再找高手帮忙看看,注意他帮你看的思路,别在一旁闲着,看多了自己也会了,不然你一辈子都停留在那种水平,从人身上学到的东西远远比书多的多。
解决了一个问题后,要去究根问底去找到问题产生的起因,以防你下次遇到类似的问题再浪费同样的时间。
把代码写的漂亮,注释、空行、规范一样不能少,可读性是放在第一位。曾经看过一个高手写的代码,真的一看就是不同水平的人写的,几乎很完美,读起来很流畅,方便自己也方便别人。
任务完后不要呆着,去要求经理给你更有挑战性的任务,只要你肯去尝试,他们就会对你另言相看,把三天的任务一天加班搞定,效率和忠诚都有了,路也比较好走了。
篇三:软件工程实习心得与收获
今年9月份,由于学校安排我们这个计算机系的到xx中兴软件公司去实习,这是我人生中的第一份实习工作,也是第一次走进软件公司的大门。由于我是应届毕业生,对软件程序开发不是很熟悉,公司给我们三个方向,第一,学c、c++等语言开发;第二,学3g网络通讯技术;第三,学习最近比较火的手机操作系统android(安卓)应用程序开发。当时,中兴软件公司的部门经理和我们大概讲了下三个方面的发展方向。同学们都互相讨论着,到底是朝着哪方面去发展。那时候的我,在互联网上听说过安卓,也对那方面很有兴趣,就报了安卓应用程序开发班。我们这个班有60多号人,很多人也是对这个东西好奇就报了,第一次上安卓课时大家都很积极,老师大概讲了下安卓的发展及前景,大家听的很出神,幻想着对从事安卓开发前景一片光明。之后老师就讲了写实习期间的具体安排,要去我们大家每组要做出一个本地电子相册,6人每组。当时看着老师给出的那个本地电子相册应用程序的界面以为很难做出来,之后老师一步一步的示范,我们也一步一步的做出来了,老师很负责,我们学的也很认真。在老师的热心指导下,我对安卓应用程序的开发有了基本的了解,并积极参与相关工作,注意把书本上学到的java理论知识以及安卓的相关知识对照实际工作,用理论知识加深对实际工作的认识,用实践验证大学所学确实有用。跟公司同事一样上下班,和小组的同事一起完成相关工作;又以学生身份虚心学习,努力汲取实践知识。我心里明白我要以良好的工作态度以及较强的工作能力和勤奋好学来适应公司的工作,完成公司的任务。简短的实习生活,既紧张,又新奇,收获也很多。通过实习,使我对安卓应用程序开发工作以及发展前景有了深层次的感性与理性的认识。
在小组我主要的工作任务是做软件界面,做软件的ui,也对功能的实现有一定的了解。我在实习期间做ui花了很多的时间走了很多弯路,给同事的工作带来了很多麻烦,但是我们老师很鼓励我,让我继续认真的把事情做好,我很受鼓舞,同时也很努力的去把事情做好。
实习生活,感触是很深的,提高的方面很多,但对我来说最主要的是工作能力的进步。毕业实习主要的目的就是提高我们应届毕业生社会工作的能力,如何学以至用,给我们1次将自己在大学期间所学习的各种书面以及实际的知识,实际操作、演练的机会.自走进中兴软件公司开始我本着积极肯干,虚心好学、工作认真负责的态度,积极主动的完成相关工作,以及对企业的各种产品的了解,对企业分公司的熟悉,让自己以最快的速度融入公司,发挥自己特长.同时认真完成实习日记、撰写实习报告,成绩良好。实习单位的反馈情况表明,在实习期间反映出我具有较强的适应能力,具备了一定的组织能力和沟通能力,能很好的完成企业在实习期间给我布置的工作任务。
实习收获,主要有4个方面:
1、通过直接参与企业的运作过程,学到了实践知识,同时进一步加深了对理论知识的理解,使理论与实践知识都有所提高,圆满地完成了本科教学的实践任务。
2、提高了实际工作能力,为就业和将来的工作取得了1些宝贵的实践经验。
3、学生在实习单位受到认可并促成就业。并为毕业后的正式工作进行了良好的准备。
通过实习,我对我国安卓应用开发发展有了大致的了解,也准备在实习结束后,借回校的机会,抓紧时间,学习更多相关的理论知识,提高自己的专业水平,为正式工作准好准备思想上的转变,我本次实习还有的收获是通过自己的观察和与同事的交谈思想有一个很大的进步,人生的价值观。通过这次实习,让我受益非浅,如此感慨万分!
软件工程实习(一)
在这次软件工程课程中,我学到了很多东西,第一次深刻的体会到了什么叫做用工程化的思想来编写软件,以前自己也写过一些小型软件,没有做过大型的项目,直到这次课堂我担任组长并组织组员共同完成“个人图书管理系统”这个项目,第一次和别人合作,才发现运用工程化的思想来做是如此的有必要。
从这里,我才真正的意识到实施一个软件工程并不是说简单的会编码就能够解决问题的,我们更多的精力不是放在编码上,编码只是一个很小的模块,只占到那么小的一个部分。这个事实在很大程度上颠覆了我以前的思想,在我以前的认识中,似乎整个软件就是编码,除此无它,还好有老师的指导,不然真的会出现老师所说的,撞得头破血流之后才想起来用软件工程的思想来完成这个工作。
刚真正开始工作之前,我们费了很多的时间来完成一些前端工作,如需求分析和可行性分析,这块工作在别人看来可能是相对无关紧要,甚至是多于的,其实,换做在以前,我也会这么认为。可是,我现在算是深深地明白了磨刀不误砍柴工的道理,这些工作的完成太有必要了,太重要了,要想你的软件有用有市场,能被别人接受和认可,在进行过程中不会出现崩溃性的问题,这些工作缺一不可。
还有就是接下来的一些设计模块,此模块与软件编码涉及比较紧密,主要是解决一些参数传递和接口通讯的问题,此模块对我的触动远没有上两个模块对我的影响大,因此再次也不做过多的介绍。
在整个活动的完成过程中,作为组长,我收获很多,我发现,要是组里有个人不怎么想做事情时,他对于整个组织的影响是毁灭性的,正所谓“一颗老鼠屎,能坏一仓谷”,以后我的组织里要是出现这样的人,我绝不会给他继续留下来的机会,我会在第一时间将他清除出去。还有就是,作为组长,你要做的最重要的事情,不是发挥自己的聪明才智,而是创造出一个平台,让别人去发挥,你所要做得,出了保证这个平台的完整性和公平性外,还有就是协调好各组员之间的关系。
这就是我的实习感想。
软件工程实习心得体会(二)
时间过的很快,转眼间已经实习将近5个月,其中有2个月是属于完全被流放的。
最先在内部系统组参与内部管理系统开发(struts+mysql+spring+hibernate),之后是去做网络交换机软件的脚本测试。现在又回归内部系统,虽然在脚本组期间,编码能力被别人甩在后头,但至少具有了一些测试经验。
至少自己做的东西,是真正交付到了客户手上,到也稍微有些成就感。
1、浅谈测试
一直以来,我都认为测试是脱离了软件工程范围的工作,不以为屑。但在实际情况中,测试是既重要且难以精湛的.其真正的压力,在于找不到bug,责任在你,而不在于编码人员。一般的测试人员不懂编码,他们靠的是日以累计的经验总结和想象力。而要做到高级测试工程师,则一定要懂编码,因为这是你完全掌握整个系统的方方面面具体运作的前提。但占主导地位的,还是大型系统的集成测试经验。实际项目中,编码时间一般只占30%左右,真正耗费时间的是IT阶段的找 bug与对应bug,此阶段基本评定了coder的编码质量。
2、程序员的困惑
有些人,以为教学视频和代码看多,自己就懂的多,实际做起来,却不知从何下手,问题在那?如何定位?如何解决?通通跟一样能力有关,debug追踪能力,也称调试。在项目组工作不愁源码资源,但问题是蛋糕摆在面前,你如何去消化?
有位同事告诉我:代码看几遍都没用,要去抄,例如一个查询模块,在此基础上去做具体记录的历史记录查询模块,你可能会觉得很简单,但实际情况却往往报一堆异常,配置问题涉及到方方面面,以及数据库字段,传值问题等等,一大堆对于新人来说很郁闷的问题。但不用怕,只要学会调试,一个个问题去追踪,一个个去解决,自然而然,那段“源码”才真正属于你。
3、如何调试追踪
如果你能在短短的时间内就看到问题点在那,放下断点去追踪,出去找工作,绝对没问题。出现问题的时候,不要光看代码,要用实际行动去追踪运行期间的具体值,那是最好途径。eclipse是个很爽的ide,这点做的很好。例如页面内容显示不是自己想要的数据,我们要先从数据库查询语句去下手,设置断点,一步一步step over,让sql字段(存取最终sql语句的字符串)运行到有值,inspect进去看,如果还看不出来,就点击它,copy后在sql客户端去实际运行,看看实际查询出来的表是什么,如果是对的,有可能就是页面调用的错误或者action逻辑的传值问题。
页面错误的调试,基本方法是用右键点击实际网页查看源代码,copy到editplus,就能看到具体错误发生在那几行。通常有几种常见的错误,例如:缺少对象这种很多时候是有些被你调用的字段有可能为空的情况出现的,可以加if(xxx=null)语句加保护。追踪的方法基本就是用alert语句,放在有可能出错的地方。
4、一些习惯
遇到问题先自己思考,无从下手再找高手帮忙看看,注意他帮你看的思路,别在一旁闲着,看多了自己也会了,不然你一辈子都停留在那种水平,从人身上学到的东西远远比书多的多。
解决了一个问题后,要去究根问底去找到问题产生的起因,以防你下次遇到类似的问题再浪费同样的时间。
把代码写的漂亮,注释、空行、规范一样不能少,可读性是放在第一位。曾经看过一个高手写的代码,真的一看就是不同水平的人写的,几乎很完美,读起来很流畅,方便自己也方便别人。
任务完后不要呆着,去要求经理给你更有挑战性的任务,只要你肯去尝试,他们就会对你另言相看,把三天的任务一天加班搞定,效率和忠诚都有了,路也比较好走了。
软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。
在没有接触软件工程这门课时,我一直认为软件就是程序。能编出解决问题的程序就ok了,从没有想过,在写一个程序之前还要构思几份文档(可行性分析、需求分析、概要设计)。不过对于那些大型软件如植物僵尸大战(至少对于我来说是比较大型的了)怎么去实现它,想得我一头雾水。绚丽的界面、40种植物、一大堆不同类型的僵尸,怎样编代码去实现它呢?
第一次上软件工程的课,裴老师问软件是什么? 我的第一想法是:这个问题太过愚昧了!谁不知道软件就是程序呀? 软件是由计算机程序、数据及文档组成。听到这句话,我心里先是一惊,慌忙翻了下书软件是程序和所有使程序正确运行所需的相关文档和配置信息。赫然映入我眼帘。突然间我发现,就算是植物僵尸大战这样复杂的游戏,如果设计者实现分模块把每一部分如何实现用文档描叙出来,那这个软件实现起来不是很容易吗?
第一次课后我明白了软件工程是致力于专业化软件开发的理论、方法和工具的研究。虽然我从初中开始信息奥赛,高中继续这个爱好,但在大学二年级下学期才接触在软件开发中这么有引导意义的学科,不觉有种相见恨晚的感觉。自然它的方法学三要素:方法、工具、过程,我牢记于心。
短短的四周,裴老师的课给我留下了深刻的印象,印象尤深的是:
做软件我们首先考虑的是团队的实力。
如果别人给你50万让你们团队开发一个软件,如果他要求你们团队给这个软件永久维护,那么你要去跟他协商付100万。很多软件公司倒闭就是因为维护上的问题。至此我才明白维护软件是软件生存周期中时间最长的一个阶段,它是最花费精力与钱财的一个阶段。
如果将来你们碰到了我,你跟我说你是se那么我会很高兴,如果你告诉我你是软件工程师,我只会嗯嗯两下。
其实在我接触软件后,渴望的是当一名软件工程师。现在才知道学软件工程专业后,去当一名软件工程师是最低层的也是最没技术含量的。要做就做系统构架师,当然这需要我们的不懈努力才能达到。系统构架师的职责是设计一个公司的基础构架,并提供关于怎样建立和维护系统的指导方针。恍然发现学软件不仅是学软件,相关的管理能力也是需要具备的。
当然理论知识是用来指导实践的,亲身体验才能领悟软件工程的妙用。课设我们选择了图书馆管理系统,主要是这个系统我们接触比较多,对于它的流程还是比较清楚的。虽然如此我们还是花了很大的时间去完成它。记得当时我们定下这个题目是晚上,在讨论用什么语言实现时,大家各自说出自己比较善于的语言。然后均衡了下,定下用java做开发语言。在实现过程中,突然发现java环境连接数据库和tomcat超级麻烦且数据库老是连接不上。趁时间还早我们三再次讨论,决定用c#做开发语言,主要是c#相对于c++与java来说简易写。同时我们定下不管以后遇到什么困难都要坚持下去的准则。在课设期间我们没少跑图书馆,查阅各种资料,对比各本书上实现图书馆管理系统的代码。终于在4月11日把所有课设的所有事情弄好了。当然这只是个概述。
我印象尤深记忆深厚的是最初实现文档那块。刚开始,软件工程这门课还没学多少,基本的设计理念就很模糊。文档到底该怎么写,很纠结。于是我从网上狂下相关文档。通过粘贴与复制终于一份内容乱七八糟的需求分析文档出来了,当然这只是用来借鉴的。后来孟阳分享了十三份关于文档这方面的模板。我们照着那个样子在结合团队项目的相关实例开始了文档的写作。我们的文档总是一个人先写好,再拿给另一个人改,最后由第三个人评审。大家都觉的可以了,才过关。测试报告虽然是我一个人完成了,但也经历了不少时间,当然这时间是按小时算的。首先把大体写出了,然后修改,再增加信息。大量的截图以及思考怎样用例超费脑子,两天的通宵,彻底把我搞垮了,不过在文档出炉后,心里异常开心。
软件工程课程虽已结束,但我对于软件工程的学习才刚刚开始,裴老师的课让我受益匪浅。我体会到项目管理的重要性,随着软件规模、复杂度的不断增加,项目开发中更多的是协作、管理和控制。我学习到很多一般性的方法,例如:需求获取、模块化、分治、估算、计划等等。同时,我也认识到使用计算机解决实际问题的复杂性,在图灵机模型和冯诺依曼体系的计算机框架下,人们认识表达的过程(不断反复、逐步深化)和计算机的实现过程(顺序执行)相差甚远,软件工程方法要提供给程序员们一种更加有效的对客观世界问题域进行形式化的过程方法。
向se进军!至少这是现在的目标。
谢谢裴老师!您的课通俗易懂,举的例子贴近生活,让我们易于接受。
XX年3月下旬,我离开了学校,进入了最后一学期的顶岗实习阶段。从离开学校的那天起,我就当自己是一个正式的员工,做好了经历重重困难的准备,我始终坚信,我的努力与坚持不懈不会白费,我的未来不是梦。
一、实习单位介绍:
南京智风多媒体有限公司是我现在实习的单位,它成立于1998年,是从事教育软件、数字化教学资源、多媒体产品等开发、制作的专业公司;是江苏省信息产业厅认定的双软企业、江苏省新闻出版局审核认定的电子出版物开发制作单位。公司长期承担高校及教育管理部门的数字化教学资源、教务教学、实验科研等管理系统的开发和信息化项目建设。如:《数字化教学资源库-名师名课网系统》、《oa办公系统》等多个系统平台。智风公司多年来致力于网络课程的建设服务工作,拥有一支专业化的开发团队,通过严格的开发流程和创新的教学理念为广大院校提供优质的服务。专业化的研发队伍:从教学设计、技术开发,到交互设计、视觉设计、资源素材制作等各个方面,全面解决您的后顾之忧;丰富的开发经验:业已开发的课程中有42门被评为国家级精品课程,累计开发的网络课程已逾1000门。
二、实习岗位、主要过程、主要内容、主要工作、收获
我在该公司任职软件开发工程师,刚实习的第一个星期,主要的工作是熟悉公司的开发框架及开发流程,及时完成项目经理派发的任务。从第二个星期开始,我就开始接触公司的开发项目。令我印象最深、体会也最深的一个项目是《南京大学110周年校庆系统》。该项目不仅开发时间短(只有一个月的时间),最主要的是需求不清。在客户与公司的双重压力下,我们这组人(共5人)在与客户只沟通了两次的需求下,我们就开始动工。该项目的用户主要分为校领导和嘉宾。针对校领导和嘉宾进行相应的车辆、餐厅、宾馆、会场、时间、志愿者的安排,要有冲突提示功能。如:在一个重叠的时间段内,一个人不能同时参加两项及以上活动;一辆车安排的人数不能超过他的最大承载数等等。在做这些功能的时候,我们有过以人为基础,分配车辆、餐厅等资源,也有考虑过以资源为主,分配人员等种种意见。在每一次意见有了分歧以后,我们都要讨论,各抒己见。这种方式使我乐于表达自己的想法,当我的想法得到了其他同事的认可时,那种感觉无法用言语来表达。即使是自己的想法错了,但听到同事的另一番看法,使我茅塞顿开,也有了收获的喜悦。由于项目太紧,我们经常加班,每晚都要坐末班车回去,好几次回来后倒头就睡,周末也没得休息。正是有了这些无以言表的感觉才使我对这个项目,对这个阶段很难忘。在项目的功能方面,我负责所有基础信息的添加与列表显示。在做这些的时候,与我在学校做的项目的最大不同是分页都是用的存储过程,验证最好要做到客户端和服务端同时验证。还涉及到站内信互发、打印、导出、发邮件等这些我以前看似很神奇的东西,现在我已把神奇变为了现实。
在这半年多的工作实践中,我学到了很多,这些都是作为学生学不到的,如:
1、我参与的都是团队合作的项目,无论是在自己公司,还是在合作公司,我们都讲究团队精神。在信任自己和他人的基础上,思想统一,行动一致,这样的团队一定会攻无不克、战无不胜。我们的很多工作是一起完成的,在这个过程中,大家互相提醒和补充,大大提高了工作效率,所有的工作中沟通是最重要的,一定要把信息处理的及时、有效和清晰。
2、每一个项目在开始着手的第一步,一定要和客户把需求沟通清楚,只有了解了项目的需求,才有可能真正做好一个项目。我们需要向客户提出要求客户提供所有涉及该项目的资料,每次与客户见面都需要熟悉业务与程序的最少一至两个程序员随时记录需求。
3、工作中,有一个无论是技术,还是经验都比较让人肯定的前辈带领,将任务详细化,详细到每个页面、甚至是一个页面中的图片什么时候做好,做到什么程度,这样把工作进度有计划有方向的暂定下来,做事很有效率。
4、每天的工作小结真的很重要,这让我们每天都有计划的知道自己干了什么,不是漫无目的的工作。
5、工作并不是一成不变的,也许有一天你要去其他岗位帮忙,所以同事之间的技术要互相学习,也许有一天,公司需要你发挥其他的技能帮忙,所以互相学习也是很重要的,我在公司,深有感触,除编程之外,切图、界面设计等工作都干过。
三、体会
转眼,出来社会都已大半年,已是半个社会人了。不能再向学生那样,某些时候可以随心随意。顶岗实习,为我们提供了一个很好的实践机会,可以让我们更好的把理论应用于实践,在实践中领悟理论,更可以学习到很多书本上学习不到的、甚至比理论知识更实用的业务知识。而且,这些实习经验,无疑是我们毕业后就业的一大筹码。作为一个成年人,作为一个社会职业人,任何时候都要守规矩,做好自己的本分,承担起自己所需要承担的责任。经历了2家公司的工作,我渐渐的认识到,每一份工作或每一个工作环境都无法尽善尽美,但每一份工作中都有许多宝贵的经验和资源,如失败的沮丧、自我成长的喜悦、温馨的工作伙伴、值得感谢的客户等等,这些都是工作成功者必须体验的感受和必备的财富。如果每天怀着感恩的心情去工作,在工作中始终牢记“拥有一份工作,就要懂得感恩”的道理,你一定会收获很多很多。在你收获很多很多的同时,你会发现自己已经在锻炼中变得勇敢,坚强,乐观,阔达。这样的你,是不断前进的走在成功的路上的。
经过这学期软件工程实验的学习,深深感到用户需求对软件的重要性。成功的软件产品是建立在成功的需求基础之上的,而高质量的需求来源于用户与开发人员之间有效的沟通与合作。当用户有一个问题可以用计算机系统来解决,而开发人员开始帮助用户解决这个问题,沟通就开始了。
需求获取可能是最困难、最关键、最易出错及最需要沟通交流的活动。对需求的获取往往有错误的认识:用户知道需求是什么,我们所要做的就是和他们交谈从他们那里得到需求,只要问用户系统的目标特征,什么是要完成的,什么样的系统能适合商业需要就可以了,但是实际上需求获取并不是想象的这样简单,这条沟通之路布满了荆棘。首先需求获取要定义问题范围,系统的边界往往是很难明确的,用户不了解技术实现的细节,这样造成了系统目标的混淆。
其次是对问题的理解,用户对计算机系统的能力和限制缺乏了解,任何一个系统都会有很多的用户或者不同类型的用户,每个用户只知道自己需要的系统,而不知道系统的整体情况,他们不知道系统作为一个整体怎么样工作效率更好,也不太清楚那些工作可以交给软件完成,他们不清楚需求是什么,或者说如何以一种精确的方式来描述需求,他们需要开发人员的协助和指导,但是用户与开发人员之间的交流很容易出现障碍,忽略了那些被认为是"很明显"的信息。最后是需求的确认,因为需求的不稳定性往往随着时间的推移产生变动,使之难以确认。为了克服以上的问题,必须有组织的执行需求的获取活动。
需求获取活动要完成的任务或者步骤的过程如下:
1、编写项目视图和范围文档
系统的需求包括四个不同的层次:业务需求、用户需求和功能需求、非功能性需求。业务需求说明了提供给用户新系统的最初利益,反映了组织机构或用户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求文档描述了用户使用产品必须要完成的任务,这在使用实例文档或方案脚本说明中予以说明。功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。
非功能性需求是用户对系统良好运作提出的期望,包括了易用性、反应速度、容错性、健壮性等等质量属性。需求获取就是根据系统业务需求去获得系统用户需求,然后通过需求分析得到系统的功能需求和非功能需求。项目视图和范围文档就是从高层次上描述系统的业务需求,应该包括高层的产品业务目标,评估问题解决方案的商业和技术可行性,所有的使用实例和功能需求都必须遵从的标准。而范围文档定义了项目产品所包括的所有工作及产生产品所用的过程。项目相关人员对项目的目标和范围能达成共识,整个项目组都应该把注意力集中在项目目标和范围上。
2、用户群分类
系统用户在很多方面存在着差异,例如:使用系统的频度和程度、应用领域和计算机系统知识、所使用的系统特性、所进行的业务过程、访问权限、地理上的布局以及个人的素质和喜好等等。根据这些差异,你可以把这些不同的用户分成不同的用户类。与ulm中usecase的actor概念一样,用户类不一定都指人,也可以包括其他应用系统、接口或者硬件,这样做使得与系统边界外的接口也成为系统需求。将用户群分类并归纳各自特点,并详细描述出它们的个性特点及任务状况,将有助于需求的获取和系统设计。
3、建立核心队
通常用户和开发人员不自觉的都有一种"我们和他们"的想法,产生一种对立关系,把彼此放在对立面,每一方都定义自己的"边界",只想自己的利益而忽略对方的想法。他们通过文档、记录和对话来沟通,而不是作为一个合作的整体去识别和确定需求完成任务。实践证明这样的方法是不正确的,不会给双方带来一点益处,良好的沟通关系没有建立导致了误解和忽略重要的信息。只有当双方参与者都明白要成功自己需要什么,同时也知道要成功对方需要什么时,才能建立起一种合作关系。
为了建立合作关系通常采取一种组队的方式来获取需求,建立一个由用户代表和开发人员组成的联合小组作为需求获取的核心队伍。联合小组将负责识别需求、分析解决方案和协商分歧,小组成员可以采用会议、电子邮件、综合办公系统等方式进行交流,但交流时应注意以下原则:小组会议应该由中立方来组织和主持,用户和开发人员都要参加;交流预先要确定准备和参与的规则;议题要明确并覆盖所有关键点,但信息来源应该自由;交流目标要明确,并告知所有的成员。
4、确定使用实例
从用户代表处收集他们将使用系统完成所需任务的描述,讨论用户与系统间的交互方式和对话要求,这就是使用实例,一个单一的使用实例可能包括完成某项任务的许多逻辑相关任务和交互顺序。使用实例方法给需求获取带来的好处来自于该方法是用以任务为中心和以用户为中心的观点,比起使用以功能为中心和以开发者为中心的方法,使用实例方法可以使用户更清楚地理解和认识到新系统允许他们做什么和怎么做。描写使用实例的时候要注意使用简洁直白的表述,尽量使用主动语态,用"系统"或者"用户"作为主语,比如"用户提交用户密码,系统验证用户密码是否正确",还有一点在描述中不要设计界面细节,比如"用户从下拉框中选择产品类型"。使用实例为以后写用例场景描述中的基本路径和扩展路径提供了素材。
5、分析用户工作流程
分析用户工作流程观察用户执行业务任务的过程,通过分析使用实例得到系统的用例图。编制用例图文档将有助于明确系统的使用实例和功能需求,统一建模语言的使用有助于与用户进一步交流。每个用例的描述应包括:编号,为每个用例分配一个唯一的编号,为需求的追溯提供了方便;参与者,与这个用例交互的 actor;前置条件,开始用例前所必须具备的系统状态;后置条件,用例完成后系统达到的状态;基本路径,用例完成的关键路径,也是用户期望的路径;扩展点,基本路径的分枝,表示意外情况;字段说明,路径中名称的进一步分解说明,对以后类属性的定义和数据库字段设计起作用;设计约束,实现用例的非功能约束。
6、检查问题报告
通过检查当前已经运行系统的问题报告来进一步完善需求客户的问题报告及补充需求为新系统或新版本提供了大量丰富的改进及增加特性的想法,负责提供用户支持及帮助的人能为收集需求过程提供极有价值的信息。
7、需求重用
如果客户要求的功能与已有的系统很相似,则可查看需求是否有足够的灵活性以允许重用一些已有的软件组件。业务建模和领域建模式需求重用的最好方法,像分析模式和设计模式一样,需求也有自己的模式。
总结 :经过一学期的软工实验,深刻感到其重要性的同时也学到了不少的东西 ,将对我在今后的软件开发过程中起极大的作用。
学习了这门课程, 还有老师们的多元化教课,不但让我从理论上掌握软件工程,还有从不同的实例,让理论和实践得到了很好的结合。整一个学期下来,总的来说还是学到了很多东西的,有很多地方是值得肯定的,其实在我看来,软件工程与其说是一门课程,不如说是一门思想。是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,成为了一个综合的一个能够解决问题的思想集合。
整本书的内容逻辑很清晰明了,由浅入深循序渐进,首先我就大概描述下我们所学的内容,第一章是从整体分析软件工程这门学科的发展和所处的社会环境,接着后面的几章深入分析了软件开放过程和模式、软件项目管理、计算机工程、需求分析、结构化分析建模以及基于UML面向对象分析建模等。接着我就详细介绍下我对这门课程知识点的理解概括:
软件:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述程序的操作和使用的文档。软件的特征:①软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。②软件是通过人们的智力活动,把知识与技术转化成信息的一种产品。③软件成为产品后,其生产只是简单的拷贝,不同于硬件制造。④维护过程比硬件复杂的多,甚至会引发新的错误。软件危机:指的是软件开发和维护过程中遇到的一系列严重问题。出现软件危机的原因:①软件维护费用急剧上升,直接威胁计算机应用的扩大。②软件生产技术进步缓慢。软件工程是指导计算机软件开发和维护的工程学科。 软件生存周期:一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。软件的生存周期可分为八个阶段:①问题定义;②可行性研究;③需求分析;④总体(概要)设计;⑤详细设计;⑥编码与单元测试;⑦综合测试;⑧软件维护;
瀑布模式:是传统的软件开发模式,其中的“瀑布”是对这个模式的形象表达,由山顶倾泻下来的水,自顶向下、逐渐细化。其特点是:线性化过程;分为分析、设计、编码、集成等几个阶段,并且各阶段逐级推进,不允许跨越。里程碑管理;阶段评审;文档驱动;简洁便于工程应用的线性化过程步骤,并可以通过里程碑管理机制而使项目进程量化。其明显的优点就是没个阶段结束前都要对所完成的阶段成果进行评审,这使得软件的错误能够在个阶段内尽早发现并尽早解决,总的来说瀑布模式具有良好的质量保证机制,有很强的生命力。
原型进化模式:对软件进行直接模拟或仿真,只需要分析需求框架后进行原型创建,再对原型系统进行逐步细化与完善,通过版本更新逐步满足用户对于软件的多方面需要。
增量模式:开发过程有三个任务域,分别是设计结构、开发构件和集成系统,它既有完善的工程管理机制,又能适应用户需求变更,有利于质量的监控,并且各局部基于构件构造,有利于逐步构建与完善;由于先交付核心构件可利于降低项目的技术风险。
螺旋模式:是一种可较好的规避开发风险过程的模式,项目是基于任务的螺旋式推进,每个螺旋由内之外分别是需求分析、软件设计、系统集成、验证与交付。
软件开发的整个过程:①需要项目团队,组建优秀的团队可以开发出更搞质量的软件产品。任务开发团队要求小而精,成员大多在8人以内,主要成员有项
目负责人、开发人员、资料管理员和软件测试员。②项目计划是为了使软件开发各项工作有秩序地进行,包括任务分配和基于里程碑的进度安排,甘特图和任务网络图是用来描述进度计划的工具。项目计划书可以作为软件开发的工作指南。③项目成本估算,由于项目有来自各方面的成本包括工资开支、场地费、差旅费、设备费和资料费等,但是软件主要是对人力成本的估算,常用的方法有程序代码成本估算法等。④软件风险管理包括很多不确定的风险因素,如计划风险、管理风险、需求风险、技术风险、人员风险、产品风险、用户风险和商业风险等等,而风险管理的主要任务是:风险识别、风险评估、和风险防范。⑤软件文档管理,软件文档是工程模式软件开发的成果体现,包括技术文档、管理文档和用户文档。 ⑥软件配置管理与软件质量管理,包括配置规划、软件变更控制、软件版本控制和质量控制计划。
计算机系统由硬件、软件、数据资源、网络资源、使用系统的人等诸多元素。有三种典型的计算机体系结构:①主机结构,主机集中了全部智能,并依靠终端接口与外部设备连接。②Client/Server结构,智能分布于服务器与客户机,并依靠网络连接成系统,其中,服务器处于核心位置,提供被动核心服务;客户机处于边缘位置,可主动访问服务器,寻求服务支持。③Browser/server结构,可适应互联网远程交互的特殊结构,基于Web服务器构建。
需求分析:系统开发前期需求分析很重要,它是为了有效解决用户问题的需要进行的一项工程活动,所需要考虑的需求问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。其步骤有三个:①获取客户需求,客户泛指某个人或机构部门等,一般方法是调查,包括访谈、座谈、问卷、跟班和收集资料,需求规约可表达用户的软件价值。②建立需求模型,它是用户需求的图解,一些常用的模型有:业务树图、用例图、活动图。分别用于结构化需求建模、系统业务举例和反映系统工作流程。③进行需求验证,要验证的主要内容有:有效性验证、一致性验证、完整性验证、现实性验证和可检验性验证。 结构化分析建模:它是建立在需求规约基础上的,对软件问题进行全面解说,包括四个方面:①数据建模,它与数据库设计密切相关,ER图涉及实体、关系、属性等图形元素,在业务层面建立数据库概念模型,一般用于前期的建模构想。②功能建模,是对系统数据加工的图解,数据流程图是常用的建模工具,涉及数据接口、数据处理、数据流、数据存储等图形元素,用于描述系统数据加工细节。③行为建模,行为模型用于说哦名软件系统与环境的交互,状态转换图常用的软件行为建模工具涉及状态、事件等图形元素。⑤数据字典,是用于定义软件的元素,使软件元素获得严肃的、详密的、精确的规格说明。需求分析模型中的数据、功能、行为等诸多方面的元素,都有必要通过数据字典给予细节说明,以达到对系统较完整全面的规格定义。
基于UML对象面向对象分析建模:UML是统一建模语言,有统一的语法、语义和语用规则,其建模过程的特点是:用例驱动、以构架为中心和增量迭代,通过包实现对模型的有效的一体化管理。包括三部分:①用例建模,它面向用户需求的,能够反映系统的用户价值,用例图的基本元素有用例、参与者、交流;用例之间有泛化、延伸和包含关系。②活动建模,活动图用于描述系统动态过程,主要图形元素有:活动、转换、起点、终点、判断、并发、同步、泳道等。可描述高层业务级活动,涉及整个业务流程,针对每个用例活动建模,反映用例内部活动细节。③类分析建模,这里就只考虑实体类,实体类所代表的数据相互之间通常有一定的关系,依靠这种关系可形成有组织的程序数据结构。实体类之间的主要数据关系有:关联、聚类、泛化。
接下来我就简单说下我上这门课的简单的心得体会,我们是大四的学生了,也只有这个学期有课了,刚开始课表安排出来的时候觉得挺意外的,只有前八周有课,当时我还是有点小感动的,大四事情很多,有要考研的和工作的,大家也都有各自的事情,如果有16周的课,那么每周课不是特别多,但是时间特别分散,也不能集中某段时间去做什么事情。但是相对于老师的压力也有,课程压缩了相当于每节课的教学任务大大增加了,在加上有些假期冲掉课,就感觉我们好像上课学不到什么东西,也只是一些关键的和考试挂钩的才重点讲,完全没有扩展的时间和空间了。但是总的来说,学校开了这门课,我们上了这门课,总是学到了点东西的,不可能明明上了软件工程这门课,却像没上一样什么都不懂。在上课的时候我还是很认真地去听老师所讲述的内容的,我觉得他的思想和我一向而来的培养计算机学生综合素质的理解还是在一定程度上不谋而合了,所谓的需求获取,那就是一个谈判,辩论,交流的过程,已经不是单纯的编编程序就能解决的问题了。从我所看到的听到的来说,我最怕的就是计算机系的学生被别人说成是个带着厚眼镜的,只能够在电脑前编编程序的,在交际场上不知道说什么而一个字都说不出来的人。我觉得这样的人进入社会之后是没有什么前途的,起码他们缺乏了与人沟通交流的能力。而这门课程在一定程度上给了我们这些学生一个机会来锻炼自己在另一方面的能力,设想一下,一个又有技术又能够与人交流合作的人所取得的成就自然要比一个单单只会编程序的人要大得多。其次,这门课程教给了我们在完成一个实际项目时的一般程序及过程,我认为这是一份非常具有实际意义的教学内容。当我们在毕业之后,这是我们实际要运用的一项非常有用的技能,而且不仅仅局限于软件工程的范畴,我们即使是从事与其它行业,不也是要从需求获取开始,一直有条有理地到最后成品的出炉吗?应该说这就是这门课的价值所在。无论是在上课,还是在学生会里面做学生工作,我都深深地感觉到,技术性的工作就好比变魔术,其实原理是非常简单的,甚至可以说简单的可笑,但是当你就是做出这么一个简单的东西出来之后,一些外行们有时候会用崇拜的眼光看着你,觉得你很厉害,很高深莫测。但是制作的过程他们却不知道,也许知道之后他们只是会哑然失笑,原来这个东西的制作过程是如此的简单。这个可以说就是技术的魅力了,而作为需求获取及之后的一系列过程则是类似于魔术揭秘的过程,但是作为这个秘密我们并不需要一揭到底,至于揭的程度如何那就是我们那就是我们学出的程度如何了,我们要让对方知道我们在做什么?以及如何去做?这些东西需要我们以一定的技巧叙述出来,所起到的作用就是能够让对方了解自己的进度,却又能够不让对方来干涉自己的工作过程。因为我们是技术员,对方只是外行,即使对方知道了这个魔术的操作过程,也并不代表他们就能够向变着魔术的我们来随便修改这个魔术的变法,况且我们能够用不同的过程来得出一个同样的结果,这个过程的得出的主动权如何掌握在我们的手上,就看我们如何以高明的方式来揭开这个魔术的谜底了。当然了,在纯粹的理论上,我觉得开设这样一门课程是很成功的。但是毕竟现实里有太多的不确定的因素。最重要的因素就是授课的老师和听课的学生。这两个可以说是这门课成与败的决定性的因素。
作为我们学生来说,应该负起比较主要的责任。在大学里有了太多的基础课程,基础课程大多都比较枯燥无味,也许在第一个学期里我们还能够保持着新鲜感,但是在6学期之后,可以说再有新鲜感就是一件比较困难的事情了,我们都已经开始变得迟钝了。其次的,没有认识到这门课程的价值。这门课的价值我已经在上面说过了,是不言而喻的。但是并不是每个同学毕业之后都回从事计算机行业,也不是每个同学都知道这门课程的意义已经不仅仅局限于计算机这个范畴。或许有些人觉得反正以后不是这个发展方向,也就不在乎这个课程吧。我个人觉得这门课确实是挺好的,如果认真学必能学到很多东西,动手实践能力和从整个大体分析系统开发的逻辑性思维也会明显增强,不管以后从事哪个方面的工作,这对以后来说都是一笔很大的隐性财富。说到我自己对这么课的学习,还是有点愧疚的,前面四周我每周每节课都去上的,并且上课也认真听,一边听老师讲课一边自己看书本的介绍,但是后来我上这门课的次数就降低了,因为觉得时间很紧吧,而且老师上课的节奏我个人觉得有点慢,我都可以自己预习看到后面去了,但是这门课我还是每周至少上一节课的,虽然我早上7点多一点就出门,在自习室,但是有时候明明知道到了上课的时间,明明上课的地方离自习的地方不远也不太想去。我记得有次上课时候老师生气了,说来上课的人少,我仔细环顾了下四周发现确实人很少,稀稀疏疏的分散着,看起来确实不太舒服,让我不得不反思了,这大学的教育到底怎么了,怎么到了大四大家都不来上课,虽然我不是每节课都来,但是我还是时不时来上课的,可能是比较浮躁吧,快毕业了,觉得上课学不到什么实际的东西,要么实际一点好好考研继续深造,要么去培训增强实践能力这样才能较好的为找个满意的工作做好铺垫。
《软件工程》课程既强调基本概念和基本知识的理解和掌握,又侧重软件项目的分析、设计、实现和维护的基本技能。比较注意“点”和“面”的结合。我还是蛮喜欢这门课的,通过对这门课的学习让我意识到理论学习很重要,实践更重要,实践是检验真理的唯一标准,只有将理论与实际结合,才更能发挥我们所学的知识的作用,更能直接的创造效益,社会和国家做出贡献。
展开全文
相关推荐范文