Muutke küpsiste eelistusi

E-raamat: Software Development: An Open Source Approach [Taylor & Francis e-raamat]

(Sahana Project, Colombo, Sri Lanka), (Trinity College, Hartford, Connecticut, USA),
Teised raamatud teemal:
  • Taylor & Francis e-raamat
  • Hind: 133,87 €*
  • * hind, mis tagab piiramatu üheaegsete kasutajate arvuga ligipääsu piiramatuks ajaks
  • Tavahind: 191,24 €
  • Säästad 30%
Teised raamatud teemal:
To understand the principles and practice of software development, there is no better motivator than participating in a software project with real-world value and a life beyond the academic arena. Software Development: An Open Source Approach immerses students directly into an agile free and open source software (FOSS) development process. It focuses on the methodologies and goals that drive the development of FOSS, combining principles with real-world skill building, such as debugging, refactoring, and writing.

The text explains the software development process through an integration of FOSS principles, agile techniques, modern collaboration tools, community involvement, and teamwork. The authors highlight the value of collaboration as a fundamental paradigm for software development. They show how an effective development team can often create better quality software than an individual working in isolation.

Written by experienced software developers and educators, this book enables students to gain a rich appreciation of the principles and practice of FOSS development. It also helps them become better writers, programmers, and software community members.

Web Resource

The books companion website provides a wealth of resources:











Downloadable FOSS development projects, including design documents, use cases, and code bases A discussion forum for instructors and students to share their experiences and exchange ideas about particular issues raised by these projects Supporting materials for common FOSS development tasks, such as setting up a version control system, an IDE, a project code base, and a unit test suite Additional exercises that reflect a wide variety of software projects and other activities
List of Figures
xi
List of Tables
xv
Preface xvii
Acknowledgments xxv
Author xxvii
1 Overview and Motivation
1(26)
1.1 Software
1(10)
1.1.1 Types of Software
2(3)
1.1.2 The Changing Landscape
5(2)
1.1.3 Who Are the Developers?
7(1)
1.1.4 Strategic Choices
8(3)
1.2 Free and Open Source Software (FOSS)
11(9)
1.2.1 Origins and Growth
12(4)
1.2.2 Licensing
16(2)
1.2.3 Worldwide Impact
18(1)
1.2.4 Humanitarian FOSS
19(1)
1.3 Two Case Studies
20(2)
1.3.1 RMH Homebase
20(1)
1.3.2 Sahana
20(2)
1.4 Summary
22(5)
Exercises
23(4)
2 Working with a Project Team
27(36)
2.1 Key FOSS Activities
27(10)
2.1.1 Agile Development
27(2)
2.1.2 Using Patterns
29(2)
2.1.3 Reading and Writing Code
31(3)
2.1.4 Documentation
34(3)
2.1.5 On-Line Help
37(1)
2.2 Client-Oriented vs Community-Oriented Projects
37(7)
2.2.1 Project Evolution
40(2)
2.2.2 Similarities and Differences
42(2)
2.3 Working on a Client-Oriented Project
44(6)
2.3.1 Members, Roles, and Tasks
44(3)
2.3.2 Team Dynamics
47(1)
2.3.3 Scheduling, Milestones, and To-Do Lists
48(2)
2.4 Joining a Community-Oriented Project
50(10)
2.4.1 Project Selection
52(1)
2.4.2 First Contact with the Project
53(3)
2.4.3 Norms for Good Citizenship
56(2)
2.4.4 Becoming a User First
58(2)
2.5 Summary
60(3)
Exercises
60(3)
3 Using Project Tools
63(24)
3.1 Collaboration Tools
63(4)
3.1.1 Asynchronous Communication
64(1)
3.1.2 Synchronous Communication
65(1)
3.1.3 Shared Documents
66(1)
3.2 Code Management Tools
67(15)
3.2.1 The IDE
68(2)
3.2.2 The Software Stack
70(2)
3.2.3 The Version Control System
72(5)
3.2.4 The Bug Tracker
77(5)
3.3 Run-Time System Constraints
82(2)
3.3.1 Performance
82(1)
3.3.2 Web Hosting
83(1)
3.3.3 Licensing
83(1)
3.3.4 Platform
84(1)
3.4 Summary
84(3)
Exercises
85(2)
4 Software Architecture
87(20)
4.1 Architectural Patterns
87(2)
4.2 Layers, Cohesion, and Coupling
89(6)
4.2.1 Using Metrics to Evaluate Cohesion and Coupling
93(2)
4.3 Security
95(5)
4.3.1 Architectural Vulnerabilities
96(1)
4.3.2 User-Level Security
97(3)
4.4 Concurrency, Race Conditions, and Deadlocks
100(5)
4.5 Summary
105(2)
Exercises
105(2)
5 Working with Code
107(36)
5.1 Bad Smells and Metrics
108(3)
5.1.1 Identifying Bad Smells
108(2)
5.1.2 Software Metrics
110(1)
5.2 Refactoring
111(6)
5.2.1 Example 1: Removing Useless Functions
114(1)
5.2.2 Example 2: Removing a Layering Violation
114(3)
5.3 Testing
117(12)
5.3.1 Unit Testing Tools
119(1)
5.3.2 Test Case Design
120(8)
5.3.3 A Strategy for Sequencing Unit Tests
128(1)
5.4 Debugging
129(5)
5.4.1 Tool Use vs Developer Skill
130(1)
5.4.2 Example 1: A User Interface Bug
131(2)
5.4.3 Example 2: A Multi-Level Bug
133(1)
5.5 Extending the Software for a New Project
134(6)
5.5.1 A New Use Case
135(1)
5.5.2 Impact on the Code Base
136(3)
5.5.3 Team Discussions
139(1)
5.6 Summary
140(3)
Exercises
140(3)
6 Developing the Domain Classes
143(30)
6.1 Understanding the Current System
143(8)
6.1.1 Reading a Design Document
144(3)
6.1.2 Reading Code
147(3)
6.1.3 Examining the Domain Classes
150(1)
6.2 Adding New Features
151(11)
6.2.1 Top-Down Analysis/Bottom-Up Development
154(1)
6.2.2 Modifying the Domain Classes
155(3)
6.2.3 Documentation and Bulletproofing
158(4)
6.3 Class Design Principles and Practice
162(4)
6.3.1 Using What's Already There
163(1)
6.3.2 Adding a New Domain Class
164(2)
6.4 Managing the Ripple Effect
166(5)
6.4.1 Unit Testing the New Code
166(3)
6.4.2 Refactoring the New Code Base
169(2)
6.5 Summary
171(2)
Exercises
171(2)
7 Developing the Database Modules
173(32)
7.1 Design Principles and Practice
174(8)
7.1.1 Database Creation
175(1)
7.1.2 Connecting the Program to the Database
176(2)
7.1.3 Tables
178(2)
7.1.4 Normalization and Keys
180(1)
7.1.5 Backup and Recovery
181(1)
7.2 Working with a Database
182(6)
7.2.1 Table Creation
184(1)
7.2.2 Table Searching
185(2)
7.2.3 Table Insertion, Deletion, and Updating
187(1)
7.3 Database Security and Integrity
188(5)
7.3.1 Database-Level Permissions
189(1)
7.3.2 User-Level Permissions
189(3)
7.3.3 Controlling Concurrency
192(1)
7.4 Adding New Software Features: Database Impact
193(8)
7.4.1 Items 1 and 9d: Volunteer Status and Application
195(3)
7.4.2 Item 3: Calendar View
198(3)
7.5 Summary
201(4)
Exercises
202(3)
8 Developing the User Interface
205(38)
8.1 Design Principles and Practice
205(13)
8.1.1 The Model-View-Controller Pattern
207(3)
8.1.2 Sessions, Query Strings, and Global Variables
210(3)
8.1.3 Ensuring Security at the User Interface
213(5)
8.2 Working with Code
218(12)
8.2.1 Reading Deeply
219(5)
8.2.2 Debugging as a Community Activity
224(6)
8.3 Adding New Features: User Interface Impact
230(9)
8.3.1 Item 1: Volunteer Status
230(5)
8.3.2 Item 2: Make Active/Inactive
235(2)
8.3.3 Item 3: Calendar View
237(2)
8.4 Summary
239(4)
Exercises
240(3)
9 User Support
243(22)
9.1 Technical Writing
243(6)
9.1.1 Knowing Your Audience
244(2)
9.1.2 Principles of Good Writing
246(3)
9.2 Types of User Support
249(9)
9.2.1 On-Line Help
249(2)
9.2.2 Reference Manuals
251(2)
9.2.3 Open Discussion Forums
253(4)
9.2.4 User Training and Feedback
257(1)
9.3 Example: RMH Homebase On-Line Help
258(5)
9.3.1 Help and the Code Base
258(5)
9.4 Summary
263(2)
Exercises
263(2)
10 Project Governance
265(26)
10.1 Origins and Evolution
265(8)
10.1.1 Starting a Client-Oriented Project
267(4)
10.1.2 Quality Assessment
271(2)
10.2 Evolving into a Democratic Meritocracy
273(11)
10.2.1 Incubation
274(3)
10.2.2 Organization
277(4)
10.2.3 Decision Making and Conflict Resolution
281(1)
10.2.4 Domain Constraints
282(2)
10.3 Releasing Code
284(5)
10.3.1 Licensing
284(1)
10.3.2 Finding a Project Host
285(2)
10.3.3 Release Strategies
287(2)
10.4 Summary
289(2)
Exercises
290(1)
11 New Project Conception
291(20)
11.1 Requirements Gathering
292(11)
11.1.1 Domain Analysis
292(3)
11.1.2 User Stories
295(2)
11.1.3 Use Cases
297(6)
11.2 Initial Design
303(6)
11.2.1 Domain Classes
303(1)
11.2.2 User Interface
304(1)
11.2.3 Performance and Platform
305(2)
11.2.4 System Architecture
307(1)
11.2.5 Design Alternatives
308(1)
11.2.6 Design Document
308(1)
11.3 Summary
309(2)
Exercises
309(2)
Appendices
311(40)
A Details of the Case Study
311(30)
A.1 Requirements
311(1)
A.1.1 Domain Analysis
312(5)
A.1.2 Use Cases
317(10)
A.1.3 System Requirements
327(1)
A.2 Design
328(1)
A.2.1 Goals
329(1)
A.2.2 Software Architecture
329(1)
A.2.3 Domain Classes
330(1)
A.2.4 Database Design
330(3)
A.2.5 GUI Design
333(3)
A.2.6 Implementation Schedule
336(1)
A.2.7 User-System Interaction
336(5)
B New Features for an Existing Code Base
341(10)
B.1 Starting with a Request from the Client
341(2)
B.2 Impact on the Design and the Code Base
343(7)
B.3 Defining a Project that Implements these Features
350(1)
References 351(4)
Index 355
Allen B. Tucker is the Anne T. and Robert M. Bass Professor Emeritus at Bowdoin College in Brunswick, Maine. Dr. Tucker is an ACM Fellow and Distinguished Lecturer and a member of the Humanitarian FOSS Project's executive committee. He has published papers in the areas of programming languages, software development, natural language processing, and curriculum development.

Ralph A. Morelli is a professor of computer science at Trinity College in Hartford, Connecticut. Dr. Morelli is one of the principal investigators of the Humanitarian FOSS Project. He has published papers in the areas of artificial intelligence, FOSS, and computer science education.

Chamindra de Silva is the CTO and director of the Sahana Project, which provides a free and open source disaster management system. He is also a co-founder of the Humanitarian FOSS Community and an advisory board member of the Humanitarian FOSS Project. He has participated in many governmental and NGO projects in Pakistan, the Philippines, Peru, the United States, China, and Haiti.

For more information on the Humanitarian FOSS Project, visit its website.