Home > Store

Problem Frames: Analysing & Structuring Software Development Problems

Register your product to gain access to bonus material or receive a coupon.

Problem Frames: Analysing & Structuring Software Development Problems

Book

  • Sorry, this book is no longer in print.
Not for Sale

About

Features

  • Decompose complex problems into simpler sub-problems and see how the subproblems fit together.
  • Build up a repertoire of simple, clear and easily applicable problem classes which you can access and reuse, drawing on the experience associated with each class.

Description

  • Copyright 2001
  • Dimensions: 7-3/8x9-1/4
  • Pages: 416
  • Edition: 1st
  • Book
  • ISBN-10: 0-201-59627-X
  • ISBN-13: 978-0-201-59627-4

This book is about Problem Frames - a concept developed by Michael Jackson. It is a practical book which demonstrates how to classify problems that occur during the development of software and how to recognise the correct solution to each problem  

Sample Content

Table of Contents

1. Focusing on Problems.
2. Locating and Bounding the Problem.
3. Problems and Subproblems.
4. Basic Problem Classes and Frames.
5. Frame Concerns and Development Descriptions.
6. Frame Flavors and Development Descriptions.
7. Model Domains and Real Worlds.
8. Variant Frames.
9. Particular Concerns.
10. Decomposition Revisited.
11. Composite Frames.
12. Grown-Up Software Development.
Appendix 1: Notations.
Appendix 2: Glossary.
References.
Index.

Preface

Software development problems
The central goal in a software development problem is to create the software for a computer system that will serve some useful purpose in the world. This book is about analysing and structuring problems of this kind.
These problems are found in many different contexts and forms. If you are doing software development you might be building a system to act as a repository and access mechanism for information about bank accounts and loans. You might be developing a telephone exchange to switch local calls. You might be creating a tool for writing and editing texts and diagrams; or a control device to maintain cruising speed in a car; or a compiling machine to transform Java programs into bytecode. Almost any part of the human and physical world can furnish the raw material and the context for a software development problem.
Because computers can serve so many purposes, and play the central role in solving so many different kinds of problem, the practice of software development is less specialised than the established engineering disciplines. For the individual developer, and the individual development project, there's a lot more variety. That's why you should usually start by describing and structuring your problem in a way that's rarely necessary in other engineering disciplines, where the diversity of problems to be solved is much smaller. The automobile engineer designing a sports car does not need to ask whether the car must be capable of carrying 15 people, travelling underwater, carrying a ten-ton load, or moving backwards at 100mph. The phrase 'sports car' specifies both the problem and its acceptable solutions closely enough to answer those questions and many others.
But as a software developer you are rarely solving an immediately recognisable and well understood problem. Usually, you must begin by asking: What kind of problem is this? What, exactly, is the problem about? What purpose is being served in the world? What behaviour and properties must the computer have to achieve that purpose? Often, software development seems to start at square one.

Problem frames
When you analyse a problem you see what kind of problem it is, and identify the concerns and difficulties you will have to deal with to solve it. The concerns in a Java compiler will be very different from the concerns in a car braking system. You have different things to think about. Different kinds of descriptions must be made, and fitted together into differently shaped arguments. Problem analysis takes you from the level of identifying the problem to the level of making the descriptions needed to solve it.
But most realistic problems are too big and complex to handle in just two levels like this. Another level is needed: structuring the problem as a collection of interacting subproblems. If your structuring is successful, the subproblems will be smaller and simpler than the problem you started with, and their interactions will be clear and understandable. Then you can analyse each subproblem separately, as a simple problem on its own, and make the descriptions it needs.
The central idea of this book is to use problem frames in problem analysis and structure. They help you by defining different simple problem classes. When you structure a larger, realistic problem, you choose the subproblems so that each one is a problem of the simple kind defined by some problem frame. Then, when you analyse the subproblem, you see what concerns it raises according to the problem frame that fits it. The frame shows you what you must do to solve it.
A problem frame defines the shape of a problem by capturing the characteristics and interconnections of the parts of the world it is concerned with, and the concerns and difficulties that are likely to arise. So problem frames help you to focus on the problem, instead of drifting into inventing solutions. They do this by emphasising the world outside the computer, the effects that are required there, and the relationships among things and events of the world by which your customer will ultimately judge whether those effects have been achieved.
Problem frames share much of the spirit of design patterns. Design patterns look inwards towards the computer and its software, while problem frames look outwards to the world where the problem is found. But they both identify and describe recurring situations. They provide a taxonomy within which each increment of experience and knowledge you acquire can be assigned to its proper place in a larger scheme, and can be shared and accessed more effectively. So just as in object-oriented design a familiarity with design patterns allows you to say 'we need an instance of the decorator pattern here', so in problem decomposition a familiarity with problem frames allows you to say 'this part of the problem is a workpieces problem'. Having identified a part of a problem with a recognised problem frame, you can draw on experience associated with the frame.
The problem frame idea was first published in book form in my book Software Requirements & Specifications, where it was sketched in outline as one of a small number of related topics. This book puts more flesh on that skeleton. A number of elementary and composite problem frames are discussed and illustrated, along with a number of flavours and variants, and some of the concerns they raise are examined. The use of problem frames in decomposing realistic problems into subproblems is also explored and illustrated.

A focused view
Some people think that this notion of software development problems derives from a perspective that is too sharply focused and too narrow. They point out that computer systems, and the process of software development itself, almost always exist in a complex and fluid social, political, ethical and economic environment. When you are discovering the requirements for a system you are likely to be engaged in a process of social negotiation among conflicting groups of stakeholders; when you make a decision about system functionality you may be implicitly favouring one group over another; when you enlarge the system scope you are often giving political power to one group at the expense of another; when you analyse the purposes to be served by the system you are exploring its economic and organisational consequences.
So, from this point of view, the major concerns in software development are social and political, organisational and economic. Thinking in terms of problems doesn't do justice to these concerns. It's true that these concerns are important in many developments, but nonetheless we are going to ignore them in this book. We are not going to discuss how to elicit requirements, how to make the business case, how to manage the project, facilitate meetings, or negotiate compromise. We will ignore these things, not because they are unimportant but simply because they are not the subject matter of this book. If you want to understand anything, you mustn't try to understand everything.
Instead, we are going to try to understand some more sharply focused ideas in problem structure and analysis in the context of software development. Our chief topics will be the material, observable effects that the system should bring about in the world, the computer behaviour that will achieve those effects, and the connection between them. In short, the topics that are often called functional requirements, software specifications, and the path by which you get from one to the other.

Focusing on problems
It is not easy to focus on problems in software development. One reason is that they have some precise and some imprecise aspects, all competing for your attention. Like Odysseus on his ship coming home from Troy, you are sailing between Scylla and Charybdis, and must try to steer a middle course.
If you are attracted by the arguments of the people who regard our view of problems as far too formal and narrow, you may be dragged off to the right, into the world of purely human problems - the imprecise world of sociology and ethnography, where nothing is ever completely certain or completely exact. That's an important world, but it neglects the software and its development.
However, if you find that problems are less exciting than their software solutions, you are more likely to veer off to the left, towards the much more precise world of programming - of variables and methods and object classes, where boolean values are always either True or False, and never anything in between. Progamming is also important, but it won't be useful if no one has analysed the problem and worked out what the programs must do.
In the problems discussed in this book, there are plenty of precise and plenty of imprecise ingredients. We will try to do justice to both, to steer the proper course for understanding and analysing problems.

Formality and informality
If you steer the proper course between Scylla and Charybdis, and succeed in focusing on the problem, your descriptions must sometimes be quite formal, and sometimes quite informal. Formality, of course, is in the eye of the beholder. Some software developers think they are being extremely formal when they draw a diagram according to some rule rather than according to their fancy of the moment. Some think that a development is hopelessly informal if it does not rely on rigorous mathematical proofs of correctness.
Software development problems are about the real world where the system must have its effect. So the formality or informality of much of what you must do in problem analysis is governed by the formality or informality of the parts of the world you are dealing with. It's good to be as precise and formal as the subject matter allows and the task demands: why be vague when you can be exact? But it's also important to recognise that much of what is in the physical world can't be described faithfully or even adequately in purely formal terms.
In Engineering and the Mind's Eye, a wonderful book about mechanical and structural engineering, Eugene Ferguson complains that many engineering disasters have happened because modern engineers have been taught to pay too much attention to calculation and formal analysis of structures and too little to the physical reality of the world of which those structures are a part. He writes:
'The real problem of engineering education is the implicit acceptance of the notion that high-status analytical courses are superior to those that encourage the student to develop an intuitive "feel" for the incalculable complexity of engineering practice in the real world.'
Perhaps as practising software developers we are not guilty of paying too much attention to 'high-status analytical courses'. But we do pay a great deal of attention to techniques that are essentially syntactic and notational. That leaves us - like the engineers whose education Ferguson is criticising - paying too little attention to the incalculable complexity of the real world. Our problems and requirements are in the world, not in the computer. We must focus on them directly, and describe them conscientiously.

Are there really problems?
Some people have another reason for not thinking of software development in terms of problems. They see every system and its environment in a symbiotic relationship, perpetually evolving and adjusting to each other. Installing and using a system - even proposing to install and use a system - brings about changes in the environment, which in turn affect the evolution of the system in its later versions. The 'problem' is being continually modified from the moment it is proposed. A problem description is, at best, a snapshot of a problem at one moment in time that will soon pass away. There is no such thing as a 'requirement'. And if there is, it's not useful.
This is often a sound argument for incremental deployment and evolutionary development. And it can also be a sound argument for a determined attempt to forecast the effects of the system, to calculate the changes it will bring about in the environment, and to take account of those changes in the system development. It's not enough to design the new bridge to handle the immediate and currently foreseen traffic demands; you must design it to handle the much more uncertain increase in demand that the bridge itself will call forth.
But it's never a sound argument for refusing to think in terms of problems and requirements. When a computer system - or an increment, or an evolutionary modification, to a system - is installed and put into operation, it will certainly have some particular behaviour, determined by its software. That particular behaviour will have effects and consequences in the problem world, which may be desirable or undesirable. To capture the requirement, and to structure and analyse the problem, is simply to do the best you can to decide what consequences are wanted and to create software that will bring them about. To say that different consequences, and different software, will be wanted next year doesn't justify getting it wrong this year.
The proper response to uncertainty and fluidity of requirements is not to throw up your hands and abandon the task. It is to work at a higher level of generality. One technique is to encode some of the functionality in explicit descriptions that the machine will interpret at execution time. Then the users can modify the system behaviour by modifying these descriptions. This approach, of increasing the level of generality, falls entirely within the discipline of problem analysis discussed in this book: it uses a variant frame that has a description domain. It is also falls, of course, entirely within a common practice of design patterns, where it is manifested in patterns with names such as reflection or metadata or type object.

What method?
The use of problem frames does not imply a particular development method. One reason is that different frames demand different methods and the use of different concepts and notations. The idea of a panacea - a universal cure - for the difficulties of software development is now rightly discredited. But sadly it persists. Surprisingly, universal methods, implicitly claiming to be applicable to every possible problem, are still being devised and sold, and seem to flourish. But if a method offers help with every possible problem, you mustn't expect it to help much with any particular problem.
Another reason for not advocating a particular development method is that most of the methods widely used today are strongly solution-oriented. You need solution-oriented methods to help you to produce solutions. But they give little help - and are often a positive hindrance - in structuring and analysing problems.
Problem frames, and the related ideas, are meant to be used as a front end to what you would do anyway; or to suggest how you might extend or modify your practice; or, perhaps, just to clarify it. If you do adopt and use these ideas, do it gradually in a piecemeal process, not in a sea-change. You may perhaps find that many of them are just giving names to ideas and intuitions that you already have. Naming them should make them more consciously accessible when you need them. And where they're new to you, they may shed light on some difficulties that you had felt but had never articulated.

Structure of the book
The key idea of the book is the decomposition of complex and realistic problems into structures of simple subproblems of kinds that fit recognised problem frames. So there's a mixture of larger and smaller problems. Some of the smaller problems are trivial, especially the problems used to illustrate the most basic elementary problem frames. Don't spurn trivial problems. They show the stripped-down essence of problem classes in their barest form: that makes it much easier for you to recognise them when they appear in fancy dress concealed by the trappings of a larger problem.
The problems are not presented in ascending order by size and complexity. That would be rational and tidy, but it would make the book frustrating to read. Instead, larger and smaller problems are interleaved, and different aspects of each problem are discussed wherever they seem relevant and provide a good illustration of the current topic.
Some topics, such as descriptive languages and notations, run through the whole book. Again, aspects of these topics are introduced where they arise.
This very informal structure is supplemented by two appendices. One summarises the descriptive languages and notations used; the second provides a glossary of the terminology. There is a consolidated list of all the bibliographic references, and an index.

Is this book for you?
I hope this book will be useful to teachers, students and practitioners of systems analysis, system specification, and software and requirements engineering, and to anyone else with an interest in concepts and intellectual tools for software development. It is not a course textbook. But it may prove useful as a supplementary text in some courses on software development.

Any questions?
Who or what are Scylla and Charybdis?
Scylla was a monster of Greek mythology who lived in a cave on the Straits of Messina, between Sicily and Italy. She dragged passing seafarers into her cave and devoured them - rather like the way that the energy needed for solving a problem is consumed by the technicalities of programming. Charybdis was a lethal whirlpool on the opposite side of the straits that drew seafarers down to the depths of the sea - rather like the way that a problem can be whirled round and round in the eddying currents of politics and sociology. Both Odysseus and the Argonauts sailed successfully between these two perils.
What are the two books you mentioned that discuss problem frames?
Michael Jackson, Software Requirements & Specifications: A Lexicon of Practice, Principles, and Prejudices, Addison-Wesley, 1995.
Ben Kovitz, Practical Software Requirements: a Manual of Content and Style, Manning, 1998.
What is the book by Ferguson about mechanical and structural engineering?
Eugene S Ferguson, Engineering and the Mind's Eye, MIT Press, 1992.
Where can I find other ideas for classifying and structuring problems?
There is not a lot in the practitioners' world. But there is some interesting research work in the area of system requirements that is very relevant and has some close parallels to the problem frame ideas.
The Requirements Apprentice provides a taxonomy of requirements and a library of requirement clich‚s. Clich‚s fall into three areas: environment, needs and system. A system may be, for example, an information system, a tracking system or a display system. The Requirements Apprentice itself is a tool that helps you to explore the clich‚ library and use the clich‚s for your particular problem. You can read about this work in:
Howard B Reubenstein and Richard C Waters, The Requirements Apprentice: Automated Assistance for Requirements Acquisition, IEEE Transactions on Software Engineering, Volume 17, Number 3, pages 226-240, March 1991.
Object system models and information system models capture abstractions of requirements engineering problems. The highest level of classification of object system models includes, for example, resource allocation, work item manipulation, and financial object exchange. This work is described in:
NAM Maiden and AG Sutcliffe, Analogical Retrieval in Reuse-Oriented Requirements Engineering, Software Engineering Journal, Volume 11 Number 5, pages 281-292, September 1996.
The KAOS method sees requirements in terms of goals. The goals of the system to be constructed are decomposed and elaborated, and assigned to agents. An agent may be a component consisting of hardware and software, or a human being, or another part of the physical problem environment. Goals are classified into information, safety, and other kinds. Conflicts between goals are identified and resolved; obstacles to satisfaction of a goal are detected and overcome. KAOS is described in:
A van Lamsweerde, R Darimont and Ph Massonet, Goal-Directed Elaboration of Requirements for a Meeting Scheduler: Problems and Lessons Learnt in Proceedings of RE95, the Second IEEE International Symposium on Requirements Engineering, pages 194-203, May 1995.
R Darimont and A van Lamsweerde, Formal Refinement Patterns for Goal-Driven Requirements Elaboration in Proceedings of FSE4, Fourth ACM SIGSOFT Symposium on the Foundations of Software Engineering, pages 179-190, October 1996.
Axel van Lamsweerde, and Emmanuel Letier, Integrating Obstacles in Goal-Directed Requirements Engineering in Proceedings of the 20th International Conference on Software Engineering, April 1998.

020159627XP04062001

Updates

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020