The Mozilla
Organization
At A Glance
Feedback
Get Involved
Newsgroups
License Terms
Newsbot
Developer Docs
Roadmap
Projects
Ports
Module Owners
Hacking
Get the Source
Build It
Testing
Download
Bugzilla
Bug Writing
Tools
View Source
Tree Status
New Checkins
Submit A Bug
FAQ
Search

Webclient Requirements Specification Version 1.5

Review Status: version 1.3 formally reviewed

NOTE: This document specifies the ideal webclient, not the current webclient or even a future webclient. That is, not everything in here will be implemented, but nothing will be implemented that isn't in here. In other words, the actual implementation will be a proper subset of what is specified here.

post feedback to netscape.public.mozilla.java with the subject webclient spec

Sections changed since the previous version of the document are bracketed like this.

Table of Contents

  1. Introduction
    1. How the software fits into the larger system
    2. Overall description
    3. Software Project Constraints
  2. Detailed Problem Description
    1. Information Flow
    2. System Interface Description
  3. Functional Description
    1. Functional Partitioning
      1. webclient API
      2. Event System
  4. Behavioral Description
    1. System States
    2. Events and Actions
  5. Validation Criteria
    1. Performance Bounds
    2. Special Considerations
  6. Appendices
    1. Other Projects Similar to This One
    2. Differences from the Current Implementation
    3. People who have worked on this document

Introduction

    The webclient project aims to provide a browser neutral Java API that enables Java applications (not applets) to access generic web browsing capability. This capability includes, but is not limited to: web content rendering, navigation, a history mechanism, and progress notification. The actual capabilities implemented depend on the underlying browser implementation. Webclient does not deal with web authoring.

    This document is the canonical source of requirements for the software. If new feature requests or changes are granted, they should first be included in the spec and then in the implementation. This document should be put under change control once the initial revision is approved.

    How the software fits into the larger system

      Any Java program may use the Webclient API to access browser functionality. Webclient will be accessible to an embedding program (the custom app), in the following forms, and only the following forms:

      • Programmatically, as a Jar file from which you can directly access webclient classes.

      • As a Java Bean, that can be embedded in a program using a bean enabled development tool.

      There is a related project to webclient, tentatively called "Webclient for the Star Office API", that deals with providing for the StarOffice API what webclient provides for the Java environment.

      Webclient will be available in the following environments:

      Operating Systems

      • Windows NT 4.0 SP3 and greater

      • Solaris 2.6 and greater

      • linux PENDING(edburns): what dist and versions?

      • MacOS 8

      Java environments

      • JDK 1.1.7 and JDK1.2.1 and greater from Sun Microsystems

      • Linux JDK PENDING(edburns): what dist and version?

      • Macintosh MRJ 2.1.4 from Apple

      Browser Environments

      • Mozilla Milestone 9

      • Internet Explorer 5

      • Hot Java Browser Bean

      • While not going into too much implementation specific detail, the current plan calls for wrapping mozilla first, then wrapping IE.

    Overall description

      Why do we need webclient?

      As mentioned in the introduction, the webclient project aims to provide a browser neutral Java API that enables generic web browsing capability. Currently, there are several projects that provide generic web browsing capability in Java [1]. However, none of these projects leverage the major browsers. The ability to wrap the major browsers provides several benefits:

      • Webclient puts the burden of "keeping up with the Joneses" where it belongs, on those who have the business need and the resources to keep up with current standards and rendering demands.

      • The flexible API allows one to provide an implementation for application specific circumstances, for example, small footprint devices; PENDING(edburns): add more value adds for wrapping the major browsers.

      • Webclient gives developers who are building application GUIs with Java world-class HTML rendering capabilities. By world-class we mean: super-fast, fully-functional, and fully-standard-supporting, well supported, widely used, well tested, etc.

      Another reason for webclient's existence is to showcase the power of embedding Mozilla (and other browsers). The success of the mozilla project is important to Sun (and to many other companies and individuals). Making Mozilla available to as wide an audience as possible is important.

      Goals

      • Multi-browser implementation

        Webclient will wrap the above mentioned browsers.

      • Scalability

        The full webclient API will expose the union of the capabilities of all the underlying browsers, however, the api will behave gracefully if the underlying browser implementation doesn't support all of the webclient API features. For example, suppose there is a webclient implementation for a small footprint browser, let's say the beduin browser for pJava. This browser may not include the capability for "find in document", but the "find in document" API exists in webclient. This will not pose a problem: either the method(s) for "find in document" will do nothing, or there will be a subset of the full webclient API that can be implemented in the case of a reduced capability browser.

        Another facet of scalability is partitioning. For example. Parts of the webclient API may use Java2 API's such as the Swing UI toolkit, but webclient will still be deployable in non-Java2 environments.

      • Low overhead

        Webclient is a thin layer of software on top of a browser and, as such, will not cause major memory consumption outside of that already caused by the browser and the VM in which webclient is running.

      • Accessibility

        Webclient will have APIs to make the entire user experience accessibly to persons with disabilities. PENDING(edburns): need to investigate.

    Software Project Constraints

      Sun aims to complete principal development for the webclient project by the end of calendar 1999. After that point, Sun may continue to be the steward of webclient development at mozilla.org, but may also pass the mantle on to some other entity. Webclient is designed for Java. Providing a non-Java implementation is a deviation from this specification.

Detailed Problem Description

    Information Flow

      Information passes between the custom app and webclient via events and method invocations. Generally, events carry information from webclient to the custom app, and method invocations carry information from the custom app to webclient. Stated another way, events are generated by webclient, but the implementation of what to do with an event is provided by the custom app. Method invocations come from the custom app, but are implemented by webclient. The method invocations are listed in the Interface Description section. See the section on events for detailed information about the events generated by webclient.

    System Interface Description

      To the custom app developer, webclient's graphical user interface is a java.awt.Canvas subclass, BrowserControlCanvas, that can be inserted in to the custom app's display hierarchy as the developer sees fit. Webclient pops up no dialogs. Instead, the API will notify the application of events (see listener interfaces below). The custom app developer must provide all GUI elements. A BrowserControlCanvas instance is a browser window. It may display frames within itself when a page containing frames is visited. It is perfectly permissible to have multiple BrowserControlCanvas instances in a custom app, but it is the custom app's business to manage the collection of BrowserControlCanvas instances. For Each BrowserControlCanvas instance there will be a way to access the below methods. Invoking any of the below methods will affect only the BrowserControlCanvas instance from which the methods were accessed. See the section on functional partitioning for more information.

      The programmatic interface to webclient is a collection of Java interfaces and one Java class, with the interfaces organized by functionality. All of the following classes and interfaces are implemented by webclient and are callable from the custom app. See also the EventListener interfaces, which are implemented by the custom app and are called by webclient.


                 
      class webclient.BrowserControlFactory
       webclient.BrowserControl newBrowserControl() Create a new BrowserControl instance

      interface webclient.BrowserControl
      webclient.Bookmarks getBookmarks()
                 
      Gain access to this BrowserControl instance's Bookmarks component.
      webclient.BrowserControlCanvas getBrowserControlCanvas()
                 
      Gain access to this BrowserControl instance's BrowserControlCanvas component.
      webclient.CurrentPage getCurrentPage()
                 
      Gain access to this BrowserControl instance's CurrentPage instance.
      webclient.EventRegistration getEventRegistration()
                 
      Gain access to this BrowserControl instance's EventRegistration component.
      webclient.ExtendedEventRegistration getExtendedEventRegistration()
                 
      Gain access to this BrowserControl instance's ExtendedEventRegistration component. This is for Swing events and other non-core events.
      webclient.History getHistory()
                 
      Gain access to this BrowserControl instance's History component.
      webclient.Navigation getNavigation()
                 
      Gain access to this BrowserControl instance's Navigation component.
      webclient.cache.NetDataCacheManager getNetDataCacheManager()
                 
      webclient.Preferences getPreferences()
                 
      Gain access to this BrowserControl instance's Preferences component.
      webclient.Print getPrint()
                 
      Gain access to this BrowserControl instance's Print component.
      webclient.WindowControl getWindowControl()
                 
      Gain access to this BrowserControl instance's WindowControl component.

      interface webclient.Bookmarks PENDING(edburns): define the type for a bookmark entry
       void addBookmark(java.lang.Object mayBeNullParent, webclient.BookmarkEntry bookmark)
                 
       javax.swing.tree.TreeModel getBookmarks()
                 
       void removeBookmark(webclient.BookmarkEntry bookmark)
                 

      interface webclient.BrowserControlCanvas
       void setBounds(int x, int y, int w, int h)
                 
       void setBounds(Rectangle rect)
                 
       java.awt.Rectangle getBoundsRelativeToWindow()
                 
       java.awt.Point getEventCoordsLocalToWindow(MouseEvent evt)
                 
       int getWindow(java.awt.DrawingSurfaceInfo dsi)
                 
      get the native window handle as an int.
       java.awt.Rectangle getWindowBounds()
                 

      interface webclient.CurrentPage
       void copyCurrentSelectionToSystemClipboard()
                 
       void findInPage(java.lang.String stringToFind, boolean forward, boolean matchCase)
                 
       void findNextInPage(boolean forward)
                 
       java.lang.String getCurrentURL()
                 
      org.w3c.dom.Document getDOM()
                 
      Gain access the DOM for the currently loaded document for this BrowserControl instance.
       webclient.PageInfo getPageInfo()
                 
       java.lang.String getSource()
                 
       byte [] getSourceBytes()
                 
       void resetFind()
                 
       void selectAll()
                 

      webclient.EventRegistration
       void addContainerListener(webclient.ContainerListener containerListener)
       void removeContainerListener(webclient.ContainerListener containerListener)
       void addDocumentListener(webclient.DocumentListener documentListener)
       void removeDocumentListener(webclient.DocumentListener documentListener)
       void addDocumentLoadListener(webclient.DocumentLoadListener listener)
       void removeDocumentLoadListener(webclient.DocumentLoadListener listener)
       void addDOMListener(webclient.DOMListener containerListener)
       void removeDOMListener(webclient.DOMListener containerListener)
       void addJavaScriptListener(webclient.JavaScriptListener containerListener)
       void removeJavaScriptListener(webclient.JavaScriptListener containerListener)
       void addWindowListener(java.awt.event.WindowListener windowListener)
       void removeWindowListener(java.awt.event.WindowListener windowListener)

      webclient.ExtendedEventRegistration
       void addHyperLinkEventListener(javax.swing.event.HyperLinkEvent HyperLinkEventListener)
       void removeHyperLinkEventListener(javax.swing.event.HyperLinkEventListener)

      interface webclient.History
       boolean back()
                 
       boolean canBack()
                 
       webclient.HistoryEntry [] getBackList()
                 
      Get the copied list of previously visited pages from the history.
       void clearHistory()
                 
       boolean forward()
                 
       boolean canForward()
                 
       webclient.HistoryEntry [] getForwardList()
                 
      Get the copied list of previously visited pages from the history.
       webclient.HistoryEntry [] getHistory()
                 
      Return a copy of the entire history
       webclient.HistoryEntry getHistoryEntry(int historyIndex)
                 
       int getHistoryIndex()
                 
      returns the index of the currently viewed page in the history.
       boolean setHistoryIndex(int historyIndex)
                 
      cause the browser to navigate to the HistoryEntry at index historyIndex.
       int getHistoryLength()
                 
       java.lang.String getURL(int historyIndex)
                 
      A convenience method to return the url of a HistoryEntry at a given index.

      interface webclient.Navigation
       void loadURL(java.lang.String urlString)
                 
       void refresh()
                 
       void stop()
                 

      interface webclient.cache.NetDataCacheManager See nsINetDataCacheManager.idl
       static int BYPASS_MEMORE_CACHE_MASK
       static int BYPASS_PERSISTENT_CACHE_MASK
       boolean containsDataForURI(java.lang.String uri, java.lang.String secondaryKey, int flags)
                 
       webclient.cache.CachedNetData getCachedNetData(java.lang.String uri, java.lang.String secondaryKey, int flags)
                 
       webclient.cache.NetDataDiskCache getDiskCache()
                 
       int getHitRatio()
                 
       webclient.cache.NetDataCache getMemoryCache()
                 
       int getNumEntries()
                 
       java.util.Enumeration newCacheEntryEnumerator()
                 
       void removeAll()
                 

      interface webclient.cache.CachedNetData extends webclient.cache.NetDataCacheRecord See nsICachedNetData.idl
       void commit()
                 
       java.util.Date getExpirationTime()
                 
       java.util.Date getLastRetrievalTime()
                 
       int getNumRetrievals()
                 
       java.lang.String getSecondaryKey()
                 
       boolean isUpdateInProgress()
                 

      interface webclient.cache.NetDataCacheRecord See nsINetDataCacheRecord.idl
       void delete()
                 
       int getContentLength()
                 
       java.lang.String getKey()
                 
       java.lang.String getMetaData()
                 
       java.io.Reader getReader()
                 
       int getRecordID()
                 
       java.io.Writer getWriter()
                 

      interface webclient.cache.NetDataCache See nsINetDataCache.idl
       boolean containsDataForKey(java.lang.String key)
                 
       void setCacheCapacity(int kiloByteSize)
                 
       int getCacheCapacity()
                 
       webclient.cache.NetDataCacheRecord getCachedNetData(java.lang.String key)
                 
       webclient.cache.NetDataCacheRecord getCachedNetDataByID(int RecordID)
                 
       java.lang.String getDescription()
                 
       int getMaxEntries()
                 
       webclient.cache.NetDataCache getNextCache()
                 
       int getNumEntries()
                 
       int getStorageInUse()
                 
       boolean isEnabled()
                 
       boolean isReadOnly()
                 
       java.util.Enumeration newCacheEntryEnumerator()
                 
       void removeAll()
                 

      interface webclient.cache.NetDiskDataCache extends webclient.cache.NetDataCache See nsINetDataDiskCache.idl
       java.lang.String getCacheLocation()
                 
       void setCacheLocation(java.lang.String absoluteFileName)
                 

      interface webclient.Preferences
       java.lang.String exportBookmarks()
                 
       java.lang.String exportCookies()
                 
       void setCharacterSet(java.lang.Character.Subset charSet)
                 
       java.lang.Character.Subset getCharacterSet()
                 
       void setDefaultOutgoingHttpHeader(java.lang.String headerName, java.lang.String headerValue )
                 
       java.lang.String [] getDefaultOutgoingHttpHeaders()
                 
       void clearDefaultOutgoingHttpHeader(java.lang.String headerName)
                 
       void setFtpProxyHost(java.lang.String hostname)
                 
       java.lang.String getFtpProxyHost()
                 
       void setFtpProxyPort(int newPort)
                 
       int getFtpProxyPort()
                 
       void clearFtpProxy()
                 
       void setGlobalProxyHost(java.lang.String hostname)
                 
       java.lang.String getGlobalProxyHost()
                 
       void setGlobalProxyPort(int newPort)
                 
       int getGlobalProxyPort()
                 
       void clearGlobalProxy()
                 
       void setGopherProxyHost(java.lang.String hostname)
                 
       java.lang.String getGopherProxyHost()
                 
       void setGopherProxyPort(int newPort)
                 
       int getGopherProxyPort()
                 
       void clearGopherProxy()
                 
       void setHistoryExpiration(int days)
                 
       int getHistoryExpiration()
                 
       void setHomePage(java.lang.String)
                 
       java.lang.String getHomePage()
                 
       void setHttpProxyHost(java.lang.String hostname)
                 
       java.lang.String getHttpProxyHost()
                 
       void setHttpProxyPort(int newPort)
                 
       int getHttpProxyPort()
                 
       void clearHttpProxy()
                 
       void setIgnoreColorsOnWebPages(boolean newValue)
                 
      Show everything on the page in black and white.
       void setIgnoreFontSizesOnWebPages(boolean newValue)
                 
      Use default accessible font sizes on all pages, regardless of what the author intended.
       void setIgnoreFontStylesOnWebPages(boolean newValue)
                 
      Use default accessible font styles on all pages, regardless of what the author intended.
       void setUserStyleSheet(java.lang.String cssFileName)
                 
      Format all pages with the given css StyleSheet.
       void importBookmarks(java.lang.String hotlistFileString)
                 
       void importCookies(java.lang.String hotlistFileString)
                 
       void setNoProxyList(java.lang.String commaSepList)
                 
       java.lang.String getNoProxyList()
                 
       void setPlainTextFont(java.awt.Font font)
                 
       java.awt.Font getPlainTextFont()
                 
       void setSecureProxyHost(java.lang.String hostname)
                 
       java.lang.String getSecureProxyHost()
                 
       void setSecureProxyPort(int newPort)
                 
       int getSecureProxyPort()
                 
       void clearSecureProxy()
                 
       webclient.Security getSecurity() PENDING(edburns)
                 
       void setSocksServerHost(java.lang.String hostname)
                 
       java.lang.String getSocksServerHost()
                 
       void setSocksServerPort(int newPort)
                 
       int getSocksServerPort()
                 
       void clearSocksServer()
                 
       void setWebPageFont(java.awt.Font font)
                 

      interface webclient.PrintPENDING: Can someone who knows the Java2 Printing API rework this interface to conform to JDK?
       void print()
                 
       void setPaperSize(java.lang.String tbd)
                 
       void setPaperSource(java.lang.String tbd)
                 
       void setPageHeader(java.lang.String headerString)
                 
       void setPageFooter(java.lang.String footerString)
                 
       void setOrientation(java.lang.String orientation)
                 
       void setInchMargins(int left, int right, int top, int bottom)
                 

      interface webclient.WindowControl
       int getNativeWebShell()
                 
      returns the native pointer to the native browser as an int.
       void moveWindowTo(int x, int y)
                 
       void removeFocus()
                 
       void repaint(boolean forceRepaint)
                 
       void setVisible(boolean newState)
                 
       void setFocus()
                 

Functional Description

    From the custom app developer's perspective, there are two parts to the system: the webclient APIs and the event system.

    Functional Partitioning

      webclient APIs

        There is one entry point to the webclient APIs, webclient.BrowserControlFactory. This class is used to create webclient.BrowserControl instances, each of which can vend out a webclient.BrowserControlCanvas instance, as well as vending implementations of the interfaces listed in the System Interfaces section.

      Event System

        The custom app developer obtains a reference to a webclient.EventRegistration instance and uses it to register/deregister for various events generated by webclient.

Behavioral Description

    This section examines the operation of the software as a consequence of external and internal events. It also covers webclient Thread issues.

    System States

      Startup State

        Webclient's startup state involves two stages: 1. one-time initalization, and 2. per-webclient.BrowserControlCanvas instance event registration. All one-time initialization automatically takes place when the first webclient.BrowserControl instance is placed in the display hierarchy. Subsequent webclient.BrowserControlCanvas instances will not incur the cost of this one-time initialization. Event registration is simply the act of allowing the custom app to receive events from a webclient.BrowserControl instance. Webclient is guaranteed not to generate any events until the custom app starts calling webclient.BrowserControl methods. Thus it is permissible to do the startup state in a separate Java thread.

      Idle State

        Webclient's idle state is when it is not fetching content. Events can still be generated when webclient is in the idle state. For example, mouse-over, right-mouse button, and javascript events can be generated during the idle state.

      Fetching State

        Webclient's fetching state is when the underlying browser is fetching web content. Progress, document load, authentication, and cookie events can be generated during this state. Fetching state is entered when any of the webclient.Navigation methods are invoked (other than stop()), when the currently loaded page programmatically causes another page to be loaded, or when a javascript event causes something to be loaded. Fetching state is exited when the loading is complete, or when the stop() method is invoked.

    Events and Actions

      For the more than minimal browser, it is necessary to get event notifications from the native browser. Hence, webclient will surface event listener APIs. The custom app developer would implement these APIs in the app, and register their implementations with webclient so that the appropriate callback methods in the custom app would be invoked. Webclient uses the java 1.1 event model, where event objects are generated and all registered listeners receive the event, which they can interrogate to determine the nature of the event.

      All webclient event listeners inherit from webclient.WebclientEventListener.

      webclient.WebclientEventListener
       void eventDispatched(WebclientEvent event) invoked when an event is generated by webclient.

      This table lists the event listener types, all of which inherit from webclient.WebclientEventListener:

      interface webclient.DocumentLoadListener Events relating to the loading of documents in this window
      interface webclient.ContainerListener Events relating to the the container of this BrowserControlCanvas
      interface webclient.DocumentListener Events happening in the currently loaded document
      interface webclient.JavaScriptListener Events relating to the loading of documents in this window.
      interface webclient.DOMListener Events relating to the loading of documents in this window.

      Listeners must be attached to each BrowserControlCanvas instance.  Multiple listeners can be attached to each BrowserControlCanvas.

      The following is a listing of event classes for each of the above event listener types, each of which inherit from java.util.EventObject:
       
       
      webclient.DocumentLoadEvent
       static int START_DOCUMENT_LOAD_EVENT_MASK notification before any connection established
       static int END_DOCUMENT_LOAD_EVENT_MASK notification after document loaded
       static int START_URL_LOAD_EVENT_MASK notification after DNS resolution and connection to server established
       static int END_URL_LOAD_EVENT_MASK notification that nsIURI finished loading
       static int PROGRESS_URL_LOAD_EVENT_MASK notification on progress of URL load
       static int STATUS_URL_LOAD_EVENT_MASK notification that status text available for URL being loaded
       static int UNKNOWN_CONTENT_EVENT_MASK notification when content of unknown type occurs
       static int FETCH_INTERRUPT_EVENT_MASK Called when a fetch is interrupted, as when the fetch requires authentication or cookies

      webclient.ContainerEvent  
       static int FOCUS_AVAILABLE_EVENT_MASK notification that the container will give up focus

      webclient.DocumentEvent  
       static int TITLE_CHANGE_EVENT_MASK notification that the container will give up focus
       static int STATUS_CHANGE_EVENT_MASK notification that the mouse has passed over the link, gives the URL information of that link

      webclient.JavaScriptEvent

      See http://developer.netscape.com/docs/manuals/js/client/jsref/handlers.htm  
       static int ABORT_EVENT_MASK
       static int BLUR_EVENT_MASK
       static int CHANGE_EVENT_MASK
       static int CLICK_EVENT_MASK
       static int DOUBLE_CLICK_EVENT_MASK
       static int DRAG_DROP_EVENT_MASK
       static int ERROR_EVENT_MASK
       Focus events are hanled with the java.awt.FocusListener interface and the associated FocusEvent class.
       Key events are hanled with the java.awt.KeyListener interface and the associated KeyEvent class.
       Mouse events are hanled with the java.awt.Mouse*Listener interface and associated events.
       static int MOVE_EVENT_MASK
       static int RESET_EVENT_MASK
       static int RESIZE_EVENT_MASK
       static int SELECT_EVENT_MASK
       static int SUBMIT_EVENT_MASK
       static int UNLOAD_EVENT_MASK

      webclient.DOMEvent

      See http://lxr.mozilla.org/mozilla/source/layout/events/src/nsDOMEvent.cpp  
       Mouse events are hanled with the java.awt.Mouse*Listener interface and associated events.
       Key events are hanled with the java.awt.KeyListener interface and the associated KeyEvent class.
       static int FOCUS_CONTENT_EVENT_MASK
       static int BLUR_CONTENT_EVENT_MASK
       static int PAGE_LOAD_EVENT_MASK
       static int IMAGE_LOAD_EVENT_MASK
       static int PAGE_UNLOAD_EVENT_MASK
       static int IMAGE_ABORT_EVENT_MASK
       static int IMAGE_ERROR_EVENT_MASK
       static int FORM_SUBMIT_EVENT_MASK
       static int FORM_RESET_EVENT_MASK
       static int FORM_CHANGE_EVENT_MASK
       static int FORM_SELECTED_EVENT_MASK
       static int PAINT_EVENT_MASK
       static int TEXT_EVENT_EVENT_MASK
       static int MENU_CREATE_EVENT_MASK
       static int MENU_DESTROY_EVENT_MASK
       static int MENU_ACTION_EVENT_MASK
       static int DRAGDROP_ENTER_EVENT_MASK
       static int DRAGDROP_OVER_EVENT_MASK
       static int DRAGDROP_EXIT_EVENT_MASK
       static int DRAGDROP_DROP_EVENT_MASK
       static int DRAGDROP_GESTURE_EVENT_MASK
       static int BUBBLING_PHASE
       static int CAPTURING_PHASE
       static int AT_TARGET
       DOMNode GetTarget()
       DOMNode GetCurrentNode()
       long GetEventPhase()
       void PreventBubble()
       void PreventCapture()
       void PreventDefault()

      Other areas that need to be addressed are the java console, and security.

Validation Criteria

    This section has not yet been written. The template text is here as a placeholder.

    This section describes the attributes of a successful implementation. This section should be useful for qualifying an implementation to ensure that it conforms to the spec.

    Performance Bounds

      This section rigorously defines the desired performance attributes of the software. For example: maximum runtime memory use, maximum installed disk space use, startup time bounds, responsiveness requirements, etc.

    Classes of Tests

      This section describes the kinds of test cases that can be used to verify the correctness of an implementation, particularly with respect to the above performance bounds.

    Special Considerations

      This section is used to describe any concerns specific to this software. Delete this section if there are no special considerations.

Appendices


Here is a checklist for verifying that your requirements specification
is complete:

The requirements specification should:

describe the flow and content of information

elaborate all software functions

describe all events that affect the system

uncover design constraints

show evidence and conclusions from research on prior projects that
addressed the same problem as is being addressed in the specification.
Specifically, the problems with each prior project should be listed.

specify performance constraints

serve as the basis for a Preliminary User's Manual.

describe the design principles that will be adhered to, for example,
design for maintainability

describe the benefits of a successful implementation

describe the environment in which the software is to run.

be a cognitive model, that is, it must be described in the user domain,
with user terms.

separate functionality from implementation

be useful for validating the correctness of an implementation

be tolerent of incompleteness and be augmentable

be modular and loosely coupled


[ latest version ]

Ed Burns
Last modified: Fri Oct 29 14:24:16 Pacific Daylight Time 1999
Copyright © 1998-1999 The Mozilla Organization.
Last modified October 29, 1999.