定  价:49.8 元  
					 丛书名:
					 
				  
			
				 
				 
				
				
				 
	
				
				
					
						- 作者:蓝珲
- 出版时间:2025/6/1
- ISBN:9787121506345
- 出 版 社:电子工业出版社
 
			
				
							适用读者:高等院校高年级本科生,软件工程专业研究生,软件工程师,软件工程教师,转型到开源软件项目的机构或个人。
				
	
			
  
 - 中图法分类:TP311.5 
- 页码:168
- 纸张:
- 版次:01
- 开本:16开
- 字数:302.399993896484(单位:千字)
 
 
	 
	 
	 
	
	
	
				
					
		
		本书详细阐述了如何在云计算时代利用高质量、轻量的开源软件Bugzilla,Kanboard,以及Git/Gitea进行软件的多人多地异步协同开发与维护。本书总结了以Pull Request为中心的多分支软件协作开发模型,并提出了与该模型配套的BKG工作流(Bugzilla-Kanboard-Git/Gitea Workflow)。本书立足实战,将软件工程的实践搬到云上,使得项目更新与知识共享触手可及,使云软件工程的概念得以落地。本书强调了搭建云基础设施以保障软件的持续改进。为了帮助读者更好地掌握我们的开发模型与工作流,本书配套了3个自己开发的完整网页应用程序。读者可以克隆所有程序的代码仓库。我们鼓励读者在自己的电脑上运行这些程序,发现缺陷,修复缺陷,提出改进意见,并提交补丁。
		
	
蓝珲,博士,2016 年 06 月- 2017 年 07 月英国剑桥大学塞恩斯伯里实验室(SLCU)博士后 (Research Associate);2017 年 08 月-至今浙江师范大学教师。著作方向:软件工程、软件项目管理。所承担过的重点科研或教研项目:NSERC 项目《Combining classifiers to predict gene function in Arabidopsis thaliana using large-scale gene expression measurements》项目主要参与人,负责编写程序。NSERC Discovery项目《Genome-wide network model capturing seed germination reveals coordinated regulation of plant cellular phase transitions》项目主要参与人,负责编写程序。Gatsby Foundation项目《The evening complex coordinates environmental and endogenous signals in Arabidopsis》重要参与人,负责编写程序。浙江师范大学2020年校级重点建设教材项目《云软件工程Cloud Software Engineering》负责人。浙江师范大学数学与计算机科学学院2020年研究生课程、教材、教学改革案例建设项目《Lab Report Repository的开发、维护、Bug报告修复与持续改进》负责人。浙江师范大学数学与计算机科学学院2020年本科课程、教材、教学改革案例建设项目《云软件工程 Cloud Software Engineering》第一负责人。浙江师范大学数学与计算机科学学院2020年本科课程、教材、教学改革案例建设项目《软件工程基础》第二负责人。所从事的主要科研与教学工作及获奖情况:所发表论文总引用数超过300次(Web of Science数据)。Cambridge Network Day (2017年) Poster 一等奖。浙江师范大学第一届教师教学创新大赛(2021年)三等奖。
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