怎么写设计文档 怎样设计文档

一份好的设计文档需要提供对问题的清晰描述、整体轮廓设计、涵盖所有细节的详细设计等。这篇有趣的英文短文通过一个简单的例子介绍了Google工程师如何编写设计文档。这篇文章被翻译成中文。原文链接如下:https://Luan Junyi . medium . com/how-do-I-write-engineering-desig...

一份好的设计文档需要提供对问题的清晰描述、整体轮廓设计、涵盖所有细节的详细设计等。

这篇有趣的英文短文通过一个简单的例子介绍了Google工程师如何编写设计文档。这篇文章被翻译成中文。原文链接如下:https://Luan Junyi . medium . com/how-do-I-write-engineering-design-docs-in-Google-an-example-f 19 febe 0297 c

写文档是我在谷歌学到的最重要的技能之一。在Google中,文档被用来讨论问题,充当真实的信息源,组织知识。我工作过的其他公司没有一家对如何使用文档进行协作有如此深刻的理解。

这篇文章是我如何在谷歌写设计文档的一个例子,这是一个在新冠肺炎疫情期间控制健身房人数的真实项目。即使新冠肺炎疫情爆发后你不需要预订健身房,你也可以在GitHub [1]上获取源代码。为了让这篇文章更有趣,现在大家都可以评论Google Docs [2],Google Docs的格式比Medium支持的要好。

01问题描述

新冠肺炎疫情期间,健身房被要求控制现场会员总数,要求会员去健身房前在网站上预约。需要提前两天预约,从午夜开始。例如,2021年4月1日的预订将于2021年3月30日当地时间上午00:00开放。

这个健身房的游泳池提供的位置非常有限。我试了几次,但是直到早上6点我都不能预订。后来工作人员告诉我,因为需求量大,所以要在午夜预约。但是熬夜到半夜会打乱我的生物钟,所以我不能接受。

而且我觉得雇人来做也不好,因为我内心深处觉得早睡是健康高效生活方式的核心习惯,用钱去剥夺别人的好习惯是不道德的。在被告知没有其他办法后,我决定写一个程序帮我预订。

我个人认为用机器人工作对别人不公平,所以我对这个决定一点也不骄傲。相反,我认为健身房应该提高一些场馆的价格。但这显然超出了设计文档的范围,是一个非常主观的想法。

02需求

自动提前两天在半夜预订健身房程序启动后不需要人工交互,应该具有容错性,能够进行合理的重试可以在Mac电脑上运行用户可以指定用户名、密码、预约的项目、日期和时间等

出于考虑:

只提前1或2天预订,或当天预订容忍操作系统或网络问题在预约服务器停止运行后还要能够工作在网站结构(HTML)改变后,还要能够工作

03外形设计

浏览器自动化与模拟请求

浏览器自动化是指通过程序控制真正的浏览器,并在GUI上自动化操作。模拟请求是指让一个程序通过HTTP与服务器交互,就像网页浏览器一样(而不是控制浏览器)。

考虑到以下几点,我认为浏览器自动化优于模拟请求:

[优点] 浏览器自动化启动了一个真实的浏览器实例,所以我们知道程序运行时发生了什么,它使调试和开发更加容易。[优点] 网站需要JavaScript加载控件,而这较难通过编程实现,可能需要控制一些渲染引擎。[缺点] 浏览器自动化依赖于HTML结构,而模拟请求依赖于HTTP API,API相对稳定,不太可能改变。

显然利大于弊。

系统概述

图片-20220321224253465

Selenium[3]是一个提供浏览器自动化解决方案的软件库。我们的程序将使用Python编写,Selenium将通过Python API控制,Selenium将通过其Gecko驱动程序控制Firefox。

***[4]是一种阻止操作系统进入睡眠状态的程序。如果系统休眠,程序不会在半夜运行。

04详细设计

用户输入

用户名、密码、日期等。都是从命令行参数输入的。

重试

程序将捕捉所有异常(页面未加载等)。)并重试100次,直到预约成功。通过确认DOM元素来识别成功的预订。

浏览器选择

我们需要使用主流浏览器之一。我考虑并测试了Chrome、Firefox和Safari。Safari和Chrome都需要额外的步骤来使用相应的Selenium驱动程序,所以我选择了Firefox。它还需要一些来自操作系统设置的验证,但只需要在最初几次进行确认。

杂志

程序自动执行浏览器操作,就像是由用户启动的一样。本质上,它将在循环中执行以下操作:

查找某个元素对元素进行操作(输入文本、选择选项或单击)等待预期结果,然后返回1

因此,每个日志记录将有两个项目:

执行了什么在等待什么

这样的日志记录将使调试变得容易。

保持计算机连续运行。

如果操作系统在程序启动和午夜之间进入睡眠状态,程序就无法在午夜运行,***可以防止这种情况发生。它是一个命令行工具,我们在Python中将其作为子进程启动:

subprocess.Popen([‘caffeinate’, ‘-d’, ‘-w’, ‘%d’ % os.getpid()])

中心控制

Selenium提供了一套访问特定DOM元素的方法[5],其中xpath的表达能力最强。所以我们会用find_element_by_xpath来定位DOM元素,比如按钮、输入框等。

只要有可能,我们宁愿依靠DOM的内部文本来定位它们。对比DOM结构和属性(类名等。),内文的好处不是不太可能改,而是如果改了更容易调试。当然,我们要对DOM结构做一些假设。例如,我们需要单击class='control' partition (div)下class='logon '的第二个按钮。

等待页面加载

在发送每个HTTP请求后,程序需要等待页面加载(一般是2~5秒,没错,这个站点比较慢)。这是由WebDriverWait API[6]完成的。例如,下面的代码将等待120秒,直到<>book_btn = WebDriverWait(driver, 120).until(EC.element_to_be_clickable((By.XPATH, “//button[@ng-reflect-router-link=’/Appointments’]”)))

如果按钮未能在120秒内加载,将引发异常。

更多实施细节

选择合适的日期。假设我们想预订4月14日的房间。我们不能在预订日历上选择带有文本“14”的单元格,因为3/14单元格具有相似的属性。当前月份的单元格必须包含类别“计算月份”。

调整月份。日历显示的是当月的某一天,而不是我们打算预订的月份。如果是两天后的下个月,就有问题了。因此,我们必须添加另一个步骤来在此边界条件下选择正确的月份。

05操作流程

假设我想预订4月14日的游泳池,我需要在4月11日的任何时候运行以下命令:

python book.py --username xxxxxx --password xxxxxx --day 14 --time ‘5:00 PM’ --sport ***all_pool

程序会每1秒唤醒一次检查时间,这个检查不会有什么明显的CPU消耗。***会阻止操作系统在午夜前进入睡眠状态。

4月12日午夜,它会启动火狐浏览器,自动完成预定。之后,***进程和主进程都将退出,操作系统将正常进入休眠状态。

4月12日上午,我会查看日志,看预订是否成功。

一个有趣的事实

竞争真的很激烈,预约一般第一分钟就结束了。每届只有6个名额。毫无疑问,在早上6点预订是不可能的。

相关链接:

https://github.com/luanjunyi/***ac_booking_robothttps://docs.google.com/document/d/1NRj-NdDW_wD1-GwZAJc-Nfrbq8xMiX1Hggrzguh-fjY/edit?usp=sharinghttps://***.selenium.dev/https://ss***.com/osx/caffeinate.htmlhttps://selenium-python.readthedocs.io/locating-elements.htmlhttps://selenium-python.readthedocs.io/waits.html?highlight=WebDriverWait#explicit-waits

本文来自MR.特别人士投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/486895.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-02
下一篇 04-02

相关推荐

  • qq地址定位怎样改详细方法

    01 首先打开手机这个app,如图1所示进入手机后会出现一个新的界面,如图2所示02 点击自己的头像,如图1箭头所示会出现一个新的界面,如图2所示再点击自己的头像,如图3所示03。1首先打开,点击进入好友聊天页面2然后在新弹出来的页面中点击右下角“+”图标选项3之后在新弹出来

    2023-07-29 09:01:01
    696 0
  • 怎样做微信营销活动(怎样利用微信群来营销)

    通过微信群玩,至少两年内不会缺人和钱。为什么?从结果来看,由于微信群可以打通初期购买-裂变-回购的小闭环,可以从引流钱入手,一直卖盈利钱也没有障碍。从人的角度来说,因为人性是懒惰的,所以人会不自觉地根据多数人的意见改变自己的看法和行为,从而与多数人保持一致。

    2023-07-29 05:13:01
    259 0
  • 微信怎样提现到银行卡 微信怎样提现不收手续费

    如何从微信取钱到银行卡不收手续费?学会省钱,看看你不知道的!大家好,我是秦云观翔,微信。如果是银行卡大额取款,手续费是很多的。对于经常用微信支付的朋友来说,长期来看也是一笔不小的开支。你知道吗?你知道吗?原来从微信提现到银行卡可以免手续费。方法很简单。用这

    2023-07-29 03:54:01
    795 0
  • 怎样挑选优质土鸡

    以供大家选购出正宗的土鸡1外形区别土鸡体形一般小巧玲珑,外观清秀,身躯狭长,紧凑,胸腿肌健壮,头小,腿短脚细,羽毛紧凑有光泽鲜艳滑顺色彩各异,鸡冠形状呈现多样,头冠色泽鲜艳,母鸡翘尾,公鸡的尾巴呈。我国鸡的品种非常的繁多,但并不是所有的品种都适合用来放养,

    2023-07-29 00:53:01
    612 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信