JKS & Associates

Topic References

Software Consulting

 

Up

horizontal rule

Here is an introductory list of references and texts in many of the subtopic areas of software engineering/software development. This list might be a good place to start to investigate and gain mastery of these particular sub-discipline in software engineering. Note: If you are an experienced software engineer or an expert in your software field you may find some of these texts not particularly helpful to your situation or not detailed enough. This list is not designed for the experienced or expert software engineer. I have found in my consulting practice over the years that many individuals who come to the computer, information technology, software development or software engineering fields from other domains (such as business, management, the humanities, the arts, basic science, engineering, and medical fields) often lack the basics and breadth of the understanding of the discipline of software engineering. This observation applies equally to individuals who have majored in computer science at many major universities in the U.S. and who have not taken basic classes in the area of software engineering/software development. This list is supposed to be a starting place to help rectify this pervasive problem and to help individuals gain the foundations that they will need to build better software. Even if you are not formally trained in computer science or software engineering, reading these references and applying the information in an industrial setting will enable you be more effective as you build software applications, software products and software systems.

Generally speaking, the books that I have listed here must contain some useful information or must have a practical bent so that it can be used by individuals working in the trenches. Some exceptions do exist as explained below (i.e., the only current book still in print within the sub-discipline, provides a comprehensive overview of the field even if it appears to be more academic in tone, or a part of the book contains some really helpful information such as an important example or a unusually helpful checklist). In some cases I have listed a book in a topic reference even it seems somewhat outdated since it supplies information that I feel might be foundational to the discipline. In some categories more than one book is listed since the book covers the topic in an unique way or offers a fresh perspective to an already crowded shelf on that topic. For me personally, the books must be easy to read, unpretentious and clear. Although the book is listed here, it doesn't necessarily mean that I agree with all that is written. Finally, I would recommend that you not purchase every book here but look to libraries, peers, or colleagues to see if you can borrow the books first. A good rule to follow before purchasing a book is to get three good independent recommendations from individuals that you trust in the field.

This list will be updated periodically as I review, study and read many new books. Some references will be updated or even replaced over time. Click on a subtopic to review the references in each section. This section was last updated July 2004.

Software Engineering Subdisciplines/Topic References

bulletSoftware Requirements
bulletSoftware Planning
bulletSoftware Tracking
bulletSoftware Estimation
bulletSoftware Project Management
bulletSoftware Architecture
bulletSoftware Design
bulletSoftware Coding
bulletSoftware Testing
bulletSoftware Maintenance
bulletHuman Side of Software
bulletSoftware Quality Assurance
bulletSoftware Risk Management
bulletSoftware Metrics & Measurement
bulletSoftware Process Improvement
bulletSoftware Standards
bulletSoftware Engineering
bulletSoftware Configuration Management
bulletSoftware Training
bulletSoftware Tools and Methods
bulletSoftware Usability / Human Factors
bulletLegal Aspect of Software
bulletSystems Thinking
bulletSystem Engineering
bulletSoftware Inspections
bulletMiscellaneous Topics

horizontal rule

bulletSoftware Requirements

Are Your Lights On? : How To Figure Out What the Problem Really Is by Don Gause and Gerald Weinberg, Dorset House, 1990. This easy to read book is an excellent tool to help you pinpoint requirements by identifying the correct problem. This text assists requirements engineers and requirements analysts in trying to define the correct problem first. It is simple to read but filled with tremendous insight on how to define the problem. It is an excellent book to assist in general problem solving, especially those who have intractable problems at hand. I believe the book helps you think about the problem before trying to tackle it. I have read this book several times and gain new insights and find new avenues of application after each reading. I particularly enjoy the informal style and amusing examples.

gause.gif (12009 bytes)Exploring Requirements : Quality Before Design by Gerald Weinberg and Don Gause, Dorset House, 1989. Requirements definition is the most important part of a development project and is often the most unclear and frequently misunderstood. This book does an excellent job in helping you understand requirements and the ambiguity that arises during the requirements process. The book is easy to read and provides practical "how to's" for the developer or analyst. The book describes tools and techniques that can reduce the negative effects that often occur on software projects. These ideas have been tested in both large and small organizations. It also provides insight on how people think, create and operate in the world around themselves. I would recommend that all software engineers read this book. The book is written in a style that even some of your more savvy customers can read and understand. This should help you focus in on the requirements that your customer really wants and needs.

robertson.bmp (11830 bytes)Complete Systems Analysis by James and Suzanne Robertson, Dorset House, 1994.  This is a two volume set that takes a user through an introduction to structured systems analysis. The book is helpful for those trying to learn a structured requirements or systems analysis methodology. One plus of the book is that no CASE tool is required to do the exercises. The exercises and suggested answers really help an individual gain mastery of the method and really helps to reinforce the concepts. I find myself using this book often when I am trying to document a client's requirements. For those who use this book, it took me about 1 month working only during the evenings for a few hours to work my way through the exercises and answers. I found it helpful to use a CASE tool in combination with the readings and exercises to make the use of the CASE tool and methodology simulate a real business development environment.

davis.gif (8973 bytes) Software Requirements : Objects, Functions and States, Revision by Alan M. Davis, Prentice Hall, 1992. This book surveys the spectrum of different software requirements methods that is in use today. Davis stresses the features and contrasts the differences of each method. He also talks about how to write a software requirements specification (SRS). In addition, the book contains three real world case studies illustrating the uses of all the described approaches. This book is good place to start if you are unfamiliar with the field of software requirements engineering. It provides a comprehensive introduction to requirements engineering. I often refer to the book when I have to review a less common form or method of documenting software requirements for a client or customer.

ieee.bmp (12086 bytes)Software Requirements Engineering by Richard Thayer (editor), Merlin Dorfman (editor), Sidney Bailin (editor), IEEE Computer Society, Second Edition, 1997. The second edition describes the best practices in requirements engineering focusing on software, but also including hardware and sometimes people. The format of this volume contains original papers written by experts in the field, plus revisions of papers from the first edition. The text covers basic issues and terminology in the field and describes the five phase process of requirements engineering : elicitation, analysis, specification, verification, and management. I think of this book as a reference book for software requirements engineering. As such I do not refer to it as often as the other books in this category, but I still think it is a valuable software book.

top

bulletSoftware Planning
bulletSoftware Tracking
bulletSoftware Estimation
bulletSoftware Project Management

Brooks.gif (6094 bytes)The Mythical Man Month by Frederick J. Brooks, Addison Wesley, 1995. This software engineering classic should be required reading for all software managers. The revised and 20th anniversary edition is still applicable today. The infamous line "adding people to an already late software projects makes it latter" came from this author. For anyone who works on large scale projects, Brooks describes the challenges that occur on large software projects, namely, that large software projects suffers from different management problems and conceptual integrity problems than small software projects. What make this text a classic is that Brook's advice is still applicable today making his insights and recommendations timeless.

boehm1.gif (51750 bytes)Software Engineering Economics by Barry Boehm, Prentice Hall, 1981. Although this text is quite old, the concepts that are presented are still valid today. This is the "reference" text for determining software costs, and applying the concepts of economics to software engineering. The book focuses on using quantitative approaches (i.e. COCOMO) to managing software projects.  This book should be required reading for any software manager. The data that is presented is now outdated, but I understand that Dr. Boehm is working on a new book to replace this one.

 

PMIbook1.gif (13587 bytes)A Guide to the Project Management Body of Knowledge, by Bill Duncan, PMI Standards Committee, Project Management Institute, September 1996. This is the official standards document of the Project Management Institute. It serves as a tool for learning about the generally accepted knowledge and practices of the profession—information you need to know to manage your projects successfully. The knowledge and practices presented in the PMBOK Guide are proven and can be applied to all types of projects. They are the fundamental tenets of project management that help everyone who manages projects, works on project teams, or teaches project management to achieve project success. The extensive glossary in the PMBOK Guide adds to the development of the profession as well as the development of the reader's professionalism. I have included this text here because I have seen so many software managers in my consulting practice unaware of basic software project management principles. This can serve as a good reference for project management. I wouldn't recommend this text as an initial introduction to software project management. See Steve McConnell's text below instead. Like any standard, the proper application to a specific context and the ability to tailor the information supplied in this book to your specific project is essential.

Software Project Survival, by Steve McConnell, Microsoft Press, 1997.  I have included this book as a recommendation for those who are involved in software project management who may not have had formal training in software project management or software project engineering. If you are a software developer with little or no experience in software project management this book is a good place to start. The book is easy to read, clear, organized in an outline format,  and can be implemented fairly easily on any small or medium sized software project. The book is short enough that it can be used to implement practical solutions to a wide variety of software projects. One of the helpful sections of the book is on Software Risk Management. This alone makes the cost of the book worthwhile. Steve presents a Sample Top Ten Risks List. The books also supplies many helpful checklists that can help a new project manager survive in the chaotic world of project management. The main challenge with Steve's approach is that it is weighted towards "process."  On many of the assignments that I have consulted, the formal process of software project management  rarely exists. In an Agile environment, formal software project management based on process can hinder the benefits of the method.

top

bulletSoftware Architecture
bulletSoftware Design

Structured Design: Fundamentals of a Discipline of Computer Programs and System Design by Ed Yourdon and Larry Constantine, March 1979.  Although this book is a bit dated and pricey, it was one of the first texts on the topic of structured design by the individuals who contributed to the formation of this new discipline during its publication. The concepts that are described in this book are still relevant today in the construction of software applications and programs, no matter what platform or language is used. I consider this text to be a classic in the field of software engineering and should be read by all software developers who are constructing software programs.

top

bulletSoftware Coding

Code Complete by Steve McConnell. Microsoft Press, 2nd edition, 2004. This is the one of best books that I have seen written for programmers and developers. The new version continues the trend of being a must read for any serious programmer or someone who wants to improve their coding skills. It should be required reading for any new developer or programmer. Many of the concepts apply to any language and should be implemented by all. For those who have learned coding in a informal environment, this book can really help you improve your coding style so that you can build professional software programs. I have found the book easy to read and quite comprehensive.

top

bulletSoftware Testing

kaner.gif (11534 bytes) Testing Computer Software by Cem Kaner, HQ Nguyen, Jack Falk, John Wiley, 2nd edition, 1999. This is a real world pragmatic introductory testing book for consumer and business software. I highly recommend this book especially for new QA/Software Testers. The widespread acceptance of this book is probably a result of the fact that the book doesn't preach or moralize about software quality and that it doesn't advocate creating mounds of paper documentation during testing. It also lists what practical techniques really work during day-to-day testing. It is easy to understand and incorporate in your organization since it doesn't emphasize the theory of software testing. A new update is supposed to be in the works.

top

bulletSoftware Maintenance

Practical Software Maintenance : Best Practices for Managing Your Software Investment by Thomas M. Pigoski, Wiley, 1996. This is one of the few software engineering texts devoted to the important, but sometimes overlooked, field of software maintenance. Some other books exist on this topic but they are now out of print. For completeness I have included this text in this reference list so the reader will have at least one reference in this category. The book covers important topics such as debugging, customizing, interfacing and integrating software. Design for maintainability, maintenance metrics, and the process of maintenance is also described. This book is not focused on actual code maintenance but on the higher level process of software maintenance in general. If you are ever assigned the task of setting up a software maintenance or software support group then this book offers practical information on how to do just that. Other sections of the book are somewhat weak and only provide a cursory review of the topic area (i.e., object oriented software).

top

bulletHuman Side of Software

Weinbergpsychology.jpg (15252 bytes)The Psychology of Computer Programming by Gerald Weinberg, Dorset House, 1998. This book, recently republished is an important work that is often neglected by industry professionals. As I continue to consult, I find the information presented of even more importance to me. I highly recommend this book to anyone who has concerns on the people side of developing software. This book provides insight into the behaviors of programmers. The book should be required reading for all software managers.

 

peopleware2.gif (125566 bytes) Peopleware by Tom Demarco and Tim Lister, Dorset House. 2nd edition, 1999. This is the updated version of their 1987 classic on the management of software development. The new edition has a new Preface and eight new chapters. This book is targeted at software development team leaders and managers and is filled with commonsense wisdom and interesting real world anecdotes. The writing is light and is easy to read. This is a entertaining and insightful work on software productivity. This is also a nice reference to Demarco's and Lister's seminar on "Managing Successful Software Projects" which loosely covers much of the same described material. I highly recommend this seminar.

top

bulletSoftware Quality Assurance
bulletSoftware Risk Management
bulletSoftware Metrics & Measurement

grady1.gif (15498 bytes)Software Metrics : Establishing a Company-Wide Program, by Robert Grady and Debra Caswell, Prentice Hall, 1989. This is a good practical introduction to applying metrics to software development in an industry environment. The authors document their experience with using and applying metrics at Hewlett Packard. What makes this text valuable is the industry application, where you get the feeling that the information has been field tested and is actually used. This is in contrast with other metrics books which seem to be oriented toward a more academic presentation. Another valuable asset of this book is that you can compare your measurements and metrics against another industry program to see where you are the same or different.

top

bulletSoftware Process Improvement

paulk.gif (1931 bytes)The Capability Maturity Model by Mark C. Paulk et. al, Addison Wesley, 1995. This book contains the description of the Software Engineering Institute's (SEI) Capability Maturity Model (CMM) for software process improvement based on Watts Humphrey's original software maturity model. This book should be included on anyone's bookshelf who is actively involved in changing a software development process or who is involved in software process improvement. The book describes the best practices in software engineering. The model's Key Practice Areas (KPA's) are described in detail. I use this book regularly while I do process assessments, audits and software process improvements activities with clients and customers.

top

bulletSoftware Standards

IEEE Standards, Collection on Software Engineering, IEEE 1999. This 4 volume set contains a collection of standards on software engineering. Topics include, software requirements specification, standard software engineering terms, software configuration management, software metrics, software quality assurance plus many more . There is a wealth of information here if you choose to use them. It is an excellent place to start if you are creating software engineering documents and need templates to start your documents. Just a caution: use the templates only as a starting point, but customize the templates based on your organizational culture and business practices in order to keep the length of documents manageable. The only downside to this set of books is its cost (about $395). Electronic and Acrobat PDF versions of the collection (released 2003) and individual standards are available from the IEEE Computer Society. One way to use these books is to survey the standards and choose bits and pieces that apply to the way that you develop software including the way that you document your software.

top

bulletSoftware Engineering

Software Engineering, by Roger Pressman, 6th edition, March 2004. This new edition is an update to an already popular introductory software engineering text. I have reviewed several other introductory software engineering texts and I like this one the best because of its industrial tone. Several other introductory software engineering texts that exist today are authored by academics and don't appear to have a practical bent for those practicing software engineering in the trenches. As a survey text, it suffers from being shallow in areas, but that is to be expected in a survey text. You can find just about any subtopic in software engineering in this book. It's a great place to start learning about a new unfamiliar subtopic in software engineering. If you want or need more detail in a specialized area of software engineering than what this book offers, then see some of the other book references on this page. The major downside of this book is its cost (over $115). Despite this, I still recommend the text to new software engineers and individuals who don't have a formal software engineering background. For developers, I often suggest that the contents of the book can be used for training and as a development guide for broadening the foundation of the competent software developer.

top

bullet Software Configuration Management
bullet Software Training

I don't know of any software book that deals specifically with software engineering training. However, many books by the American Society of Training and Development (ASTD) deal with training from a generic perspective. Some survey texts in software engineering have a chapter or two on training and or development of personnel. My general view of the industry is that most developers and software engineers don't get enough training. I wrote an article called "How To Get Approval To Attend Conferences or Training" that you may want to read if you feel you are not getting enough training or specialized development. It gives some hints on how to get more training or attend conferences. The best training methods that I have witnessed in the computer and software field are all based on experiential training methods. I have had the opportunity to participate in  experiential training in several of Jerry Weinberg's workshops (Problems Solving Leadership and Change Shop) and his experiential (X) design workshop where participants learn to design experiential training programs. Unfortunately Jerry no longer teaches his Problem Solving Leadership and Change Shop workshops. His X workshop is open by invitation only.

Steve McConnell's book, After the Gold Rush: Creating a True Profession of Software Engineering (1999), is a book that deals not so much with software training but with the professionalism of the software engineering field. Steve in this book offers a plea for software development to mature into an engineering discipline. Steve's other book, Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers (2003) expands on After the Gold Rush concepts and advocates the use of professional software practices that support the cost effective creation of high quality software. In both books, Steve presents his ideas for the development of software engineers. For the most part Steve is advocating more software engineering professionalism which should help the industry. However, I am not sure that that certification or licensing of software developers will be the answer for improving the discipline.

bullet Software Methods and Tools
bullet Software Usability / Human Factors

The Design of Everyday Things by Donald Norman, 1st edition, Basic Books, 2002. This book used to be named The Psychology of Everyday Things in its hardback form. This book is an excellent introduction to usability in design. Despite some of the pictures being old, this classic discusses the effect of poor design and equipment failure on a number of things outside of software and computers. Even though it does not focus on software and computers it serves as a primer on how and why certain products satisfy customers while others frustrate. This makes the text valuable since it can be read by non-computer and non-software individuals. Many of the concepts apply to computer and software design. Once one has read this text, one can move to more specialized references in the field of human computer interaction, human factors, and user interface design.

top

bullet Legal Aspects of Software

Bad Software: What to Do When Software Fails, by Cem Kaner and David Pels, John Wiley, 1998. This is one of the few books about the legal aspects of software. Kaner, who presently is a computer science professor at the Florida Institute of Technology and an expert in software testing, is also trained as a lawyer. He provides a unique view of software from a customer perspective in this book.  Kaner provides customer information on how to negotiate with software publishers and how to deal with problems with software. I have included this reference only because it is one of the few books on the legal aspects of software. If your reading time is limited I would suggest that you read other references on this list first.

top

bullet Systems Thinking

Introduction to General Systems Thinking: Silver Anniversary Edition by Gerald Weinberg, Dorset House, 2001. This book is the updated 25th anniversary version of the book that was originally published in 1975 (by John Wiley) that still continues to sell. According to Jerry, he was able to negotiate the re-purchase of the rights of this book so that it could be re-published to a new generation of readers and thinkers. This was one of the first books that I read by Jerry Weinberg in the early 1980's. This book serves as an excellent introduction to the field of systems thinking, cybernetics, or systems theory in general. The book is written in a general nature so it can apply to whole host of disciplines such as the biological sciences, engineering, computer science, medicine, business, management, and organizational science. I really believe that anyone studying systems theory should read this book. This text served as a foundational text to my studying the field of system engineering. As with several Weinberg books, the information listed here is still relevant today.

Quality Software Management: Systems Thinking, Vol. 1, by Gerald Weinberg, Dorset House, 2000. This important work, the first in a four part series on Quality Software Management, introduces the reader to the application of systems thinking as applied to the construction of software. When I first read this book, shortly after it was published, I was amazed at many of the familiar concepts and illustrations that I have witnessed over the years while I consult. I must admit that I am somewhat biased since I enjoy Jerry's writings. As I read the book I felt I was not preached to as is the case with many project management/software quality management books. The text is clear, easy to read and is sprinkled with sometimes funny examples and rules characteristic of many Weinberg books.  It is also apparent that we think alike when it comes to software and software development.  One interesting piece of information that I learned from Jerry about this book was that he formally modeled many of the system dynamics examples that are in the book in a early version of a modeling program called iThink. For those who complain that Weinberg doesn't give you any meat in books, Jerry explained to me that inclusion of such information/models would be of limited value to most practicing software managers. To know that by tweaking a critical parameter of a dynamic model of some aspect of software would save a manager a few days or a week on a large software project is really not that helpful. I tend to agree and I am glad he did not include that information as part of the book. If you seek more meaty information from Weinberg, I suggest that you read some of his original publications in journals such as Human Factors, IEEE Transactions in Software Engineering, etc. Jerry has done some of the pioneering work in real time programming, programming languages, inspections, software design, the humanistic side of software development and human computer interaction.

top

bullet Systems Engineering

Systems Engineering and Analysis, by Benjamin S. Blanchard and Wolter J. Fabrycky, 3rd edition, Pearson Education, 1998. This introductory text covers the discipline of systems engineering. It provides a comprehensive survey of the field of systems engineering. There are several other introductory texts in the area of systems engineering but I like this text the best. Ben Blanchard, emeritus professor of system engineering at Virginia Tech started his career in industry before retiring and going into academia. Imagine that. I was fortunate early on in my career to learn systems engineering from Professor Blanchard. It was an eye opening experience to take this class and learn that software is really only a sub discipline within systems engineering. My introduction to systems engineering allowed me to participate with individuals such as Ben Blanchard and Wolter Fabrycky in the early formation of the National Council on Systems Engineering (now called the International Council on Systems Engineering (INCOSE) during the early 1990's. I recommend that anyone interested in this field look into INCOSE (www.incose.org).

top

bullet Software Inspections
bulletMiscellaneous Topics

Retrospectives

Project Retrospectives: A Handbook for Team Reviews, by Norman Kerth, Dorset House, 2001. This book presents a guide on how to perform project retrospectives. This important process is essential if one wants to improve the software development process. I must admit that I have a bias for this text since many of the individuals listed in the book are colleagues, peers or friends. This book contains the basic information that I use when I conduct project retrospectives. In addition, I have had the opportunity to participate in the Retrospective Facilitator's Gathering where individuals who have conducted retrospectives get together to share ideas and develop the field of project retrospectives. The common thread to these gatherings is Norm's wonderful book.

top

© 1998-2004 by John Suzuki
Last Revised : 9/15/2004

horizontal rule

[Up] [Home Page]