软件工程实践总结——在总结中成长

这个作业属于哪个课程 软件工程-23年春季学期
这个作业要求在哪里 软件工程实践总结&个人技术总结
这个作业的目标 完成软件工程实践总结博客和个人技术博客
其他参考文献 《构建之法》.

目录

第一部分:课程回顾与总结

  • 一、回顾问题
    • 1.1 问题博客链接
    • 1.2 二次解答
  • 二、五大阶段的收获
    • 2.1 需求阶段
    • 2.2 设计阶段
    • 2.3 实现阶段
    • 2.4 测试阶段
    • 2.5 发布阶段
  • 三、项目心得与体会
    • 3.1 个人项目
    • 3.2 结对项目
    • 3.2 团队项目
  • 四、自我评估
    • 4.1 评分目标
    • 4.2 自我评分

第二部分:个人技术总结

  • 博客链接
  • 概述

第一部分:课程回顾与总结

一、回顾问题

1.1 问题博客链接

  • 软件工程实践课程寒假作业

1.2 问题二次解答

Q1.写博客也会花挺多时间的,如果把这些时间花在写代码上面会不会更好?

A1.写博客和编写代码是两个不同的活动,它们都有各自的价值和重要性。虽然把更多时间投入到编写代码上可以加强技术能力和项目实践,但写博客同样具有许多好处,特别是对于程序员和开发者来说。首先,通过过写博客,你也可以提高自己的表达能力和逻辑思维能力,因为你需要将复杂的技术概念和思想清晰地传达给读者。其次,写博客还可以加强自己的学习和思考过程。当你将自己的学习内容整理成博客文章时,你需要对所学知识进行梳理和总结,这可以加深你对知识的理解和记忆。最后,写博客是分享知识和经验的有效途径。通过将自己的学习和实践经验记录下来,并以博客的形式分享给他人,可以帮助他人解决问题、学习新知识和提升技能。

Q2.如何区分一个好的程序员和不好的程序员呢?

A2. 我认为可以从三个方面的能力来区分一个程序员是好还是不好,
①技术能力:好的程序员应具备扎实的技术能力,能够高效地解决问题并写出高质量的代码,能够熟练运用各种开发工具和技术栈,并具备持续学习的能力,能够不断跟进技术的发展。
②沟通和合作能力:好的程序员不仅仅是技术能力强,还具备良好的沟通和合作能力,并且能够清晰地表达自己的想法和意见,乐于分享知识和经验,能够有效地与其他人合作,以达到共同的目标。
③解决问题能力:好的程序员擅长分析和解决问题,能够快速理解问题的本质,运用逻辑思维和创造性的解决方案来解决复杂的技术挑战。并且具备良好的独立思考能力和团队协作能力,能够与其他团队成员合作解决问题。

Q3.在团队项目中,个人应该如何选择或者接受团队的工作分配?

A3.首先,应当理解工作的目标和需求。在接受工作分配之前,确保个人对整个项目的目标和需求有清晰的理解,了解项目的范围、时间表和关键任务。其次,考虑个人技能和兴趣。思考个人在相关领域的经验和专长,以及是否对特定任务或技术有特别的兴趣,因为选择你擅长且感兴趣的工作,可以提高你的工作效率和质量。同时,考虑工作的难度和挑战。可以尝试接受一些有挑战性的任务,以促进个人成长和学习,并且确保工作分配在整个团队中是相对公平和平衡的,避免某些成员因工作难度而压力大。最后,即使你没有得到理想的工作分配,也要保持积极的态度,与团队成员合作,共同努力完成项目目标。

Q4.Q3:对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?

A4.我认为,对于一名工程师尤其是软件工程师来说,“专”(专业性)和“广”(广泛性)同样重要,需要在二者之间取得平衡。首先,专业性使软件工程师成为领域内的专家,能够在特定的技术领域中提供高质量的解决方案和服务。通过专注于特定的领域,软件工程师可以获得更深入的理解和经验,并能够在该领域内迅速成长和发展。其次,广泛性使软件工程师能够灵活应对各种挑战,并具备跨领域协作和学习的能力。拥有广泛的知识和技能可以帮助软件工程师更好地理解整个软件开发生命周期,从不同角度思考问题,并促进团队合作和知识共享。

Q5.结对编程中,应选择与自己能力互补的搭档比较好还是与自己能力相近的搭档比较好?

A5.我认为应该选与自己能力互补的搭档。选择与自己能力互补的搭档意味着你们在技术和技能上具有差异,这种搭档带来的差异可以相互补充,弥补彼此的不足之处。例如,如果你擅长前端开发,你可以选择一个擅长后端开发的搭档。这样,你们可以共同解决问题,充分发挥各自的优势,提高工作效率和代码质量。

二、五大阶段的收获

2.1 需求阶段

  • 这个阶段我收获的最大能力就是利用NABCD模型进行需求分析。相比于过去凭自己的想法和认知对项目进行盲目的需求分析,通过NABCD模型可以系统地全面地对需求进行分析,保证每个环节每个地方都能有较为充分的考量和分析,为项目的成功奠定基础。
  • 我还懂得了需求文档的编写。将客户需求转化为详细的需求文档是需求阶段的重要任务,编写清晰、具体和可测量的需求规范,确保团队对需求有共同的理解和参考。

2.2 设计阶段

  • 在原型设计中,我学会了如何使用墨刀软件来进行原型设计,原型设计不应当进行天马行空、不切实际的设计,需要考虑成员的技术水平和未来的时间安排,否则在实现阶段会出现很多困难以及很多设计难以实现的尴尬境地。此外,在原型设计的过程中,应当尽可能小组成员不同的意见和观念,并最终完成一个大家都了解并认可的原型设计。
  • 在系统设计中,我学会了数据库的设计,后端接口及文档的设计。在数据库的设计中,应当需要设计出合理、符合需求的数据库结构,并且应当尽早确定下数据库的设计,减少后期对数据库结构的改动。在后端接口的设计中,应当根据前端的需求和接口文档设计出合理的接口,并尽快与前端人员进行对接。

2.3 实现阶段

  • 懂得了如何高效的学习新的知识和技术,解决在实现中出现的问题。不管是在结对作业还是团队作业,项目使用的技术和知识我基本都是现学现用。在结对作业中我主要负责后端,现学了JAVAWeb技术,在团队作业中我也是负责后端,现学了Go语言+Gin框架+Gorm框架。学习的方式主要是一边查看官方项目文档和相关博客,一边动手实践。
  • 在团队中的沟通和合作能力。不管是在结对编程还是团队作业,都要求我们要有较强的沟通和合作能力,不仅要求我们要多多与其他成员沟通交流,还要求我们要及时地,正确地表达自己的观点和问题。在这次软工实践中很好地锻炼了我的沟通和合作能力。

2.4 测试阶段

  • 测试是十分重要的!在团队项目基本完成实现阶段的任务后,我们发布了第一个版本,经过我们的初步测试,发现了大量的BUG和问题,如果没有经过测试就发布给用户使用,将导致一场灾难!这次团队项目再次告诉我测试在软件开发中是不可或缺,至关重要的。
  • 我主要是负责后端接口的设计和编写,因此我学会了如何使用Postman进行后端接口的测试,一开始使用的还不是很熟练,后来用多了也解锁了很多高级用法,大大方便了我的测试工作。测试工作应当是细心地,全面地,高质量地对软件的功能实现进行测试,排除尽可能多的BUG和问题,不应当草草了事。

2.5 发布阶段

  • 在结对作业中我懂得了如何把项目部署到服务器上。因为服务器使用的是Linux系统,操作逻辑与WIndows系统有较大差异,而且我们服务器的Linux系统还没有图形化界面,需要自学Linux命令行的相关知识,通过查阅相关博客和文档我们顺利完成了项目的部署。
  • 在团队作业中我懂得了如何解决跨域问题。团队作业我们出现了发布第一个版本后因为跨域问题而导致无法访问的情况,这个需要在前端和后端都进行相应的操作和设置来防止出现跨域问题。

三、项目概况

3.1 个人项目

  • 在个人项目中令我印象深刻的是项目的测试工作和性能优化工作。在澳网作业中需要我们对程序进行测试,不仅需要对程序的运行进行测试,还要对程序的输出结果进行测试。我设计了尽可能多单元测试,保证单元测试的覆盖率尽可能得高,并且设计了很多测试样例,包括错误的正确的,来对程序的输出结果进行正确性的测试。
  • 在性能优化工作中,我从缓存机制、IO优化、数据结构三个方面进行优化,通过合理的性能优化让程序即使面对大量数据也能从容应对。最后这次作业我拿到了相当不错的分数,这让我深刻感受到:测试工作的投入带给我们的回报是值得的,测试工作也是十分必要的,性能优化工作也是必要的!

3.2 结对项目

  • 在结对作业中我主要负责后端,包括接口设计,数据库设计和项目部署,这也是我第一次进行多人开发。在接口设计和接口对接的过程中,我锻炼了自己的沟通和表达能力。在数据库设计的过程中,我懂得了如何根据需求设计一个合理的数据库表结构。在项目部署的过程中,我理解了一个网站是通过哪些流程让我们能够通过域名来正确访问到的。

3.3 团队 项目

  • 在团队项目中,我第一次全程参与了一个项目的完整开发流程,并且深刻感受到了开发一款优秀的软件是不容易的。
  • 作为后端的开发成员,一开始和前端人员的对接出现比较大的问题,并且沟通不够及时,好在后来这些情况有了大大改善,也懂得了如何与前端人员进行沟通和交流,这让我为下次的新项目开发积攒了一定的经验。
  • 个人技术方面我也有了较大提升,学会了在没有相关博客的情况下,通过查阅官方文档来解决问题。对网络编程也有了新的认识和理解。

四、自我评估

4.1 评分目标

  • 目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。
  • 目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。
  • 目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。
  • 目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。
  • 目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。
  • 目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。
  • 目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。

4.2 自我评分

目标编号 分数 解释
目标1 98 理解软件工程师的职业道德规范和实践要求,并基于当下考研热的社会情况,针对考研人的需求和痛点开发了福研帮App,帮助考研人更好地上岸。
目标2 90 懂得如何使用NABCD模型进行需求分析,并掌握使用Axure、墨刀等软件来快速完成原型设计供客户参考和使用
目标3 85 虽然全程参与了软件开发的全过程,但主要负责后端开发,不能保证掌握了软件开发的全过程。能够根据前端的需求设计出合理的接口,并主要负责了数据库的设计。
目标4 85 项目的创新设计不够多,大部分都是摸石头过河,学习并采用他人已经使用过的设计。主要的创新点就是自己封装了一个用于处理异常的类,方便了后端的异常处理。
目标5 80 参与了接口文档的设计和后端测试报告的文档撰写,阅读并理解他人写好的需求规格说明书和系统设计说明书
目标6 95 作为后端人员,积极与负责前端的成员进行交流和沟通,积极调动前端成员参与接口文档的设计,以及时通知我们前端的需求变化,并与后端其他成员进行知识分享和技术交流
目标7 90 团队通过多次站立式会议来组织成员参与交流,了解不同成员的工作进度,并根据不同成员的完成情况进行任务的再分配和成员调度,以保证项目的整体进度符合预期。最终项目顺利完成alpha和beta阶段的任务

第二部分:课程回顾与总结

博客链接

个人技术总结——Gorm框架的多表联合查询

概述

Gorm框架可以进行多表联合查询,通过多表联合查询可以通过一条sql语句即可完成对数据库多表数据的获取,而不需要执行多条sql语句对数据库进行多次访问,从而加快了数据的处理速度。并且Gorm框架可以根据设计好的Model完成返回数据的封装,并不需要自己对数据进行再次封装。

你可能感兴趣的:(软件工程)