软件工程实践总结——筑梦路上,昔日熬夜化成今日远航
这个作业属于哪个课程 | 2302软件工程社区-CSDN社区云 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 课程回顾与总结、个人技术总结 |
其他参考文献 | 《软件工程》, 《构建之法》 |
软件工程实践总结
一.问题解答
答:不一定是,这里有可能用户对软件的需求或规范有误解,导致期望值不一致。此时,软件行为可能是正确的,问题在于需求或规范的澄清不足。软件的目的与用户的需求有偏差,同时也有可能是用户没有正确使用软件,导致软件表现与期望不一致。这种情况更多的是用户培训或文档问题,而不是软件本身的缺陷。有时,软件的行为没有违反任何规范,但用户体验不好,导致用户期望与实际行为不符。这可能是一个用户体验设计的问题,而不是传统意义上的 Bug。
答:原本我认为应该由编写代码的人来写,在经历一学期的软件工程实践后,我认为应该由作者及未参与编程的组员共同编写,以保证单元测试的全面性,作者最为熟悉代码,可以清楚的知道什么是正确的而什么是错误的,能够更有效地编写出针对性的测试用例,而组员编写测试可以提供一个独立的视角,可能会发现开发人员未注意到的问题。
答:这个问题还是保持不变,花费的时间越多,并不一定代表工作量越高。工作量和时间之间并不是单一的线性关系,每个人的工作效率不同,高效的工作者能够在较短时间内完成大量工作。这种情况下,花费的时间少,但工作量高。并且也取决于工作的复杂度,某些任务可能非常复杂,需要花费大量时间进行详细分析、设计和解决问题,即使最终的工作量可能并不高。
答:这个问题还是保持不变,我认为不是,在团队合作中,个人不单单是完成组长分配的工作,软件开发需要高度的创造力、协作、适应性和决策能力,个人在团队中扮演的角色是多样且重要的。虽然某些任务可能具有一定的重复性,但整体而言,软件开发是一项充满挑战和变化的工作,每个团队成员的贡献都是独特且不可替代的。
答:这个问题较第一次有了新的看法,不会被完全替代但是我认为再过几年,人工智能的高速发展下是能够完全替代搜索引擎的,在一学期的使用下来,我认为gpt一类应用能够精确地给我我需要的东西,而搜索引擎仅仅是检索关键词,难以过滤一些垃圾信息,而gpt一类则不会出现这种问题。
二.产生的新问题
1.在快速发展的技术环境中,如何确保团队始终保持创新能力,避免技术停滞?
2.随着远程办公的普及,如何保证团队成员之间的高效沟通与协作,防止由于缺乏面对面的交流而导致效率低下?
3.在追求快速交付的同时,如何确保代码的高质量和可维护性?
4.在项目开发过程中,经常会遇到需求变更,如何有效管理这些变更,避免影响项目进度和质量?
三.每个阶段收获最大的知识或能力是什么
1 需求阶段
在需求阶段,我学会了如何与客户和团队成员进行有效的沟通,明确项目的需求和目标。这一阶段的关键在于准确理解客户的需求,并将这些需求转化为详细的需求文档。我掌握了使用用户故事、用例图和需求规格说明书等工具,确保需求的完整性和可追溯性。此外,通过不断地与客户和团队沟通,我提升了自己的沟通技巧和需求分析能力。
2 设计阶段
设计阶段是将需求转化为技术实现的桥梁。在这个阶段,我学习了如何进行系统的整体设计和详细设计,使用了各种设计模式和架构模式(如MVC、微服务架构等),来解决复杂的问题。我还学会了绘制各种设计图(如类图、时序图、部署图等),这些工具帮助我理清了系统各个组件之间的关系和交互。同时,通过团队合作,我学会了如何将设计思路与团队成员进行有效的沟通和协作。
3 实现阶段
在实现阶段,我最大的收获是提升了自己的编程技能和代码管理能力。我参与了多个模块的开发,实践了不同的编程语言和框架,主要使用了Java和HTML进行开发,并通过微信开发者工具进行微信小程序的开发。通过实际的编码工作,我增强了代码编写的效率和质量。此外,我还学习了版本控制工具(如Git),掌握了如何进行代码的分支管理、合并和冲突解决。这一阶段的团队合作让我更深刻地理解了代码规范和团队协作的重要性。
4 测试阶段
在测试阶段,我学习并实践了多种测试技术和工具,包括单元测试、集成测试和系统测试。我掌握了如何编写有效的测试用例,并使用工具(如JUnit、Selenium)进行自动化测试,提升了测试的效率和覆盖率。我还学会了如何进行缺陷管理,使用工具(如JIRA)跟踪和报告缺陷。这一阶段让我深刻认识到测试在软件开发中的重要性,以及如何通过有效的测试提高软件的质量和稳定性
5 发布阶段
在发布阶段,我学习了如何进行软件的部署和发布管理。我主要使用Git进行版本控制和代码的最终发布。通过实践,我了解了如何配置和管理服务器环境,确保软件的稳定运行。此外,我还学习了项目管理的基本知识,掌握了如何制定发布计划、协调团队资源、以及处理发布过程中出现的问题。这一阶段让我意识到发布的细致和谨慎对于项目成功的重要性。
四.结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得
1 个人项目
在第一次的个人项目中,实现了对网页的json文件读取,学会了用fastjson2对json文件的读取操作,更加熟悉了对java的使用和文件的读取写入方法,以及gitcode的操作。在处理 JSON 文件的读取过程中,我遇到了一些挑战,比如文件格式不一致、数据结构复杂等。但通过不断地调试和尝试,我逐渐解决了这些问题。这个过程让我更加深入地理解了 Java 编程语言和文件操作的原理,也锻炼了我解决问题的能力。
此外,我学会了使用 Git 进行版本控制和团队协作。Git 是一个非常强大的工具,它不仅帮助我管理项目的代码版本,还让我能够与团队成员共享和协作。通过学习 Git,我意识到了版本控制的重要性,并提高了自己的团队协作能力。
2 结对编程
在结对编程中,我与队友合作完成了一个跳水赛事信息的网页,实现的功能包括运动员信息、奖牌排行、赛事信息、详细赛况、奖牌地图等。在这个项目中,我主要负责前端的开发工作。
前后端分离的实现
技术栈:我们采用了前后端分离的架构,我使用了HTML、CSS和JavaScript等技术来实现前端部分,而队友负责后端的开发。通过这种分工,我们能够更专注于各自的任务,提高开发效率。
数据请求:在前端与后端的通信中,我们选择了使用Axios来进行HTTP请求。Axios的易用性和丰富的功能使得我们能够方便地处理数据请求和响应。
接口设计:在项目初期,我们进行了详细的接口设计,确保前后端的通信顺畅。
分工明确:在项目开始前,我们明确了各自的职责和任务,这使得我们在开发过程中能够各司其职,避免了任务冲突和重复工作。
定期同步:我们定期进行项目进度的同步和讨论,及时解决遇到的问题。这种高效的沟通方式使得我们在短时间内完成了项目的开发。
挑战与收获
前端挑战:在前端开发中,我遇到了一些技术难题,比如如何高效地渲染大量数据、实现复杂的UI交互等。通过查阅资料和与队友讨论,我逐步解决了这些问题,提升了自己的前端开发能力。
这次结对编程让我深刻认识到团队协作的重要性。通过与队友的紧密合作,我们不仅提高了开发效率,还相互学习、共同进步。
3 团队项目
在团队项目中,我们实现了一个上课签到的微信小程序,利用微信开发者工具,我负责前端的开发工作,实现了地点识别、时间识别、人脸识别、发布签到信息等一系列功能。
技术栈:微信小程序开发需要掌握其特有的开发语言和框架(如WXML、WXSS、JavaScript)。通过学习和实践,我掌握了这些技术,能够独立完成小程序的前端开发工作。
在项目中,我负责实现地点识别、时间识别人脸识别等功能。这些功能的实现不仅需要扎实的前端技术,还需要与后端紧密配合,确保数据的准确传递和处理。
在项目开始前,我们进行了详细的任务分配,确保每个成员都有明确的职责和任务。通过这种方式,我们能够高效地推进项目进度。
我们使用了Git进行版本控制,确保代码的同步和管理。同时,通过微信和项目管理工具进行沟通和协调,确保项目的顺利进行。
在开发过程中,我遇到了许多技术难题,比如如何实现高效的地点识别、如何处理大量数据等。通过查阅资料、请教他人和不断尝试,我逐步解决了这些问题,提升了自己的技术能力。这次团队项目让我深刻认识到团队协作的重要性。通过与团队成员的紧密合作,我们不仅提高了开发效率,还相互学习、共同进步。
五.自我评估
目标 | 描述 |
---|---|
1 | 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。 |
2 | 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。 |
3 | 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。 |
4 | 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。 |
5 | 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。 |
6 | 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。 |
7 | 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。 |
评估结果
目标 | 描述 | 得分 |
---|---|---|
1 | 在课程中,通过学习软件工程师的职业道德规范以及对社会影响的相关内容,我对软件产品对社会、健康文化等方面的影响有了较深入的了解。我理解了作为一名软件工程师所需遵循的道德规范,并树立了积极向上的开发理念。但在实际应用中,还有待进一步实践和巩固。 | 85/100 |
2 | 在课程中,学习了需求分析的全过程,并掌握了多种需求表达工具,如UML图和用户故事。能够基本辨别客户的多样化需求并进行规范的表达。然而,实际项目中的需求分析更加复杂,需要更多的实战经验来提升这一能力。 | 80/100 |
3 | 在课程中,通过多个项目的实践,我掌握了软件开发的全过程,并学习了体系结构设计方法和基本设计原则。我完成了多种设计模型的制作,并通过了技术评审。然而,实际项目中可能遇到更多复杂情况,仍需不断实践和学习。 | 85/100 |
4 | 通过课程,我学习了如何从组件到系统进行技术评测,具备了一定的设计模型评判能力,并在一些项目中尝试了创新设计。然而,实际工作中,评测和优选设计方案的能力还有待进一步提升,需要更多的实践和经验积累。 | 80/100 |
5 | 在课程中,我学习了如何撰写需求规格说明书、系统设计说明书和系统测试报告,并在多个项目中实践了这些文档的编写。我能够采用规范的表达,并具备了与业界同行交流的能力。 | 90/100 |
6 | 在团队项目中,我培养了良好的团队意识和合作技能,能够与团队成员有效沟通和协作。我还尝试组织和协调团队工作,取得了一定的成效,但在复杂项目中的领导能力还有待提高。 | 87/100 |
7 | 通过课程的学习和项目实践,我掌握了软件项目管理中的构成要素、规模和工作量估算方法,能够选择合适的工具规划软件进度并进行配置管理。然而,复杂软件工程项目的管理还需要更多的实践和经验积累。 | 82/100 |
六.个人技术总结
1.技术博客链接
2.概述
Axios 是一个基于 Promise 的 HTTP 库,广泛应用于前端开发中,用于发送 HTTP 请求和接收响应。它提供了请求拦截器、响应拦截器、取消请求等功能,使得处理 HTTP 请求变得更加简单和高效。
微信小程序提供了丰富的 API,其中 wx.request 是用于发起网络请求的主要方法,类似于 Axios,可以用于与服务器进行数据交互。