软件工程实践总结——在实践中学习知识点

222200325郑晓鹏 2024-12-20 21:48:44
这个作业属于哪个课程FZU_SE_teacherW_4
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结、个人技术总结、软件开发模式
其他参考文献构建之法

目录

  • 第一部分 课程回顾与总结
  • 以前问题思考的博客链接
  • 问题思考及再解答
  • 1.如何区别一个好的程序员和坏的程序员呢?
  • 2.我都是大学生了,上课还要认真听老师讲课么?
  • 3.软件开发是年轻人的饭碗,吃的是青春饭?那年纪大的程序员经验丰富但是快速学习能力拼不过年轻程序员的时候该怎么办呢?
  • 4.程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
  • 5.在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?
  • 新的问题
  • 收获的知识和能力
  • 需求阶段
  • 设计阶段
  • 实现阶段
  • 测试阶段
  • 发布阶段
  • 理解和心得
  • 个人项目
  • 结对编程
  • 团队项目
  • 课程目标的掌握程度
  • 第二部分 个人技术总结
  • 个人技术博客:
  • 概述:
  • 第三部分 软件开发模式
  • 项目开发过程
  • 项目简要描述
  • 开发过程中的关键决策
  • 遇到的挑战和解决方案
  • 软件开发模式的思考
  • 软件开发模式:
  • 敏捷开发的优缺点:
  • 优点:
  • 缺点:
  • 如何影响项目
  • 开发模式对比
  • 对软件开发模式选择的思考

第一部分 课程回顾与总结

以前问题思考的博客链接

思考链接

问题思考及再解答

1.如何区别一个好的程序员和坏的程序员呢?

答:在本学期开始前,我认为可以从代码质量和工作效率来评判一个程序员的好坏,在经历本学期的大大小小实践后,我认为应该再加上团队合作以及持续学习这两点。好的程序员能够很好地与团队成员沟通和协作,愿意分享知识,帮助他人,集百家之长,共同进步,也会持续学习新技术和新工具,以保持自己的竞争力,毕竟技术的发展是永无止境的,始终保持一颗学徒的心是很重要的。

2.我都是大学生了,上课还要认真听老师讲课么?

答:我想我的答案应该是和之前一样的,当然要。只是可以选择对自己帮助更大的课认真听讲,而可以通过自学高效学习掌握的课可以自学,提高效率。

3.软件开发是年轻人的饭碗,吃的是青春饭?那年纪大的程序员经验丰富但是快速学习能力拼不过年轻程序员的时候该怎么办呢?

答:除了在第一次作业中我提出的转管理岗和继续搞技术这两条路,我认为大龄程序员还可以尝试自己创业,利用自己的技术知识和市场洞察力来开发自己的产品或服务。或者成为独立顾问或加入咨询公司,为企业提供专业的技术咨询和解决方案。

4.程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?

答:这个问题我在这个学期随着软件工程导论学习的深入以及团队实践的积累,逐渐有了新的看法。我认为取决于这公司的市场定位以及对用户多样性的需求程度。如果小部分人的需求代表了公司的目标市场或者是一个高价值的细分市场,那么为他们开发特定功能可能是有意义的。软件的多样性和包容性是现代软件开发的一个重要方面,为不同用户群体提供定制化的功能可以提高软件的可用性和吸引力。

5.在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?

答:经过本学期的学习,我认为功能反馈、性能反馈、可用性反馈、兼容性反馈以及改进建议是有用的。至于何时软件可以被优化到相对稳定的版本,这通常取决于以下几个因素:反馈的频率和严重性、用户满意度调查结果、监控软件的崩溃率、性能指标。软件的稳定性是一个持续的过程,可能需要经过多个迭代周期,包括收集反馈、修复bug、性能优化、功能增强和安全更新。
答:这个在我们团队实际部署团队作业并邀请团队

新的问题

如何更好地实现持续集成和持续部署。持续集成的实现需要掌握多种技术,如版本控制、构建、测试、部署等,这增加了开发人员的技术难度,并需要更多的培训和教育,团队必须构建适当的测试套件,并花时间编写测试用例,而不是开发代码,如果测试套件不稳定,它可能在某些天内完美地工作,但其他天可能不起作用,然后团队将不得不花费更多的时间来弄清楚发生了什么。

收获的知识和能力

需求阶段

收获:

  • 需求分析能力:学习如何与项目利益相关者沟通,明确他们的需求,并将其转化为具体的功能需求
  • 用户研究:了解目标用户群体(大学生)的行为和需求,为设计提供依据

    设计阶段

    收获:
  • UI/UX设计:掌握如何设计直观、易用的用户界面和用户体验
  • 原型制作:学习使用工具Axure 10创建原型和交互设计
  • 响应式设计:了解如何设计适应不同设备和屏幕尺寸的界面

    实现阶段

    收获:
  • 前端技术栈:深入学习HTML、CSS、JavaScript等前端技术,并涉及框架Vue3
  • 代码组织:学习如何编写可维护、可扩展的代码,包括模块化和组件化
  • 版本控制:熟练使用Git进行版本控制,与团队协作开发

    测试阶段

    收获:
  • 测试策略:学习不同类型的测试(单元测试、集成测试、端到端测试)及其重要性
  • 调试技巧:掌握浏览器开发者工具和其他调试工具的使用
  • 质量保证:学习如何确保软件质量,包括代码审查和测试覆盖率

    发布阶段

    收获:
  • 部署流程:学习如何将应用部署到服务器或云平台
  • 用户反馈:了解如何收集和分析用户反馈,为后续迭代提供依据
  • 市场营销:参与推广和市场营销活动,了解如何吸引和保留用户

    理解和心得

    个人项目

    最大的挑战无非是巴黎奥运会比赛信息的爬取,我在询问同学以及同院的学长后得知只能通过一个个接口来获取所需数据,而后我通过编写程序才得以解决,无疑打开了新世界的大门。在如此吃紧的时间完成一个之前从未涉足过的领域的任务,无疑是压力山大的,使我深刻地体会到将理论知识和实践紧紧结合起来的新奇体验,也就是所谓“做中学”了,这个方法我一直沿用到现在,使我受益良多。

    结对编程

    在这次作业之前,我和我的搭档对前端几乎是一无所知的,所以对于这次作业我们的心路大概是从疑惑(完全不知道怎么做),到惊讶(原来可以这么做),到期待(没想到真的能做出来)。再到疑惑(遇到瓶颈做不出来),到努力(坚持下来,一步一步来),到收获(在查阅了很多资料后做出来了)。回顾这次作业的过程,在这次作业中,我们首先明确了项目的目标——实现原型设计的内容,然后明确需要学习的知识、技术,分配任务。互相学习沟通,及时反馈,通过积极的团队合作来一步步实现我们的原型。也学习到了很多前端知识,比如HTML、CSS、JavaScript,并且在实现过程中遇到了很多问题,比如如何实现展开功能、如何实现滚动轮播图片、如何实现导航栏、如何实现跳转、如何实现动态面板等等,这些问题都让我们对前端有了更深入的理解。

    团队项目

    开发论坛平台的过程中,我深刻体会到了组件化开发的优势,它让整个项目结构变得清晰,每个组件负责一部分功能,如帖子列表、帖子详情、用户认证等,这不仅有助于代码的组织和维护,也使得团队协作更加高效。Vue 3的组合式API提供了更灵活的方式来组织组件逻辑,使用ref、reactive、computed和watch等响应式API可以更精细地控制组件的状态。Vue的响应式系统非常强大,可以自动追踪依赖并进行更新,这对于实现动态的论坛界面非常关键。Vue Router的使用让论坛能够以单页应用的形式存在,提供了更好的用户体验,而且它的路由懒加载和嵌套路由等功能也使得论坛的结构更加清晰。对于状态管理,Pinia作为Vuex的替代品,提供了更简单的API和更好的类型推断,使得状态管理更加直观和高效。最后团队项目不仅让我在专业技能上有了显著的提升,也让我在团队协作、时间管理、问题解决等方面得到了锻炼。我相信这些经验和技能将对我的未来职业生涯产生深远的影响。

    课程目标的掌握程度

    课程目标评分解释
    目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念87我认识到,软件工程师应诚实守信,不抄袭他人的工作,不伪造数据,不隐瞒软件缺陷;在软件开发过程中遵循行业标准和最佳实践,确保软件的可维护性和可扩展性;认识到软件产品对社会的广泛影响,包括经济、文化、教育等方面;在软件开发中承担社会责任,关注软件对社会的长远影响。而我参与开发的大学生网课资料平台的扩展性较差,我应该继续深入学习,有朝一日完善这个作品。
    目标2:掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型92需求分析是一名软件工程师在需求分析阶段应具备的技能和能力,我能熟练使用需求表达工具包括用例图、活动图、数据流图、状态图等UML图,构建需求分析模型,规范、准确地表达客户的需求,具备良好的沟通技巧和文档编写能力
    目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案85我在团队项目中使用用例、用户故事和需求规格说明书来记录需求,创建体系结构设计文档,包括组件图、序列图和部署图,定期回顾和维护软件系统。不过在快速开发过程中,可能忽视了代码质量和测试覆盖率,设计和开发文档不充分,影响项目的可维护性和可扩展性。
    目标4:能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案80在评测中,我运用各种设计模型,如UML图,进行系统分析和设计,并评估这些模型的有效性,培养创新设计意识,对团队成员提出创新的设计方案进行探讨,分析可行性和不足,但在这方面创新意识的培养可能需要时间和持续的努力,不是一蹴而就的,因此在创新意识方面有不足之处。
    目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力85开发过程中,我尽可能使用标准模板和格式来确保文档的一致性和专业性,撰写需求规格说明书时,明确文档的目的、范围、背景、术语和参考资料,鼓励团队成员参与文档撰写,确保文档内容全面、准确,但在与同行交流时存在一些沟通障碍,需要加强沟通能力
    目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作90通过团队项目,我意识到团队合作是项目成功的关键。根据PM对半成品的反复评审,积极修改并优化代码,同时强化与后端同事的交流和意见看法的交换,使前后端对接丝滑。
    目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。80在软件工程导论课的学习中,虽然我基本掌握了项目管理的基础知识,如如何估算项目的工作量和进度,如何使用工具进行项目规划,但是由于缺乏实际项目管理的经历,我在这方面仍需有所提高。

第二部分 个人技术总结

个人技术博客:

个人技术博客——Axios的使用总结

概述:

Axios是一个基于Promise的HTTP客户端,它适用于浏览器和Node.js环境,支持Promise API,使得异步HTTP请求的处理更加简洁和直观,允许开发者在请求发送到服务器之前或响应发送到客户端之前对其进行拦截和修改
可以转换请求和响应数据,支持多种数据格式,包括JSON、Multipart/FormData和URL编码形式。这些特性使其成为现代前端开发中处理HTTP请求的有力工具,它不仅简化了请求的发送和响应的处理,还提供了许多高级功能,如拦截器、请求取消和数据转换等,极大地提高了开发效率和应用的用户体验。

第三部分 软件开发模式

项目开发过程

项目简要描述

这是一个大学生学习资料分享互助平台,我们将它命名为CourseNest,可翻译为课程网。基于Spring boot、vue.js、MySQL、Postman等技术栈,用户可以在平台上对相关学科的学习资料进行上传分享与下载,对各个专业课程进行评价以作为选课参考,还可以发帖对具体问题进行询问求助。

开发过程中的关键决策

  • 前端框架:经前端组员一致决定,我们采用vue3作为前端框架,它是一款功能丰富、易上手的前端框架,能够快速开发出具有高性能的Web应用。
  • 简化接口:简化了用户注册和登录接口,整合了传输数据,避免了多对象传输带来的复杂性
  • API选择:采用了 RESTful 架构风格,使用 HTTP 方法(GET、POST、PUT、DELETE)进行操作。简洁且易于理解,能够很好地与前端进行数据交互.

    遇到的挑战和解决方案

    挑战解决方案
    用户认证与授权使用 JWT(JSON Web Token)来管理用户会话,通过加密的 Token 来确保请求的合法性
    前后端接口对接使用 Swagger 来统一规范 API 文档,确保前后端对接口的理解一致,同时利用模拟数据提前进行接口联调

    软件开发模式的思考

    软件开发模式:

    敏捷开发模式。强调在短周期内交付软件,以满足快速变化的需求,并强调团队之间的协作和交流。

    敏捷开发的优缺点:

    优点:
  • 提高交付质量:频繁的迭代和反馈机制有助于及早发现和解决问题,提高最终产品的质量
  • 增强团队协作:促进开发团队、业务人员和目标客户之间的紧密合作和沟通
  • 提高效率:较短的迭代周期减少了不必要的文档和流程,专注于实际的开发工作,提高了开发效率
    缺点:
  • 频繁的会议和迭代:敏捷开发需要频繁的会议和迭代,对开发团队的时间和资源要求较高,我们每天都举行10分钟的站立式会议用以对齐颗粒度
  • 需求规划和设计阶段模糊:在项目初期的需求规划和设计阶段可能较为模糊,需要不断的调整和迭代,导致项目进度延迟或者需求变更频繁

    如何影响项目

  • 开发效率:敏捷开发通过短迭代周期、快速反馈和持续改进,加速产品上市时间,提高开发效率
  • 团队协作:敏捷开发强调跨功能团队的紧密协作,促进知识的共享和问题的快速解决,建立信任,促进持续学习和个人成长
  • 最终交付:敏捷开发通过持续交付价值和客户参与来提高客户满意度,确保最终交付的产品最大程度地满足用户需求

    开发模式对比

    开发模型特点适用场景
    瀑布模型瀑布模型是一种线性、分阶段的软件开发方法,每个阶段完成后才能进入下一个阶段,项目被划分为一系列严格的阶段,包括需求分析、设计、编码、测试和部署,强调文档的重要性,每个阶段都需要产出详细的文档当项目需求明确且在整个开发过程中不太可能发生变化时,瀑布模型是合适的
    DevOps模型DevOps是一组过程、方法与系统的集合,用于促进开发(Dev)和运维(Ops)之间的沟通、协作和整合,强调自动化流程,包括持续集成(CI)、持续部署(CD)和基础设施即代码(IaC),支持快速的软件开发和部署周期,以快速响应市场变化适用于需要快速迭代和频繁部署的软件开发环境
    螺旋模型螺旋模型结合了迭代开发和系统化的风险分析,每个迭代周期都包括风险评估,强调客户反馈和市场研究,以确保产品满足用户需求,模型允许在开发过程中根据风险评估和客户反馈进行调整适用于风险较高、需要严格风险管理的项目

    对软件开发模式选择的思考

  • 瀑布模型:对于需求明确、变化不大的项目,如一个政府机构需要开发一个新的电子政务系统,需求明确,且需要符合严格的法规和审计要求,瀑布模型可能是一个好选择,因为它提供了清晰的开发路径和阶段划分
  • 敏捷开发模式:如果项目需求频繁变化,或者项目处于探索阶段,如一个初创公司正在开发一个移动应用,需求不断变化,需要快速迭代以适应市场反馈,敏捷开发模式(如Scrum或Kanban)可能更合适,因为它们允许快速适应变化
  • 螺旋模型:对于高风险项目,如一家汽车制造商正在开发一个新的自动驾驶系统,该系统涉及复杂的技术挑战和高风险,螺旋模型可以帮助系统地识别和管理风险,确保项目在可控的风险下进行
  • DevOps模型:在团队成员之间需要频繁沟通和协作的项目中,如一家大型电商平台需要频繁更新其网站和应用程序,以应对黑色星期五等大型销售活动,DevOps模式可以提高团队的响应速度和灵活性
  • 在选择软件开发模式时,重要的是要考虑到项目的具体需求和环境,以及团队的能力和组织文化。正确的模式可以帮助团队更高效地工作,并最终交付满足客户需求的产品。
...全文
80 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基类——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基类 2.3.2.1 什么是抽象基类(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基类 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现类厂对象 3.3.2 类厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的类型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元

239

社区成员

发帖
与我相关
我的任务
社区管理员
  • FZU_SE_teacherW
  • 助教赖晋松
  • D's Honey
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧