个人作业3-提问回顾与个人总结

20373358肖圣鹏 2023-06-19 02:50:54
项目内容
这个作业属于哪个课程2023年春季软件工程(罗杰 任健)
这个作业的要求在哪里个人作业-提问总结与个人总结
我在这个课程的目标是学习软件工程方法,锻炼大型项目能力
这个作业在哪个具体方面帮助我实现目标回顾总结开发历程,重新思考来时疑问
阅读与提问作业博客链接阅读《构建之法(第三版)》提问

1 提问回顾

Q1:如何更好地对大型机器学习程序进行单元测试?。

在读到第二章关于构建单元测试时,书中提到如果模块的测试不依赖其它模块,则可人为构造数据保持测试的独立性,否则也可以与其它模块共同测试。但还有一种情况没有具体说明——在机器学习程序中,许多模块的输入输出结果是不被显式地指定的。例如,用一个可训练的矩阵变换 一个向量,由于这个矩阵的元素是通过拟合训练数据得来的,我们无法直接构建成对的输入向量和输出向量,再退一步讲,即使我们得知了训练数据的分布,我们也不能断言输出向量的具体值。因此,大型机器学习项目的单元测试是需要深入研究的。

A1:由于机器学习模型的特殊性,只能通过测试集对整体模型进行黑盒测试。因此,在开发时应当尽可能多使用经过充分测试的开源框架;

Q2:什么是合适的优化时间?

在读到第二章关于软件工程师的思维误区时,书中提到了不应该过早扩大化、泛化,但是在现实开发中,把我合适的时机十分困难:比如,第一版快速地完成了必要的需求,但第二版需要较多修改,导致虽然第一版开发更快,但总的开发时间较直接实现第二版功能更长。

A2:为了确定何时进行优化,可以考虑以下因素:

  • 性能要求:如果软件系统的性能需求已经明确定义,并且当前的实现无法满足这些需求,那么可能需要优化。

  • 用户反馈:如果用户报告了性能问题或不满意的情况,这可能是优化的信号。

  • 关键路径:如果某个部分的性能问题阻碍了整个系统的正常运行或是关键功能的实现,那么需要优化。

  • 可扩展性:如果预计系统将来需要处理更大规模的数据或者更高的负载,那么可以在合适的时机进行优化,以保证系统的可扩展性。

总而言之,选择合适的优化时间需要综合考虑项目的需求、性能要求、用户反馈和系统的可扩展性。重要的是要权衡当下的需求和未来的发展,以找到一个平衡点来进行优化,以避免过早的优化带来的负面影响。

Q3:在工作时间不固定的情况下,如何更好地结对编程?

第4.5.4节——如何结对编程中提到,如果团队中的成员要在多个项目中工作,以致于队友要经常处于等待时间,那么是不适合结对编程的。而学生由于不同的课程选择和项目参与,正处于这种情况之中,该如何解决这种问题呢?

A3: 通过提前计划、灵活性、适应性以及使用适当的工具和方法,团队仍然可以在这种环境中有效地进行结对编程,并取得良好的协作效果:

  • 小组通信和协作工具:使用适当的通信和协作工具可以帮助团队成员更好地进行结对编程。这些工具可以帮助团队成员实时共享代码、进行远程协作和沟通,无论他们身在何处。

  • 分解任务和独立工作:如果某个团队成员因为时间冲突无法参与结对编程,可以将任务分解为更小的子任务,然后让团队成员在自己的时间内独立工作。然后在合适的时候,再与其他成员进行代码审查和集成。

Q4:如何使用软件来自动化管理团队开发流程?

第5.3节为我们介绍了许多经典的开发流程,既然开发流程有如此具体的模型,那么可否直接使用专业的软件进行自动化管理?当前市场上是否有比Apifox等接口管理软件功能更高级的软件。

A4:以下是我了解到的一些方法和工具,可帮助自动化管理团队的开发流程:

  • 项目管理工具:使用专门的项目管理软件,如Jira、Trello或Asana等,可以帮助团队组织和跟踪任务、分配资源、设定里程碑和优先级,并提供协作功能和实时通信。

  • 版本控制系统:使用版本控制系统(如Git或SVN)可以自动化代码的管理、跟踪和合并。它可以帮助团队成员协同开发、保持代码库的整洁,并提供版本历史和回滚功能。

  • 持续集成和持续交付工具:使用CI/CD工具(如Jenkins、Travis CI或GitLab CI/CD)可以自动化构建、测试和部署软件。这些工具可以集成到代码库中,使得每次提交代码时都能自动进行编译、运行测试和部署。

  • 自动化测试工具:使用自动化测试框架(如Selenium、JUnit或PyTest)可以编写自动化测试脚本,以自动执行各种测试,包括单元测试、集成测试和端到端测试。这些工具可以减少手动测试的工作量,并提高测试覆盖率和一致性。

  • 文档和知识管理工具:使用文档和知识管理工具(如Confluence、Notion或Wiki)可以帮助团队共享和管理项目文档、设计文档、API文档和技术文档等。这些工具可以促进知识共享和团队协作。
    问题5:什么时候适合选择敏捷开发?

Q5:什么时候适合选择敏捷开发?

敏捷编程,除了需要合适的开发流程之外,也需要程序员付出更多的精力,对于管理者来说,也需要支付更多的薪水。那么,什么时候敏捷开发是必须的呢?

A5:适用于敏捷开发的项目主要有以下几种类型:

  • 不确定性较高的项目:如果项目需求或技术环境存在较高的不确定性,那么敏捷开发可以帮助团队更好地应对这种变化。

  • 需求频繁变更的项目:如果项目的需求会频繁变更,敏捷开发可以帮助团队更好地适应这种变化。

  • 用户参与度高的项目:敏捷开发注重与用户的紧密合作和反馈,因此适用于需要用户积极参与和及时反馈的项目。

  • 创新型项目:对于需要创新和实验的项目,敏捷开发可以提供一种灵活的方法。

  • 小型团队的项目:小型团队的项目,因为小团队更容易协作、沟通和决策。

2 实践心得

2.1 需求阶段

在需求阶段,我学到了如何进行需求分析和规划。这包括确定典型用户群体,了解他们的需求和期望,以及将这些需求转化为明确的功能和系统要求的能力。

2.2 设计阶段

在设计阶段,我学到了如何进行系统设计和架构设计。这包括选择适当的技术栈和框架,定义系统的组件和模块,以及设计数据库结构和用户界面。

2.3 实现阶段

在实现阶段,我学到了如何编写高质量的代码和实现系统的各个功能模块。这包括使用编程语言和开发工具,遵循良好的编码实践,进行模块化和可扩展的编程。

2.4 测试阶段

测试阶段,我学到了如何进行软件测试和调试。这包括编写和执行各种测试用例,进行单元测试、集成测试和系统测试,以确保系统的正确性和稳定性。

2.5 发布阶段

在发布阶段,我学到了如何进行软件部署和发布。这包括将系统部署到服务器或云平台上,配置和管理服务器环境,以及确保系统能够在生产环境中正常运行。

2.6 维护阶段

在维护阶段,我学到了如何进行软件维护和故障排除。这包括监控系统的运行状态,处理用户反馈和报告的问题,以及进行修复和改进。同时,也学到了如何进行版本控制和持续集成,以便对系统进行更新和维护。

3 感想体会

3.1 个人项目

在个人项目中,我阅读了《构建之法》这本书,我深刻认识到软件开发并不仅仅是编写代码,还包括需求分析、设计、测试、发布和维护等多个阶段。这本书帮助我了解了如何进行系统化的软件开发,以及如何将各个环节有机地结合起来,从而提高开发效率和软件质量。我还分析了CSDN网站的技能树版块,认识到了没有一发布就成熟的软件,所有软件都是从不完美到完美的。

3.2 结对编程

在结对编程中,我与另一位同学合作完成了一个C++的最长单词链算法和图形界面。这个经历让我深刻体会到团队协作的重要性。我们需要共同分工合作,相互交流和协调,才能高效地完成项目。同时,也学会了倾听和理解他人的观点,合理权衡不同的意见,并在合作中相互促进和提升。

3.3 团队项目

在团队项目中,我们的7人团队共同完成了QuadSSSS论坛网站的开发。这是一个团队合作项目,需要我们有效地分工合作、沟通协调和项目管理。在Alpha版的开发中,我们的团队并不成功。由于需求不具体,责任不明确,我们在开发中走了许多弯路,严重拖慢了开发进度。这个经验让我深刻理解到团队合作的价值和挑战。我们需要明确目标、制定计划、分配任务,并保持有效的沟通和协作,以达到共同的目标。同时,也要学会主动与队友沟通,并能够适应和处理团队中的冲突和问题。

...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwareTeacher 2023-07-20
  • 打赏
  • 举报
回复

由于这个矩阵的元素是通过拟合训练数据得来的,我们无法直接构建成对的输入向量和输出向量,


这是因为 “训练” 这个函数是一个基于统计概率的变换(中间的一些内部控制有随机性),不能用确定的输入/输出来定义吧?

78

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航敏捷软件工程,主讲教师罗杰、任健。
软件工程 高校
社区管理员
  • clotho67
  • neumy
  • BrownSearch
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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