相關主題
商品描述
本書詳細闡述了如何在雲計算時代利用高質量、輕量的開源軟件Bugzilla,Kanboard,以及Git/Gitea進行軟件的多人多地異步協同開發與維護。本書總結了以Pull Request為中心的多分支軟件協作開發模型,並提出了與該模型配套的BKG工作流(Bugzilla-Kanboard-Git/Gitea Workflow)。本書立足實戰,將軟件工程的實踐搬到雲上,使得項目更新與知識共享觸手可及,使雲軟件工程的概念得以落地。本書強調了搭建雲基礎設施以保障軟件的持續改進。為了幫助讀者更好地掌握我們的開發模型與工作流,本書配套了3個自己開發的完整網頁應用程序。讀者可以克隆所有程序的代碼倉庫。我們鼓勵讀者在自己的電腦上運行這些程序,發現缺陷,修復缺陷,提出改進意見,並提交補丁。
目錄大綱
Contents
Chapter 1 People’s Accountability 1
1.1 Responsibility card 2
1.2 Code ownership 4
1.3 The produce-review cycle 4
1.4 The indifferent customer 5
Chapter 2 Building Teams 6
2.1 Stating vision 6
2.2 Starting small 6
2.3 Characteristics of a quality software engineer 7
2.4 Software health 7
2.5 Being honest about development status 8
2.6 Treasuring old code 8
2.7 Meeting 8
2.8 Who makes the final decision? 9
2.9 Bus factor 9
2.10 Joel test 10
2.11 Evaluating team quality from four aspects 11
2.12 Measuring productivity 12
2.13 Training and employee retention rate 12
2.14 Improving software process 13
2.15 Data and statistics 13
2.16 Territory 13
2.17 Code review 13
2.17.1 Pull request 14
2.17.2 Code review plus edit 16
2.17.3 Code review psychology 18
2.18 Treating criticism as praise 19
2.19 Automation ratio 19
2.20 Code of conduct 20
2.21 Software principles 20
2.22 Roles 22
2.23 Development time distribution 23
2.24 Comment to code ratio 24
2.25 The Apache Way 24
2.26 Intellectual property and licenses 25
2.27 Documentation 25
2.27.1 Being easy to find, easy to search, and easy to update 26
2.27.2 Being specific 26
2.27.3 Providing links wherever available 27
2.27.4 Documenting everything 27
2.27.5 Learning from good examples 27
2.27.6 Inspecting documentation 28
Chapter 3 Reducing Complexity, Increasing Quality 29
3.1 Source lines of code 29
3.2 Say no to bloatware 30
3.3 Software quality 32
3.4 High quality is cheap 32
3.5 Refactoring code 33
Chapter 4 Cloud Infrastructure 35
4.1 The pull request-centered collaboration model 36
4.2 Remote working 37
4.3 Email 39
4.4 Mailing lists 40
4.5 Git and GitHub 41
4.5.1 The feature-branching workflow 42
4.5.2 The fork-then-feature-branching workflow 47
4.5.3 Gitea 48
4.6 Kanboard 49
4.7 Bugzilla 51
4.7.1 Tracked bugs are good bugs 52
4.7.2 The more bug reports, the better 52
4.7.3 Do not accept duplicate bugs 53
4.8 The Bugzilla-Kanboard-Gitea workflow 53
4.9 Jenkins 55
Chapter 5 Selected Topics in The Software’s Life Cycle 56
5.1 Silver bullets 56
5.2 Project checklist 57
5.3 Fork 59
5.4 Technical debt 59
5.5 Timeboxing 60
5.6 Reusing 60
5.7 Tracking bugs 60
5.8 Bug repairs 61
5.9 Maintenance 61
5.10 Being simple and quite 63
5.11 Validation & verification 63
Chapter 6 Requirements Risks 64
6.1 Important questions to ask before development starts 64
6.2 Risk analysis 67
6.2.1 The danger of not having a software requirements specification 67
6.2.2 The danger of having too many requirements 68
6.2.3 The danger of not talking to customers 69
6.2.4 The danger of preconceived ideas 69
6.2.5 The danger of ambiguity 71
6.3 Gathering requirements 71
6.3.1 Use cases 72
6.3.2 Requirements workshops 73
6.3.3 Prototyping 73
6.3.4 Brainstorming 73
6.4 Prioritizing requirements 75
6.5 Inspecting requirements 76
6.6 Structure of SRS 76
6.7 Common problems in SRS 77
6.8 Change of requirements 78
Chapter 7 Development 82
7.1 Schedule and budget 82
7.2 Processes 83
7.2.1 Waterfall 84
7.2.2 Extreme programming 84
7.2.3 Adopting a balanced approach 85
7.2.4 Iterative and evolutionary development 85
7.2.5 DevOps: combining development and operations together 85
7.2.6 Adhering to a process 86
7.3 Project efforts 87
7.4 Cost 87
7.5 Design 88
7.5.1 Design decisions 89
7.5.2 Why is design difficult? 89
7.5.3 Abstraction 90
7.5.4 Simplicity 91
7.5.5 Modularity 91
7.5.6 Handling undesired events 91
7.5.7 Formal inspections 92
7.6 Naming variables 92
7.7 Coding style 94
7.8 Comments and code 94
7.9 Programming languages 94
7.10 Pace 95
7.11 Versions 96
7.11.1 Concise and informative commit messages 96
7.11.2 Atomic commits and small pull requests 97
7.12 Test-first, test-early and test-last 97
7.13 Testing 99
7.13.1 Spell and grammar checking 101
7.13.2 Static code analysis 101
7.13.3 Unit testing 101
7.13.4 Usability testing 102
7.13.5 Regression testing 102
7.13.6 Code inspection and walkthrough 105
7.13.7 Test coverage 105
7.13.8 Test case density 106
7.13.9 Test case quality 106
7.13.10 Enough testing? 107
7.13.11 The trade-off between automated testing and manual testing 107
7.13.12 Test data generators 107
7.13.13 Testing in a small software company 108
7.14 Releasing 108
7.15 Continuous improvement 109
7.15.1 Continuous integration/continuous delivery 109
7.15.2 Continuous deployment with Docker 110
Chapter 8 Rules, Laws, and Plots 114
8.1 10 Years Rule 114
8.2 Eyeballs and bugs 115
8.3 Fish in the pond 115
8.4 Brooks’ Law 115
8.5 Goodhart’s Law 116
8.6 Cost to fix an error in different phases 116
8.7 Development cost versus maintenance cost 116
8.8 External quality versus internal quality 117
Chapter 9 Maintenance Stories 118
9.1 English Pal 118
9.2 Child Physical Examination Booking Application 119
9.3 The GNU Nano Editor 120
9.4 Lab Report Repository 124
9.4.1 Logging in with student number 125
9.4.2 Regression 126
9.4.3 Batch entering student numbers 132
9.4.4 Showing assignments that missed the deadline 135
9.4.5 A group member’s name appears more than once in group information 136
9.4.6 Definition of done 137
9.4.7. Other improvement areas for the Lab Report Repository web application 138
Chapter 10 References 140
Chapter 11 Appendices 143
11.1 Original requirements for Lab Report Repository 143
11.2 Correspondence between Ashly and the author on maintaining LRR 145
11.3 Software engineers, software writers, and entrepreneurs 148
11.4 End-to-end testing 148
11.5 Kanboard installation guide 151
11.6 Research questions 152