译 者 序
Engineering Software Products: An Introduction to Modern Software Engineering
我们处在万物互联互通的时代,也是软件定义一切的时代。各种软件产品已经改变了我们的日常生活和工作,还有更多的软件产品正在试图改变我们的日常生活和工作。然而,软件产品的高质量、高安全性和高可靠性需求问题一直没有得到很好的解决,究其原因,我认为传统的以过程为基础的项目驱动软件工程思想有局限性,在面对这些问题时有些力不从心。虽然全世界有几万家软件公司,几十万名软件工程师从事软件产品开发,但是他们受传统的软件工程思想束缚,很难在软件产品工程化方面取得突破性的进展,也很难在软件的高质量、高安全性和高可靠性方面给出令人满意的解决方案。本书就是在这样的背景之下,为了适应软件工程发展的需求以及软件产品高质量、高安全性和高可靠性需求而诞生的。
本书共10章,涵盖软件产品、敏捷软件工程、特征/场景和用户故事、软件架构、基于云的软件、微服务架构、安全和隐私、可信赖编程、测试、DevOps和代码管理等内容。与大多数软件工程教材不同的是,本书关注软件产品而不是软件项目,所介绍的技术是其他软件工程教材没有的,例如,人物角色和场景、云计算、微服务、安全和DevOps等。只要你具有现代面向对象语言的编程经验,也熟悉基本的对象计算概念,就可轻松理解书中的例子。
本书的读者对象是刚刚开始学习软件工程课程的学生,以及那些准备进行软件产品开发但又没有多少软件工程经验的技术人员。本书可作为高等学校软件工程专业二年级以上学生的教材,也可作为软件开发人员的参考书。
参加本书翻译的人员除本人外,其他人员主要是来自东南大学软件工程研究所、东南大学计算机科学与工程学院的师生,包括廖力、王璐璐、孔祥龙、周颖、宋启威、韩伟娜、李慧丹、谢仁松、胡甜媛等。在此,对他们的辛苦劳动表示衷心的感谢。
限于水平,译稿中难免存在不当之处,在此敬请读者批评指正。本书是一本非常优秀的软件工程读物,各位读者认真地阅读本书后一定会受益匪浅。
李必信
2020年11月于南京九龙湖
前 言
Engineering Software Products: An Introduction to Modern Software Engineering
软件产品(例如独立程序、Web应用和服务、移动应用等)改变了我们的日常生活和工作。全世界有几万家软件产品公司,几十万名软件工程师从事软件产品开发。
与一些人的想法不同,我认为软件产品工程化需要的技能远比编码技能多得多,因此撰写了本书,旨在介绍一些重要的软件工程活动,这些活动对开发高可信、高安全性的软件产品至关重要。
本书读者对象
本书的读者对象是刚刚开始学习软件工程课程的学生。对那些准备进行软件产品开发又没有多少软件工程经验的技术人员来说,本书也非常适用。
需要一本关注产品的软件工程书籍的原因
大多数软件工程教材关注基于项目的软件工程。基于项目的软件工程的核心思想是:客户给出需求规约,公司开发软件。然而,用于大规模项目开发的软件工程技术和方法,不适合软件产品开发。
学生们通常很难理解大的定制软件系统。我的看法是,当学生关注他们经常使用的软件类型时,他们会发现理解软件工程技术其实并不难。同样,当学生在做项目时,若更多地关注产品工程化技术而不是面向项目的技术,他们会更容易理解软件工程技术。
本书是作者其他的软件工程教材的新版本吗?
不是,这本书考虑的是完全不同的方法,除了几幅图之外,没有重用任何来自《软件工程》(第10版)的材料。
本书内容
本书共10章,涵盖了软件产品、敏捷软件工程、特征/场景和用户故事、软件架构、基于云的软件、微服务架构、安全和隐私、可信赖编程、测试、DevOps和代码管理等内容。
本书适合一个学期的软件工程课程使用。
本书与其他的软件工程导论教材的不同
正如前面所说,本书关注产品而不是项目,介绍的技术是其他软件工程教材没有的,如人物角色和场景、云计算、微服务、安全和DevOps等。 由于产品创新不是来自高校科研,所以书中没有应用或提及科研成果,本书的写作风格也是“非正式”的。
如何才能从本书获得价值?
只需要你具有现代面向对象语言的编程经验,例如,你能熟练地使用Java或者Python语言编程,熟悉有意义的命名,也熟悉基本的计算概念,如对象、类和数据库等。书中的示例程序尽管是用Python语言写的,但任何具有编程经验的人都能轻松理解。
教辅资源
1. 教师手册,其中包含每章习题和测验问题的解答。
2. 有关如何在一个学期的软件工程课程中使用本书的建议。
3. 教学讲义(Keynote、PowerPoint和PDF三种形式)。
你可以通过访问网站https://www.pearsonhighered.com/sommerville获得这些材料。本书的其他辅助材料(PPT、视频、拓展链接)也可以从如下网站获得:https://iansommerville.com/engineering-software-products/。
致谢
感谢所有的评审人,他们在评审本书的初始写作计划时给出了有建设性的建议,他们是:
Paul Eggert—加州大学洛杉矶分校
Jeffrey Miller—南加州大学
Harvey Siy—内布拉斯加大学奥马哈分校
Edmund S. Yu—雪城大学
Gregory Gay—南加州大学
Josh Delinger—陶森大学
Rocky Slavin—得克萨斯大学圣安东尼奥分校
Bingyang Wei—中西部州立大学
感谢圣安德鲁斯大学的Adam Barker,他帮我与本书的制作人Rose Kernan建立了很好的联系。
和以前一样,我要感谢我的家人,他们在我撰写本书的过程中给了我无私的帮助和支持。特别感谢我的女儿Jane,她对稿件做了大量的阅读和评论。她是一个严格的编辑!她提出的修改意见大大提高了本书的质量。
最后,特别感谢我们家的新成员—我可爱的孙子Cillian,他在我撰写本书期间出生。他活泼的个性和开心的微笑,缓解了我写作和编辑过程中的枯燥。
Ian Sommerville