Engineering Artificial Intelligence Software (Book)
This book is aimed at the computer-literate person interested in the reality of exploiting the promise of Artificial Intelligence (AI) in practical, maintainable software systems. It cuts through the hype, so commonly associated with discussions of AI, and presents the realities, both the promise and the problems, the current state of the art, and future directions.
It is not another expert systems book. Expert systems are viewed as just one manifestation of AI in practical software; the issues raised in this book are much broader. It looks at the conventional wisdom in software engineering-what the goals ar, the rationale behind them, and what the realities actually are.
Edition
Preface
1 Introduction to Computer Software 1
1.1 Computers and software systems
1.2 An introduction to software engineering
1.3 Bridges and buildings versus software systems
1.4 The software crisis
1.5 A demand for more software power
1.6 Responsiveness to human users
1.7 Software systems in new types of domains
1.8 Responsiveness to dynamic usage environments
1.9 Software systems with self-maintenance capabilities
1.10 A need for AI systems
2 AI Problems and Conventional SE Problems 27
2.1 What is an AI problem?
2.2 Ill-defined specifications
2.3 Correct versus 'good enough' solutions
2.4 It's the HOW not the WHAT
2.5 The problem of dynamics
2.6 The quality of modular approximations
2.7 Context-free problems
3 Software Engineering Methodology 36
3.1 Specify and verify - the SAV methodology
3.2 The myth of complete specification
3.3 What is verifiable?
3.4 Specify and test - the SAT methodology
3.5 The strengths
3.6 Testing for reliability
3.7 The weaknesses
3.8 What are the requirements for testing?
3.9 What's in a specification?
3.10 Prototyping as a link
4 An Incremental and Exploratory Methodology 56
4.1 Classical methodology and AI problems
4.2 The RUDE cycle
4.3 How do we start?
4.4 Malleable software
4.5 AI muscles on a conventional skeleton
4.6 How do we proceed?
4. 7 How do we finish?
4.8 The question of hacking
4.9 Conventional paradigms
5 New Paradigms for System Engineering 79
5.1 Automatic programming
5.2 Transformational implementation
5.3 The "new paradigm" of Balzer, Cheatham and Green
5.4 Operational requirements of Kowalski
5.5 The POLITE methodology
6 Towards a Discipline of Exploratory Programming 109
6.1 Reverse engineering
6.2 Reusable software
6.3 Design knowledge
6.4 Stepwise abstraction
6.5 The problem of 'decompiling'
6.6 Controlled modification
6.7 Structured growth
7 Machine Learning: Much Promise, Many Problems 141
7.1 Self-adaptive software
7.2 The promise of increased software power
7.3 The threat of increased software problems
7.4 The state of the art in machine learning
7.5 Practical machine learning examples
8 Expert Systems: The Success Story 158
8.1 Expert systems as AI software
8.2 Engineering expert systems
8.3 The lessons of expert systems for engineering AI software
9 AI into Practical Software 170
9.1 Support environments
9.2 Reduction of effective complexity
9.3 Moderately stupid assistance
9.4 An engineering toolbox
9.5 Self-reflective software
9.6 Overengineering software
10 Summary and What the Future Holds 193
References 200
Index 206