Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Software Development From A to Z
Nội dung xem thử
Mô tả chi tiết
Sof tware
Development
From A to Z
A Deep Dive into all the Roles Involved
in the Creation of Sof tware
—
Olga Filipova
Rui Vilão
Software Development
From A to Z
A Deep Dive into all the Roles
Involved in the Creation of Software
Olga Filipova
Rui Vilão
Software Development From A to Z
ISBN-13 (pbk): 978-1-4842-3944-5 ISBN-13 (electronic): 978-1-4842-3945-2
https://doi.org/10.1007/978-1-4842-3945-2
Library of Congress Control Number: 2018960193
Copyright © 2018 by Olga Filipova and Rui Vilão
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Louise Corrigan
Development Editor: James Markham
Coordinating Editor: Nancy Chen
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street,
6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springersbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member
(owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a
Delaware corporation.
For information on translations, please e-mail [email protected], or visit http://www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book's product page, located at www.apress.com/9781484239445. For more
detailed information, please visit http://www.apress.com/source-code.
Printed on acid-free paper
Olga Filipova
Berlin, Germany
Rui Vilão
Berlin, Germany
We dedicate this book to our soon-to-be-born son Alex
v
Chapter 1: I Have An Idea!���������������������������������������������������������������������������������������� 1
Introduction����������������������������������������������������������������������������������������������������������������������������������� 1
Software Products and Ideas Behind Them���������������������������������������������������������������������������������� 4
Different Models���������������������������������������������������������������������������������������������������������������������������� 7
Research and Development���������������������������������������������������������������������������������������������������������� 8
Knowledge Sharing Platform ������������������������������������������������������������������������������������������������������ 10
Minimum Viable Product������������������������������������������������������������������������������������������������������������� 12
Summary������������������������������������������������������������������������������������������������������������������������������������� 13
Chapter 2: Roles, Responsibilities, and Methodologies������������������������������������������ 15
Roles and Responsibilities ���������������������������������������������������������������������������������������������������������� 16
Business Owner��������������������������������������������������������������������������������������������������������������������� 17
Product Manager������������������������������������������������������������������������������������������������������������������� 18
Designers ������������������������������������������������������������������������������������������������������������������������������ 19
Backend��������������������������������������������������������������������������������������������������������������������������������� 20
Frontend �������������������������������������������������������������������������������������������������������������������������������� 21
Quality Assurance (QA) ���������������������������������������������������������������������������������������������������������� 23
DevOps (development + operations) ������������������������������������������������������������������������������������� 24
It’s Normal to be Confused About Roles!������������������������������������������������������������������������������� 24
Table of Contents
About the Authors���������������������������������������������������������������������������������������������������� xi
About the Technical Reviewer ������������������������������������������������������������������������������� xiii
Acknowledgments���������������������������������������������������������������������������������������������������xv
vi
Methodologies ���������������������������������������������������������������������������������������������������������������������������� 27
Scrum������������������������������������������������������������������������������������������������������������������������������������ 29
Kanban ���������������������������������������������������������������������������������������������������������������������������������� 37
Ok, But What Should I Use? ��������������������������������������������������������������������������������������������������� 39
Our Team and Process ���������������������������������������������������������������������������������������������������������������� 42
Summary������������������������������������������������������������������������������������������������������������������������������������� 44
Chapter 3: Requirements, Commitment, and Deadlines ����������������������������������������� 47
Product Manager ������������������������������������������������������������������������������������������������������������������������ 47
Interview With Product Manager������������������������������������������������������������������������������������������������� 48
How People Become Product Managers and What They Deal With��������������������������������������� 48
Differences Between Product Owner and Product Manager������������������������������������������������� 49
Involvement on the Path From Idea to Product ��������������������������������������������������������������������� 50
Managing Products of Different Business Areas ������������������������������������������������������������������� 51
The Biggest Screw-Up����������������������������������������������������������������������������������������������������������� 51
The Biggest Success ������������������������������������������������������������������������������������������������������������� 52
Preparation ��������������������������������������������������������������������������������������������������������������������������������� 52
Requirements and Roadmap������������������������������������������������������������������������������������������������������� 52
Kick-Off��������������������������������������������������������������������������������������������������������������������������������������� 55
Commitment and Deadline���������������������������������������������������������������������������������������������������������� 57
Requirements for Our MVP���������������������������������������������������������������������������������������������������������� 59
Summary������������������������������������������������������������������������������������������������������������������������������������� 63
Chapter 4: User-Centered Design���������������������������������������������������������������������������� 67
Design Journey—Its Start and End �������������������������������������������������������������������������������������������� 68
Personas and User Stories���������������������������������������������������������������������������������������������������������� 71
Types of Design��������������������������������������������������������������������������������������������������������������������������� 72
User Interface and User Experience�������������������������������������������������������������������������������������������� 74
Design Process—How Designers Run It������������������������������������������������������������������������������������� 82
Designing Our Online Education Platform����������������������������������������������������������������������������������� 90
Initial Brainstorming�������������������������������������������������������������������������������������������������������������������� 90
Wireframes���������������������������������������������������������������������������������������������������������������������������������� 92
Table of Contents
vii
Usability Testing�������������������������������������������������������������������������������������������������������������������������� 94
Visual Design ������������������������������������������������������������������������������������������������������������������������������ 97
Interview With a Product Designer���������������������������������������������������������������������������������������������� 98
Summary������������������������������������������������������������������������������������������������������������������������������������� 99
Chapter 5: Backend Development������������������������������������������������������������������������� 101
About the Stack...���������������������������������������������������������������������������������������������������������������������� 102
Defining Backend Applications ������������������������������������������������������������������������������������������������� 102
Bootstrapping the Project ��������������������������������������������������������������������������������������������������������� 103
Build Automation Tool: Maven��������������������������������������������������������������������������������������������������� 104
Database����������������������������������������������������������������������������������������������������������������������������������� 108
Pros ������������������������������������������������������������������������������������������������������������������������������������� 109
Cons������������������������������������������������������������������������������������������������������������������������������������� 109
Authentication��������������������������������������������������������������������������������������������������������������������������� 115
Development����������������������������������������������������������������������������������������������������������������������������� 118
Database ����������������������������������������������������������������������������������������������������������������������������� 120
Persistence Layer���������������������������������������������������������������������������������������������������������������� 120
Service Layer����������������������������������������������������������������������������������������������������������������������� 120
Service API �������������������������������������������������������������������������������������������������������������������������� 120
REST API and Transformation Layer ������������������������������������������������������������������������������������ 121
Implementing the Registration �������������������������������������������������������������������������������������������� 121
Testing��������������������������������������������������������������������������������������������������������������������������������������� 129
Summary����������������������������������������������������������������������������������������������������������������������������������� 131
Chapter 6: Frontend Development������������������������������������������������������������������������ 133
Let’s Code! �������������������������������������������������������������������������������������������������������������������������������� 134
Where Does Frontend Start?����������������������������������������������������������������������������������������������������� 136
Markup and DOM ���������������������������������������������������������������������������������������������������������������������� 138
Document Object Model ������������������������������������������������������������������������������������������������������ 139
Headings������������������������������������������������������������������������������������������������������������������������������ 141
Hyperlinks���������������������������������������������������������������������������������������������������������������������������� 141
Images��������������������������������������������������������������������������������������������������������������������������������� 142
Table of Contents
viii
Forms ���������������������������������������������������������������������������������������������������������������������������������� 144
Inline and Block Elements ��������������������������������������������������������������������������������������������������� 146
Style������������������������������������������������������������������������������������������������������������������������������������������ 149
Layout���������������������������������������������������������������������������������������������������������������������������������� 155
Design Systems������������������������������������������������������������������������������������������������������������������� 158
Pre-Processors and Template Engines ������������������������������������������������������������������������������������� 158
Dynamic Content����������������������������������������������������������������������������������������������������������������������� 161
Development Tools Console������������������������������������������������������������������������������������������������� 162
Variables������������������������������������������������������������������������������������������������������������������������������ 163
Including JavaScript������������������������������������������������������������������������������������������������������������ 163
Functions����������������������������������������������������������������������������������������������������������������������������� 166
Frameworks ������������������������������������������������������������������������������������������������������������������������������ 168
Contract Between Frontend and Backend �������������������������������������������������������������������������������� 172
Creating the Frontend Application for Our Platform������������������������������������������������������������������ 177
IDEs������������������������������������������������������������������������������������������������������������������������������������������� 179
Summary����������������������������������������������������������������������������������������������������������������������������������� 180
Chapter 7: Testing Our Product����������������������������������������������������������������������������� 181
Different Types of Testing���������������������������������������������������������������������������������������������������������� 181
Unit Testing�������������������������������������������������������������������������������������������������������������������������� 181
Integration Testing��������������������������������������������������������������������������������������������������������������� 183
System Testing �������������������������������������������������������������������������������������������������������������������� 185
Acceptance Testing�������������������������������������������������������������������������������������������������������������� 186
Regression Testing �������������������������������������������������������������������������������������������������������������� 187
Who Is Testing What?���������������������������������������������������������������������������������������������������������������� 188
Manual QA Tester����������������������������������������������������������������������������������������������������������������� 189
Automation QA Tester���������������������������������������������������������������������������������������������������������� 190
From Manual to Automation Tester�������������������������������������������������������������������������������������� 191
Tools, Platforms, and Frameworks�������������������������������������������������������������������������������������������� 193
Table of Contents
ix
Testing Our Product������������������������������������������������������������������������������������������������������������������� 200
Manual Testing �������������������������������������������������������������������������������������������������������������������� 200
Unit Tests for the Frontend �������������������������������������������������������������������������������������������������� 203
Summary����������������������������������������������������������������������������������������������������������������������������������� 206
Chapter 8: Let’s Go Live!��������������������������������������������������������������������������������������� 209
How to Publish Your Software Project?������������������������������������������������������������������������������������� 210
When Do We Start Thinking About Deployment?����������������������������������������������������������������������� 213
Where Do I Put My Code?���������������������������������������������������������������������������������������������������������� 214
Continuous Integration and Automated Tests���������������������������������������������������������������������������� 216
Continuous Delivery and Deployment��������������������������������������������������������������������������������������� 218
Who Does What and How?�������������������������������������������������������������������������������������������������������� 220
Interview With DevOps�������������������������������������������������������������������������������������������������������������� 221
Monitoring and Alerting������������������������������������������������������������������������������������������������������������� 227
Analytics ����������������������������������������������������������������������������������������������������������������������������������� 228
Hosting and Creating a CI/CD for Our Platform������������������������������������������������������������������������� 229
Hosting �������������������������������������������������������������������������������������������������������������������������������� 229
Continuous Integration and Deployment ����������������������������������������������������������������������������� 232
Summary����������������������������������������������������������������������������������������������������������������������������������� 235
Chapter 9: Maintaining and Improving Your Software ���������������������������������������� 237
Maintaining ������������������������������������������������������������������������������������������������������������������������������� 238
Backups������������������������������������������������������������������������������������������������������������������������������� 238
Replication��������������������������������������������������������������������������������������������������������������������������� 239
Natural Disasters and Cosmic Rays������������������������������������������������������������������������������������� 240
Improving���������������������������������������������������������������������������������������������������������������������������������� 242
Scaling��������������������������������������������������������������������������������������������������������������������������������� 243
Handling Feedback�������������������������������������������������������������������������������������������������������������� 246
Bug Fixing���������������������������������������������������������������������������������������������������������������������������� 247
Refactoring, Rewriting, and Technical Debt������������������������������������������������������������������������� 252
Redesigning and Rebranding ���������������������������������������������������������������������������������������������� 255
Summary����������������������������������������������������������������������������������������������������������������������������������� 257
Table of Contents
x
Chapter 10: Wrapping Up With Some Tips and Tricks ������������������������������������������ 259
Development Tips���������������������������������������������������������������������������������������������������������������������� 259
Choosing Programming Languages or Frameworks ����������������������������������������������������������� 260
Code Style Guidelines���������������������������������������������������������������������������������������������������������� 260
Code Reviews and Pair Programming ��������������������������������������������������������������������������������� 261
Quality Assurance Tips�������������������������������������������������������������������������������������������������������������� 263
DevOps Tips ������������������������������������������������������������������������������������������������������������������������������ 264
What About My Idea? ���������������������������������������������������������������������������������������������������������������� 265
Project and Product Management Tips ������������������������������������������������������������������������������������� 269
Time Management Tips ������������������������������������������������������������������������������������������������������� 271
Team Management Tips ������������������������������������������������������������������������������������������������������������ 272
Trust������������������������������������������������������������������������������������������������������������������������������������� 274
Appreciate ��������������������������������������������������������������������������������������������������������������������������� 277
Invest in Education �������������������������������������������������������������������������������������������������������������� 278
Be the Best to Hire the Best ������������������������������������������������������������������������������������������������ 280
Reflect on Everything ���������������������������������������������������������������������������������������������������������� 281
Create YOUR Thing��������������������������������������������������������������������������������������������������������������� 282
Summary����������������������������������������������������������������������������������������������������������������������������������� 283
Index��������������������������������������������������������������������������������������������������������������������� 285
Table of Contents
xi
Olga Filipova was born in Kyiv, Ukraine. She grew up in a family of physicists,
researchers, and professors. She studied applied mathematics at the National University
of Ukraine Kyiv Polytechnic Institute. At the age of 20, she moved to Portugal, where
she studied Informatics Engineering at the University of Coimbra. During her studies,
she participated in the investigation projects at the research lab of her department
and taught Operating Systems and Computer Graphic topics as an assistant teacher.
After completing her Master’s degree, she started working at Feedzai—a small startup
at the time—with a small development team of four. At the time of this book writing,
Feedzai has more than 300 employees and is considered one of the most successful
tech companies in Portugal. After moving to Berlin in 2014, Olga immediately started
working as a Lead Frontend Developer at an online advertising measurement company
called Meetrics, and 2 years after, joined Optiopay as VP Engineering. Olga believes in
the power of peopleware over software and hardware and in the energy of learning and
knowledge-sharing.
Rui Vilão was born in Coimbra, Portugal. During his studies in Informatics Engineering
at the University of Coimbra, he was a member of the Laboratory of Communications
and Telematics research group, where he participated and contributed to two FP7
European Projects: EuQoS and WEIRD. Following his graduation in Informatics
Engineering in 2009, he started working at Feedzai in early 2010, where he was one of
the first four engineers to develop the company’s core product, Feedzai Pulse. In 2014,
he decided to move to Berlin along with his wife and step-daughter, where he started
working at Gymondo, an online fitness company, and where he still works to the present
day as Lead Software Engineer.
Olga and Rui studied together at the University of Coimbra and worked together at
Feedzai. They got married and moved together to Berlin in 2014.
Both Olga and Rui are the technical co-founders of EdEra (https://ed-era.com),
a non-profit online education project based in Ukraine. EdEra explores teaching and
learning in the most innovative ways and positions itself as a bridge between the
knowledge possessors and those who need this knowledge.
About the Authors
xii
In Berlin, Olga and Rui live together with Olga’s daughter Taíssa—a beautiful and
smart teenager, two cats named Patuscas and Objectos, and two fluffy chinchillas named
Cheburashka and Barabashka. They are expecting their son Alex to come really soon
(could be any minute at the time of writing these lines).
About the Authors
xiii
About the Technical Reviewer
Yevhenii Moroz is a software engineer based in Berlin.
He currently works at a company that develops softwarerelated financial technologies for clients like Daimler and
Volkswagen. He is passionate about his job, with about
5 years of experience in web development and everything
around it. He is also interested in modern technologies,
science fiction, and traveling. You can follow him on
GitHub at github.com/eugene-moroz or Linkedin at
www.linkedin.com/in/eugenemoroz.
xv
Acknowledgments
We would like to thank Apress for the opportunity, especially Louise, Nancy, and Jim for
their continuous support.
We would like to address a huge thank you to our parents for their love and
investment in our education.
We would like to thank our friend and technical reviewer of this book, Evgeny.
Evgeny’s kind words and sincere admiration enhanced our believing in this product.
Thank you, EdEra team for the collaboration on this book—especially Ilia (Olga’s
brother) for the brainstorming and ideating, Alexandra (EdEra’s designer) for the great
illustrations and mockups, and Vasiliy (EdEra’s head of motion-design and
post-production) for our beautiful videos.
Thank you, Malu, for sharing your great experience as a UI/UX designer in such a
deep detail with our readers.
Thank you, Safi, for the great brainstorming session to start with hand-drawn
mockups. Thank you, Oleg, for transforming that hand-drawn work into Sketch
mockups.
Thank you, Jan, for being there for the usability testing of the mockups and for giving
us your awesome feedback!
Thank you, Natasha, for being our QA engineer and providing us with the output that
enriched the book with more real examples.
Thank you, our colleagues and friends, for taking part in the interviews that helped
to enrich this book with vivid experience—Sagar, Tomás, Olga, Stan, and Anderson.
Thank you, our friends and colleagues from OptioPay and Gymondo for your kind
support and interest in this book.
Thank you, Taissa, for reviewing a couple of chapters and giving your invaluable
feedback.
1
© Olga Filipova and Rui Vilão 2018
O. Filipova and R. Vilão, Software Development From A to Z, https://doi.org/10.1007/978-1-4842-3945-2_1
CHAPTER 1
I Have An Idea!
This morning I woke up in my bed, looked at the sunlight coming through the tiny gap
in my curtains, and all of a sudden, this great idea came to my mind. I made a couple of
calls to some investors, registered a startup and voilà! Here I am, all millionaire hipster
with crypto-wallets in every pocket.
Last week I was taking my bath and enjoying salts and smell of essences when all of a
sudden… “Eureka!” I came up with a new law of physics. I went immediately to a global
conference with all the important physicists in the world, spoke in front of all the old and
wise physicists, received a Nobel prize, and became a millionaire.
There are couple of similar points in these two different stories. First of all, in both
of them, the idea comes “all of a sudden,” second, the person immediately becomes a
millionaire; and third, and most important, both of them are lies.
In this chapter, we are going to talk about ideas: how do they come to us, how they
are transformed into something empirical, and why and how they bring success.
Introduction
First, I would like us to stay on the same page not only of this book but also of the
concepts and notions. Let’s define the word idea and establish the notion of the idea we
are going to talk about in this book.
The easiest way is to Google it, right (Figure 1-1)?