- 第一部分:课程回顾与总结
- 1.问题回顾
- 1.1 问题再回答
- 1.2 是否原来的问题还不明白?
- 1.3 是否产生了新的问题?
- 2.实践中学习
- 2.1 阶段收获
- 2.1.1 需求阶段收获
- 2.1.2 设计阶段收获
- 2.1.3 实现阶段收获
- 2.1.4 测试阶段收获
- 2.1.5 发布阶段收获
- 2.2 项目经历的理解或心得(个人项目/结对编程/团队项目)
- 2.2.1 个人项目
- 2.2.2 结对编程
- 2.2.3 团队项目
- 2.3 七大课程目标的自我评分(掌握程度)
- 2.3.1 目标1
- 2.3.2 目标2
- 2.3.3 目标3
- 2.3.4 目标4
- 2.3.5 目标5
- 2.3.6 目标6
- 2.3.7 目标7
- 第二部分:个人技术总结
- 第三部分:软件开发模式
- 1. 项目开发过程
- 1.1 项目目标
- 1.2 主要技术栈
- 1.3 遇到的挑战和解决方案
- 2.软件开发模式的思考
- 2.1 分析所采用的软件开发模式
- 2.2 对软件开发模式选择的思考与建议
第一部分:课程回顾与总结
1.问题回顾
软件工程实践第一次作业博客
1.1 问题再回答
Q1:为什么读了书之后我提出的问题那么少?
A1:读书多了,精神世界变得丰富,构筑了自己的小世界。沉浸在自己的世界里,不再需要向别人输出自己的想法,从而减少了提问的需求
Q2:学生该如何做到像健身学员一样找到自身定位点,把握老师身上的那套健身资源,朝自己的目标前进呢?
A2:进行自我评估,了解自己当前的水平和能力。这就像健身前的体测,了解自己的体重、体脂率等数据。识别并利用老师提供的资源,比如课堂讲解、辅导时间、额外的阅读材料等。这就像健身学员利用健身房的器械和教练的指导。保持积极的心态,就像健身学员需要自我激励来克服训练中的困难。
Q3: 在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?
A3:功能需求和建议,报告,用户体验问题,性能问题,安全和隐私问题是比较重要的。而优化需要多个因素如问题解决速度:软件优化到稳定版本的速度取决于开发团队解决问题的效率,包括bug修复、性能优化和功能改进
。
用户反馈的处理:持续收集和分析用户反馈,并根据反馈进行产品迭代是达到软件稳定性的关键
。
Q4:在项目或程序比较复杂的情况下,如何高效率的进行程序理解?
A4:面对复杂的项目或程序时,高效率地进行程序理解可以采取以下步骤:首先,从项目文档入手,了解整体架构和关键功能;接着,分析代码结构,识别核心模块和文件;然后,通过运行单元测试和集成测试来验证代码行为;最后,利用调试工具逐步执行代码,追踪关键路径,从而深入理解程序的工作原理。这个过程需要结合代码审查、团队讨论和工具辅助,以确保全面而准确地把握程序的细节。
。
Q5:程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
A5:我认为这取决于多种因素,包括市场需求、项目目标、资源限制和长期战略。如果这些特定需求能够带来商业价值、增强用户体验或符合产品的发展方向,那么考虑这些需求是有意义的。然而,如果这些功能会分散开发资源,影响核心功能的完善,或者与产品愿景不符,那么可能需要重新评估其优先级。最终,决策应基于对项目成功最有利的考量。
1.2 是否原来的问题还不明白?
经过了知识积累而且问题并不是特别的精细,所以没有不明白的
1.3 是否产生了新的问题?
在课程过程中产生了不少新问题:
在个人项目中由于本身学习能力不足,会导致接受新知识的反馈会很慢,会有挫败感,导致学习动力降低,从而导致学习效率下降。
双人协作过程中容易出现意见分歧,沟通不当,或者技术能力不在同一水平而导致的拖后腿会导致合作效率低下。
团队协作中可能会遇到团队成员协作不力、需求变更频繁、任务分配不均等问题可能导致进度延迟或质量下降,还可能出现版本管理混乱的情况。
2.实践中学习
2.1 阶段收获
2.1.1 需求阶段收获
- 学会了与客户沟通以明确需求,深入理解需求的模糊性和多样性。
- 熟悉了需求文档的撰写格式。
- 认识到需求变更的不可避免性以及需求管理的重要性。
2.1.2 设计阶段收获
- 学会了 UML(统一建模语言)设计类图、用例图、活动图等。
- 表达能力得到了提升。
- 意识到设计的可扩展性和可维护性的重要性。
2.1.3 实现阶段收获
- 技术技能提升: 通过实际编码,加深了对编程语言、框架和工具的理解和应用能力。
- 问题解决能力:在实现过程中遇到的问题迫使开发者思考和寻找解决方案,增强了解决问题的能力。
- 代码质量意识:学习如何编写可读性高、可维护性强的代码,以及如何进行代码重构。
2.1.4 测试阶段收获
- 学会了设计测试用例,并理解了功能测试、性能测试和边界测试的基本方法。
- 实践了单元测试、集成测试和系统测试,意识到全面测试的重要性。
- 通过测试发现并修复了多个隐蔽性 Bug。
2.1.5 发布阶段收获
- 学会了基本的发布流程。
- 理解了用户反馈的重要性并能处理反馈。
- 体会到后期维护的重要性。
2.2 项目经历的理解或心得(个人项目/结对编程/团队项目)
2.2.1 个人项目
- 自我管理能力提升,包括时间管理、任务优先级排序和自我激励。
- 技术不断进步,个人项目让我意识到持续学习的重要性,以保持技术知识的更新。
2.2.2 结对编程
- 由于有两个人实时审查代码,结对编程有助于减少错误和缺陷,提高代码质量。
- 在结对编程过程中,需要不断与搭档沟通想法、解释代码和讨论问题,这有助于提高我的沟通能力和表达能力。
2.2.3 团队项目
- 在项目中与团队成员共同解决了实际问题,增强了团队合作意识。
- 初步理解了敏捷开发方法对项目管理的辅助作用。
2.3 七大课程目标的自我评分(掌握程度)
2.3.1 目标1
- 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。
- 评分:85/100
- 理解了社会责任,例如信息安全和用户隐私。
- 学会了从社会影响的角度考虑软件的设计和实现。
2.3.2 目标2
- 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。
- 评分:90/100
- 熟练掌握了需求分析工具和模型构建(如用例图),能够规范表达需求。
- 在客服多样化需求上有不足。
2.3.3 目标3
- 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。
- 评分:87/100
- 理解了从架构到构件设计的基本过程。
- 对较为复杂的系统设计还有不足。
2.3.4 目标4
- 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。
- 评分:80/100
2.3.5 目标5
- 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。
- 评分:90/100
- 熟悉了主要开发文档的撰写标准。
- 对一些特定行业标准的文档要求还需进一步学习。
2.3.6 目标6
- 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。
- 评分:95/100
- 团队沟通技巧良好,能够高效表达。
- 在团队合作编程方面缺少经验。
2.3.7 目标7
第三部分:软件开发模式
1. 项目开发过程
1.1 项目目标
- 目标描述:一款旅游APP,包含各种实用功能
- 具体要求:
- 用户注册与登录:用户能够通过手机号码或第三方社交账号(如微信、支付宝)进行注册和登录。
- 个人信息管理:用户可以查看和编辑自己的个人信息,包括头像、昵称、性别、年龄、联系方式等。
- 旅游目的地搜索与浏览:用户可以通过关键词、地理位置、热门推荐等方式搜索旅游目的地,并浏览目的地的详细信息,如景点介绍、美食推荐、住宿信息等。
- 行程规划与管理:用户可以创建自己的旅行行程,添加景点、酒店、餐厅等信息,并对行程进行编辑、删除和分享。
- 旅行攻略查看与分享:用户可以查看其他用户分享的旅行攻略,并对攻略进行点赞、评论和收藏。同时,用户也可以自己发布旅行攻略,分享自己的旅行经验和心得。
- 订单管理:用户可以查看和管理自己的订单,包括酒店预订、门票购买、租车服务等。
- 消息通知:用户可以接收系统消息和其他用户的私信通知,及时了解旅行相关的信息和动态。
1.2 主要技术栈
前端:
- HTML、CSS、JavaScript
- Vue.js
后端:
数据库:
版本控制:
1.3 遇到的挑战和解决方案
需求变更频繁:
- 持续与客户沟通,设立需求冻结点,并在敏捷中灵活处理新需求。
团队协作问题:
2.软件开发模式的思考
2.1 分析所采用的软件开发模式
采用的模式:敏捷开发模式(Agile Development)
- 基于 Scrum 框架,团队以迭代为周期(每个迭代持续两周)。
- 每次迭代结束后,发布可用版本并与客户评审改进。
- 使用每日站会、Burn-down Chart(燃尽图)跟踪任务进展。
2.2 对软件开发模式选择的思考与建议
选择依据:
- 如果需求明确且变更较少,传统的瀑布模型更适合。
- 如果需求频繁变化且需要快速交付,敏捷模式是更优选择。
模式结合:
- 可以结合瀑布和敏捷模式的优点。例如,在需求分析阶段使用瀑布模型的规范化流程,而在实现和测试阶段使用敏捷模式的迭代方式。