软件设计实习报告
实习之后我们需要写相关的实习报告,大家一起看看下面的软件设计实习报告,欢迎各位阅读哦!
一、实习目的:
检验与巩固理论知识,提高实际操作能力与社会实践能力。
二、实习时间:
20xx-07-27 至 20xx-10-23
三、实习地点:
广东广州
四、实习单位与部门:
广州**网络科技有限公司·软件开发部
五、实习内容:
应学校要求,本人于七月二十七号来到广州**网络科技有限公司实习。初到该公司,听公司负责人讲解了公司状况以及工作要求,就马上开始我的工作。从该负责人得知,公司的软件开发业务并没有多长时间,所以公司的很多工作流程还不太规范。在3个月的实习时间里,我参与了一个类似于erp的项目。项目的大致内容是:为一家中型制造业企业量身订做一套综合管理系统,包括了仓库管理,销售管理,采购管理,生产管理,财务管理以及人事管理,共六个子系统,且这六个子系统是有机的组合,以方便该企业的管理生产资源,人力资源以及财务。在整个参与过程中,在不同时间里担任的工作任务也不同。
1、八月份
据了解,该项目早在3月份就开始了,而且该项目一直是处于不受控状态,控制不了的原因有诸多,例如客户的需求发生了巨大变动,该项目进行期间有很多其他的项目插入到开发过程中等等。于是,我参与了测试程序的工作,以熟悉整个项目的具体内容,功能实现,设计方法等。在做测试工作的过程中,发现实习单位目前对测试不太重视,在以前的项目中也很少有全面的软件测试阶段。主要表现在:一方面,在我实习期间,就陆续有以前做的系统拿回来,重新做测试工作并修改。据了解,目前国内的绝大多数软件企业也是重编码轻测试,导致软件的强壮性低下,而在售后的维护阶段中经常性需要大幅度修改。这样一来,经常有不同的新老系统并行,给新系统的项目进度带来了外部干扰;另方面,公司要求的测试方法也较为简单,且测试文档的书写格式极其简单,这种书写格式在一些功能上的错误和明显的数据错误上有很好的表意效果,但是在表达程序的逻辑错误和内部数据错误时有很大的欠缺。在整个测试工作中也大概了解了该系统的各方面特性。该系统采用b/s结构开发,随着internet的高速发展、电信部门对网络线路的投入、带宽的增加等各个对b/s结构有利的条件下,采用b/s结构可以节省很多的成本。在以前采用c/s结构开发的系统中,需要为系统开发客户端,而且在维护过程中,除了对服务器端的维护,还要对各个客户端进行维护,而目前盛行的b/s结构,则只需要开发和维护服务器端,相比之下,开发和维护的成本也就大大降低。另外,b/s结构在internet里的应用性比较高。但是,b/s结构也不是完美的选择,它存在诸如b/s结构的用户界面上比较难控制,浏览器的安全性能没有很好的保障等问题。整个系统采用asp .net+ms sql server 2000做开发,编程语言采用c#和vb。
测试工作和书写文档是比较枯燥的工作,测试更是要细心,有耐性的去做,在这个月里认真的完成了我的工作,还帮忙修改了用户界面。我的工作得到了负责人的肯定。
2、九月份
八月末就得知要将整个系统重构,因为原有未完成的系统跟变动后的用户需求有太大的出入,而且系统存在比较多的错误,难以修复。负责人要求我参与到系统的重构工作中去,参与设计,代码编写。这对我来说是一个考验也是一个机会,于是我选择了“仓库管理”子系统,用vb作为编码语言。在九月份的开发过程中,有两个方面的感触:
第一是技术方面。由于采用了vb编写代码,而自身只学了c/c++、还有java。对vb只是一点点了解,另外,对asp dotnet更是一点不通。所以,这个时候需要发挥下自学能力,和领悟能力。在开发过程中印象最深的是web form里datagrid的操作,以及对整个web form的运行过程。首先,由于仓库管理绝大部分工作是填写单据,单据是由单头和单体组成,单头记录基本信息,单体记录明细信息。设计决定在填写单体时,采用datagrid行内编辑,所以datagrid的行内编辑将是技术的难点。dotnet的datagrid控件有编辑命令与删除命令,而新增则可以通过一个button点击来生成一个新行等待编辑。三个操作的代码清单如下:
‘编辑命令代码清单
private sub datagrid1_editcommand(byval source as object, byval e as system.web.ui.webcontrols.datagridcommandeventargs) handles datagrid1.editcommand
if viewstate("add") <> 1 then
datagrid1.edititemindex = e.item.itemindex ‘将该行的编辑状态行
datagrid1.databind()
end if
end sub
‘删除命令代码清单
private sub datagrid1_command(byval source as object, byval e as system.web.ui.webcontrols.datagridcommandeventargs) handles datagrid1.command
if viewstate("add") <> 1 then
dim delindex as integer
delindex = cint(e.item.cells(1).text)
dim dr as datarow
dr = dataset1.tables("tblbrand").rows.find(delindex)‘找到该行在数据集中的编号
dr.()‘将该行在数据集中删除
sqldataadapter1.update(dataset1.tables("tblbrand"))‘更新数据库表
datagrid1.edititemindex = -1
datagrid1.databind()
end if
end sub
‘新增按扭事件代码清单
private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
dim dr as datarow
dr = dataset1.tables("tblbrand").newrow()‘新增一行,并将该行插入到数据集
dataset1.tables("tblbrand").rows.at(dr, ataset1.tables("tblbrand").rows.count)
viewstate("add") = 1
end sub
其实datagrid中有很多很好用的特性,具体请参考msdn。其次,为实现一次性提交整张单据到数据库保存,采用了sqlaadapter与dataset结合,应用sqlaadatper的uapdate方法特性:对dataset 的数据行做检索,并发操作,update,三个命令,对删除行做数据库删除,更改的数据行做更新,新增的行做插入。最后,在web form的初始到消除整个生命周期也有了较全面的了解。但是感觉dotnet中的web form的生命周期中,所发生的事件有些凌乱,例如datagrid每一行的创建和数据绑定都是比较复杂的,在开发中涉及的技术较多,在此不一一阐述。
第二是工作方面。在这个月中,同样发现了公司的开发工作有较多的问题。首先,人员工作地点变动大,不便于沟通。在开发工作中,由于人员没有固定工作地点,只是把任务分配了,接着就各自去完成,这样一来,在各个模块的协调中经常出现了问题,但又不能很及时的和相关模块的负责人商讨解决方法,工作效率也就随之下降。其次,对整个项目的规划,整个系统的'设计,编码,测试等工作分工不明确且不统一。在项目开始时,只是草草的分了下模块,接着这个模块的设计、编码、测试就由这个模块的负责人来做,没有先对整个项目进行明确的整体的规划。而且在设计过程中缺少讨论,导致设计出来的模块独立性过高,没有考虑到公共的接口等问题。最后,对解决问题的速度慢。当在开发的过程中出现了问题,对问题的解决途径多固然是好,但是,解决方案出现分歧的时候难以敲定具体实施哪个方案,导致进展缓慢,进度延期。
3、十月份
十月份是整个重构活动的收尾阶段,该阶段需要完成的工作是数据报表的设计与实现。数据报表设计方面,沿用原有的纸质报表的结构,所以整个设计过程相对轻松。但是在实现阶段,由于在决定采用何种实现方式的决策问题上出现了飘忽不定的状况,使得进度上又有了少许的延期,最后采用了crystalreports来实现。抛弃了打印分页控制难的html方法,以及技术不成熟,安全性差的ms sql server reportingservice报表工具。在这个阶段,我负责了仓库管理、销售管理、采购管理以及生产管理等四个子系统的报表实现,在此期间学会了crystalreports的使用和编程,收益颇多。这次重构活动涉及了数据结构的重构以及代码的重构,提高了系统的清晰性、扩展性以及重用性。整体性能有了明显的提升。
六、实习总结:
在这为期3个月的实习过程中,通过担任各种工作任务,充分的检验了自身所学的知识,了解了自身知识结构的不足;通过与接触其他同事以及自我体验,较深入地了解了软件开发从业人员生活状况,以及目前大部分中小型软件开发企业的经营模式和操作流程。总结如下三点:
1、知识“阅兵式”
大学3年来所学的知识,在这次实习中得到了真正的检阅,同样,也暴露了知识结构的不合理性。技术上,学校里所学的基础知识表面上看似用不上,但却是这些基础知识让我有很牢固的基础,学起其他的技术知识自然而然的变得容易,能应对开发过程中所遇到的技术层面的问题。但是在业务上,由于缺乏所涉及的业务的相关课程的开展与自身涉猎知识面不广,而造成了在业务流程转换为系统设计或程序实现的中间环节频频出现困惑。软件工程专业培养的目标是管理或系统规划与设计,这一类的高层次人才,而不是纯粹的编码人员,所以对相关的业务应当明确、清晰。建议学校开展一些行业纵向讨论课题来弥补这个不足。
2、从业人员的生存状况
大部分从业人员长期生活在一种“精神高压”的环境中。由于项目控制的难度大,有了进度表跟没进度表的项目都一样,员工基本都是天天在赶工。不管是在大型企业的软件开发从业人员,还是在中小型企业软件开发从业人员的工作时间一般都不固定。只要手头上有没做完的事情就要赶,也有的企业让这种不固定变成让员工灵活安排时间的方法:只要手头上没东西做,人可以不用摆在办公室。但是,这种灵活性不是单方面的灵活,而是员工与管理者双方面的灵活。只要有事做,管理人员随时都可以叫上程序员一起“奋斗”。项目验收交付后,员工才算有休息一下的机会。这样一来,人员的积极性、生产效率也随着项目时间的持续而下降。但是,作为一个黄金职业,大部分从业人员都愿意吃这个苦。
3、中小型软件企业的经营模式与操作流程
目前,国内大型软件开发企业数量较少,就规模而言,有关数据表明:90%以上的企业人数不超过100人,人员超过1000人的只有10家,同样的,企业的盈利水平也普遍低下。在这些中小型的软件企业中,他们的经营模式与操作的流程也都是大同小异:从经营的模式来讲,一般是接或拉定单,按客户要求制定灵活性强,适应性强的软件。做自主研发,零售产品的软件企业极为少数。从规模到盈利,就好比一家家的裁缝店,而非制衣厂;从操作的流程来讲,从项目的规划到启动,再到测试验收交付,其中规划与测试一般都不充分,从而导致项目风险提高,进度延时以及交付后的产品强壮性差也是中小软件企业存在的一大问题。
最后,在此感谢公司里共事的每一位同事,感谢他们在实习期间给我的帮助。