软件工程实践总结&个人技术博客
| 这个作业属于哪个课程 | 班级链接 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 1.课程回顾与总结 2.个人技术总结 |
| 其他参考文献 | 《构建之法》 |
一、课程回顾与总结
寒假作业二要求你在快速阅读《构建之法》后,列出仍然不懂的5到10个问题。现在的你对这些问题有什么新的看法吗?你是否在这门课中获得了成长呢?也许你有一些想要抒怀的地方,那么在这次总结中写下来吧。
以前提问题的博客链接
回答以前的提问
请尝试对自己曾经提出的问题进行解答,并阐明,是如何通过看书,实践,或者讨论弄清楚的。
问题一:进行软件开发需要有一定的知识储备,是应该先快速储备知识,还是一边学习一边开发?
- 这需要分情况讨论。若对自己开发所需要的技术完完全全不了解,则需要先进行快速的学习,储备一些基础知识,之后在现有基础上进行边学边做,在实践中再对之前所学的知识进行更深的理解和运用。当遇到不会的、不熟悉的部分,在去进行一个快速学习,就是在这样一个不断反复学习、运用的过程中逐渐成长起来,不可操之过急。当自己本身有一定的知识储备的时候,之前有一定的开发经验,但是对开发所需的技术不太了解,可以先对所需的技术做一个大致的了解,还参考别人的实现方案,在此基础上进行理解并快速的进入开发,逐渐积累经验,遇到问题时再去进行学习、解决。
问题二:软件工程的团队人员应该如何根据自身的需要选择合适的团队模式和开发流程?
- 具体情况具体分析。先根据自己团队所要开发的项目的具体情况选择合适的开发模式,考虑项目类型、项目大小、开发周期、复杂程度、客户需求等,最终组长与组员根据自身原有的开发经验综合自身的情况进行讨论,选择一个最合适自己团队的开发模式
问题三:实际的开发情况中,常会出现用户想法和设计人员想法相冲突的情形,那需要怎么权衡设计人员和用户的感受。若一昧的满足、采用用户的想法,是否会挡住创新的道路?
- 软件开发、设计人员需要和用户进行有效的、良好的沟通交流。设计人员可以适当的用简单的语言与用户解释功能大致的实现原理,对用户进行适当的培训。还可以使用原型与用户进行讲解,讨论出一个双方都比较满意的设计方案,并给用户一个大致的预期,并说明成品与实际会有一些不确定的改动,pm要起到一个良好的沟通桥梁的作用。如果一昧的采用用户的想法,因为用户很可能对软件开发不了解,并且个别用户的想法并不能代表大部分用户的需求,当与设计冲突时,一昧采用用户的想法,就会让软件的功能变的不稳定,并且难以满足其他用户的需求。并且用户的想法也存在局限性,会让软件的创新程度下降。
问题四: 积累对于创新的作用?
P360说到两个例子。Rovio公司在制作了几十个游戏后,又有愤怒的小鸟经历了数千次的修改后才得以问世,取得成功;一个设计公司反复琢磨用户如何使用拖把三年,最后才研发出全新的产品,并创造了很大的价值。这样看来,创新并不是一蹴而就的,需要厚积薄发、厚积厚发。P353还提到一个物理学家在不是他的领域进行创新,竟然发明出了WWW协议。一个是慢慢积累,一个是在别的领域突发奇想,形成了巨大的反差。那么知识的积累是否对创新有较大的帮助?普通人希望培养创新能力是否需要先投入大量的时间成本去学习,还是说在在学习的过程中不断地有意识的进行创新?这样是否会因为基础知识不扎实而无法抓住创新的要点?
- 创新不是一蹴而就的,需要厚积薄发、厚积厚发。那些未经过本领域知识积累而产生的创新很可能是无心插柳之举,并不能常常产生好的结果。在某一领域进行创新,需要知识的日积月累,并在不断学习的过程中有意识的进行创新。知识起到了基石的作用,所有的想法、实现、突发奇想的现实性都需要依赖于它,若基础知识不扎实,很可能会限制自己的想象力与实现方法。即使因为基础知识不扎实而无法抓住创新的要点,可是在坚持不懈的学习中,慢慢的就会发现知识之间的联系,基于自己之前所学的知识,很可能就可以发现创新的要点。
问题五:实现中遇到突发状况,又存在时间限制该怎么办?
P240从spec到实现,提到在按设计文档实现代码时出现了一些意想不到的问题,如果遇到的问题是比较细节的问题,在设计阶段难以考虑到,可能因为技术问题难以解决,耗时长,耗力大,而阻塞了下一步实现,不幸的是项目的截止时间有限,该怎么办?如果是在团队协作中,自己遇到了问题,无法及时解决而延迟了团队的进度,该怎么处理这样的意外?又该怎么调节心态,不要过分焦虑?
- 若是遇到了难以解决、耗时长、耗力大并且会阻塞下一步实现的问题,并且项目的截至时间有限。若不是一个十分重要的功能点,可以适当的放宽要求,甚至可以大致的进行一个实现(假装实现),使项目可以正常的运行,并赶紧进行下一步的开发,不让项目的进度停滞太久。之后差不多开发完成之后,在对原来的问题进行解决。若是重要的功能点,可以尝试一些别的实现方案,或者换一个思路去实现他,需要多去询问他人,寻找比自己有经验的人的帮助,因为无法解决的原因很可能是因为自己知识的局限性。要是因为自己而延迟了自己团队的进度,需要赶紧将此情况告诉自己的队友,他们很可能是比自己更有经验的人,并且向他们求助。在此次意外之后,积极的反思自己为什么会出现这样的局面,并加强自己的学习,在下次安排开发计划是提前开始,以便预留一段时间进行意外的处理。遇到问题而无法解决是一个很正常的事情,越是有这样的情况越不能自暴自弃、过分焦虑,应该更加积极的反思、学习、多请教他人,与队友积极的交流去解决问题,这样才不容易重蹈覆辙。
- 总之,在项目推进过程中应该保证信息的共享与沟通,并且努力将自己的工作明确落实到每一天,做好自我管理,与项目成员进行及时沟通。
每个阶段的收获
软件工程这门学问有很多 “知识点”, 这门课强调 “做中学”——在实践中学习知识点。请问你在项目的需求/设计/实现/测试/发布阶段(一共5个阶段)中,每个阶段收获最大的知识或能力是什么?
- 需求:团队先大概确定一下所做项目得主题,之后团队成员进行讨论,进行需求分析,一起设计用户场景,并且对比市场上同类产品。在确定我们项目所面向得客户之后,去更近一步得考虑客户需求。加深了沟通与表达、思考得能力。
- 设计:对原型设计更加熟悉。在理解项目需求的基础上,加上自己的理解与人机交互方面所学到的知识,进行最初的原型设计。后来发现最初的原型设计不是最费时的,之后在和前端成员的讨论下,多次修改,进行了好几天,才最终确定原型。
- 实现:对springboot框架的使用更加熟悉,完成了多个接口,对返回复杂数据的处理有了新的认识。在时间管理和团队协作上也有新的提升。
- 测试:对每个接口都进行了单元测试、黑盒测试,对系统测试也有了新的认识。提高了自己发现问题与解决问题的能力。测试完代码修改了要及时在组内告知。
- 发布:需要在ddl之前一段时间就做好安排,不然遇到一些突发情况,很可能会来不及,特别是前后端交接是,要提前开始进行,发布时要再进行测试,及时修复bug。
理解和心得
结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得。
个人项目
- 首先是跟着作业安排的PSP表格知道了在动手实践之前的规划很重要。明确需求,找到思路,先设计代码,之后再进行编码,效率会更高,而不是一上来就一通乱敲。这会给人一种明确的目标与进度安排,有条不紊。
- 系统性的完成作业,养成良好的习惯。这次实践不仅仅是要实现功能,还要进行测试,性能优化、异常处理等。这比以往的作业相比,可以更好地锻炼能力,花的时间也多了不少。
- 重新制定了自己的代码规范。之前也弄过这个,但是早就忘到脑后,现在打算重新开始。
- 学习、巩固了许多知识点,了解到尽管之前学习过一些知识,但是没有动手运用就不能化为自己的东西。比如java的文件操作和一些数据结构、正则表达式、git的使用等,尽管之前多多少少接触过,但是真正使用起来还是很生疏。
- 逐步培养规范写代码的能力,对软件工程加深了一点了解。
结对编程
- 结对的算是比较顺利的。我们先是定了一个大概的时间进行了具体的一个讨论,包括文字、语音、分享屏幕。我们一开始的想法都比较模糊,并且很多地方的理解不是非常一致,但是经过比较直观有效的讨论后,立即就开展的实践、分工。队友先进行了一些资料的查询与研究,也为我们之后的实现提高了效率。两个人一起完成同一份作业,刚开始磨合的时候,在效率上获取有些许的不足,但是渐渐的提高了自己的逻辑表达能力,也培养出了一些默契。
- 意识到自己对前后端整合过程还是不太熟练,特别是在前端接收数据之后在回调显示信息进行处理这一块。关于数据库的设计也纠结了挺久,最开始打算是在存入的时候就进行以年份、会议为单位的频数统计,后来意识到如果论文出现增删改会难以统一频数,之后就换了别的设计,直接在sql查询的时候利用count(*)进行统计,就是响应时间比较久,之后可能还会进行优化,还需要加强自己对数据库知识的理解,进行更深入的学习。刚开始解析json时,看到json文件一大串就有点抵触,好在之后静下心来,将两种论文json都解析成功,就是之后存入数据库的时候网络断了几次,有点搞心态。收获:意识到自己在一些方面的不足,之后会积极的去学习。
团队项目
- 团队不同于一个人的项目,不仅需要技术上的学习,还需要学会进行良好的、有效的沟通。在时间管理上也更加紧凑、严格,因为若自己没有按时完成任务,很可能就会影响到其他人的进度。通过这次的团队项目的编写实现,从最开始需求分析、系统设计、数据库设计、原型设计、coding、测试、整合发布,比较完整的体会了一个较完整的项目的实现,对软件工程有了更加清晰的认识,真正的把前几年学到的一些知识综合的运用了起来,让知识有了实感,也获得了一些成就感。在时间管理上,也得到了锻炼。不仅仅是在项目内的时间管理、进度安排,还有本课程以外的时间安排,明白了效率高是多么重要,并且需要提前进行相关技术的学习,也要预留一些时间进行突发情况的处理、缓冲,防止最后手忙脚乱。项目肯定还存在可以优化的地方,但是因为各种原因没有继续进行改进,结果也许不是最重要的,过程的点点滴滴才是这门课的精髓所在。
二、个人技术总结
博客地址
-
概述:当数据库表已经确定,并且已经创建完成,便可以进行项目的搭建。此时可以运用逆向工程,利用已经存在的数据库表,生成model层、dao层、mapper层等的代码,提高开发效率。

浙公网安备 33010602011771号