• 全部
...

[I.1] 个人作业:阅读和提问

21371486-徐吕进 2024-03-10 21:44:09
项目内容
这个作业属于哪个课程2024年北航敏捷软件工程
这个作业的要求在哪里个人作业:阅读和提问
我在这个课程的目标是了解熟悉并探索实践软件工程的基本思想
这个作业在哪个具体方面帮助我实现目标快速阅读教材,并思考问题,了解软件工程的基本思想

问题一:现在通常使用什么测试/效能分析工具?

第 2 章提到了测试和效能分析的方法,并介绍了 VSTS。但 VSTS 只能为 .NET 测试/效能分析吗?事实上,现在通常使用什么测试/效能分析工具?

上网搜索,发现了一些工具:

JMeter

轻量级测试工具,适合个人和小团队。

优点:

  • 开源免费:JMeter是一款开源的测试工具,用户可以免费使用其中的所有功能和组件,无需支付任何费用。
  • 轻量级简单易学:JMeter的体积小,易于安装和配置。同时,它的界面直观,操作简单,即使是初学者也能快速上手。
  • 测试功能丰富:JMeter支持多种测试类型,包括性能测试、接口测试、功能测试等,能够满足用户的不同测试需求。
  • 可扩展性:JMeter提供丰富的插件和扩展接口,用户可以根据自己的需求定制和扩展其功能。
  • 支持多种协议:JMeter支持HTTP、HTTPS、FTP、SMTP等多种协议,方便用户对不同类型的服务进行测试。

缺点:

  • GUI模式性能较差:JMeter在GUI模式下运行时,由于其图形界面的渲染和交互,会对性能造成一定影响,可能导致测试结果不够准确。
  • 结果查看不方便:JMeter生成的结果数据通常是大段的文本或XML文件,不方便查看和理解。需要使用额外的工具或插件进行结果分析和可视化。
  • 脚本维护困难:随着测试需求的增加,JMeter的脚本会变得越来越复杂,维护起来也更加困难。需要有良好的编程能力和组织管理能力来维护和管理脚本。
  • 对动态页面支持不足:JMeter对于动态页面的支持相对较弱,对于需要频繁刷新或交互的页面,JMeter可能无法很好地模拟用户的真实行为。
  • 无法直接测试HTTPS:对于HTTPS协议的网站,JMeter需要额外配置证书才能进行测试,这增加了测试的复杂性和难度。
  • 不支持分布式测试:虽然JMeter提供了远程测试的功能,但需要手动配置和启动多个JMeter实例,无法实现真正的分布式测试。

小结:JMeter是一款开源的轻量级测试工具,适合个人和小团队使用。它简单易学,上手快,且拥有丰富的测试功能,但JMeter的自动化程度较低,需要测试人员编写较多的测试脚本,维护成本较高。

Apache JMeter的优点

  1. 开源免费:JMeter是一款开源的性能测试工具,使用者可以在没有版权费用的情况下免费使用。
  2. 平台无关性:JMeter是基于Java开发的,可以运行在不同的操作系统和硬件环境上,具有较好的兼容性和可移植性。
  3. 支持多种协议:JMeter支持多种协议,包括HTTP、FTP、JDBC、SOAP、JMS、SMTP等,可以满足不同类型应用的测试需求。
  4. 功能丰富:JMeter支持各种测试场景和功能,包括负载测试、压力测试、功能测试、分布式测试、断言和验证等。

Apache JMeter的缺点

  1. 上手困难,学习曲线较陡峭:JMeter虽然提供了图形化界面,但是需要学习JMeter的特定术语和操作方式,有一定的学习成本。
  2. 对于复杂的场景可能不太适用:JMeter虽然支持多种协议和场景,但对于某些特定的测试场景,如复杂的Web应用程序或分布式系统,可能需要较高的技术水平和专业知识。
Apifox

Apifox 是一款集 API文档、API 调试、API Mock、自动化测试一体化协作平台的工具。它可以帮助你快速设计、开发和测试 API,提升研发效率。

官网:https://apifox.com/

性能测试工具 Apifox

立即体验 Apifox

Apifox 的优点

  1. 易于使用:纯图形界面,上手简单,可以跟 API 开发调试一体化打通,方便敏捷。是唯一的国产测试工具,符合中国人使用习惯。
  2. 完全免费:且可以团队使用,不限功能和团队人数,方便团队协作。
  3. 跨平台支持:Apifox 可以运行在不同的操作系统和硬件环境上,包括 Windows、Mac、Linux、Web 等,具有较好的兼容性和可移植性。
  4. 方便导入导出:Apifox 支持应用内性能测试和导出 JMeter 文件进行性能测试。应用内性能测试可以设置线程数来模拟并发请求,每个线程都会按顺序运行选中的所有步骤。导出 JMeter 文件可以在 JMeter 中进行更高级的性能测试,例如设置压力参数、断言、报告等。

Apifox 的缺点

  1. 高性能:受限于图形化界面的性能,无法进行特别高要求的负载测试。
  2. 测试报告:测试报告相对简单,复杂的性能测试需要跟 Jmeter 结合使用才能达到最好的效果。
Postman

定位:接口调试、接口测试,适用于测试人员个体。

优点:

  • 直观易用的用户界面:Postman提供了直观且易于使用的图形用户界面,使得开发人员和测试人员可以轻松地创建、发送和调试API请求。
  • 丰富的功能:Postman支持多种HTTP方法(如GET、POST、PUT、DELETE等),并允许用户设置请求头、请求体、参数等。此外,它还提供了断言、环境变量、数据驱动测试等高级功能。
  • 集成与协作:Postman可以与版本控制系统(如Git)集成,支持团队协作和API文档共享。此外,它还提供了API监控和报告功能,方便团队管理和跟踪API的状态和性能。
  • 广泛的支持:Postman支持多种操作系统和平台,包括Windows、macOS、Linux等,并且可以与多种编程语言和框架集成。

缺点:

  • 依赖SaaS:Postman主要依赖SaaS模式提供服务,这在一定程度上限制了用户的数据安全性和隐私保护。将所有数据存储在第三方服务器上,可能会引发用户对敏感信息泄露的担忧。同时,这也意味着用户必须依赖Postman的服务器稳定性和可靠性,一旦服务器出现问题,可能会影响用户的工作进程。
  • 收费功能较多:虽然Postman提供了免费版本,但很多高级功能和特性需要付费才能使用。对于个人开发者或预算有限的小型团队来说,这可能会成为使用Postman的障碍。付费功能虽然能够提升工作效率和测试质量,但对于一些用户来说,可能会觉得这些功能并不是必需的,从而觉得收费不合理。
  • 自动化功能相对单一:虽然Postman提供了一定的自动化测试功能,但这些功能相对较为单一,可能无法满足复杂测试场景的需求。对于需要高度定制化和复杂逻辑的自动化测试,用户可能需要依赖其他工具或编写大量的自定义脚本,这增加了用户的学习成本和工作量。
  • 启动速度较慢:Postman的启动速度相对较慢,这可能会影响用户的工作效率。特别是在进行频繁的API测试和开发时,每次都需要等待Postman启动可能会让用户感到不耐烦。虽然这只是一个细节问题,但长时间下来可能会对用户的工作体验和效率产生一定的影响。

小结:Postman是一款广受欢迎的接口测试工具,它提供了直观的图形化界面和丰富的功能,如接口请求构建、响应查看等。Postman还支持团队协作和API文档管理等功能,但在某些方面可能不够灵活。例如:对于复杂的数据驱动测试或关联提取等场景,Postman可能需要额外的配置和脚本编写。

Selenium

这是个 Web 应用程序的测试工具。

提供了一个回放工具,可以在大多数 Web 浏览器上编写测试,而无需学习测试脚本语言。

  • 它提供多浏览器支持。
  • 借助多个定位器,可以轻松识别网络应用程序上的网络元素。
  • 它能够比其他工具更快地执行测试用例。

问题二:显然,结对编程需要两倍的成本。什么情况下/如何保证获得两倍以上的收益?

书上说:

  1. 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。两人合作,还有相互激励的作用,工程师看到别人的思路和技能,得到实时的讲解,受到激励,从而努力提高自己的水平,提出更多创意。
  2. 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
  3. 在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。

总之,如果运用得当,结对编程可以取得更高的投入产出比(Return of Investment)。

而博客上说:

并不是所有的项目都适合结对编程,下面是一些不适合使用的例子。

1)处于探索阶段的项目,需要深入地研究,在这种情况下,一个人长时间的独立钻研是有必要的。

2)在做后期维护的时候,如果维护的技术含量不高,只需要做有效的复审即可,不必拘泥于形式,硬拉一个人来结对唱二人转。

3)如果验证测试需要运行很长时间,那么两个人在那里等待结果是有点浪费时间。

4)如果团队的人员要在多个项目中工作,不能充分保证足够的结对编程时间,那么成员要经常处于等待的状态,反而影响效率。

5)关键是如何最大限度地发挥“领航员”的作用,如果用处不大,也就无需结对。

维基百科上说:

管理者需要在工作更快的完成以及缩减测试和调试时间和更高的编码成本之间平衡。这些因素的相对权重在不同的项目、不同的任务之间也不同。对于那些程序员没有完全理解的任务上,程序员期待更多的创造性、挑战、以及高复杂度,此时使用结对编程最有帮助。[8] 在简单的,程序员都完全了解的任务上,结对编程导致生产力的净下降。[8][9]

在两个程序员工作时,两个程序员之间传递着知识。他们分享关于系统细节的知识,并且互相学习编程技巧。[2][10] 新的员工很快地获得团队的习惯,并学习到系统的细节。[11] “混杂结对编程”,即每个程序员轮流与团队中的所有其他程序员结对编程,而不是仅与某个程序员编程,使得系统的知识在整个团队中传播,减少了程序员离开团队带来的风险。[2]

结对编程通常会带来纪律和时间管理的提升。程序员在与结对的伙伴一同工作时,不太会忘记编写单元测试,花时间上网或处理个人电子邮件,[12] 或偷工减料。结对的伙伴“让他们保持诚信”。[13][14] 人们更不愿意打断两个结对编程的人,而单独工作的人却容易被打断。[15]

其他的收益据报告包括提高士气[16]以及在代码正确性上更大的信心。[2]

总得来说,我认为,需要使用结对编程的任务有以下特点:

  • 复杂性:一个人完成容易写出 Bug,结对编程随时代码走查以保证代码质量。
  • 困难的、难以理解的:结对编程可以传递经验,分享知识。

除此之外,结对编程可以带来纪律激励信心,但是这也与结对编程者的性格息息相关。例如,书上提出下述问题:

人和人不一样,在和别人合作的时候,要注意各人表达观点的方式和思考的方式不尽相同。请看网上关于MBTI的文章,测试并分享各自的MBTI类型,讨论不同性格类型对合作有多大的影响,在合作的各个阶段应该如何应对。

由此可见,是否结对编程还因人而异。

问题三:计划驱动和形式化的开发方法是什么?

我们的课程主要关注敏捷开发,该书也是。但在“表6-3 敏捷的使用范围”时提及了另外两种开发方法:计划驱动和形式化的开发方法。它们是什么?

计划驱动开发 PDD, Plan Driven Development

计划驱动的开发是一种软件开发方法,它尝试规划和开发用户在最终产品中可能想要的所有功能,并确定如何开发所有这些功能。实际上,该行动计划是基于一组有序的特定任务级别的执行。

我们可以说,无论开发过程如何进行,它都是对软件工程的一种态度。它基于项目工程的管理方法和处理大型软件开发企业的旧式方法。它使管理计划的使用得以展开来衡量进度和制定项目决策。

计划驱动的开发项目制定了项目计划,包括可用资源、工作分解、工作完成时间表等。

优点
  • 一开始就需要有知识的人员。
  • 适用于大型软件开发/广泛的系统和方面。
  • 有效控制危险系统
  • 适合稳定的生长环境。
  • 通过建设和指导取得的成就。
缺点
  • 不能随时提交变更。
  • 每次重复或增加的距离更长。
  • 应该认为,未来不会发生变化。
  • 在创作的整个生命周期中缺乏用户参与。
  • 对于动态扩展环境来说昂贵。
形式化方法 Formal Methods

在计算机科学中,形式化方法是用于软件和硬件系统的规范、开发、分析和验证的数学严格技术。

这一点我们已经充分实践,因为在面向对象课程中,我们学习过 Java 建模语言(JML, Java Modeling Language)。

形式化方法分为三步:规范、开发、验证。

在面向对象课程中,我们使用形式化方法,会在规范阶段花费大量时间,但是这确保了开发精确无误,适合用于关键领域的软件开发。

问题四:现在互联网企业常用的用户调研方法是什么?

“8.3 获取用户需求——用户调研”中,提出了九个用户调研方法:

  • 焦点小组 Focus Group
  • 深入面谈 In-depth Interview
  • 卡片分类 Card Sorting
  • 用户调查问卷 User Survey
  • 用户日志研究 User Diary Study
  • 人类学调查 Ethnographic Study
  • 眼动跟踪研究 Eye Tracking
  • 快速原型调研 Quick Prototype
  • A/B 测试 A/B Test

这些用户调研方法有的易于实施,有的不易于实施;有的能捕获到用户的态度,有的能捕获到用户的行为。那么哪些方法更容易被互联网企业采用呢?

经过网络搜索,我了解了一些用户调研方法在现实中的使用。

用户调查问卷 User Survey

这种方法在生活中见得很多。个人而言,尤其是在一些游戏中使用。游戏需要调研对应的用户画像(哪些用户更容易游玩这款游戏,这样的用户平时玩什么其他游戏?有什么兴趣爱好),以及哪些地方满意/有新的需求。

可用性测试 Usability testing

是一项通过用户的使用来评估产品是否满足用户需求的技术,由于它反应了用户的真实使用经验,在用户体验中扮演了及其重要的一环。也就是说,实用性测试是指让用户使用产品(服务)的设计原型或者成品,通过观察,记录和分析用户的行为和感受,以改善产品(服务)使其更加贴近用户习惯。产品设计出来,大都可用,但是否贴近用户,实用和易用是测试的主要目的。

眼动跟踪研究 Eye Tracking

这种方法在生活中并不熟悉。通过网络信息,我了解到一些设计、排版类似的会使用眼动跟踪研究。或许这样更容易知道用户的目光首先注视到哪里,可以把重要的内容放在该位置。

深入面谈 In-depth Interview

同样,这种方法在生活中并不熟悉。通过网络信息,我了解到该方法对访谈员的专业素质要求较高,通常访谈者会根据研究目的,事先准备一些问题或者交流的方向。与用户调查问卷类似,其旨在调查用户画像或哪些地方满意/有新的需求。但深入面谈可以提供更长的时间,可以察觉到用户的态度。

焦点小组 Focus Group

焦点小组是用户研究项目中常见的研究方法之一,依据群动力学原理,一个焦点小组应由6~8人组成,在一名专业的主持人的引导下,以一种无结构或半结构的形式,对某一主题或观念进行深入讨论,从而获取相关问题的一些创造性见解。

问题五:用户界面的最佳实践有哪些?

第 12 章提及了用户体验。

其实,计算机软件的用户界面(User Interface, UI)和用户体验(User eXperience, UX)是一个有着丰富内容的学术领域,软件工程师们在长期工作中也积累了很多相关的经验。

我也写过一些应用程序,但是用户界面的设计使人苦恼。总是发现自己设计的页面比不上专业的网站(他们可能有一些网页设计师)。

但是,我编写程序的过程中,也发现了一些最佳实践,例如字体的大小、文字排版之类的。

经过网络搜索,我获得了一些最佳实践:

  1. 简洁性与一致性:保持界面的简洁和一致性是一个良好的UI/UX设计的基本原则。避免过度设计和过多的复杂元素,注重内容的重要性,让用户能够快速理解并与应用进行交互。同时,保持界面元素的一致性,如颜色、字体、图标等,可以增加用户的可预测性和舒适感。
  2. 易用性和可导航性:一个易用的界面可以降低用户的学习曲线,并提供流畅的导航体验。确保主要功能和操作可轻松找到,并使用明确的导航元素和指示,帮助用户快速浏览和访问所需内容。
  3. 可访问性:考虑到各种用户的需求和能力,确保你的前端应用具有良好的可访问性。使用无障碍标准和最佳实践,如正确的HTML结构、合适的文本替代品、清晰可辨的对比度等,使应用对于所有用户都可用。
  4. 响应式设计:随着移动设备的普及,响应式设计已经成为前端UI/UX设计的必备技能。确保你的应用能够适应不同屏幕尺寸和设备类型,提供一致的用户体验。使用媒体查询、弹性布局和可缩放的图像等技术,使应用能够在各种设备上呈现出最佳效果。
  5. 视觉吸引力:视觉设计在UI/UX中起着重要的作用。选择适当的配色方案、使用吸引人的图像和图标,以及注重排版和布局的美观性,可以增加应用的吸引力和用户的参与度。
  6. 反馈和动画:为用户提供及时的反馈和动画效果可以增强用户体验。使用合适的动画效果来引导用户,提供操作结果的反馈,并确保用户知道他们的操作正在被处理。
  7. 用户测试和反馈:与用户进行测试和获取反馈是优化UI/UX设计的重要步骤。通过与目标用户进行交流、进行用户测试和分析,了解他们的需求和行为,以及获取实际的用户反馈,可以帮助你发现潜在的问题并改进设计。
  8. 持续改进:UI/UX设计是一个持续改进的过程。定期审查和评估你的设计,根据用户反馈和数据分析进行调整和优化。不断关注行业的最新趋势和最佳实践,保持对新技术和设计模式的学习和更新。
...全文
给本帖投票
111 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

73

社区成员

发帖
与我相关
我的任务
社区描述
2024年北航敏捷软件工程
软件工程团队开发结对编程 高校 北京·海淀区
社区管理员
  • clotho67
  • Yeyanhan
  • HJin_Gwok
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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

手机看
关注公众号

关注公众号

客服 返回
顶部