Commit 706fc186 authored by jackfrued's avatar jackfrued

更新了测试和知乎问答

parent 3b2ddfd4
## 自动化测试 ## 关于测试
### 软件测试概述 ### 软件测试概述
...@@ -20,7 +20,15 @@ ...@@ -20,7 +20,15 @@
回归测试:为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。 回归测试:为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。
#### 单元测试 #### 测试驱动开发
测试驱动开发包括以下三个步骤:
1. 为未实现的新功能或者改进编写自动化测试。
2. 提供通过所有定义的测试的最小代码量。
3. 重构代码以满足所需的质量标准。
测试驱动开发的好处在于可以有效的防止软件回归以及提供更有质量的代码。
Python的标准库里有为编写单元测试而准备的unittest模块,执行测试时建议使用[pytest](https://docs.pytest.org/en/latest/)或nose2。pytest是一款能够自动搜索并执行测试的测试执行工具,并且会输出详细的错误报告。关于单元测试可以看看[《Python必会的单元测试框架 - unittest》](https://blog.csdn.net/huilan_same/article/details/52944782) Python的标准库里有为编写单元测试而准备的unittest模块,执行测试时建议使用[pytest](https://docs.pytest.org/en/latest/)或nose2。pytest是一款能够自动搜索并执行测试的测试执行工具,并且会输出详细的错误报告。关于单元测试可以看看[《Python必会的单元测试框架 - unittest》](https://blog.csdn.net/huilan_same/article/details/52944782)
......
...@@ -124,6 +124,10 @@ ...@@ -124,6 +124,10 @@
#### Day10 - [图形用户界面和游戏开发](./Day01-15/Day10/图形用户界面和游戏开发.md) #### Day10 - [图形用户界面和游戏开发](./Day01-15/Day10/图形用户界面和游戏开发.md)
- 使用tkinter开发GUI
- 使用pygame三方库开发游戏应用
- “大球吃小球”游戏
#### Day11 - [文件和异常](./Day01-15/Day11/文件和异常.md) #### Day11 - [文件和异常](./Day01-15/Day11/文件和异常.md)
- 读文件 - 读取整个文件 / 逐行读取 / 文件路径 - 读文件 - 读取整个文件 / 逐行读取 / 文件路径
...@@ -143,22 +147,22 @@ ...@@ -143,22 +147,22 @@
- 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景 - 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景
- 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信 - 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信
- 使用线程 - thread模块 / threading模块 / Thread类 / Lock类 - 使用线程 - thread模块 / threading模块 / Thread类 / Lock类 / Condition类 / 线程池
#### Day14-A - [网络编程入门](./Day01-15/Day14/网络编程入门.md) #### Day14-A - [网络编程入门](./Day01-15/Day14-A/网络编程入门.md)
- 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念 - 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念
- 网络应用架构 - “客户端-服务器”架构 / “浏览器-服务器”架构 - 网络应用架构 - “客户端-服务器”架构 / “浏览器-服务器”架构
- Python网络编程 - 套接字的概念 / socket模块 / socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块 - Python网络编程 - 套接字的概念 / socket模块 / socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块
#### Day14-B - [网络应用开发](./Day01-15/Day15/网络应用开发.md) #### Day14-B - [网络应用开发](./Day01-15/Day14-B/网络应用开发.md)
- 访问网络API - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据 - 访问网络API - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据
- 文件传输 - FTP协议 / ftplib模块 / 交互式FTP应用 - 文件传输 - FTP协议 / ftplib模块 / 交互式FTP应用
- 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块 - 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块
- 短信服务 - twilio模块 / 国内的短信服务 - 短信服务 - twilio模块 / 国内的短信服务
#### Day15 - 图像和文档处理 #### Day15 - [图像和文档处理](./Day01-15/Day15/图像和办公文档处理.md)
- 用Pillow处理图片 - 用Pillow处理图片
- 读写Word文档 - 读写Word文档
...@@ -179,7 +183,7 @@ ...@@ -179,7 +183,7 @@
- 用CSS渲染页面 - 用CSS渲染页面
- 用JavaScript处理交互式行为 - 用JavaScript处理交互式行为
- jQuery入门和提高 - jQuery入门和提高
- Bootstrap在Web项目中的应用 - Vue.js入门
### Day31~35 - [玩转Linux操作系统](./Day31-35/玩转Linux操作系统.md) ### Day31~35 - [玩转Linux操作系统](./Day31-35/玩转Linux操作系统.md)
...@@ -320,7 +324,7 @@ ...@@ -320,7 +324,7 @@
### Day91~100 - [团队项目开发](./Day91-100) ### Day91~100 - [团队项目开发](./Day91-100)
#### 第91天:[团队开发和项目选题]() #### 第91天:团队开发和项目选题
1. 软件过程模型 1. 软件过程模型
- 经典过程模型(瀑布模型) - 经典过程模型(瀑布模型)
...@@ -346,9 +350,9 @@ ...@@ -346,9 +350,9 @@
![](./res/the-daily-scrum-in-the-sprint-cycle.png) ![](./res/the-daily-scrum-in-the-sprint-cycle.png)
> 角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员) > 角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员)
> >
> 准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队 > 准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队
> >
> 敏捷团队通常人数为8-10人。 > 敏捷团队通常人数为8-10人。
> >
...@@ -358,13 +362,15 @@ ...@@ -358,13 +362,15 @@
- 团队的构成和角色 - 团队的构成和角色
> 说明:谢谢付祥英MM绘制了下面这张精美的公司组织架构图。
![company_architecture](./res/company_architecture.png) ![company_architecture](./res/company_architecture.png)
- 编程规范和代码审查(flake8、pylint) - 编程规范和代码审查(flake8、pylint)
![](./res/pylint.png) ![](./res/pylint.png)
- Python中的一些“惯例”(请参考[《Python惯例-如何编写Pythonic的代码》](Python惯例-如何编写Pythonic的代码.md) - Python中的一些“惯例”(请参考[《Python惯例-如何编写Pythonic的代码》](Python惯例.md)
- 影响代码可读性的原因: - 影响代码可读性的原因:
......
## 知乎问题回答
### Python学习完基础语法知识后,如何进一步提高?
如果你已经完成了Python基础语法的学习,想要知道接下来如何提高,那么你得先问问自己你要用Python来做什么?目前学习Python后可能的就业方向包括以下几个领域,我把每个领域需要的技术作为了一个简单的关键词摘要。
> 说明:以下数据参考了主要的招聘门户网站以及职友集。
| 职位 | 所需技能 | 招聘需求量 |
| ---------------------------------------------- | ------------------------------------------------------------ | ---------------- |
| Python后端开发工程师 | Python基础<br>Django / Flask / Tornado / Sanic<br>RESTful / 接口文档撰写<br>MySQL / Redis / MongoDB / ElasticSearch<br>Linux / Git / Scrum / PyCharm | 大 |
| Python爬虫开发工程师 | Python基础<br>常用标准库和三方库<br>Scrapy / PySpider<br>Selenium / Appnium<br>Redis / MongoDB / MySQL<br>前端 / HTTP(S) / 抓包工具 | 较少 |
| Python量化交易开发工程师 | Python基础<br>数据结构 / 算法 / 设计模式<br>NoSQL(KV数据库)<br>金融学(两融、期权、期货、股票) / 数字货币 | 较大(一线城市) |
| Python数据分析工程师 /<br>Python机器学习工程师 | 统计学专业 / 数学专业 / 计算机专业<br>Python基础 / 算法设计<br>SQL / NoSQL / Hive / Hadoop / Spark<br>NumPy / Scikit-Learn / Pandas / Seaborn<br>PyTorch / Tensorflow / OpenCV | 较大(一线城市) |
| Python自动化测试工程师 | Python基础 / 单元测试 / 软件测试基础<br>Linux / Shell / JIRA / 禅道 / Jenkins / CI / CD<br>Selenium / Robot Framework / Appnium<br>ab / sysbench / JMeter / LoadRunner / QTP | 大 |
| Python自动化运维工程师 | Python基础 / Linux / Shell <br>Fabric / Ansible / Playbook<br>Zabbix / Saltstack / Puppet<br>Docker / paramiko | 较大(一线城市) |
| Python云平台开发工程师 | Python基础<br>OpenStack / CloudStack<br>Ovirt / KVM<br>Docker / K8S | 较少(一线城市) |
如果弄清了自己将来要做的方向,就可以开始有针对性的学习了,下面给大家一个推荐书籍的清单。
1. 入门读物
- 《Python基础教程》(*Beginning Python From Novice to Professional*
- 《Python学习手册》(*Learning Python*
- 《Python编程》(*Programming Python*
- 《Python编程从入门到实践》(*Python Crash Course*
- 《Python Cookbook》
2. 进阶读物
- 《软件架构 - Python语言实现》(*Software Architecture with Python*
- 《流畅的Python》(*Fluent Python*
- 《Python设计模式》(*Learning Python Design Patterns*
- 《Python高级编程》(*Expert Python Programming*
- 《Python性能分析与优化》(*Mastering Python High Performance*
3. 数据库相关
- 《MySQL必知必会》(*MySQL Crash Course*
- 《深入浅出MySQL - 数据库开发、优化与管理维护》
- 《MongoDB权威指南》(*MongoDB: The Definitive Guide*
- 《Redis实战》(*Redis in Action*
- 《Redis开发与运维》
4. Linux / Shell / Docker / 运维
- 《鸟哥的Linux私房菜》
- 《Linux命令行与shell脚本编程大全》(*Linux Command Line and Shell Scripting Bible*
- 《Python自动化运维:技术与最佳实践》
- 《第一本Docker书》(*The Docker Book*
- 《Docker经典实例》(Docker Cookbook)
5. Django / Flask / Tornado
- 《Django基础教程》(*Tango with Django*
- 《轻量级Django》(*Lightweight Django*
- 《精通Django》(*Mastering Django: Core*
- 《Python Web开发:测试驱动方法》(*Test-Driven Development with Python*
- 《Two Scoops of Django: Best Practice of Django 1.8》
- 《Flask Web开发:基于Python的Web应用开发实战》(*Flask Web Development: Developing Web Applications with Python*
- 《深入理解Flask》(*Mastering Flask*
- 《Introduction to Tornado》
6. 爬虫开发
- 《用Python写网络爬虫》(*Web Scraping with Python*
- 《精通Python爬虫框架Scrapy》(*Learning Scrapy*
- 《Python网络数据采集》(*Web Scraping with Python*
- 《Python爬虫开发与项目实战》
- 《Python 3网络爬虫开发实战》
7. 数据分析
- 《利用Python进行数据分析》(*Python for Data Analysis*
- 《Python数据科学手册》(*Python Data Science Handbook*
- 《Python金融大数据分析》(*Python for Finance*
- 《Python数据可视化编程实战》(*Python Data Visualization Cookbook*
- 《Python数据处理》(*Data Wrangling with Python*
8. 机器学习
- 《Python机器学习基础教程》(*Introduction to Machine Learning with Python*
- 《Python机器学习实践指南》(*Python Machine Learning Blueprints*
- 《Python机器学习实践:测试驱动的开发方法》(*Thoughtful Machine Learning with Python A Test Driven Approach*
- 《Python机器学习经典实例》(*Python Machine Learning Cookbook*
- 《TensorFlow:实战Google深度学习框架》
9. 其他书籍
- 《Pro Git》
- 《Selenium自动化测试 - 基于Python语言》(*Learning Selenium Testing Tools with Python*
- 《Selenium自动化测试之道》
- 《Scrum敏捷软件开发》(*Software Development using Scrum*
- 《高效团队开发 - 工具与方法》
当然学习编程,最重要的通过项目实战来提升自己的综合能力,Github上有大量的优质开源项目,其中不乏优质的Python项目。有一个名为[“awesome-python-applications”](https://github.com/mahmoud/awesome-python-applications)的项目对这些优质的资源进行了归类并提供了传送门,大家可以了解下。除此之外,还要为大家推荐一个名为[“Python-100-Days”](https://github.com/jackfrued/Python-100-Days)的项目,上面有大量优质的Python学习资料(包括文档、代码和相关资源)。如果自学能力不是那么强,可以通过网络上免费或者付费的视频课程来学习对应的知识;如果自律性没有那么强,那就只能建议花钱参加培训班了,因为花钱在有人监督的环境下学习对很多人来说确实是一个捷径,但是要记得:“师傅领进门,修行靠各人”。选择自己热爱的东西并全力以赴,不要盲目的跟风学习,这一点算是过来人的忠告吧。记得我自己刚开始进入软件开发这个行业时,有人跟我说过这么一句话,现在也分享出来与诸君共勉:“浮躁的人有两种:只观望而不学习的人,只学习而不坚持的人;浮躁的人都不是高手。”
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment