Siêu thị PDFTải ngay đi em, trời tối mất

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
PREMIUM
Số trang
299
Kích thước
7.9 MB
Định dạng
PDF
Lượt xem
1988

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@springer￾sbm.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 software￾related 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)?

Tải ngay đi em, còn do dự, trời tối mất!