最终,本书的目的是说明实用的软件工程原理,以及如何将其应用于 Python 开发。为此,这本书的大部分致力于探索和实施我认为是一个现实范围,但可能不现实的项目:一个分布式的产品管理和订单履行系统。在许多情况下,功能是从头开始开发的,并且从第一原理出发,建立在系统的基础上的基本概念和假设。在真实场景中,很可能会有现成的解决方案来处理许多实现细节,但我认为,揭示底层理论和需求对于理解事物为何以这种方式工作至关重要。我相信,这是编程和软件工程区别的一个重要部分,无论使用何种语言。
Python 在许多方面都是一种罕见的野兽,它是一种动态语言,但它是强类型的。它也是一种面向对象的语言。这些,加在一起,形成了一个令人惊讶的灵活,有时令人惊讶的强大的语言。尽管我的观点是这样的,但我坚信您很难找到另一种语言,它通常与 Python 一样强大,并且同样易于编写和维护代码。Python 在官方网站(上列出了各种各样的成功故事,这一点我一点也不感到惊讶 https://www.python.org/about/success/ )。Python 是至少两家知名公共云提供商 Amazon 和 Google 支持的核心语言之一,这也并不让我感到惊讶。即便如此,它仍然经常被认为只是一种脚本语言,我真诚地希望这本书也能证明这种观点是错误的。
这本书的目标是具有一些 Python 经验的开发人员,他们希望将他们的技能从“仅仅编写代码”扩展到更关注“软件工程”。假定了解 Python 基础函数、模块和包,以及它们与项目结构中的文件的关系,以及如何从其他包导入功能
第 1 章、编程与软件工程讨论了编程(仅仅编写代码)与软件工程之间的区别,以及它们的学科、思维方式和分支。
第 2 章软件开发生命周期审查了详细的软件开发生命周期,特别关注与软件工程相关的输入、需求和结果。
第 3 章系统建模探讨了系统及其组件的功能、数据流和进程间通信方面的建模和图解的不同方法,以及这些方法提供的与软件工程相关的信息。
第 4 章方法、范例和实践在回顾面向对象编程(OOP之前,深入研究了当前的流程方法,包括一些敏捷流程变体,分析了每种方法的优缺点和函数式编程范例。
第 5 章**hms_ 系统项目介绍了通过本书使用的示例项目背后的概念,以练习软件工程设计和开发思维。
*第 6 章开发工具和最佳实践研究了一些更常见(或至少是现成的)开发工具,用于编写代码和以减少持续开发工作和风险的方式管理代码。
第 7 章建立项目和流程介绍了一个可用于任何 Python 项目或系统的示例结构,以及建立一个与源代码管理、自动测试兼容的公共起点背后的思想过程,以及可重复的构建和部署过程。
第 8 章创建业务对象开始hms_sys项目的第一次迭代,定义核心库业务对象数据结构和功能。
第 9 章测试业务对象在设计、定义并执行迭代期间定义的业务对象代码的可重复自动测试后,结束hms_sys项目的第一次迭代。
第 10 章思考业务对象数据持久性,研究了应用程序中数据持久性的常见需求、一些更常见的机制,以及为各种实现需求选择“最佳匹配”数据存储解决方案的标准。
第 11 章、数据持久化和 BaseDataObject开始了hms_sys项目的第二次迭代,设计并实现了一种通用的抽象数据访问策略,可在项目的任何组件中重复使用。
第 12 章将对象数据持久化为文件继续第二次迭代的工作,具体实现了将业务对象数据持久化为本地文件的抽象数据访问层(DAL)。
第 13 章将数据持久化到数据库,实现了一个具体的 DAL,该 DAL 从常用的 NoSQL 数据库 MongoDB 存储和检索数据,并将该方法与等效的基于 SQL 的 DAL 的要求进行了比较。
第 14 章测试数据持久性通过对迭代期间构建的两种 DAL 策略的不同实现进行自动化测试,结束了hms_sys项目的第二次迭代。
第 15 章对服务的剖析,分析了独立服务的常见功能需求,并通过构建抽象服务/守护程序类进行工作,这些抽象服务/守护程序类可重用,用于创建各种具体的服务实现。
第 16 章Artisan 网关服务开始了hms_sys项目的第三次迭代,分析了系统组件的通信需求、实现这些通信的几个选项、保护它们的安全,并最终将其融入到项目核心服务的具体实施中。
第 17 章处理服务事务考虑了hms_sys组件之间所有必要的业务对象通信,提取了所有组件的一些通用功能,并完成了实现这些组件所需的流程。
第 18 章、测试和部署服务在书中总结了hms_sys的开发,并调查和解决了服务/守护程序应用程序的一些常见自动测试问题。
第 19 章、Python 中的多进程和 HPC介绍了编写 Python 代码所涉及的理论和基本实践,这些代码可以扩展到一台机器上的多个处理器,也可以扩展到集群计算环境中的多台机器,并提供在常见高性能计算系统上执行 Python 代码的起点代码结构变体。
具体而言,您应该了解以下内容:
- 如何下载和安装 Python(在编写本书时使用了 3.6.x,但这里的代码预期在 3.7.x 中工作,几乎没有修改)
- 如何编写 Python 函数
- 如何编写基本 Python 类
- 如何使用 pip 安装 Python 模块,以及如何将模块导入代码
您可以从您的账户www.packt.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packt.com/support并注册,将文件通过电子邮件直接发送给您。
您可以通过以下步骤下载代码文件:
- 登录或注册www.packt.com
- 选择“支持”选项卡
- 点击代码下载和勘误表
- 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作
下载文件后,请确保使用以下最新版本解压或解压缩文件夹:
- WinRAR/7-Zip for Windows
- 适用于 Mac 的 Zipeg/iZip/UnRarX
- 适用于 Linux 的 7-Zip/PeaZip
该书的代码包也托管在 GitHub 上的**https://github.com/PacktPublishing/** 使用 Python进行软件工程实践。我们的丰富书籍和视频目录中还有其他代码包,请访问https://github.com/PacktPublishing/ 。看看他们!
我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:https://www.packtpub.com/sites/default/files/downloads/9781788622011_ColorImages.pdf 。
本书中使用了许多文本约定。
CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:src目录中是项目的包树
代码块设置如下:
def SetNodeResource(x, y, z, r, v):
n = get_node(x,y)
n.z = z
n.resources.add(r, v)当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
def __private_method(self, arg, *args, **kwargs):
print('%s.__private_method called:' % self.__class__.__name__)
print('+- arg ...... %s' % arg)
print('+- args ..... %s' % str(args))
print('+- kwargs ... %s' % kwargs)任何命令行输入或输出的编写方式如下:
$python setup.py test粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词,例如在菜单或对话框中,也会出现在文本中,如下所示。例如:“从管理面板中选择系统信息。”
Warnings or important notes appear like this. Tips and tricks appear like this.
我们欢迎读者的反馈。
一般反馈:发送电子邮件customercare@packtpub.com并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发送电子邮件至customercare@packtpub.com。
勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packt.com/submit-errata,选择您的书籍,点击 errata 提交表单链接,并输入详细信息。
盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com与我们联系,并提供该材料的链接。
如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。
有关 Packt 的更多信息,请访问packtpub.com。*