US20150095890A1 - Automated management of software requirements verification - Google Patents

Automated management of software requirements verification Download PDF

Info

Publication number
US20150095890A1
US20150095890A1 US14/568,026 US201414568026A US2015095890A1 US 20150095890 A1 US20150095890 A1 US 20150095890A1 US 201414568026 A US201414568026 A US 201414568026A US 2015095890 A1 US2015095890 A1 US 2015095890A1
Authority
US
United States
Prior art keywords
requirements
requirement
software
test case
project
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US14/568,026
Inventor
William Gryffyth StClair
Sumner Augustine StClair
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
LDRA Technology Inc
Original Assignee
LDRA Technology Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by LDRA Technology Inc filed Critical LDRA Technology Inc
Priority to US14/568,026 priority Critical patent/US20150095890A1/en
Publication of US20150095890A1 publication Critical patent/US20150095890A1/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Definitions

  • the present invention relates to management of software development requirements. More particularly, the present invention relates to automated techniques and tools for integration of distributed requirements traceability and software testing/verification.
  • RTM requirements traceability matrix
  • the RTM typically includes project-level, customer-defined requirements that specify how the software product should operate as well as low-level design constraints, but not code-level, verification requirements that specify how the software product should be verified.
  • techniques exist for manually testing source code written to implement the requirements and for verifying the requirements. What is needed, therefore, is a technique for integrating and automating the requirements traceability and testing/verification tasks of a distributed software development project, including a uniform user interface to help manage highly complex and technical software development projects.
  • the present invention supports highly distributed and asynchronous operations.
  • Exemplary embodiments of the present invention which utilize a central depository, are inherently centralized and can be managed by administrators.
  • Exemplary embodiments of the present invention link user workspaces and development artifacts in a dynamically managed project tree, thereby synthesizing the processes and ensuring their repeatability.
  • the users return the software development artifacts to central repository.
  • exemplary embodiments of the present invention establish and maintain demonstrable traceability. Accordingly, exemplary embodiments of the present invention can solve the problems with related art systems, in which the processes performed are consequently largely manual, error prone and inconsistent.
  • the present invention is not limited to or required to solve the problems in related art.
  • An exemplary method for electronically managing requirements for software development includes: establishing a software development project; defining requirements for the project based on requirements information captured from a requirements source; for each requirement, associating source code developed for the requirement with the project or assigning the requirement for development of source code; mapping procedures identified in the source code to the defined requirements for the project; and verifying the defined requirements for the project based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • An exemplary method for electronically managing requirements for software development using extensible markup language includes creating an XML thread for each of a plurality of requirements defined for a software development project. Each thread comprises a plurality of elements that describe properties of the thread and a unique identifier that enables traceability of the defined requirements for the project. The method also includes implementing XML wrappers to enable applications to interface with the XML threads.
  • the properties of each XML thread include a corresponding defined requirement for the project, procedures of source code for the project that are mapped to the corresponding defined requirement, and results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • An exemplary system for electronically managing requirements for software development across a network of users includes a projects module, a requirements module, a mapping module and a verification module.
  • the projects module is configured to establish a software development project.
  • the requirements module is configured to define requirements for the project based on requirements information captured from a requirements source. For each requirement, the projects module is configured to associate source code developed for the requirement with the project or assign the requirement for development of source code.
  • the mapping module is configured to map procedures identified in the source code to the defined requirements.
  • the verification module is configured to verify the defined requirements based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • An exemplary system for electronically managing requirements for software development across a network of users includes a project module configured to establish a software development project; a requirement module configured to define requirements for the project based on requirements information captured from a requirements source; a modeling module configured to include architectural artifacts and implementation artifacts; and a verification module configured to verify the defined requirements for the project based on results of one or more of tests in accordance to one or more verification rules.
  • the module links the defined requirements to architectural artifacts and implementation artifacts of the modeling module.
  • An exemplary method for electronically managing requirements for software development includes establishing a software development project; defining requirements for the project based on requirements information captured from a requirements source; establishing a modeling module that includes architectural artifacts and implementation artifacts; and verifying the defined requirements for the project based on results of one or more of tests in accordance to one or more verification rules.
  • the defined requirements are linked to respective architectural artifacts and implementation artifacts.
  • FIGS. 1A and 1B illustrate an exemplary environment in which a system for automatically managing software requirements verification can be implemented and an exemplary embodiment of an automated requirements verification tool, respectively;
  • FIG. 2 illustrates a process flowchart providing exemplary steps for a method of automatically managing software requirements verification
  • FIGS. 3A-3E illustrate an exemplary extensible markup language (XML) implementation of a system for automatically managing software requirements verification
  • FIGS. 4A-4J illustrate screen captures of an exemplary graphical user interface of a system for automatically managing software requirements verification.
  • FIG. 5 illustrates an example of selecting, creating, renaming or deleting a group view
  • FIG. 6 illustrates an example of editing rules for a given group
  • FIG. 7 illustrates an example of parsing based on types
  • FIG. 8 illustrates an example of requirements in an Microsoft(MS) Word file
  • FIGS. 9 and 10 illustrate examples of a type editor
  • FIG. 11 illustrates an example of ungrouped requirements and grouped requirements
  • FIG. 12 illustrates an example of a sibling requirement
  • FIG. 13 illustrates another example of a sibling requirement.
  • FIG. 1A illustrates an exemplary environment for implementing a system 100 for automated management of software requirements verification.
  • the system 100 can be employed in conjunction with a computer-based system, where the elements can be implemented in hardware, software, firmware, or combinations thereof.
  • system 100 includes a requirements information source 105 , a requirements capture tool 110 , an automated requirements verification tool 115 , a static analysis tool 120 , a unit/integration test tool 125 , a network 130 , and users 135 .
  • Software development projects e.g., a billing system for a hospital, an inventory tracking system for a store, an avionics display system, etc.
  • requirements e.g., a billing system for a hospital, an inventory tracking system for a store, an avionics display system, etc.
  • the requirements can specify how the software product should operate when it is implemented.
  • the requirements information source 105 shown in FIG. 1A , can represent any source of requirements information, including requirement management tools, e.g., Telelogic DOORS®, and IBM Rational RequisitePro®, spread sheet programs, e.g., Microsoft Excel®, word processing programs, e.g., MS Word®, among other sources of requirements information.
  • the requirements capture tool 110 can be implemented to capture the requirements information from the requirements information source 105 . This information may include requirement identifier and requirement description as well as test case identifier and test case description.
  • the requirements capture tool 110 can use natural language parsing to parse the requirements information.
  • a requirement capture tool such as the RegtifyTM tool from Geensys (on the web at geensys.com) employs such techniques to generate a RTM from requirements information.
  • Products such as LDRA TBreqTM, or customized hand-coded systems can be employed to implement the requirements capture tool 110 .
  • the parsing of requirements can be performed based on types, as described in more detail below in the subsection entitled “Parsing Based On Types View.”
  • the requirements information source might include an MS WordTM document that specifies, among other requirements, “the on-line grocery store shall maintain a customer account.”
  • the requirements capture tool 110 might capture from the text of the MS WordTM document, the requirement information “maintain account.”
  • the requirements information source might include a DOORSTM module that specifies, among other requirements, “the software must provide fault isolation for all fault types.”
  • the requirements capture tool 110 might capture from the text of the DOORSTM module, the requirement information “Isolate faults.”
  • a software modeling module 190 can be used with the requirement capture tool 110 .
  • the software modeling module 190 can be implemented by a software modeling tool, such as Telelogic RhapsodyTM, Mathworks SimulinkTM or National Instruments LabviewTM.
  • the requirements capture tool 110 links requirements to architectural artifacts and implementation artifacts in the software modeling tool 190 . These architectural and implementation artifacts are thereby implicitly mapped to the resulting source code that is produced by the modeling tool.
  • each requirement is associated with one or more software architectural model elements.
  • the model elements are propagated to the distributed verification modules for the purposes of implementation, testing and analysis.
  • a modeling tool or a software architectural model can be used to automatically generate source code in which the mapping between requirement and source code is made.
  • the requirements linked with the architectural and implementation artifacts are implicitly mapped to resulting source code produced by the modeling tool.
  • mapping of requirements to source code is performed using automated requirements verification tool 115 based on the implementation artifacts produced by the modeling tool.
  • the automated requirements verification tool 115 will be described below in detail.
  • the static analysis tool 120 can be implemented to analyze source code files, which have been written by software developers, to identify procedures in the source code and to assess compliance of the source code with project coding rules and quality metrics.
  • a “procedure” describes a portion of source code written to implement a requirement.
  • procedures might include functions in the C programming language and classes and member functions in the C++ programming language.
  • an exemplary source code file “MaintainAccount.c” for implementing the captured requirement “maintain account” might include the following lines of code:
  • the static analysis tool 120 might identify the following basic blocks of source code (blocks 4-6):
  • the static analysis tool 120 After analyzing the source code for compliance with project coding rules, the static analysis tool 120 might identify the following code for non-compliance (M) mandatory:
  • an exemplary source code file “CheckAvionicsDisplay.c” for implementing the captured requirement “maintain account” might include the following lines of code:
  • intCheckAvionicsDisplay( ) ⁇ // attempt to start modules. If a module AND its backup fail, // return a negative number indicating the failed module. // if (!BITestModule1( )) ⁇ if (!BackupModule1( )) return ⁇ 1; ⁇ if (!BITestModule2( )) ⁇ if (!BackupModule2( )) return ⁇ 2; ⁇ if (!BITestModule3( )) ⁇ if (!BackupModule3( )) return ⁇ 3; ⁇ // everything started up. Return 1 to indicate success. return 1; ⁇
  • the static analysis tool 120 might identify the following basic blocks of source code (blocks 1-7):
  • the static analysis tool 120 After analyzing the source code for compliance with project coding rules, the static analysis tool 120 might identify the following code for non-compliance (M) mandatory:
  • the static analysis tool 120 can be reapplied to instrument and measure code coverage in tests run externally.
  • the unit/integration test tool 125 can be implemented to test the source code against the requirements.
  • the unit/integration test tool 125 can run test cases defining inputs to portions of the source code and expected outputs, and generate results that describe code coverage.
  • the source code can be implemented as a plurality of functions. If a particular function is called and executed during unit/integration testing, then the function can be described as being “covered.” Thus, it is typically desirable to have a high percentage of the source code covered. Also, different levels of coverage can be tested during unit/integration testing, such as path coverage, statement coverage, branch coverage, and modified condition/decision coverage (MC/DC).
  • Automation and integration testing software products such as LDRA TBrunTM; Parasoft's (on the web at parasoft.com) C++ Test, C++ Test for Embedded Systems, Code Wizard and Jest with Test Case Sniffer; Vector Software's (on the web at vectorcast.com) VectorCAST/Ada, VectorCAST/C, VectorCAST RSP for Real-time Embedded Testing and VectorCAST/Cover; IBM Rational (www-306.ibm.com/software/rational/) Test RealTime; IPL (on the web at ipl.com) Adatest 95 and Cantata++; Free Software Foundation's (on the web at gnu.org) Cunit, CPPunit and Junit; and Testwell (on the web at testwell.fi) CTA++, C++ Test Aider, CTC++, Test Coverage Analyzer for C/C++, can be employed to implement the unit/integration test tool 125 .
  • an exemplary test case might test the procedures mapped to the requirement “maintain account,” such as float MaintainAccountFunction( ), against the requirement.
  • the coverage results of unit testing in this example might be represented as follows:
  • an exemplary test case might test the procedures mapped to the requirement “Isolate faults,” such as int CheckAvionicsDisplay( ), against the requirement.
  • the test case might specify that if the function BlTestModule3( ) is set to 1 and BackupModule3( ) returns 1.
  • the coverage results of unit testing in this example might be represented as follows:
  • the automated requirements verification tool 115 can be implemented to bridge the gap between the requirements capture tool 110 and the static analysis and unit/integration test tools 120 and 125 .
  • FIG. 1B illustrates an exemplary implementation of the automated requirements verification tool 115 that includes a requirements module 140 , a projects module 145 , a mapping & analysis module 150 , a verification module 155 , and a network interface module 160 .
  • the LDRA TBmanagerTM tool described herein in conjunction with FIGS. 4A-4J , can be employed to implement the automated requirements verification tool 115 .
  • the requirements module 140 can be configured to define requirements for the software development project based on the requirements information captured by the requirements capture tool 110 from the requirements information source 105 .
  • the captured requirements information can represent customer-defined, project-level requirements for the software development project, which are referred to herein as “high-level” requirements.
  • the captured requirement “maintain account” is an exemplary high-level requirement.
  • High-level requirements do not describe code-level, design requirements necessary for actually implementing the software.
  • the requirements module 140 can be configured to provide the option of defining additional requirements not captured by the requirements capture tool 110 .
  • the requirements module 140 can be used to define requirements that fulfill part of a high-level requirement, referred to herein as “low-level” requirements.
  • Low-level requirements can be defined to specify how a portion of the software should be implemented. For example, a low-level requirement might focus on a specific function, aim or goal.
  • a low-level requirement called “account_name” can be defined for the high-level requirement “maintain account” to establish a name for the account.
  • the avionics display system the low-level requirement, “enable named redundant system” is defined for the high-level requirement “Isolate faults” to ensure that only the redundant module identified by Built In Test is enabled.
  • the requirements module 140 can also be used to define requirements that are inferred or derived from high-level requirements or low-level requirements, referred to herein as “derived” requirements.
  • derived requirements may not be captured by the requirements capture tool 110 but can be subsequently created and managed by the automated requirements verification tool 115 .
  • a derived requirement called “cancel_account” can be defined for the high-level requirement “maintain account” to cancel a maintained account.
  • a derived requirement called “damage assessment” can be defined for the high-level requirement “Isolate faults” to facilitate recovery procedure notification.
  • the requirements module 140 can further be used to define requirements that are copies of a high-level, low-level or derived requirement, referred to herein as “sibling” requirements.
  • a sibling requirement can be created for the purposes of requirement diversification and task management (e.g., one of the users 135 might write source code to implement a low-level requirement, while another one of the users 135 might verify the implemented source code).
  • a sibling requirement can be distinguished by a unique identifier, although it is otherwise identical to the base high-level, low-level, or derived requirement of which it is a copy.
  • the requirements module 140 can be used to populate the RTM with the captured high-level requirements from the requirements information source 105 , as well as with additional low-level, derived, and sibling requirements to enable the automated requirements verification tool 115 to provide automated requirements traceability down to the source code level.
  • a sibling requirement can be called a verification task.
  • An additional sibling type, or verification task, is called an objective. Objectives are defined to assure conformance with process objectives or qualitative assessments such as requirement validation or proper planning and documentation.
  • a defect report is associated with defect report generation and resolution.
  • a defect report the obverse of a requirement, can be generated automatically by the users of the static analysis tool 120 or the unit/integration test tool 125 .
  • the assignment of defect report spawns a sibling or verification task whose sole purpose is the tracking of defect report to closure.
  • the projects module 145 can be configured to establish a project.
  • a “project” established by the projects module 145 describes an electronic realization of a real-world software development project in that the established project can provide an electronic mechanism for organizing and automating many aspects of the real-world project, including, among other aspects, defining the requirements for the project, assigning users to work on the project, tracing the implementation of the requirements, analyzing and verifying source code files developed to implement the requirements, and tracking defects.
  • the established project can include associated requirements information and source code files written by developers to implement the requirements.
  • source code previously developed for a requirement can be associated with the project. If source code is not already developed for the requirement, the projects module 145 can facilitate requirements-based development in which assigning the requirement to a user is a precursor to source code development.
  • the projects module 145 can be configured to display a hierarchical representation of the associated requirements and source code files for the established project and can provide information on the status of a requirement (e.g., whether the requirement is verified or unverified, the users assigned to work on the requirement, etc.).
  • FIG. 4C described herein in conjunction with an exemplary user interface, illustrates a Project Tree 412 for the on-line grocery store example showing a hierarchy of requirements and source code files.
  • the projects module 145 can enable project managers to view a requirement-by-requirement breakdown of which requirements' implementations have met coding convention, code coverage levels, and functional testing criteria. In this way, the projects module 145 can provide an integrated requirements traceability and verification matrix.
  • the projects module 145 can generate a status report summarizing the requirements information for a particular user that can be updated as the project progresses to include code coverage results after unit testing, as described herein, among other information.
  • the projects module 145 can be configured to add the users 135 to the project.
  • the users 135 can include any persons working on the project, such as project managers, software developers, test engineers, etc.
  • the projects module 145 can create “roles” for the project based on groups of the users 135 , who are designated to perform similar actions, and to assign the created roles to the users 135 .
  • a developer role, a test engineer role, an independent verification and validation (IVV) role, and a quality assurance (QA) role can be created, among others.
  • a project manager role can be created so that a user assigned the role of project manager can exercise control over virtually all aspects of the requirements verification process and can create other roles, as well as assign roles and requirements to the users 135 .
  • permissions can be assigned to the roles to define actions that users assigned to the role can perform.
  • exemplary permissions include, among others, a create low-level requirements permission, a create derived requirements permission, a make sub-projects permission (e.g., where a sub-project can be established when a requirement is assigned to a user, as described herein), an edit thread properties permission (e.g., where an XML thread can be created for each requirement, as described herein), and a manual verification permission (e.g., to permit a user to access the verification module 155 to review results of the unit testing, code coverage and static analysis as described herein).
  • the projects module 145 can also be configured to enable a user with the necessary permissions to assign requirements (i.e., the high-level, low-level, derived, and sibling requirements) defined by the requirements module 140 to the users 135 .
  • requirements i.e., the high-level, low-level, derived, and sibling requirements
  • assignment of a requirement to a user can establish a corresponding sub-project.
  • a “sub-project,” as referred to herein, describes a workspace that the user can access to perform designated tasks associated with their assigned role (e.g., writing source code, analyzing source code files, testing source code files, etc.).
  • the projects module 145 can regulate the operational status of a sub-project to require that users “check-out” a sub-project from the projects module 145 before performing any tasks on the sub-project and “check-in” the sub-project to the projects module 145 upon completion of the task(s). That is, to check-out a sub-project, users can make a copy of their sub-project file for the purpose of performing tasks remotely (e.g., on their own computers) and, to check-in the sub-project, users can copy the modified contents of their sub-project file back into a directory tree for the established project.
  • the projects module 145 can maintain integrity of the RTM by synchronizing the sub-projects with the current state of the RTM each time the users check-in and check-out their sub-projects.
  • a create sub-projects permission can be assigned to enable a user to update sub-projects via the projects module 145 .
  • affected sub-projects should be updated when their corresponding requirements are modified (e.g., due to the addition or deletion of a user).
  • the network interface module 160 can be configured to enable global distribution of the project and provide integrated processes over the communications network 130 (e.g., a LAN, WAN, the Internet, etc.).
  • the network interface module 160 can enable the users 135 to check-in and check-out their sub-projects from remote locations.
  • Security measures can be implemented, such as establishing a secure connection and requiring the users 135 to logon and supply a password.
  • verification status reports can be made globally available.
  • the network interface module 160 can be used to perform synchronous or asynchronous operations and to effect a globally-based dynamically updated requirements matrix (both traceability and verification matrix).
  • the mapping & analysis module 150 can be configured to invoke the static analysis tool 120 .
  • the mapping & analysis module 150 can invoke the static analysis tool 120 to map procedures identified in source code to the defined requirements for the project.
  • the procedures float MaintainAccountFunction( ), long GetSessionAccountNumber( ), float GetAverageAccountBalance(long accntNum), float GetAccountBalance(long accntNum) void FatalError(const char*msg), void UserMessage(const char*msg) identified in the exemplary source code file “MaintainAccount.c” can be mapped to the high-level requirement “maintain account.”
  • mapping & analysis module 150 can enable a user to verify a requirement by identifying an analysis requirement verification method and/or a test requirement verification method.
  • the mapping & analysis module 150 can be used to invoke the static analysis tool 120 to provide integrated analysis capabilities, including analyzing the mapped procedures against project coding rules and quality metrics.
  • the mapping & analysis module 150 can be used to invoke the unit/integration test tool 125 to test the mapped procedures against the requirements, as described herein, by running test cases and generating results that describe code coverage.
  • mapping & analysis module 150 can be used to instrument code that will be executed externally and whose execution results (i.e., code coverage results) can subsequently be returned to the mapping & analysis module 150 for the purpose of post-mortem code coverage analysis.
  • the verification module 155 can be configured to verify the defined requirements based on the results of analyses performed on the mapped procedures by the static analysis tool 120 , as well as results of the unit testing performed on the mapped procedures by the unit/integration test tool 125 .
  • a user with the necessary permission can use the verification module 155 to select a requirement and view the expected code coverage and the achieved code coverage for the selected requirement (e.g., as percentages of the mapped procedures achieving a desired coverage). If the user is satisfied with the coverage achieved for the selected requirement, the user can maintain the current status of the selected requirement as verified.
  • the user can change the current status of the selected requirement to unverified. Because un-verifying a requirement modifies that requirement thread, as described herein with respect to the exemplary XML implementation, the user should subsequently update any sub-projects associated with the requirement.
  • the verification module 155 can also be configured to create groups under a user, and associate requirements with respective groups. Groups have verification rules assigned to them, such that when a requirement is assigned to a group, a sibling requirement for each verification rule is generated for that (base) requirement. With respect to test verification rules, a sibling or verification task is created for each test case associated with the base requirement. All requirements can be ungrouped requirements initially. Requirements can then be associated with one or more groups.
  • Verification rules specify what a verification task that must be completed before the requirement can be considered verified in this exemplary embodiments. What a requirement must satisfy is determined by the verification group that the requirement is in. Verification rules specify not only what verification task must be done; they also specify who should do them. A verification rule can specify that the requirement pass Code Review, and can further specify that Code Review be performed by a certain user or a user of a certain role (e.g., “Tester” or “QA”). Rules may be sequenced, which forces them to be performed in the order listed in the verification group.
  • a quality model can set a standard via which the quality of software for a given project can be measure and visualized.
  • a quality model is enforced by the code review and quality review verification tasks.
  • the code review standards can be defined in a pair of files, a report file ( ⁇ language>report.dat) and a penalty file ( ⁇ language>pen.dat).
  • the report file contains the complete set of predefined coding rules. This set of rules can be extended to accommodate a given project. Subsets of the rule set, as defined by published coding standards, are predefined so the user may apply those standards without having intimate knowledge of details of the standard. By viewing the report file, one can see the mapping of these standards to rules and their enforcement.
  • the penalty file can be a legacy mechanism for configuring the code review.
  • the quality review standards can be defined in ‘metpen.dat’.
  • This file contains a series of analysis measurements which are paired with tolerance thresholds. For instance, cyclomatic complexity measurements, code complexity measurements, unreachable lines measurements, comment-related ratios measurements. If the complexity exceeds a certain preset threshold, the quality review report will flag it accordingly.
  • the ‘metpen.dat’ file may be customized to meet a project's needs.
  • the selection of different quality models can be achieved via combinations of verification rules assigned to groups. When sibling requirements are invoked for code or quality review, the appropriate quality model is applied for testing.
  • a sibling (e.g. verification task) is generated for every verification rule that the base requirement must satisfy. For example, if a requirement's verification rule stipulates that it pass code review, then a sibling is made, and if the sibling passes code review, then the requirement is considered as passing code review.
  • the automated requirements verification tool 115 can be employed in a software development project to enable automated integration of requirements-based development and verification processes and provide global access to a dynamically-updated traceability and verification requirements matrix to all members of a project team, including management.
  • the automated requirements verification tool 115 can be implemented using the extensible markup language (XML).
  • a triangulation of the test verification process In order to automate and make a repeatable process of requirements traceability, a triangulation of the test verification process must be supported.
  • This triangulation includes three vectors: the mapped requirement (a static association including a procedure, an aggregation of procedures, a class or any implementation artifact), the structural coverage (a dynamic metric of test case execution) and the test case (the functionality to be exercised).
  • the realization of requirement traceability is greatly complicated by software programming abstractions such as overloading, multiple inheritance, generic parameterizations and dynamic dispatch tables.
  • the present invention achieves this traceability by integrating its static and dynamic vectors as dictated by the required functionality.
  • the traceability facilitated by the invention, including the use of the static analysis tool 120 is extended to instances of the software and its run time artifacts.
  • the test case (or use case) must be explicitly mapped as a predicate for any test-based verification task to be performed.
  • FIG. 2 illustrates exemplary steps for a process 200 for electronically managing requirements for software development. Not all of the steps of FIG. 2 have to occur in the order shown, as will be apparent to persons skilled in the art based on the teachings herein. Other operational and structural embodiments will be apparent to persons skilled in the art based on the following discussion. These steps are described in detail below.
  • step 205 a software development project is established.
  • the projects module 145 described in conjunction with FIG. 1B , can be employed to implement step 205 .
  • step 205 includes identifying users for the project.
  • step 205 includes creating a plurality of roles for the project based on groups of the users who are designated to perform similar actions. For example, a project manager role can be created having permission to exercise control over the process 200 , and at least one additional role can be created, such as a developer role, a test engineer role, an independent verification and validation role, and a quality assurance role.
  • step 205 can include assigning permissions to the roles to define the actions that the users can perform, such as a create low-level requirements permission, a create derived requirements permission, a make sub-projects permission, an edit thread properties permission, and a manual verification permission, and step 205 can also include selecting roles for the users.
  • step 210 requirements for the project are defined based on requirements information captured from a requirements source.
  • the requirements module 140 described in conjunction with FIG. 1B , can be employed to implement step 210 .
  • step 210 includes capturing high-level requirements for the project based on the requirements information, and defining at least one additional requirement for the project based on the requirements information.
  • the additional requirement(s) can define a low-level requirement that fulfills part of a captured and allocated high-level requirement for the project, a derived requirement that is inferred from a defined high-level requirement or low-level requirement for the project, and/or a sibling requirement that is a copy of a defined high-level, low-level, or derived requirement for the project.
  • Additional requirements information can include test cases associated with any given requirement. In the absence of test cases defined as part of the original requirements information, the user must enter a test case before performing a test-based verification task.
  • step 212 for each requirement, source code already developed for the requirement is associated with the project.
  • the projects module 145 described in conjunction with FIG. 1B , can be employed to implement step 212 .
  • step 212 can facilitate requirements-based development in which requirements assignment is a precursor to source code implementation. In this embodiment, the association of source code with a project does not occur until step 215 .
  • corresponding sub-projects can be established when assigning the defined requirements for the project to the users.
  • the process 200 can include the additional steps of generating a status report for a user summarizing the defined requirements assigned to the user, and updating the status report during the project to include corresponding results of the analyses, code coverage and the unit testing.
  • step 215 procedures identified in the source code are mapped to the defined requirements for the project.
  • the mapping & analysis module 150 described in conjunction with FIG. 1B , can be employed to implement step 215 .
  • step 215 includes invoking a static analysis tool, such as the static analysis tool 120 described in conjunction with FIG. 1A , to analyze the source code to identify the procedures in the source code.
  • the static analysis tool can also be invoked to perform analyses on the source code, including applying project coding rules and quality metrics to the associated source code files.
  • this static analysis tool 120 can be used to instrument and measure code coverage in tests run externally.
  • step 215 includes invoking a unit test tool, such as the unit/integration test tool 125 described in conjunction with FIG. 1A , to run test cases on the mapped procedures.
  • step 220 the defined requirements for the project are verified based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • the verification module 155 described in conjunction with FIG. 1B , can be employed to implement step 220 .
  • step 220 includes verifying the defined requirements for the project if results of the analyses indicate conformance of the source code to the project coding rules and the quality metrics.
  • the non-conformances can be tracked based on the results of the analyses, and the non-conformances, including providing information regarding disposition of the non-conformances, can be reported.
  • step 220 includes verifying the defined requirements for the project if the test cases generate desired results.
  • step 220 includes the additional steps of providing a status of the defined requirements for the project indicating whether each of the defined requirements is verified or unverified, and generating an integrated requirements traceability and verification matrix to dynamically track implementation of the defined requirements and the status of the defined requirements.
  • sub-projects for the project can be established by assigning the defined requirements for the project to users working on the project, and the sub-projects can be synchronized with the integrated requirements traceability and verification matrix.
  • the process 200 further includes the step of enabling the users to access the project via a communications network.
  • the network interface module 160 described in conjunction with FIG. 1B , can be employed to implement the networking step.
  • the integrity of the requirements traceability and verification matrix can be maintained by monitoring when the users check-out and check-in their corresponding sub-projects over the communications network.
  • the process 200 can support a unit test workflow scenario that includes requirements traceability and test verification through high-level, low-level and derived requirements and facilitates the mapping of these requirements with source code procedures or methods. The mapped requirements can subsequently be made available to a developer or a tester for the purposes of test specification creation and test verification. The process 200 can also facilitate the creation of test cases from these test specifications.
  • the process 200 can automatically trace the results of this unit test scenario back to the requirements sources to ensure requirements traceability matrix (RTM) integrity and user workspace (e.g., project/subproject) security and flexibility in its deployment.
  • RTM requirements traceability matrix
  • a user can operate on a “checked-in” sub-project, where all tasks performed by the user can be dynamically tracked and updates to the RTM can be synchronized, or the user can operate on a “checked-out” sub-project, where verification tasks can be performed at any location and results can be subsequently synchronized with the current RTM when the user returns to operate on a checked-in sub-project.
  • the automated requirements verification tool 115 and the automated requirements management process 200 can be employed in a software development project to bridge the gap between high-level requirement traceability tools and low-level code testing tools and, in one embodiment, can be implemented using XML constructs.
  • requirements management data can persist in an XML construct called a “thread,” so that each requirement that is tracked has one corresponding XML thread.
  • a thread can include metadata describing the requirement and its relationship to other requirements 310 , as well as prototype information regarding procedures in source code files that are mapped to the requirement 315 and analysis and test result information 320 pertaining to verification of the requirement. All prototype information can be kept in the thread itself, including the code coverage information using a ⁇ Prototype> ⁇ /Prototype> XML block.
  • FIG. 3C illustrates a project schematic 340 and shows that a thread XML file 345 can be independent from project XML files 350 , 355 and 360 that can be used to create a cohesive project and to present the thread information to the users in a useful and intuitive manner.
  • the thread definition itself can specify a minimum number and arrangement of fields (also called “elements” when speaking within an XML specific context), which must exist for the data aggregation to be called a “thread” proper. Whether the information put into those fields has any correlation with real-world data is beyond the scope of the thread definition.
  • FIG. 3D illustrates an exemplary representation of a thread in memory.
  • the CXMLWrapper class is based on the CGenericXMLWrapper XML wrapper class, which can be implemented to convert an XML file into a hierarchical tree of objects called ReqDataContainers 365 .
  • a ReqDataContainer 365 can maintain hierarchical information about itself (e.g., who its parents and children are) and about its own data (e.g., name, unique reference identifier, and data).
  • the CGenericXMLWrapper class can create one ReqDataContainer for each element encountered while reading an XML file. The element's name and unique reference number can be stored, in addition to any data.
  • Hierarchical information can be contextually determined based on relevant factors such as, whether the element has data and the parent element, among other factors.
  • each ReqDataContainer can be analogous to a node with pointers to its siblings in the tree.
  • a reference number can be assigned to the element, beginning at a reasonably high “unknown floor.”
  • a program wishing to retrieve the element's data must know the value of the unknown floor ahead of time, which can be defined in the XMLWrapper.h class, in addition to other factors regarding how many unreferenced elements are being read and have been read.
  • it can be more effective to define a thread tree by using a unique reference number (or other unique identifier) for each of the elements of a thread instead of relying on automatic assignment of reference numbers.
  • Automatic assignment of reference numbers can be effective, however, to prevent a situation where an entire thread (or _trace.xml file) cannot be accessed because a faulty portion of a program did not assign a reference number to one of its new elements.
  • a calling program can have complete freedom to modify the ReqDataContainer tree. For example, a calling program can add or remove ReqDataContainers and modify data in existing ReqDataContainers. After a calling program has finished modifying a ReqDataContainer tree, it can call an XML method of the wrapper class called WriteAsXML( ) to have the wrapper class convert the ReqDataContainer tree back into an XML file and write the XML file to a storage device.
  • WriteAsXML( ) an XML method of the wrapper class convert the ReqDataContainer tree back into an XML file and write the XML file to a storage device.
  • ReqDataContainers 365 can be designed to mimic XML as much as possible. ReqDataContainers need not be categorized based on whether they have data, children, siblings, or any other contextual property. In practice, however, some distinctions among the ReqDataContainers should be implemented so that the data can be organized accordingly.
  • ReqDataContainer tree implementation can permit different programs to add their own data to the thread without interfering with each other.
  • defect tracking information and function prototype XML blocks can be added to a thread's “scope” without obfuscating its primary payload, the individual requirement.
  • These are examples of data that is added to threads as individual traceability needs arise (in this case, the extension of verification down to individual functions), and in this way, the approach of encapsulating all data related to the requirement and its traceability information into a single thread can enable flexibility and freedom for user programs.
  • the ReqDataContainer tree implementation can also define a standard way of encoding data. In this way, programs which want to take advantage of features offered by other programs need only understand the XML block convention used in order to build their own functionality around it.
  • classes called RDCPtr, iRDCPtr, and CWrapperLibrary can be implemented to (1) organize iterated XML blocks into “stacks” of “vertical data” to avoid the need for contact with a parent node, (2) enable sequential accessing of siblings without the need for communicating with the parent node, and (3) provide a one-to-one correlation between a ReqDataContainer and a single element of a stored XML file.
  • a pseudocode representation of a function which gets prototype information from a thread without using the RDCPtr class can be expressed as follows:
  • a pseudocode representation of a function which gets prototype information from a thread using the RDCPtr class can be expressed as follows:
  • this “list” of prototypes that a thread possesses can be passed around, in its entirety, by passing only the RDCPtr of the first prototype because the first prototype in the list knows the location of the other prototypes.
  • this “list” of prototypes that a thread possesses can be passed around, in its entirety, by passing only the RDCPtr of the first prototype because the first prototype in the list knows the location of the other prototypes.
  • only one RDCPtr object need be passed around for every function to have access to all the prototypes.
  • the wrapper class only has to service one application call (i.e., the call which gets the first prototype) and will not need to service other calls to get any additional prototype information.
  • FIGS. 3D and 3E iterated blocks of XML data can be represented as “vertical” data, as shown in FIGS. 3D and 3E .
  • the first prototype can be treated like any other block of XML, and subsequently read prototype blocks can be “stacked” on top of the first prototype.
  • the RDCPtr class embodies this concept of stacks of ReqDataContainers.
  • RDCPtrs can enable the unique “vertical data” stacking mechanism shown in FIGS. 3D and 3E . Because of their usefulness as smart pointers, RDCPtrs can provide exclusive means of accessing ReqDataContainers. Even if an element has no vertical data (i.e., there is only one iteration of the element), it can still be returned as an RDCPtr. Thus, functions do not need to be overwritten to accept both ReqDataContainers and RDCPtrs, all functions can simply accept an RDCPtr.
  • the entire calling program can have random or sequential access to the entire vertical stack of data. This feature can enable easier, cleaner, and more concise code implementation. Furthermore, by using RDCPtrs, the calling program need not create or delete ReqDataContainers into or from memory, which can be all handled automatically, as described herein.
  • the iRDCPtr class can provide a mechanism for organizing ReqDataContainers “left and right” into lists.
  • the iRDCPtr class is not used by calling programs but can be used by the backend (e.g., the wrappers used to interface with the XML files) to enable sequential searching through siblings and writing recursive algorithms to search through the ReqDataContainer tree (ReqDataContainers do not keep track of their “siblings” in the ReqDataContainer tree).
  • Calling programs can access a child of a ReqDataContainers by index (i.e., by unique reference identifier) and cannot sequentially search through the children of a ReqDataContainer to find the child it needs but, for internal processes, the CGenericXMLWrapper can use iRDCPtrs to sequentially search through the children of a ReqDataContainer.
  • Calling programs should use CWrapperLibrary class to get a wrapper for an XML file.
  • the automated requirements verification tool 115 and its backend can use a class to manage allocation and deletion of resources.
  • the CXMLWrapper class can be used to create the ReqDataContainers, RDCPtrs, and iRDCPtrs needed.
  • a calling program can obtain RDCPtrs upon request, and the entire XML file, as represented by the CXMLWrapper, can be created and deleted with the CXMLWrapper.
  • the CXMLWrapper in turn, can register all objects (e.g., ReqDataContainers) it creates with a GlobalRDCPool object, which can be emptied by the calling program when it exits.
  • the automated requirements Decisioniton tool 115 and its backend can use a class called CWrapperLibrary to manage CXMLWrappers in the same way that the GlobalRDCPool class manages RDCPtrs.
  • CWrapperLibrary a calling program need not create a wrapper at all. Rather, the calling program can request the ReqDataContainer tree for an XML file. If the ReqDataContainer tree has not yet been built for the requested XML file, the CWrapperLibrary class can be used to create a wrapper, have the wrapper build the ReqDataContainer tree, and pass back to the calling program a pointer to the created wrapper.
  • CWrapperLibrary can organize all the CGenericXMLWrappers that a calling program is using. For example, if the calling program requests a wrapper that corresponds to “file1_trace.xml,” CXMLWrapper can search a library of already-built wrappers for a CXMLWrapper object for file1_trace.xml.
  • CXMLWrapper can simply pass a pointer to the already-built CXMLWrapper back to the calling program, otherwise CWrapperLibrary can make a new CXMLWrapper for file1_trace.xml and pass a pointer to the new object back to the calling program.
  • CXMLWrapper hides allocation of memory from the calling program, so the calling program is not responsible for freeing the object that CWrapperLibrary passes back. Also, when a calling program uses CWrapperLibrary, all parts of the program can be certain to be working on the same ReqDataContainer tree (a ReqDataContainer is a single element in an XML file, so a tree of ReqDataContainers represents the entire XML file) and the calling program does not have to implement synchronization across the program.
  • a calling program will call the GetFile( )method to retrieve the RDCPtr for the file's root element and will not make any further calls to the wrapper.
  • the calling program does not delete the created wrapper.
  • the EmptyWrappers( )method (which also writes all opened wrappers to a storage device) can be used to delete wrappers vicariously.
  • the CWrapperLibrary class can be used to ensure that all parts of the automated requirements management program are working on the same ReqDataContainer tree and to facilitate memory management.
  • the memory management classes when used together, can result in an unbroken persistence of RDCPtrs (i.e., the RDCPtr a calling program receives at the beginning of a session is the same RDCPtr the calling program would receive later in the session) to enable parts of the calling program, which use the same GlobalRDCPool and CWrapperLibrary, to pass RDCPtrs around. Therefore, when the calling program decides to ask the memory management classes to empty themselves can be an important decision. For reasons of memory usage, under certain situations, it may even be desirable to force-empty wrappers and RDCPtrs. This memory management technique can result in an increase in memory usage for the program's lifecycle.
  • the threads can be converted into a SQL format for storage and access over a global network.
  • This process can be supported by a web service that accepts upload requests from the automated requirements verification tool 115 .
  • This same web service can generate traceability and verification reports upon request from web users. Additionally this web service can accommodate download requests to the automated requirements verification tool 115 . As a consequence of these web services, global project synchronization can be facilitated.
  • FIGS. 4A-4J illustrate an exemplary implementation of a graphical user interface (GUI) for a software requirements management tool TBmanagerTM developed by LDRATM TBmanagerTM can be employed to facilitate management and allocation of software requirements for development, testing and verification purposes.
  • GUI graphical user interface
  • FIGS. 4A-4J illustrate an exemplary implementation of a graphical user interface (GUI) for a software requirements management tool TBmanagerTM developed by LDRATM TBmanagerTM can be employed to facilitate management and allocation of software requirements for development, testing and verification purposes.
  • GUI graphical user interface
  • a project file (e.g., having a “.tbp” extension) can first be created using a requirements capture tool, such as TBreqTM, developed by GeensysTM, which can capture requirements information for a software development project from sources of requirements information such as Telelogic DOORS® or IBM Rational RequisitePro®, MS Excel®, MS Word®, among other sources of requirements information.
  • a requirements capture tool such as TBreqTM, developed by GeensysTM, which can capture requirements information for a software development project from sources of requirements information such as Telelogic DOORS® or IBM Rational RequisitePro®, MS Excel®, MS Word®, among other sources of requirements information.
  • FIG. 4A illustrates an exemplary GUI 401 for defining roles for the project during an initial set-up.
  • Roles can be used to group together users who perform similar or related tasks; for example, a role can be created and applied to all of the developers of a project. Each user can be assigned one role. One user can assume the role of project manager.
  • the project manager role can exercise control over every aspect of the requirements management process and can be responsible for creating roles and users and for delegating requirements. For example, the project manager can create and assign a role to grant other users the ability to create roles and users and to delegate requirements.
  • a New Role field 402 of GUI 401 can be used to enter the name of a new role, and the new role can be added by pressing the Add button.
  • Exemplary roles 403 can include a developer role, a GUI designer role, an independent verification and validation (IVV) role, a quality assurance (QA) role, and a test engineer role, among others.
  • the Remove Selected button can be used to remove an added role
  • the Import Roles From File button can be selected to import roles that have been defined in a text file or in another project.
  • Permissions can be assigned to the roles to enable different levels of functionality for corresponding users, such as by defining the requirements information that the users can access and the actions that they can perform. As shown in FIG. 4A , the Assign Permissions button can be used to assign permissions to the roles 403 .
  • Exemplary permissions 404 can include, among others, “Create Low Level (LL) Reqs,” which can be assigned to a role to enable corresponding users to create low-level requirements, “Create Derived (DV) Reqs,” which can be assigned to a role to enable corresponding users to create derived requirements, “Make SubProjects,” which can enable corresponding users to assign users to requirements for the project, “Edit Thread Properties,” which can be assigned to a role to enable corresponding users to edit available requirement attributes via a Requirements View described herein, and “Manual Verification,” which can be assigned to a role to enable corresponding users to access to a Verification View described herein.
  • LL Low Level
  • DV Dynamic Reqs
  • Roles can be used to diversify allocated requirements among users. In this way, the same requirement (via sibling requirements) can be assigned to two or more users of differing roles, while maintaining traceability of development and verification tasks. For example, the same requirement can be assigned to a developer for coding, QA for testing and IVV for independent validation and verification.
  • FIG. 4B illustrates an exemplary GUI 405 for defining users for the project.
  • a New User field 406 can be used to enter the name of the new user and to select a corresponding role for the new user, and the new user can be added by pressing the Add button.
  • the added users can be displayed in a Users field 407 .
  • a Remove Selected button can be used to remove an added user from the project, and an Import Roles From File button can be selected to import users previously defined in another file.
  • Adding news users and roles after setup can be performed safely, when followed by a sub-project update, as described herein.
  • users and roles should not be deleted. For example, deleting a role can result in a user losing necessary permission to work on the project and deleting a user can result in a requirement being unassigned. Accordingly, care should be taken when deleting roles and users.
  • Requirement documents can be imported and parsed.
  • the parsing can be performed based on types.
  • a parsing schema must be described in a Types file.
  • many types files can be predefined, covering commonly used tools such as diagramming software, e.g., Visio 702 ; requirement management tools, e.g., DOORS 704 and 706 , and Rational Requisite Pro 708 ; word processing programs, e.g., MS Word 710 ; spreadsheet programs, e.g., Excel 712 , and authoring and publishing software, e.g., Framemaker 714 .
  • the types file can be a converter so that it can understood how requirements are described in the reference document.
  • FIG. 8 illustrates an example of requirements in an MS Word file. As illustrated in FIG. 8 , appropriate styles must be applied to the requirement ID 802 and requirement text 804 so that the document can be parsed as the author intends.
  • FIGS. 9 and 10 illustrate examples of a type editor.
  • the MS Word style used in the document, including the requirement ID 802 and requirement text 804 must be described in the type editor fields 902 and 1002 , so that the MS Word file can be parsed correctly.
  • FIG. 5 illustrates an example of selecting, creating, renaming or deleting a group view in a “Verification Groups” dialog 500 .
  • a verification group is created by clicking the “New Group” button 502 .
  • a dialog box “Enter Group Information” 518 appears when the “New Group” button 502 is clicked.
  • the name of the verification group can be entered in the name text field 514 .
  • the group name “High Priority” is entered in the name text field 514 .
  • description “Must be implemented in the current spiral” is entered in the description text field 516 .
  • the “OK” button 520 is clicked, a verification group is created.
  • FIG. 6 illustrates an example of editing rules for a given group in an “Edit Rules” dialog 600 .
  • the rules specify that the requirement must satisfy “Unit Testing” and must be completed by “The Requirement's Assignee” in text fields 602 and 604 .
  • the verification rules available for selection can include: Code Review, Quality Review, System Test, Unit Testing, Sub-System Test and Integration Test.
  • the “OK” button 606 When the “OK” button 606 is clicked, the new rules are created under the “High Priority” group.
  • the “ ⁇ Group” 608 button can be used to return to the “Verification Groups” dialog 500 .
  • the “Save and Use” button 612 can be used to save the rules for future use.
  • the “Use Existing” button 614 can be used to select saved rules for a given group.
  • the “Rename Group” button 504 can be used to rename the group, once created.
  • the “Delete Group” button 506 can be used to delete a group.
  • the “Save and Use” button 510 can be used to save the group information setting for future use.
  • the “Use Existing” button 512 can be used to select saved group information setting for a given group.
  • FIG. 11 illustrates an example of ungrouped requirements and grouped requirements.
  • REQ 1 1102 and REQ 2 1104 are ungrouped requirements.
  • REQ 3 1106 and REQ 4 1108 are included under the group named “Static Testing.”
  • FIG. 12 illustrates an example of a sibling requirement view.
  • two sibling requirements 1202 and 1204 correspond with the requirement 1206 .
  • Sibling requirement 1202 is for code review
  • sibling requirement 1204 is for quality review.
  • Verification can be driving by the set of sibling requirements, and each requires an individual test run to be executed. A requirement is verified only when all sibling requirement corresponding to the requirement have been verified.
  • FIG. 13 illustrates another example of a sibling requirement view.
  • sibling requirement 1306 is under the group named “Static Testing” 1304 associated with a developer, named “Sam Brown” 1302 .
  • the sibling requirement 1306 indicates that the verification task is code review.
  • the verification status 1308 of the sibling requirement 1306 is “Passed.”
  • source files named CashRegister.cpp and Backbeat.cpp 1310 and 1312 are associated with the sibling requirement 1306 .
  • the GUI can have a tabbed format to provide users with different views (e.g., Project, Verification, Define Requirement, Requirement Information, Assign Users, Map Procedures, and Procedures) that can be selected and actions that can be performed based on their assigned roles.
  • FIG. 4C illustrates a GUI 408 that can be displayed when the Project View tab is selected.
  • the project GUI 408 can display all the requirements assigned to and by the user (e.g., requirements in bold type can represent those assigned to the user and requirements not in bold type can represent those that the user has assigned).
  • the project GUI 408 includes a Current Requirement drop-down menu 409 , which can be used to select and display a particular requirement for the project.
  • the GUI 408 also includes buttons, such as an Open Project button 410 a , which can be used to select a project or subproject file for loading, an Update Sub-Projects button 410 b , which can be selected to update/synchronize all currently checked-in sub-projects with recent modifications to the requirements for the project, a Status Report button 410 c , which can be selected to display a status report based on the current requirements for the project, an Add Source button 410 d , which can be selected to add/upload a source file of code to the current project, a Remove Source button 410 e , which can be selected to remove a currently selected source code file from the current project, a Unit Test button 410 f , which can be selected to launch an external tool for unit testing (e.g., LDRA TestbedTM and TBrunTM), and a Setup Wizard
  • the project GUI 408 can also display a Project Tree 412 to show the requirements that are assigned to the user and any source code files added to the project.
  • the Project Tree 412 can display each requirement by number, name, reference identifier and type, where different icons can be used to represent different types of requirements. Additionally, an “X” symbol can be used over a requirements icon to indicate that the corresponding requirement is unverified. To view more information about a particular requirement, the user can select the Requirement Information tab, as described herein.
  • Updating sub-projects can be performed to distribute modifications to requirements of the project to affected sub-projects.
  • users should first check-in their sub-projects. Then, after modifying the requirement (e.g., re-assigning the requirement, un-verifying the requirement, etc.), the Update Sub-Projects button 410 b can be selected to disseminate the modification to all of the affected checked-in sub-projects so that when the users subsequently check-out their sub-projects, they can access the modification.
  • a user can generate a status report to display the current status of all requirements associated with the user by selecting the Status Report button 410 c .
  • the status report can provide a summary of the requirements assigned to or by the user and can display detailed requirement attributes such as, requirement name, requirement number, requirement document, requirement body, user assigned to the requirement, and the role of the assigned user.
  • the status report can be updated to include a table of mapped procedures for each requirement.
  • the table can display detailed attributes of the mapped procedures, such as the procedure name, the name and location of the source code file, the path coverage achieved, the branch decision coverage achieved, the MC/DC coverage achieved, and the statement coverage achieved.
  • the achieved coverage fields in the table can remain empty until unit testing of the mapped procedure has been performed, as described herein. After unit testing is performed, these fields can be updated to show the coverage achieved. Additionally, after unit testing is performed, the status report can indicate a percentage of the tested mapped procedures achieving the desired coverage. The status report can also be configured to distinguish how verified and unverified requirements are displayed, for example, by using different color text.
  • source code that has been developed by the users can be added to the project by selecting the Add Source button 410 d . Once added, the source code can be displayed in the Project Tree 412 . Note that source code files can be added to the project but not to the requirements themselves because procedures in the source code files, not the source code files themselves, can be mapped to the requirements, as described herein. Source code files can also be removed from the project by selecting the source code file to be removed in the Project Tree 412 and pressing the Remove Source button 410 e.
  • FIG. 4D illustrates a GUI 415 that can be displayed when the Requirement Information tab is selected.
  • the requirement information GUI 415 can display information about the current selected requirement.
  • the requirement information GUI 415 can group the information about the currently selected requirement into three areas of interest: test configuration, test management and requirement nomenclature.
  • a Test Configuration drop-down menu 416 can be used to view and edit information about the test configuration properties of the currently selected requirement
  • a Test Management drop-down menu 418 can be used to view and edit information about the test management properties of the currently selected requirement
  • a Requirement Nomenclature drop-down menu 417 can be used to view and edit information about the requirement nomenclature of the currently selected requirement.
  • the requirement information GUI 415 includes a View/Edit area 419 , in which the selected requirement can be displayed and/or edited.
  • the View/Edit area 419 can be grayed out to indicate when the user is not permitted to edit the value or description associated with the selected requirement information.
  • FIG. 4E illustrates a GUI 420 that can be displayed when the Define Requirement tab is selected.
  • the user can create and add low-level or derived requirements to the project, depending on the permissions assigned to the user's corresponding role.
  • high-level requirements include requirements captured by the requirement capture tool and imported into the project.
  • Low-level requirements include requirements that are associated with a high-level requirement.
  • Derived requirements include requirements not captured by the requirements capture tool but defined in TBmanagerTM and are inferred or derived from high-level or low-level requirements.
  • the define requirement GUI 420 includes a Requirement Name field 421 that can be used to enter the name of the requirement being defined, Requirement Type radio buttons 422 that can be used to select whether the requirement being defined is a derived (DV) or low-level (LL) requirement, and a Reference Requirement drop-down menu 423 that can be used when defining low-level requirements to select the high-level requirement with which the low-level requirement is associated (otherwise “None (DV Requirement)” can be selected).
  • the define requirement GUI 420 also includes a Requirement Number field 424 that can be used to enter the number of the requirement being defined.
  • each requirement for the project requires a unique identification number, which can be automatically filled in by TBmanagerTM.
  • the define requirement GUI 420 further includes a Requirement Document Path field 425 that can be used to enter the path to a document detailing the requirement being defined (the Browse button can be used to locate the document), a Requirement Body field 426 that can be used to enter a brief description of the requirement being defined, a Clear button 427 that can be used to clear all fields in the define requirement GUI 420 , and a Create LL/DV Requirement button 428 that can be pressed to create the new requirement.
  • TBmanagerTM can automatically use values specified in a template when importing requirements into the project as values for the desired code coverage for the new requirement. Newly defined low-level or derived requirements can be displayed in the Project Tree 412 .
  • a user can select a requirement to be de-allocated in the Project Tree 412 via the project GUI 408 and can de-allocate the selected requirement using a De-allocate/Re-allocate Current Requirement button 429 via the define requirement GUI 420 .
  • the De-allocate/Re-allocate Current Requirement button 429 can be configured as a context-sensitive button with respect to the selected requirement so that it toggles between “De-Allocate Current Requirement” and “Re-allocate Current Requirement” as appropriate.
  • a user can re-allocate a de-allocated requirement in a similar manner by selecting the de-allocated requirement in the Project Tree 412 via the project GUI 408 and can re-allocate the selected requirement using the De-allocate/Re-allocate Current Requirement button 429 via the define requirement GUI 420 .
  • FIG. 4F illustrates a GUI 430 that can be displayed when the Assign Users tab is selected.
  • a user having the necessary permission can assign users to requirements and create sibling requirements.
  • a sibling requirement can be created in TBmanagerTM for the purposes of requirement diversification and task management and represents a copy of a high-level, low-level or derived requirement for the project.
  • a requirement that is to be assigned can be selected from the Project Tree 412 via the project GUI 408 or from a Current Requirement drop-down menu via the assign users GUI 430 .
  • the assign users GUI 430 includes an “Assigned to this Requirement” field having a User field 431 that can display a name of a user assigned to the current requirement and a Role field 432 that can display the role assigned to the user.
  • the assign users GUI 430 also includes an “Assign User” field having a Filter by Role drop-down menu 433 that can be used to identify the users 435 for the project who are available for selection based on their corresponding role 434 .
  • An Assign to Requirement button 436 can be selected to assign a selected user from the identified users 435 to the current requirement.
  • the Save button 414 can be selected via the project GUI 408 , followed by the Update Sub-Projects button 410 b .
  • a directory named “Sub-Projects” can be established in the project directory to contain all of the users' sub-projects.
  • Each user can have a separate sub-projects directory that can be automatically created when first assigned a requirement. Users can then open their respective sub-projects to work on assigned requirements. The users can copy their sub-project directories to different machines (e.g., their own workstations or laptops with TBmanagerTM installed) to work on assigned requirements.
  • Users can then launch TBmanagerTM on their machines, select the Open Project button 410 a via the project GUI 408 , navigate to their sub-project directory, and select the appropriate sub-project to work on. Users can be asked to login by entering their name. The project GUI 408 can then refresh itself to display the user's project and the assigned requirements.
  • the assign users GUI 430 can also be used to create a sibling requirement, which is a copy of an existing high-level, low-level or derived requirement.
  • the sibling requirement can be identical to the corresponding high-level, low-level or derived base requirement except for a unique identifier assigned to the sibling requirement.
  • a sibling requirement can duplicate a base requirement thread at the time the sibling requirement is created. In this way, sibling requirements can enable a user to assign the same requirement to multiple users having different roles (a sibling cannot be assigned to two users of the same role).
  • one of the users 435 displayed via the assign users GUI 430 can be selected and assigned to the sibling requirement by selecting a Create Sibling Req+Assign button 437 .
  • the user assigned to the sibling requirement should have a different role than the user assigned to the base requirement.
  • a newly created sibling requirement can be viewed via the project GUI 408 and displayed in the Project Tree 412 as a child of the base requirement. Only users with permission to Make Sub-Projects should be enabled to create sibling requirements.
  • sibling requirements can be considered exact copies of a corresponding base requirement, if the base requirement changes, then all of its associated sibling requirements should be de-allocated, as described herein. Then, new sibling requirements of the modified base requirement can be created and assigned to the appropriate users. If the base requirement has a new procedure assigned to it, has its requirement body changed, or any other change happens that might affect the conditions under which the base requirement can be verified, new sibling requirements should to be created.
  • FIG. 4G illustrates a GUI 438 that can be displayed when the Map Procedures tab is selected.
  • the map procedures GUI 438 can be used to select an added source code file, analyze the selected source code file for available procedures, and map selected procedures to a current selected requirement.
  • the Project Source Files drop-down menu 439 can be used to select a source code file that has been added to the current project and return a list of procedures 442 found in the selected source code file.
  • the LDRA TestbedTM tool can be invoked to analyze the selected source code file and return the identified list of procedures 442 to TBmanagerTM.
  • the selected source code file can also be analyzed statically and/or interactively for conformance with project coding rules and quality metrics by selecting the Analyze Procedures button 440 and Analyze Interactively button 441 , respectively.
  • the LDRA TestbedTM tool can also be invoked to perform the static and/or interactive analysis of the selected source code file. If interactive analysis is desired, the user can perform code review, quality review, and design review analysis.
  • the map procedures GUI 438 can display the identified procedures 442 found in the selected source code file.
  • the Map to Current Requirement button 444 the user can map particular identified procedures 442 to the current requirement, which can be selected using the Current Requirement drop-down menu or the Project Tree 412 via the project GUI 408 .
  • the Unmap Selected button 443 can be selected to unmap particular identified procedures 442 from the current requirement. Having mapped procedures to requirements, the user can select the Procedures tab to view a list of the procedures mapped to the current requirement.
  • the user can select a mapped procedure of a current requirement and view its corresponding input and output (I/O) variables via a procedures GUI 445 , shown in FIG. 4H .
  • the procedures GUI 445 includes a Select Procedure drop-down menu 446 , which can be used to select a procedure from those procedures that are mapped to the current requirement.
  • the current requirement can be selected from the Current Requirement drop-down menu or from the Project Tree 412 via the project GUI 408 .
  • the procedures GUI 445 can be updated to display the I/O variables of the selected mapped procedure in the I/O Variables field 447 .
  • the procedures GUI 445 includes a Desired Coverage field 449 , which can be used to modify the desired code coverage values (e.g., Statement, Branch, MC/DC, and Path coverage values) for the current requirement, and a Coverage Achieved at Verification field 450 , which can be used to view the achieved coverage after unit testing.
  • the Unmap This Procedure button 448 can be selected to unmap the selected mapped procedure from the current requirement.
  • unit testing can be initiated.
  • a requirement having mapped procedures to be tested can be selected either from the Project Tree 412 or the Current Requirement drop-down menu 409 via the project GUI 408 .
  • the source code file containing the procedures that are mapped to the selected requirement can be selected, followed by the Unit Test button 410 f .
  • An external unit test tool can then be invoked to perform the unit test.
  • LDRA TBrunTM is a unit test tool that can be invoked via the LDRA TestbedTM tool.
  • test cases for the mapped procedures can be created.
  • a mapped procedure to be tested can then be selected, inputs and expected outputs for the test case can be entered, and the test case can be run.
  • test case(s) are satisfactory and desired code coverage is achieved, completion of requirement verification should be confirmed. At least one test case for each mapped procedure for a requirement should be performed before confirming completion of requirement verification.
  • TBmanagerTM can refresh the Project Tree 412 to display the requirement as verified (e.g., the corresponding requirements icon can be displayed without the “X” symbol). The project manager can now review the unit test information for the project to assess the users' work.
  • the requirement can be displayed as “verified” in the Project Tree 412 , shown in the project GUI 408 . Because the unit testing of the mapped procedure(s) may not have achieved the desired coverage, however, the project manager, or other user(s) having the necessary permission, should review the results of the unit testing and decide whether the requirement should actually be considered verified.
  • the user can verify whether a requirement has met the desired code coverage by selecting the Verification tab to access a verification GUI 451 , shown in FIG. 4I .
  • a verification GUI 451 shown in FIG. 4I .
  • the verification GUI 451 includes a Details field 453 displaying the current status of the selected requirement 452 .
  • the Details field 453 indicates the user assigned to the selected requirement 452 and their role, the expected code coverage, and the achieved code coverage, which can be displayed according to percentages of mapped procedures achieving the desired coverage.
  • the user can press the Verify button 454 to maintain the current status of the selected requirement as verified. However, if the user is unsatisfied with the coverage achieved for the selected requirement, the user press the Un-verify button 455 to change the current status of the selected requirement to unverified. Because un-verifying a requirement modifies that requirement, the user should update any sub-projects associated with the requirement.
  • a sibling requirement acts much like a low-level requirement. That is, in order for a base requirement to be considered verified, all of its sibling requirements must be verified first. For example, if a developer user has been assigned a low-level requirement having two sibling requirements, one for an IVV user and another for a QA user, the developer cannot indicate the low-level requirement is verified until the IVV and QA users indicate the corresponding sibling requirements are verified.
  • a exemplary usage scenario for TBmanagerTM is as follows. First, the project manager can set-up a project based on captured high-level requirements, create low-level, derived and sibling requirements (if appropriate), and assign requirements to users. Users can check-out their respective sub-projects, established when the project manager assigns requirements to the users. That is, the users can make a copy of their sub-projects for the purpose of performing remote operations on the sib-projects. Users can modify the sub-project by mapping procedures and testing and analyzing source code, among other tasks. Users can then check-in their modified sub-projects. That is, the users can copy the updated contents of the sub-projects back into the project's directory tree. The project manager can subsequently log-in and obtain a complete and current view of all aspects of the project.
  • FIG. 4J illustrates a GUI 456 that can be displayed when the Defect tab is selected.
  • a user can track defects in source code for the project via the defects GUI 456 .
  • the defects GUI 456 can be used to track defects (i.e., non-conformances) in source code based on the results of the analyses performed by the static analysis tool.
  • the user can add a defect to be tracked by selecting the “Add Defect” button 457 .
  • Added defects 458 are displayed with information about the defect, including, for example, a defect number, date created, status, and user assigned to the defect, as well as information regarding disposition of the defect. Added defects 458 can be also be selected for editing.

Abstract

An exemplary system for electronically managing requirements for software development includes a projects module, a requirements module, a mapping module and a verification module. The projects module is configured to establish a software development project. The requirements module is configured to define requirements for the project based on requirements information captured from a requirements source. For each requirement, the projects module is configured to associate source code developed for the requirement with the project or assign the requirement for development of source code. The mapping module is configured to map procedures identified in the source code to the defined requirements. The verification module is configured to verify the defined requirements based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.

Description

    FIELD OF THE INVENTION
  • The present invention relates to management of software development requirements. More particularly, the present invention relates to automated techniques and tools for integration of distributed requirements traceability and software testing/verification.
  • BACKGROUND
  • In many safety-critical and mission-critical industries, such as the avionics, medical, defense, and nuclear industries, among others, requirements traceability and verification tasks associated with software development projects can consume a significant portion of the project budget. Techniques exist for automatically capturing requirements information for software development projects from various sources of requirements information into the form of a requirements traceability matrix (RTM), which can be used to trace the implementation of the requirements in source code. The RTM typically includes project-level, customer-defined requirements that specify how the software product should operate as well as low-level design constraints, but not code-level, verification requirements that specify how the software product should be verified. Further, techniques exist for manually testing source code written to implement the requirements and for verifying the requirements. What is needed, therefore, is a technique for integrating and automating the requirements traceability and testing/verification tasks of a distributed software development project, including a uniform user interface to help manage highly complex and technical software development projects.
  • SUMMARY
  • The present invention supports highly distributed and asynchronous operations. Exemplary embodiments of the present invention, which utilize a central depository, are inherently centralized and can be managed by administrators. Exemplary embodiments of the present invention link user workspaces and development artifacts in a dynamically managed project tree, thereby synthesizing the processes and ensuring their repeatability. The users return the software development artifacts to central repository. Thus, exemplary embodiments of the present invention establish and maintain demonstrable traceability. Accordingly, exemplary embodiments of the present invention can solve the problems with related art systems, in which the processes performed are consequently largely manual, error prone and inconsistent. The present invention is not limited to or required to solve the problems in related art.
  • An exemplary method for electronically managing requirements for software development includes: establishing a software development project; defining requirements for the project based on requirements information captured from a requirements source; for each requirement, associating source code developed for the requirement with the project or assigning the requirement for development of source code; mapping procedures identified in the source code to the defined requirements for the project; and verifying the defined requirements for the project based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • An exemplary method for electronically managing requirements for software development using extensible markup language (XML) includes creating an XML thread for each of a plurality of requirements defined for a software development project. Each thread comprises a plurality of elements that describe properties of the thread and a unique identifier that enables traceability of the defined requirements for the project. The method also includes implementing XML wrappers to enable applications to interface with the XML threads. The properties of each XML thread include a corresponding defined requirement for the project, procedures of source code for the project that are mapped to the corresponding defined requirement, and results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • An exemplary system for electronically managing requirements for software development across a network of users includes a projects module, a requirements module, a mapping module and a verification module. The projects module is configured to establish a software development project. The requirements module is configured to define requirements for the project based on requirements information captured from a requirements source. For each requirement, the projects module is configured to associate source code developed for the requirement with the project or assign the requirement for development of source code. The mapping module is configured to map procedures identified in the source code to the defined requirements. The verification module is configured to verify the defined requirements based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures.
  • An exemplary system for electronically managing requirements for software development across a network of users includes a project module configured to establish a software development project; a requirement module configured to define requirements for the project based on requirements information captured from a requirements source; a modeling module configured to include architectural artifacts and implementation artifacts; and a verification module configured to verify the defined requirements for the project based on results of one or more of tests in accordance to one or more verification rules. The module links the defined requirements to architectural artifacts and implementation artifacts of the modeling module.
  • An exemplary method for electronically managing requirements for software development includes establishing a software development project; defining requirements for the project based on requirements information captured from a requirements source; establishing a modeling module that includes architectural artifacts and implementation artifacts; and verifying the defined requirements for the project based on results of one or more of tests in accordance to one or more verification rules. The defined requirements are linked to respective architectural artifacts and implementation artifacts.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • Other objects and advantages of the invention will become apparent to those skilled in the relevant art(s) upon reading the following detailed description of preferred embodiments, in conjunction with the accompanying drawings, in which like reference numerals have been used to designate like elements, and in which:
  • FIGS. 1A and 1B illustrate an exemplary environment in which a system for automatically managing software requirements verification can be implemented and an exemplary embodiment of an automated requirements verification tool, respectively;
  • FIG. 2 illustrates a process flowchart providing exemplary steps for a method of automatically managing software requirements verification;
  • FIGS. 3A-3E illustrate an exemplary extensible markup language (XML) implementation of a system for automatically managing software requirements verification;
  • FIGS. 4A-4J illustrate screen captures of an exemplary graphical user interface of a system for automatically managing software requirements verification.
  • FIG. 5 illustrates an example of selecting, creating, renaming or deleting a group view;
  • FIG. 6 illustrates an example of editing rules for a given group;
  • FIG. 7 illustrates an example of parsing based on types;
  • FIG. 8 illustrates an example of requirements in an Microsoft(MS) Word file;
  • FIGS. 9 and 10 illustrate examples of a type editor;
  • FIG. 11 illustrates an example of ungrouped requirements and grouped requirements;
  • FIG. 12 illustrates an example of a sibling requirement; and
  • FIG. 13 illustrates another example of a sibling requirement.
  • DETAILED DESCRIPTION System Overview
  • The present invention shall be described by way of exemplary embodiments to which it is not necessary limited. Variations and modifications will occur to these skilled in the art without departing from the scope of invention defined in the claims appended hereto. Absolute statements (that begin with, e.g., “must”), and statements of advantages or other aspects apply to specific exemplary embodiments, and not necessarily to all embodiments covered by the claims.
  • Techniques for automated management of software requirements are presented herein that can bridge the gap between high-level requirements traceability tools and low-level source code testing tools across a network of distributed user workspace (e.g. work directories enabled by instances of the invention). The explanation will be by way of exemplary embodiments to which the present invention is not limited.
  • FIG. 1A illustrates an exemplary environment for implementing a system 100 for automated management of software requirements verification. As shown in FIG. 1A, the system 100 can be employed in conjunction with a computer-based system, where the elements can be implemented in hardware, software, firmware, or combinations thereof. As shown in FIG. 1A, system 100 includes a requirements information source 105, a requirements capture tool 110, an automated requirements verification tool 115, a static analysis tool 120, a unit/integration test tool 125, a network 130, and users 135. Software development projects (e.g., a billing system for a hospital, an inventory tracking system for a store, an avionics display system, etc.) can be defined by requirements. The requirements can specify how the software product should operate when it is implemented. The requirements information source 105, shown in FIG. 1A, can represent any source of requirements information, including requirement management tools, e.g., Telelogic DOORS®, and IBM Rational RequisitePro®, spread sheet programs, e.g., Microsoft Excel®, word processing programs, e.g., MS Word®, among other sources of requirements information. The requirements capture tool 110, can be implemented to capture the requirements information from the requirements information source 105. This information may include requirement identifier and requirement description as well as test case identifier and test case description.
  • In one embodiment, the requirements capture tool 110 can use natural language parsing to parse the requirements information. For example, a requirement capture tool, such as the Regtify™ tool from Geensys (on the web at geensys.com) employs such techniques to generate a RTM from requirements information. Products, such as LDRA TBreq™, or customized hand-coded systems can be employed to implement the requirements capture tool 110. The parsing of requirements can be performed based on types, as described in more detail below in the subsection entitled “Parsing Based On Types View.”
  • For example, if software is to be developed for an on-line grocery store, the requirements information source might include an MS Word™ document that specifies, among other requirements, “the on-line grocery store shall maintain a customer account.” In this example, the requirements capture tool 110 might capture from the text of the MS Word™ document, the requirement information “maintain account.” In another example, the requirements information source might include a DOORS™ module that specifies, among other requirements, “the software must provide fault isolation for all fault types.” In this example, the requirements capture tool 110 might capture from the text of the DOORS™ module, the requirement information “Isolate faults.”
  • In an exemplary embodiment, a software modeling module 190 can be used with the requirement capture tool 110. The software modeling module 190 can be implemented by a software modeling tool, such as Telelogic Rhapsody™, Mathworks Simulink™ or National Instruments Labview™. In this exemplary embodiment, the requirements capture tool 110 links requirements to architectural artifacts and implementation artifacts in the software modeling tool 190. These architectural and implementation artifacts are thereby implicitly mapped to the resulting source code that is produced by the modeling tool. Thus, each requirement is associated with one or more software architectural model elements. The model elements are propagated to the distributed verification modules for the purposes of implementation, testing and analysis.
  • In addition, a modeling tool or a software architectural model can be used to automatically generate source code in which the mapping between requirement and source code is made. In other words, the requirements linked with the architectural and implementation artifacts are implicitly mapped to resulting source code produced by the modeling tool.
  • If the software implementation is manually coded, the mapping of requirements to source code is performed using automated requirements verification tool 115 based on the implementation artifacts produced by the modeling tool. The automated requirements verification tool 115 will be described below in detail.
  • The static analysis tool 120 can be implemented to analyze source code files, which have been written by software developers, to identify procedures in the source code and to assess compliance of the source code with project coding rules and quality metrics. As referred to herein, a “procedure” describes a portion of source code written to implement a requirement. For example, procedures might include functions in the C programming language and classes and member functions in the C++ programming language. Automated software analysis and testing products, such as LDRA Testbed™; Coverity's (on the web at coverity.com) Coverity Prevent Coverity Extend; Programming Research's (on the web at programmingresearch.com) QA-C, QA-C++ and QA-MISRA; Gimple Software's (on the web at gimpel.com) PC-lint for C/C++ and another Lint based products; Klocwork's (on the web at klocwork.com) inSpect, inSight, inTellect and inForce; Parasoft's (on the web at parasoft.com) C++ Test, C++ Test for Embedded Systems, Code Wizard and Jest with Test Case Sniffer; McCabe & Associates' (on the web at mccabe.com) McCabe IQ; Telelogic's Telelogic Logiscope, TAU/Tester and TAU/Logiscope TestChecker; and Testwell's (on the web at testwell.fi) CMT++, Complexity Measures Tool for C/C++ can be employed to implement the static analysis tool 120.
  • For the on-line grocery store example, an exemplary source code file “MaintainAccount.c” for implementing the captured requirement “maintain account” might include the following lines of code:
  • float MaintainAccountFunction( )
    {
     long accntNum;
     float balance, avgBalance, ratio;
     accntNum = GetSessionAccountNumber( );
     if (accntNum == 0) {return −1; }
     balance = GetAccountBalance(accntNum);
     if (balance <= 0) { FatalError(“Balance too low”); }
     avgBalance = GetAverageAccountBalance(accntNum);
     ratio = balance / avgBalance;
     if (ratio < .2)
     {
       UserMessage(“Balance is running low”);
     }
    return 0;
    }
  • In this example, the static analysis tool 120 might identify the following basic blocks of source code (blocks 4-6):
  • 60 4 balance =
    61 4  GetAccountBalance
    62 4  accntNum ) ;
    63 4 if
    64 4  (
    65 4  balance <= 0
    66 4  )
    67 5  {
    68 5
    69 5   FatalError (
    70 5   “Balance too low” ) ;
    71 5  }
    72 6 avgBalance =
    73 6  GetAverageAccountBalance (
    74 6  accntNum ) ;
    75 6 ratio = balance / avgBalance ;
    76 6 if
    77 6  (
    78 6  ratio < .2
    79 6  )
  • After analyzing the source code for compliance with project coding rules, the static analysis tool 120 might identify the following code for non-compliance (M) Mandatory:
  • 56 2  {
    57 2   return
    58 2   − 1 ;
    (M) STATIC VIOLATION: 101 S : Function return type inconsistent
    67 5  {
    68 5
    69 5   FatalError (
    70 5   “Balance too low” ) ;
    (M) VIOLATION : 1 J : Unreachable Code found.
    71 5  }
    72 6 avgBalance =
    73 6  GetAverageAccountBalance
    74 6  accntNum ) ;
    75 6 ratio = balance / avgBalance ;
    76 6 if
    77 6  (
    78 6  ratio < .2
    (M) STATIC VIOLATION : 96 S : Use of mixed mode arithmetic:
    float double ratio < .2
    79 6  )
  • For the avionics display system example, an exemplary source code file “CheckAvionicsDisplay.c” for implementing the captured requirement “maintain account” might include the following lines of code:
  • intCheckAvionicsDisplay( )
    {
      // attempt to start modules. If a module AND its backup fail,
      // return a negative number indicating the failed module.
      //
      if (!BITestModule1( )) { if (!BackupModule1( )) return −1; }
      if (!BITestModule2( )) { if (!BackupModule2( )) return −2; }
      if (!BITestModule3( )) { if (!BackupModule3( )) return −3; }
      // everything started up. Return 1 to indicate success.
      return 1;
    }
  • In this example, the static analysis tool 120 might identify the following basic blocks of source code (blocks 1-7):
  • 37 1 int
    38 1  CheckAvionicsDisplay( )
    39 1  {
    40 1 //attempt to start modules. If a module & its backup fail
    41 1 // return a negative number indicating the failed module.
    42 1
    43 1   if
    44 1    (
    45 1    !
    46 1     BITestModule1 ( )
    47 1    )
    48 2    {
    49 2     if
    50 2      (
    51 2      !
    52 2       BackupModule1 ( )
    53 2      )
    54 3      {
    55 3       return
    56 3       − 1 ;
    57 4      }
    58 5     }
    59 6    if
    60 6     (
    61 6     !
    62 6      BITestModule2 ( )
    63 6     )
    64 7     {
    65 7      if
    66 7       (
    67 7       !
    68 7        BackupModule2 ( )
    69 7       )
  • After analyzing the source code for compliance with project coding rules, the static analysis tool 120 might identify the following code for non-compliance (M) Mandatory:
  • 37 1 int
    38 1  CheckAvionicsDisplay( )
    (M) STATIC VIOLATION: 63 S Empty parameter list to procedure/ funct.
    39 1  {
    40 1 // attempt to start modules.If a module & its backup fail,
    41 1 // return a negative number indicating the failed module.
    42 1     //
    43 1   if
    44 1    (
    45 1    !
    46 1     BITestModule1 ( )
    (M) STATIC VIOLATION : 114 S : Expression is not Boolean.
    47 1    )
    48 2    {
    49 2     if
    50 2      (
    51 2      !
    52 2       BackupModule1 ( )
    (M) STATIC VIOLATION : 114 S : Expression is not Boolean.
    53 2      )
    54 3      {
    (M) STATIC VIOLATION : No brackets to then/else (added by analysis).
    55 3       return
    56 3       − 1 ;
    57 4      }
    58 5    }
    59 6   if
    60 6    (
    61 6    !
    62 6     BITestModule2 ( )
    (M) STATIC VIOLATION : 114 S : Expression is not Boolean.
    63 6    )
    67 7      !
    68 7       BackupModule2 ( )
    (M) STATIC VIOLATION : 114 S : MISRA-C:2004 12.6 13.2:
    Expression is not Boolean.
    69 7      )
  • Moreover, the static analysis tool 120 can be reapplied to instrument and measure code coverage in tests run externally.
  • The unit/integration test tool 125 can be implemented to test the source code against the requirements. In an embodiment, the unit/integration test tool 125 can run test cases defining inputs to portions of the source code and expected outputs, and generate results that describe code coverage. For example, the source code can be implemented as a plurality of functions. If a particular function is called and executed during unit/integration testing, then the function can be described as being “covered.” Thus, it is typically desirable to have a high percentage of the source code covered. Also, different levels of coverage can be tested during unit/integration testing, such as path coverage, statement coverage, branch coverage, and modified condition/decision coverage (MC/DC). Automation and integration testing software products, such as LDRA TBrun™; Parasoft's (on the web at parasoft.com) C++ Test, C++ Test for Embedded Systems, Code Wizard and Jest with Test Case Sniffer; Vector Software's (on the web at vectorcast.com) VectorCAST/Ada, VectorCAST/C, VectorCAST RSP for Real-time Embedded Testing and VectorCAST/Cover; IBM Rational (www-306.ibm.com/software/rational/) Test RealTime; IPL (on the web at ipl.com) Adatest 95 and Cantata++; Free Software Foundation's (on the web at gnu.org) Cunit, CPPunit and Junit; and Testwell (on the web at testwell.fi) CTA++, C++ Test Aider, CTC++, Test Coverage Analyzer for C/C++, can be employed to implement the unit/integration test tool 125.
  • For the on-line grocery store example, an exemplary test case might test the procedures mapped to the requirement “maintain account,” such as float MaintainAccountFunction( ), against the requirement. In this example, the test case might specify that if the GetAccountBalance(accntNum) is called with an input value=3201, the test case would return a value=1. The coverage results of unit testing in this example might be represented as follows:
  •    --COVERAGE--
       - Statement -
    Desired Coverage(%): 80
    Mapped Procedures Passing(%): 89
    - Branch Decision -
    Desired Coverage(%): 60
    Mapped Procedures Passing(%): 63
    - Path -
    Desired Coverage(%): 70
    Mapped Procedures Passing(%): 72
  • For the avionics display system example, an exemplary test case might test the procedures mapped to the requirement “Isolate faults,” such as int CheckAvionicsDisplay( ), against the requirement. In this example, the test case might specify that if the function BlTestModule3( ) is set to 1 and BackupModule3( ) returns 1. The coverage results of unit testing in this example might be represented as follows:
  •    --COVERAGE--
       - Statement -
    Desired Coverage(%): 80
    Mapped Procedures Passing(%): 61
    - Branch Decision -
    Desired Coverage(%): 60
    Mapped Procedures Passing(%): 51
    - Path -
    Desired Coverage(%): 50
    Mapped Procedures Passing(%): 48
  • Tracing whether the captured requirements have been implemented in source code and verifying whether the implemented source code operates as desired can be performed manually, but for large software development projects having thousands of requirements, manual tracing and verification of the requirements can quickly become impractical and unmanageable. Accordingly, as shown in FIG. 1A, the automated requirements verification tool 115 can be implemented to bridge the gap between the requirements capture tool 110 and the static analysis and unit/ integration test tools 120 and 125. FIG. 1B illustrates an exemplary implementation of the automated requirements verification tool 115 that includes a requirements module 140, a projects module 145, a mapping & analysis module 150, a verification module 155, and a network interface module 160. The LDRA TBmanager™ tool, described herein in conjunction with FIGS. 4A-4J, can be employed to implement the automated requirements verification tool 115.
  • The requirements module 140 can be configured to define requirements for the software development project based on the requirements information captured by the requirements capture tool 110 from the requirements information source 105. The captured requirements information can represent customer-defined, project-level requirements for the software development project, which are referred to herein as “high-level” requirements. In the on-line grocery store example, the captured requirement “maintain account” is an exemplary high-level requirement. High-level requirements, however, do not describe code-level, design requirements necessary for actually implementing the software. Thus, the requirements module 140 can be configured to provide the option of defining additional requirements not captured by the requirements capture tool 110.
  • For example, the requirements module 140 can be used to define requirements that fulfill part of a high-level requirement, referred to herein as “low-level” requirements. Low-level requirements can be defined to specify how a portion of the software should be implemented. For example, a low-level requirement might focus on a specific function, aim or goal. In the on-line grocery store example, a low-level requirement called “account_name” can be defined for the high-level requirement “maintain account” to establish a name for the account. In another example, the avionics display system, the low-level requirement, “enable named redundant system” is defined for the high-level requirement “Isolate faults” to ensure that only the redundant module identified by Built In Test is enabled.
  • The requirements module 140 can also be used to define requirements that are inferred or derived from high-level requirements or low-level requirements, referred to herein as “derived” requirements. Thus, derived requirements may not be captured by the requirements capture tool 110 but can be subsequently created and managed by the automated requirements verification tool 115. In the on-line grocery store example, a derived requirement called “cancel_account” can be defined for the high-level requirement “maintain account” to cancel a maintained account. In another example, the avionics display system, a derived requirement called “damage assessment” can be defined for the high-level requirement “Isolate faults” to facilitate recovery procedure notification.
  • The requirements module 140 can further be used to define requirements that are copies of a high-level, low-level or derived requirement, referred to herein as “sibling” requirements. A sibling requirement can be created for the purposes of requirement diversification and task management (e.g., one of the users 135 might write source code to implement a low-level requirement, while another one of the users 135 might verify the implemented source code). As described herein, a sibling requirement can be distinguished by a unique identifier, although it is otherwise identical to the base high-level, low-level, or derived requirement of which it is a copy. In this way, the requirements module 140 can be used to populate the RTM with the captured high-level requirements from the requirements information source 105, as well as with additional low-level, derived, and sibling requirements to enable the automated requirements verification tool 115 to provide automated requirements traceability down to the source code level.
  • A sibling requirement can be called a verification task. An additional sibling type, or verification task, is called an objective. Objectives are defined to assure conformance with process objectives or qualitative assessments such as requirement validation or proper planning and documentation.
  • Another sibling requirement type is associated with defect report generation and resolution. A defect report, the obverse of a requirement, can be generated automatically by the users of the static analysis tool 120 or the unit/integration test tool 125. The assignment of defect report spawns a sibling or verification task whose sole purpose is the tracking of defect report to closure.
  • The projects module 145 can be configured to establish a project. As referred to herein, a “project” established by the projects module 145 describes an electronic realization of a real-world software development project in that the established project can provide an electronic mechanism for organizing and automating many aspects of the real-world project, including, among other aspects, defining the requirements for the project, assigning users to work on the project, tracing the implementation of the requirements, analyzing and verifying source code files developed to implement the requirements, and tracking defects. The established project can include associated requirements information and source code files written by developers to implement the requirements. In one embodiment, source code previously developed for a requirement can be associated with the project. If source code is not already developed for the requirement, the projects module 145 can facilitate requirements-based development in which assigning the requirement to a user is a precursor to source code development.
  • The projects module 145 can be configured to display a hierarchical representation of the associated requirements and source code files for the established project and can provide information on the status of a requirement (e.g., whether the requirement is verified or unverified, the users assigned to work on the requirement, etc.). For example, FIG. 4C, described herein in conjunction with an exemplary user interface, illustrates a Project Tree 412 for the on-line grocery store example showing a hierarchy of requirements and source code files. By linking high-level requirements with their low-level implementations, the projects module 145 can enable project managers to view a requirement-by-requirement breakdown of which requirements' implementations have met coding convention, code coverage levels, and functional testing criteria. In this way, the projects module 145 can provide an integrated requirements traceability and verification matrix. In an embodiment, the projects module 145 can generate a status report summarizing the requirements information for a particular user that can be updated as the project progresses to include code coverage results after unit testing, as described herein, among other information.
  • The projects module 145 can be configured to add the users 135 to the project. The users 135 can include any persons working on the project, such as project managers, software developers, test engineers, etc. In an embodiment, the projects module 145 can create “roles” for the project based on groups of the users 135, who are designated to perform similar actions, and to assign the created roles to the users 135. For example, a developer role, a test engineer role, an independent verification and validation (IVV) role, and a quality assurance (QA) role can be created, among others. In an embodiment, a project manager role can be created so that a user assigned the role of project manager can exercise control over virtually all aspects of the requirements verification process and can create other roles, as well as assign roles and requirements to the users 135.
  • In an embodiment, permissions can be assigned to the roles to define actions that users assigned to the role can perform. Exemplary permissions include, among others, a create low-level requirements permission, a create derived requirements permission, a make sub-projects permission (e.g., where a sub-project can be established when a requirement is assigned to a user, as described herein), an edit thread properties permission (e.g., where an XML thread can be created for each requirement, as described herein), and a manual verification permission (e.g., to permit a user to access the verification module 155 to review results of the unit testing, code coverage and static analysis as described herein).
  • The projects module 145 can also be configured to enable a user with the necessary permissions to assign requirements (i.e., the high-level, low-level, derived, and sibling requirements) defined by the requirements module 140 to the users 135. In one embodiment, assignment of a requirement to a user can establish a corresponding sub-project. A “sub-project,” as referred to herein, describes a workspace that the user can access to perform designated tasks associated with their assigned role (e.g., writing source code, analyzing source code files, testing source code files, etc.).
  • In one embodiment, the projects module 145 can regulate the operational status of a sub-project to require that users “check-out” a sub-project from the projects module 145 before performing any tasks on the sub-project and “check-in” the sub-project to the projects module 145 upon completion of the task(s). That is, to check-out a sub-project, users can make a copy of their sub-project file for the purpose of performing tasks remotely (e.g., on their own computers) and, to check-in the sub-project, users can copy the modified contents of their sub-project file back into a directory tree for the established project. In this way, the projects module 145 can maintain integrity of the RTM by synchronizing the sub-projects with the current state of the RTM each time the users check-in and check-out their sub-projects. Additionally, as described herein, a create sub-projects permission can be assigned to enable a user to update sub-projects via the projects module 145. For example, as described herein, affected sub-projects should be updated when their corresponding requirements are modified (e.g., due to the addition or deletion of a user).
  • The network interface module 160, shown in FIG. 1B, can be configured to enable global distribution of the project and provide integrated processes over the communications network 130 (e.g., a LAN, WAN, the Internet, etc.). In an embodiment, the network interface module 160 can enable the users 135 to check-in and check-out their sub-projects from remote locations. Security measures can be implemented, such as establishing a secure connection and requiring the users 135 to logon and supply a password. Additionally, verification status reports can be made globally available. In these ways, the network interface module 160 can be used to perform synchronous or asynchronous operations and to effect a globally-based dynamically updated requirements matrix (both traceability and verification matrix).
  • The mapping & analysis module 150, shown in FIG. 1B, can be configured to invoke the static analysis tool 120. As described herein, the mapping & analysis module 150 can invoke the static analysis tool 120 to map procedures identified in source code to the defined requirements for the project. For the on-line grocery store example, the procedures float MaintainAccountFunction( ), long GetSessionAccountNumber( ), float GetAverageAccountBalance(long accntNum), float GetAccountBalance(long accntNum) void FatalError(const char*msg), void UserMessage(const char*msg) identified in the exemplary source code file “MaintainAccount.c” can be mapped to the high-level requirement “maintain account.” For the avionics display system example, the procedures int CheckAvionicsDisplay( ); int BITestModule1( ); int BITestModule2( ); int BITestModule3( ); int BackupModule1( ); int BackupModule2( ); int BackupModule3( ). An exemplary graphical user interface for mapping procedures to requirements is illustrated in FIG. 4G, which is described herein.
  • Additionally, the mapping & analysis module 150 can enable a user to verify a requirement by identifying an analysis requirement verification method and/or a test requirement verification method. For example, in one embodiment, the mapping & analysis module 150 can be used to invoke the static analysis tool 120 to provide integrated analysis capabilities, including analyzing the mapped procedures against project coding rules and quality metrics. Additionally, in another embodiment, the mapping & analysis module 150 can be used to invoke the unit/integration test tool 125 to test the mapped procedures against the requirements, as described herein, by running test cases and generating results that describe code coverage. And in another embodiment, the mapping & analysis module 150 can be used to instrument code that will be executed externally and whose execution results (i.e., code coverage results) can subsequently be returned to the mapping & analysis module 150 for the purpose of post-mortem code coverage analysis.
  • The verification module 155, shown in FIG. 1B, can be configured to verify the defined requirements based on the results of analyses performed on the mapped procedures by the static analysis tool 120, as well as results of the unit testing performed on the mapped procedures by the unit/integration test tool 125. For example, in one embodiment, a user with the necessary permission can use the verification module 155 to select a requirement and view the expected code coverage and the achieved code coverage for the selected requirement (e.g., as percentages of the mapped procedures achieving a desired coverage). If the user is satisfied with the coverage achieved for the selected requirement, the user can maintain the current status of the selected requirement as verified. However, if the user is unsatisfied with the coverage achieved for the selected requirement, the user can change the current status of the selected requirement to unverified. Because un-verifying a requirement modifies that requirement thread, as described herein with respect to the exemplary XML implementation, the user should subsequently update any sub-projects associated with the requirement.
  • The verification module 155 can also be configured to create groups under a user, and associate requirements with respective groups. Groups have verification rules assigned to them, such that when a requirement is assigned to a group, a sibling requirement for each verification rule is generated for that (base) requirement. With respect to test verification rules, a sibling or verification task is created for each test case associated with the base requirement. All requirements can be ungrouped requirements initially. Requirements can then be associated with one or more groups.
  • Verification rules specify what a verification task that must be completed before the requirement can be considered verified in this exemplary embodiments. What a requirement must satisfy is determined by the verification group that the requirement is in. Verification rules specify not only what verification task must be done; they also specify who should do them. A verification rule can specify that the requirement pass Code Review, and can further specify that Code Review be performed by a certain user or a user of a certain role (e.g., “Tester” or “QA”). Rules may be sequenced, which forces them to be performed in the order listed in the verification group.
  • When a verification rule is defined, one or more quality models can be applied. A quality model can set a standard via which the quality of software for a given project can be measure and visualized. A quality model is enforced by the code review and quality review verification tasks.
  • The code review standards can be defined in a pair of files, a report file (<language>report.dat) and a penalty file (<language>pen.dat). The report file contains the complete set of predefined coding rules. This set of rules can be extended to accommodate a given project. Subsets of the rule set, as defined by published coding standards, are predefined so the user may apply those standards without having intimate knowledge of details of the standard. By viewing the report file, one can see the mapping of these standards to rules and their enforcement. The penalty file can be a legacy mechanism for configuring the code review.
  • The quality review standards can be defined in ‘metpen.dat’. This file contains a series of analysis measurements which are paired with tolerance thresholds. For instance, cyclomatic complexity measurements, code complexity measurements, unreachable lines measurements, comment-related ratios measurements. If the complexity exceeds a certain preset threshold, the quality review report will flag it accordingly. As with the ‘report.dat’ file used for code review, the ‘metpen.dat’ file may be customized to meet a project's needs.
  • The selection of different quality models can be achieved via combinations of verification rules assigned to groups. When sibling requirements are invoked for code or quality review, the appropriate quality model is applied for testing.
  • As mentioned above, a sibling (e.g. verification task) is generated for every verification rule that the base requirement must satisfy. For example, if a requirement's verification rule stipulates that it pass code review, then a sibling is made, and if the sibling passes code review, then the requirement is considered as passing code review.
  • Accordingly, the automated requirements verification tool 115 can be employed in a software development project to enable automated integration of requirements-based development and verification processes and provide global access to a dynamically-updated traceability and verification requirements matrix to all members of a project team, including management. As described herein, in one embodiment, the automated requirements verification tool 115 can be implemented using the extensible markup language (XML).
  • In order to automate and make a repeatable process of requirements traceability, a triangulation of the test verification process must be supported. This triangulation includes three vectors: the mapped requirement (a static association including a procedure, an aggregation of procedures, a class or any implementation artifact), the structural coverage (a dynamic metric of test case execution) and the test case (the functionality to be exercised). The realization of requirement traceability is greatly complicated by software programming abstractions such as overloading, multiple inheritance, generic parameterizations and dynamic dispatch tables. The present invention achieves this traceability by integrating its static and dynamic vectors as dictated by the required functionality. The traceability facilitated by the invention, including the use of the static analysis tool 120, is extended to instances of the software and its run time artifacts. In addition to the mapped requirement, the test case (or use case) must be explicitly mapped as a predicate for any test-based verification task to be performed.
  • Process Overview
  • FIG. 2 illustrates exemplary steps for a process 200 for electronically managing requirements for software development. Not all of the steps of FIG. 2 have to occur in the order shown, as will be apparent to persons skilled in the art based on the teachings herein. Other operational and structural embodiments will be apparent to persons skilled in the art based on the following discussion. These steps are described in detail below.
  • In step 205, a software development project is established. For example, the projects module 145, described in conjunction with FIG. 1B, can be employed to implement step 205. In an embodiment, step 205 includes identifying users for the project. In another embodiment, step 205 includes creating a plurality of roles for the project based on groups of the users who are designated to perform similar actions. For example, a project manager role can be created having permission to exercise control over the process 200, and at least one additional role can be created, such as a developer role, a test engineer role, an independent verification and validation role, and a quality assurance role. In this embodiment, step 205 can include assigning permissions to the roles to define the actions that the users can perform, such as a create low-level requirements permission, a create derived requirements permission, a make sub-projects permission, an edit thread properties permission, and a manual verification permission, and step 205 can also include selecting roles for the users.
  • In step 210, requirements for the project are defined based on requirements information captured from a requirements source. For example, the requirements module 140, described in conjunction with FIG. 1B, can be employed to implement step 210. In one embodiment, step 210 includes capturing high-level requirements for the project based on the requirements information, and defining at least one additional requirement for the project based on the requirements information. The additional requirement(s) can define a low-level requirement that fulfills part of a captured and allocated high-level requirement for the project, a derived requirement that is inferred from a defined high-level requirement or low-level requirement for the project, and/or a sibling requirement that is a copy of a defined high-level, low-level, or derived requirement for the project. Additional requirements information can include test cases associated with any given requirement. In the absence of test cases defined as part of the original requirements information, the user must enter a test case before performing a test-based verification task.
  • In step 212, for each requirement, source code already developed for the requirement is associated with the project. For example, the projects module 145, described in conjunction with FIG. 1B, can be employed to implement step 212. Additionally, if source code is not already developed for a requirement, step 212 can facilitate requirements-based development in which requirements assignment is a precursor to source code implementation. In this embodiment, the association of source code with a project does not occur until step 215. In step 212, corresponding sub-projects can be established when assigning the defined requirements for the project to the users.
  • Optionally, the process 200 can include the additional steps of generating a status report for a user summarizing the defined requirements assigned to the user, and updating the status report during the project to include corresponding results of the analyses, code coverage and the unit testing.
  • In step 215, procedures identified in the source code are mapped to the defined requirements for the project. For example, the mapping & analysis module 150, described in conjunction with FIG. 1B, can be employed to implement step 215. In one embodiment, step 215 includes invoking a static analysis tool, such as the static analysis tool 120 described in conjunction with FIG. 1A, to analyze the source code to identify the procedures in the source code. In this embodiment, the static analysis tool can also be invoked to perform analyses on the source code, including applying project coding rules and quality metrics to the associated source code files. Moreover, this static analysis tool 120 can be used to instrument and measure code coverage in tests run externally. In another embodiment, step 215 includes invoking a unit test tool, such as the unit/integration test tool 125 described in conjunction with FIG. 1A, to run test cases on the mapped procedures.
  • In step 220, the defined requirements for the project are verified based on results of one or more of analyses, code coverage measurements and unit testing performed on the mapped procedures. For example, the verification module 155, described in conjunction with FIG. 1B, can be employed to implement step 220. In one embodiment, step 220 includes verifying the defined requirements for the project if results of the analyses indicate conformance of the source code to the project coding rules and the quality metrics. In this embodiment, the non-conformances can be tracked based on the results of the analyses, and the non-conformances, including providing information regarding disposition of the non-conformances, can be reported. In another embodiment, step 220 includes verifying the defined requirements for the project if the test cases generate desired results.
  • In yet another embodiment, step 220 includes the additional steps of providing a status of the defined requirements for the project indicating whether each of the defined requirements is verified or unverified, and generating an integrated requirements traceability and verification matrix to dynamically track implementation of the defined requirements and the status of the defined requirements. In this embodiment, sub-projects for the project can be established by assigning the defined requirements for the project to users working on the project, and the sub-projects can be synchronized with the integrated requirements traceability and verification matrix.
  • Optionally, the process 200 further includes the step of enabling the users to access the project via a communications network. For example, the network interface module 160, described in conjunction with FIG. 1B, can be employed to implement the networking step. In an embodiment, the integrity of the requirements traceability and verification matrix can be maintained by monitoring when the users check-out and check-in their corresponding sub-projects over the communications network. In other words, the process 200 can support a unit test workflow scenario that includes requirements traceability and test verification through high-level, low-level and derived requirements and facilitates the mapping of these requirements with source code procedures or methods. The mapped requirements can subsequently be made available to a developer or a tester for the purposes of test specification creation and test verification. The process 200 can also facilitate the creation of test cases from these test specifications. The process 200 can automatically trace the results of this unit test scenario back to the requirements sources to ensure requirements traceability matrix (RTM) integrity and user workspace (e.g., project/subproject) security and flexibility in its deployment. In an embodiment, a user can operate on a “checked-in” sub-project, where all tasks performed by the user can be dynamically tracked and updates to the RTM can be synchronized, or the user can operate on a “checked-out” sub-project, where verification tasks can be performed at any location and results can be subsequently synchronized with the current RTM when the user returns to operate on a checked-in sub-project.
  • Detailed Description of Exemplary XML Implementation
  • As described herein, the automated requirements verification tool 115 and the automated requirements management process 200 can be employed in a software development project to bridge the gap between high-level requirement traceability tools and low-level code testing tools and, in one embodiment, can be implemented using XML constructs.
  • For example, requirements management data can persist in an XML construct called a “thread,” so that each requirement that is tracked has one corresponding XML thread. In this way, as referred to herein, the terms “thread” and “requirement” can essentially be interchangeable, except a thread more accurately describes a requirement-based task and more. For example, as shown in FIG. 3A, a thread 305 can include metadata describing the requirement and its relationship to other requirements 310, as well as prototype information regarding procedures in source code files that are mapped to the requirement 315 and analysis and test result information 320 pertaining to verification of the requirement. All prototype information can be kept in the thread itself, including the code coverage information using a <Prototype></Prototype> XML block.
  • With the exception of hierarchical information (i.e., thread relationship data can be contained in the threads themselves, but all the threads taken together form a cohesive hierarchy), all pertinent information about a thread can be contained in the thread itself. In this way, a thread can largely be a self-contained object, enabling a program to use thread information sensibly without any knowledge of the project the thread belongs to, including user, role, and permission information. For example, FIG. 3C illustrates a project schematic 340 and shows that a thread XML file 345 can be independent from project XML files 350, 355 and 360 that can be used to create a cohesive project and to present the thread information to the users in a useful and intuitive manner.
  • The thread definition itself can specify a minimum number and arrangement of fields (also called “elements” when speaking within an XML specific context), which must exist for the data aggregation to be called a “thread” proper. Whether the information put into those fields has any correlation with real-world data is beyond the scope of the thread definition. The definition of a thread is dependent only upon a unique reference identifier (e.g., ref=“ ” metadata) and not upon the actual string used to make the threads human-readable.
  • FIG. 3B illustrates how a thread XML file 335 can be manipulated by a calling application/program 325 through an XML wrapper class called CXMLWrapper. While it can be possible to read and write directly from/to threads, the CXMLWrapper can be used to enforce the ref=“ ” XML conventions, thereby ensuring that threads are written and re-written in a consistent, standards-conforming manner.
  • FIG. 3D illustrates an exemplary representation of a thread in memory. The CXMLWrapper class is based on the CGenericXMLWrapper XML wrapper class, which can be implemented to convert an XML file into a hierarchical tree of objects called ReqDataContainers 365. Conceptually, a ReqDataContainer 365 can maintain hierarchical information about itself (e.g., who its parents and children are) and about its own data (e.g., name, unique reference identifier, and data). The CGenericXMLWrapper class can create one ReqDataContainer for each element encountered while reading an XML file. The element's name and unique reference number can be stored, in addition to any data. Hierarchical information can be contextually determined based on relevant factors such as, whether the element has data and the parent element, among other factors. Thus, in the tree of ReqDataContainers, each ReqDataContainer can be analogous to a node with pointers to its siblings in the tree.
  • In the event an element is encountered that does not have a reference number, a reference number can be assigned to the element, beginning at a reasonably high “unknown floor.” Thus, a program wishing to retrieve the element's data must know the value of the unknown floor ahead of time, which can be defined in the XMLWrapper.h class, in addition to other factors regarding how many unreferenced elements are being read and have been read. In practice, it can be more effective to define a thread tree by using a unique reference number (or other unique identifier) for each of the elements of a thread instead of relying on automatic assignment of reference numbers. Automatic assignment of reference numbers can be effective, however, to prevent a situation where an entire thread (or _trace.xml file) cannot be accessed because a faulty portion of a program did not assign a reference number to one of its new elements.
  • Once the CGenericXMLWrapper class creates a ReqDataContainer tree, as shown in FIG. 3D, a calling program can have complete freedom to modify the ReqDataContainer tree. For example, a calling program can add or remove ReqDataContainers and modify data in existing ReqDataContainers. After a calling program has finished modifying a ReqDataContainer tree, it can call an XML method of the wrapper class called WriteAsXML( ) to have the wrapper class convert the ReqDataContainer tree back into an XML file and write the XML file to a storage device.
  • ReqDataContainers 365 can be designed to mimic XML as much as possible. ReqDataContainers need not be categorized based on whether they have data, children, siblings, or any other contextual property. In practice, however, some distinctions among the ReqDataContainers should be implemented so that the data can be organized accordingly.
  • The flexible nature of a ReqDataContainer tree implementation can permit different programs to add their own data to the thread without interfering with each other. For example, in one embodiment, defect tracking information and function prototype XML blocks can be added to a thread's “scope” without obfuscating its primary payload, the individual requirement. These are examples of data that is added to threads as individual traceability needs arise (in this case, the extension of verification down to individual functions), and in this way, the approach of encapsulating all data related to the requirement and its traceability information into a single thread can enable flexibility and freedom for user programs. The ReqDataContainer tree implementation can also define a standard way of encoding data. In this way, programs which want to take advantage of features offered by other programs need only understand the XML block convention used in order to build their own functionality around it.
  • In one embodiment, classes called RDCPtr, iRDCPtr, and CWrapperLibrary, can be implemented to (1) organize iterated XML blocks into “stacks” of “vertical data” to avoid the need for contact with a parent node, (2) enable sequential accessing of siblings without the need for communicating with the parent node, and (3) provide a one-to-one correlation between a ReqDataContainer and a single element of a stored XML file.
  • Avoiding reliance upon parent nodes for information about child hierarchical relationships can improve the integrity of the code. For example, programs typically need access to all instances of a certain XML block, such as getting prototype information out of a thread. A pseudocode representation of a function which gets prototype information from a thread without using the RDCPtr class can be expressed as follows:
  • ReqDataContainer prototype_parent =
         current_thread.GetElement(REF_TEST_SPECIFICATION);
       ReqDataContainer prototype =
         prototype_parent.GetElement(REF_PROTOTYPE);
       while (prototype != NULL) {
         PrintPrototypeInfo(prototype);
         prototype = prototype_parent.NextElement(prototype);
       }

    A pseudocode representation of a function which gets prototype information from a thread using the RDCPtr class can be expressed as follows:
  • RDCPtr prototype = current_thread
          .GetElement(REF_TEST_SPECIFICATION)
          .GetElement(REF_PROTOTYPE);
       while (prototype != NULL) {
          PrintPrototypeInfo(prototype);
          prototype = prototype.GetNext( );
       }
  • The improvement with regard to code cleanliness between the two implementations can be significant considering that this “list” of prototypes that a thread possesses can be passed around, in its entirety, by passing only the RDCPtr of the first prototype because the first prototype in the list knows the location of the other prototypes. Thus, instead of a function passing around two ReqDataContainer pointers (i.e., one for the element and one for its parent), only one RDCPtr object need be passed around for every function to have access to all the prototypes. Further, the wrapper class only has to service one application call (i.e., the call which gets the first prototype) and will not need to service other calls to get any additional prototype information. In this way, iterated blocks of XML data can be represented as “vertical” data, as shown in FIGS. 3D and 3E. The first prototype can be treated like any other block of XML, and subsequently read prototype blocks can be “stacked” on top of the first prototype. The RDCPtr class embodies this concept of stacks of ReqDataContainers.
  • Thus, the calling program need not interact with a ReqDataContainer directly. All data access can be accomplished via RDCPtrs, which can enable the unique “vertical data” stacking mechanism shown in FIGS. 3D and 3E. Because of their usefulness as smart pointers, RDCPtrs can provide exclusive means of accessing ReqDataContainers. Even if an element has no vertical data (i.e., there is only one iteration of the element), it can still be returned as an RDCPtr. Thus, functions do not need to be overwritten to accept both ReqDataContainers and RDCPtrs, all functions can simply accept an RDCPtr. By passing around one relatively small RDCPtr, the entire calling program can have random or sequential access to the entire vertical stack of data. This feature can enable easier, cleaner, and more concise code implementation. Furthermore, by using RDCPtrs, the calling program need not create or delete ReqDataContainers into or from memory, which can be all handled automatically, as described herein.
  • The iRDCPtr class can provide a mechanism for organizing ReqDataContainers “left and right” into lists. The iRDCPtr class is not used by calling programs but can be used by the backend (e.g., the wrappers used to interface with the XML files) to enable sequential searching through siblings and writing recursive algorithms to search through the ReqDataContainer tree (ReqDataContainers do not keep track of their “siblings” in the ReqDataContainer tree). Calling programs can access a child of a ReqDataContainers by index (i.e., by unique reference identifier) and cannot sequentially search through the children of a ReqDataContainer to find the child it needs but, for internal processes, the CGenericXMLWrapper can use iRDCPtrs to sequentially search through the children of a ReqDataContainer.
  • Calling programs should use CWrapperLibrary class to get a wrapper for an XML file. For memory management purposes, the automated requirements verification tool 115 and its backend can use a class to manage allocation and deletion of resources. For example, the CXMLWrapper class can be used to create the ReqDataContainers, RDCPtrs, and iRDCPtrs needed. A calling program can obtain RDCPtrs upon request, and the entire XML file, as represented by the CXMLWrapper, can be created and deleted with the CXMLWrapper. The CXMLWrapper, in turn, can register all objects (e.g., ReqDataContainers) it creates with a GlobalRDCPool object, which can be emptied by the calling program when it exits.
  • Further, the automated requirements verificaiton tool 115 and its backend can use a class called CWrapperLibrary to manage CXMLWrappers in the same way that the GlobalRDCPool class manages RDCPtrs. With CWrapperLibrary, a calling program need not create a wrapper at all. Rather, the calling program can request the ReqDataContainer tree for an XML file. If the ReqDataContainer tree has not yet been built for the requested XML file, the CWrapperLibrary class can be used to create a wrapper, have the wrapper build the ReqDataContainer tree, and pass back to the calling program a pointer to the created wrapper. In this way, CWrapperLibrary can organize all the CGenericXMLWrappers that a calling program is using. For example, if the calling program requests a wrapper that corresponds to “file1_trace.xml,” CXMLWrapper can search a library of already-built wrappers for a CXMLWrapper object for file1_trace.xml. If a CXMLWrapper object for file1_trace.xml has already been built, CXMLWrapper can simply pass a pointer to the already-built CXMLWrapper back to the calling program, otherwise CWrapperLibrary can make a new CXMLWrapper for file1_trace.xml and pass a pointer to the new object back to the calling program.
  • Like RDCPtrs, CXMLWrapper hides allocation of memory from the calling program, so the calling program is not responsible for freeing the object that CWrapperLibrary passes back. Also, when a calling program uses CWrapperLibrary, all parts of the program can be certain to be working on the same ReqDataContainer tree (a ReqDataContainer is a single element in an XML file, so a tree of ReqDataContainers represents the entire XML file) and the calling program does not have to implement synchronization across the program.
  • Typically, a calling program will call the GetFile( )method to retrieve the RDCPtr for the file's root element and will not make any further calls to the wrapper. The calling program does not delete the created wrapper. Instead, the EmptyWrappers( )method (which also writes all opened wrappers to a storage device) can be used to delete wrappers vicariously. In this way, the CWrapperLibrary class can be used to ensure that all parts of the automated requirements management program are working on the same ReqDataContainer tree and to facilitate memory management.
  • The memory management classes, when used together, can result in an unbroken persistence of RDCPtrs (i.e., the RDCPtr a calling program receives at the beginning of a session is the same RDCPtr the calling program would receive later in the session) to enable parts of the calling program, which use the same GlobalRDCPool and CWrapperLibrary, to pass RDCPtrs around. Therefore, when the calling program decides to ask the memory management classes to empty themselves can be an important decision. For reasons of memory usage, under certain situations, it may even be desirable to force-empty wrappers and RDCPtrs. This memory management technique can result in an increase in memory usage for the program's lifecycle. Once memory usage reaches a certain level, it is unlikely to increase further, but for programs that might in their lifecycles incur the opening of dozens or even hundreds of XML files, force-emptying the memory management classes can be beneficial. Care should be taken, however, that references to resources managed by the memory management classes are no longer needed after emptying them.
  • In one embodiment, the threads can be converted into a SQL format for storage and access over a global network. This process can be supported by a web service that accepts upload requests from the automated requirements verification tool 115. This same web service can generate traceability and verification reports upon request from web users. Additionally this web service can accommodate download requests to the automated requirements verification tool 115. As a consequence of these web services, global project synchronization can be facilitated.
  • Exemplary Graphical User Interface Implementation
  • FIGS. 4A-4J illustrate an exemplary implementation of a graphical user interface (GUI) for a software requirements management tool TBmanager™ developed by LDRA™ TBmanager™ can be employed to facilitate management and allocation of software requirements for development, testing and verification purposes. Persons skilled in the art will understand that the GUI design need not be limited to the design illustrated in FIGS. 4A-4J and that other GUI designs can be implemented. In this embodiment, a project file (e.g., having a “.tbp” extension) can first be created using a requirements capture tool, such as TBreq™, developed by Geensys™, which can capture requirements information for a software development project from sources of requirements information such as Telelogic DOORS® or IBM Rational RequisitePro®, MS Excel®, MS Word®, among other sources of requirements information.
  • Defining Roles and Users
  • FIG. 4A illustrates an exemplary GUI 401 for defining roles for the project during an initial set-up. Roles can be used to group together users who perform similar or related tasks; for example, a role can be created and applied to all of the developers of a project. Each user can be assigned one role. One user can assume the role of project manager. The project manager role can exercise control over every aspect of the requirements management process and can be responsible for creating roles and users and for delegating requirements. For example, the project manager can create and assign a role to grant other users the ability to create roles and users and to delegate requirements.
  • As shown in FIG. 4A, a New Role field 402 of GUI 401 can be used to enter the name of a new role, and the new role can be added by pressing the Add button. Exemplary roles 403 can include a developer role, a GUI designer role, an independent verification and validation (IVV) role, a quality assurance (QA) role, and a test engineer role, among others. As shown in FIG. 4A, the Remove Selected button can be used to remove an added role, and the Import Roles From File button can be selected to import roles that have been defined in a text file or in another project.
  • Permissions can be assigned to the roles to enable different levels of functionality for corresponding users, such as by defining the requirements information that the users can access and the actions that they can perform. As shown in FIG. 4A, the Assign Permissions button can be used to assign permissions to the roles 403. Exemplary permissions 404 can include, among others, “Create Low Level (LL) Reqs,” which can be assigned to a role to enable corresponding users to create low-level requirements, “Create Derived (DV) Reqs,” which can be assigned to a role to enable corresponding users to create derived requirements, “Make SubProjects,” which can enable corresponding users to assign users to requirements for the project, “Edit Thread Properties,” which can be assigned to a role to enable corresponding users to edit available requirement attributes via a Requirements View described herein, and “Manual Verification,” which can be assigned to a role to enable corresponding users to access to a Verification View described herein.
  • Roles can be used to diversify allocated requirements among users. In this way, the same requirement (via sibling requirements) can be assigned to two or more users of differing roles, while maintaining traceability of development and verification tasks. For example, the same requirement can be assigned to a developer for coding, QA for testing and IVV for independent validation and verification.
  • Similarly, FIG. 4B illustrates an exemplary GUI 405 for defining users for the project. As shown in FIG. 4B, a New User field 406 can be used to enter the name of the new user and to select a corresponding role for the new user, and the new user can be added by pressing the Add button. The added users can be displayed in a Users field 407. A Remove Selected button can be used to remove an added user from the project, and an Import Roles From File button can be selected to import users previously defined in another file.
  • Adding news users and roles after setup can be performed safely, when followed by a sub-project update, as described herein. However, once requirements have been assigned to users, as described herein, users and roles should not be deleted. For example, deleting a role can result in a user losing necessary permission to work on the project and deleting a user can result in a requirement being unassigned. Accordingly, care should be taken when deleting roles and users.
  • Parsing Based on Types View
  • Requirement documents can be imported and parsed. The parsing can be performed based on types. A parsing schema must be described in a Types file. As illustrated in FIG. 7, many types files can be predefined, covering commonly used tools such as diagramming software, e.g., Visio 702; requirement management tools, e.g., DOORS 704 and 706, and Rational Requisite Pro 708; word processing programs, e.g., MS Word 710; spreadsheet programs, e.g., Excel 712, and authoring and publishing software, e.g., Framemaker 714. The types file can be a converter so that it can understood how requirements are described in the reference document.
  • FIG. 8 illustrates an example of requirements in an MS Word file. As illustrated in FIG. 8, appropriate styles must be applied to the requirement ID 802 and requirement text 804 so that the document can be parsed as the author intends.
  • FIGS. 9 and 10 illustrate examples of a type editor. The MS Word style used in the document, including the requirement ID 802 and requirement text 804, must be described in the type editor fields 902 and 1002, so that the MS Word file can be parsed correctly.
  • Groups View
  • Verification Groups for a project can be created under a user. FIG. 5 illustrates an example of selecting, creating, renaming or deleting a group view in a “Verification Groups” dialog 500. Referring to FIG. 5, a verification group is created by clicking the “New Group” button 502. A dialog box “Enter Group Information” 518 appears when the “New Group” button 502 is clicked. The name of the verification group can be entered in the name text field 514. In this example, the group name “High Priority” is entered in the name text field 514. In addition, description “Must be implemented in the current spiral” is entered in the description text field 516. When the “OK” button 520 is clicked, a verification group is created.
  • Once a Verification Group is created, a user can highlight the group and click on the “Rules >” button 508 to edit verification rule(s) for a given group. FIG. 6 illustrates an example of editing rules for a given group in an “Edit Rules” dialog 600. Referring to FIG. 6, when the “New” button 610 is clicked, a “New Rule” dialog 616 appears. In the “New Rule” dialog, the rules specify that the requirement must satisfy “Unit Testing” and must be completed by “The Requirement's Assignee” in text fields 602 and 604. The verification rules available for selection can include: Code Review, Quality Review, System Test, Unit Testing, Sub-System Test and Integration Test. It can also be decided whether the user assigned to the requirement is allowed to execute the test, or if another user must execute the test. When the “OK” button 606 is clicked, the new rules are created under the “High Priority” group. The “<Group” 608 button can be used to return to the “Verification Groups” dialog 500. The “Save and Use” button 612 can be used to save the rules for future use. The “Use Existing” button 614 can be used to select saved rules for a given group.
  • Referring back to FIG. 5, the “Rename Group” button 504 can be used to rename the group, once created. The “Delete Group” button 506 can be used to delete a group. The “Save and Use” button 510 can be used to save the group information setting for future use. The “Use Existing” button 512 can be used to select saved group information setting for a given group.
  • With a group being defined as described above, requirements can be associated with the group. FIG. 11 illustrates an example of ungrouped requirements and grouped requirements. In FIG. 11, REQ 1 1102 and REQ 2 1104 are ungrouped requirements. REQ 3 1106 and REQ 4 1108 are included under the group named “Static Testing.”
  • Sibling Requirement View
  • FIG. 12 illustrates an example of a sibling requirement view. In FIG. 12, two sibling requirements 1202 and 1204 correspond with the requirement 1206. Sibling requirement 1202 is for code review, sibling requirement 1204 is for quality review.
  • Verification can be driving by the set of sibling requirements, and each requires an individual test run to be executed. A requirement is verified only when all sibling requirement corresponding to the requirement have been verified.
  • FIG. 13 illustrates another example of a sibling requirement view. In FIG. 13, sibling requirement 1306 is under the group named “Static Testing” 1304 associated with a developer, named “Sam Brown” 1302. The sibling requirement 1306 indicates that the verification task is code review. In this example, the verification status 1308 of the sibling requirement 1306 is “Passed.” It is also indicated that source files named CashRegister.cpp and Backbeat.cpp 1310 and 1312 are associated with the sibling requirement 1306.
  • Project View
  • As shown in FIG. 4C, the GUI can have a tabbed format to provide users with different views (e.g., Project, Verification, Define Requirement, Requirement Information, Assign Users, Map Procedures, and Procedures) that can be selected and actions that can be performed based on their assigned roles. FIG. 4C illustrates a GUI 408 that can be displayed when the Project View tab is selected. The project GUI 408 can display all the requirements assigned to and by the user (e.g., requirements in bold type can represent those assigned to the user and requirements not in bold type can represent those that the user has assigned).
  • The project GUI 408 includes a Current Requirement drop-down menu 409, which can be used to select and display a particular requirement for the project. The GUI 408 also includes buttons, such as an Open Project button 410 a, which can be used to select a project or subproject file for loading, an Update Sub-Projects button 410 b, which can be selected to update/synchronize all currently checked-in sub-projects with recent modifications to the requirements for the project, a Status Report button 410 c, which can be selected to display a status report based on the current requirements for the project, an Add Source button 410 d, which can be selected to add/upload a source file of code to the current project, a Remove Source button 410 e, which can be selected to remove a currently selected source code file from the current project, a Unit Test button 410 f, which can be selected to launch an external tool for unit testing (e.g., LDRA Testbed™ and TBrun™), and a Setup Wizard button 410 f, which can be selected to setup roles and users, if the current user has the necessary permission, as described herein. Additional elements of the project GUI 408 include a User Guide button 411, which can be selected to display a user guide, as well as Exit and Save buttons 413 and 414, which can be selected to exit the tool and save the current project, respectively.
  • The project GUI 408 can also display a Project Tree 412 to show the requirements that are assigned to the user and any source code files added to the project. The Project Tree 412 can display each requirement by number, name, reference identifier and type, where different icons can be used to represent different types of requirements. Additionally, an “X” symbol can be used over a requirements icon to indicate that the corresponding requirement is unverified. To view more information about a particular requirement, the user can select the Requirement Information tab, as described herein.
  • Updating sub-projects can be performed to distribute modifications to requirements of the project to affected sub-projects. To update sub-projects, users should first check-in their sub-projects. Then, after modifying the requirement (e.g., re-assigning the requirement, un-verifying the requirement, etc.), the Update Sub-Projects button 410 b can be selected to disseminate the modification to all of the affected checked-in sub-projects so that when the users subsequently check-out their sub-projects, they can access the modification. While only users working on sub-projects affected by the requirements modification need check-in their sub-projects before updating sub-projects, all users should check-in their sub-projects to make a modification to users (e.g., when adding or removing users to/from the project).
  • In one embodiment, a user can generate a status report to display the current status of all requirements associated with the user by selecting the Status Report button 410 c. The status report can provide a summary of the requirements assigned to or by the user and can display detailed requirement attributes such as, requirement name, requirement number, requirement document, requirement body, user assigned to the requirement, and the role of the assigned user. As the project progresses and procedures are mapped to the requirements, as described herein, the status report can be updated to include a table of mapped procedures for each requirement. The table can display detailed attributes of the mapped procedures, such as the procedure name, the name and location of the source code file, the path coverage achieved, the branch decision coverage achieved, the MC/DC coverage achieved, and the statement coverage achieved. The achieved coverage fields in the table can remain empty until unit testing of the mapped procedure has been performed, as described herein. After unit testing is performed, these fields can be updated to show the coverage achieved. Additionally, after unit testing is performed, the status report can indicate a percentage of the tested mapped procedures achieving the desired coverage. The status report can also be configured to distinguish how verified and unverified requirements are displayed, for example, by using different color text.
  • After requirements have been defined and users have been assigned to the defined requirements, as described herein, source code that has been developed by the users can be added to the project by selecting the Add Source button 410 d. Once added, the source code can be displayed in the Project Tree 412. Note that source code files can be added to the project but not to the requirements themselves because procedures in the source code files, not the source code files themselves, can be mapped to the requirements, as described herein. Source code files can also be removed from the project by selecting the source code file to be removed in the Project Tree 412 and pressing the Remove Source button 410 e.
  • Requirement Information View
  • FIG. 4D illustrates a GUI 415 that can be displayed when the Requirement Information tab is selected. The requirement information GUI 415 can display information about the current selected requirement. In particular, the requirement information GUI 415 can group the information about the currently selected requirement into three areas of interest: test configuration, test management and requirement nomenclature. A Test Configuration drop-down menu 416 can be used to view and edit information about the test configuration properties of the currently selected requirement, a Test Management drop-down menu 418 can be used to view and edit information about the test management properties of the currently selected requirement, and a Requirement Nomenclature drop-down menu 417 can be used to view and edit information about the requirement nomenclature of the currently selected requirement. The requirement information GUI 415 includes a View/Edit area 419, in which the selected requirement can be displayed and/or edited. The View/Edit area 419 can be grayed out to indicate when the user is not permitted to edit the value or description associated with the selected requirement information.
  • Define Requirement View
  • During the life span of a project, there can be a need to introduce new requirements or refine existing requirements. To define a requirement, the Define Requirement tab can be selected. FIG. 4E illustrates a GUI 420 that can be displayed when the Define Requirement tab is selected. Using the define requirement GUI 420, the user can create and add low-level or derived requirements to the project, depending on the permissions assigned to the user's corresponding role. As described herein, high-level requirements include requirements captured by the requirement capture tool and imported into the project. Low-level requirements include requirements that are associated with a high-level requirement. Derived requirements include requirements not captured by the requirements capture tool but defined in TBmanager™ and are inferred or derived from high-level or low-level requirements.
  • As shown in FIG. 4E, the define requirement GUI 420 includes a Requirement Name field 421 that can be used to enter the name of the requirement being defined, Requirement Type radio buttons 422 that can be used to select whether the requirement being defined is a derived (DV) or low-level (LL) requirement, and a Reference Requirement drop-down menu 423 that can be used when defining low-level requirements to select the high-level requirement with which the low-level requirement is associated (otherwise “None (DV Requirement)” can be selected). The define requirement GUI 420 also includes a Requirement Number field 424 that can be used to enter the number of the requirement being defined. In one embodiment, each requirement for the project requires a unique identification number, which can be automatically filled in by TBmanager™. The define requirement GUI 420 further includes a Requirement Document Path field 425 that can be used to enter the path to a document detailing the requirement being defined (the Browse button can be used to locate the document), a Requirement Body field 426 that can be used to enter a brief description of the requirement being defined, a Clear button 427 that can be used to clear all fields in the define requirement GUI 420, and a Create LL/DV Requirement button 428 that can be pressed to create the new requirement. In one embodiment, TBmanager™ can automatically use values specified in a template when importing requirements into the project as values for the desired code coverage for the new requirement. Newly defined low-level or derived requirements can be displayed in the Project Tree 412.
  • During the life span of a project, it might be necessary to dismiss or ignore a requirement so that it will no longer be considered for verification purposes. A user can select a requirement to be de-allocated in the Project Tree 412 via the project GUI 408 and can de-allocate the selected requirement using a De-allocate/Re-allocate Current Requirement button 429 via the define requirement GUI 420. The De-allocate/Re-allocate Current Requirement button 429 can be configured as a context-sensitive button with respect to the selected requirement so that it toggles between “De-Allocate Current Requirement” and “Re-allocate Current Requirement” as appropriate. Thus, a user can re-allocate a de-allocated requirement in a similar manner by selecting the de-allocated requirement in the Project Tree 412 via the project GUI 408 and can re-allocate the selected requirement using the De-allocate/Re-allocate Current Requirement button 429 via the define requirement GUI 420.
  • Assign Users View
  • Having setup the roles and users of the project, users can be assigned requirements to work on by selecting the Assign Users tab. FIG. 4F illustrates a GUI 430 that can be displayed when the Assign Users tab is selected. Using the assign users GUI 430, a user having the necessary permission can assign users to requirements and create sibling requirements. As described herein, a sibling requirement can be created in TBmanager™ for the purposes of requirement diversification and task management and represents a copy of a high-level, low-level or derived requirement for the project. A requirement that is to be assigned can be selected from the Project Tree 412 via the project GUI 408 or from a Current Requirement drop-down menu via the assign users GUI 430.
  • The assign users GUI 430 includes an “Assigned to this Requirement” field having a User field 431 that can display a name of a user assigned to the current requirement and a Role field 432 that can display the role assigned to the user. The assign users GUI 430 also includes an “Assign User” field having a Filter by Role drop-down menu 433 that can be used to identify the users 435 for the project who are available for selection based on their corresponding role 434. An Assign to Requirement button 436 can be selected to assign a selected user from the identified users 435 to the current requirement.
  • To finish the assignment and create a sub-project for the user, the Save button 414 can be selected via the project GUI 408, followed by the Update Sub-Projects button 410 b. In one embodiment, a directory named “Sub-Projects” can be established in the project directory to contain all of the users' sub-projects. Each user can have a separate sub-projects directory that can be automatically created when first assigned a requirement. Users can then open their respective sub-projects to work on assigned requirements. The users can copy their sub-project directories to different machines (e.g., their own workstations or laptops with TBmanager™ installed) to work on assigned requirements. Users can then launch TBmanager™ on their machines, select the Open Project button 410 a via the project GUI 408, navigate to their sub-project directory, and select the appropriate sub-project to work on. Users can be asked to login by entering their name. The project GUI 408 can then refresh itself to display the user's project and the assigned requirements.
  • The assign users GUI 430 can also be used to create a sibling requirement, which is a copy of an existing high-level, low-level or derived requirement. The sibling requirement can be identical to the corresponding high-level, low-level or derived base requirement except for a unique identifier assigned to the sibling requirement. A sibling requirement can duplicate a base requirement thread at the time the sibling requirement is created. In this way, sibling requirements can enable a user to assign the same requirement to multiple users having different roles (a sibling cannot be assigned to two users of the same role).
  • To create a sibling requirement, one of the users 435 displayed via the assign users GUI 430 can be selected and assigned to the sibling requirement by selecting a Create Sibling Req+Assign button 437. In one embodiment, the user assigned to the sibling requirement should have a different role than the user assigned to the base requirement. A newly created sibling requirement can be viewed via the project GUI 408 and displayed in the Project Tree 412 as a child of the base requirement. Only users with permission to Make Sub-Projects should be enabled to create sibling requirements.
  • Because sibling requirements can be considered exact copies of a corresponding base requirement, if the base requirement changes, then all of its associated sibling requirements should be de-allocated, as described herein. Then, new sibling requirements of the modified base requirement can be created and assigned to the appropriate users. If the base requirement has a new procedure assigned to it, has its requirement body changed, or any other change happens that might affect the conditions under which the base requirement can be verified, new sibling requirements should to be created.
  • Map Procedures View
  • FIG. 4G illustrates a GUI 438 that can be displayed when the Map Procedures tab is selected. Having added source code files developed by the users to the project, as described herein, the map procedures GUI 438 can be used to select an added source code file, analyze the selected source code file for available procedures, and map selected procedures to a current selected requirement. The Project Source Files drop-down menu 439 can be used to select a source code file that has been added to the current project and return a list of procedures 442 found in the selected source code file. For example, the LDRA Testbed™ tool can be invoked to analyze the selected source code file and return the identified list of procedures 442 to TBmanager™.
  • The selected source code file can also be analyzed statically and/or interactively for conformance with project coding rules and quality metrics by selecting the Analyze Procedures button 440 and Analyze Interactively button 441, respectively. The LDRA Testbed™ tool can also be invoked to perform the static and/or interactive analysis of the selected source code file. If interactive analysis is desired, the user can perform code review, quality review, and design review analysis. Upon completion of the analysis, the map procedures GUI 438 can display the identified procedures 442 found in the selected source code file. Using the Map to Current Requirement button 444, the user can map particular identified procedures 442 to the current requirement, which can be selected using the Current Requirement drop-down menu or the Project Tree 412 via the project GUI 408. Similarly, the Unmap Selected button 443 can be selected to unmap particular identified procedures 442 from the current requirement. Having mapped procedures to requirements, the user can select the Procedures tab to view a list of the procedures mapped to the current requirement.
  • Procedures View
  • The user can select a mapped procedure of a current requirement and view its corresponding input and output (I/O) variables via a procedures GUI 445, shown in FIG. 4H. The procedures GUI 445 includes a Select Procedure drop-down menu 446, which can be used to select a procedure from those procedures that are mapped to the current requirement. The current requirement can be selected from the Current Requirement drop-down menu or from the Project Tree 412 via the project GUI 408. As a result of selecting a mapped procedure, the procedures GUI 445 can be updated to display the I/O variables of the selected mapped procedure in the I/O Variables field 447. Additionally, the procedures GUI 445 includes a Desired Coverage field 449, which can be used to modify the desired code coverage values (e.g., Statement, Branch, MC/DC, and Path coverage values) for the current requirement, and a Coverage Achieved at Verification field 450, which can be used to view the achieved coverage after unit testing. The Unmap This Procedure button 448 can be selected to unmap the selected mapped procedure from the current requirement.
  • Once procedures have been mapped to requirements, unit testing can be initiated. First, a requirement having mapped procedures to be tested can be selected either from the Project Tree 412 or the Current Requirement drop-down menu 409 via the project GUI 408. Next, to initiate the unit test, the source code file containing the procedures that are mapped to the selected requirement can be selected, followed by the Unit Test button 410 f. An external unit test tool can then be invoked to perform the unit test. For example, LDRA TBrun™ is a unit test tool that can be invoked via the LDRA Testbed™ tool. Using the external test tool, test cases for the mapped procedures can be created. A mapped procedure to be tested can then be selected, inputs and expected outputs for the test case can be entered, and the test case can be run.
  • If results of the test case(s) are satisfactory and desired code coverage is achieved, completion of requirement verification should be confirmed. At least one test case for each mapped procedure for a requirement should be performed before confirming completion of requirement verification. After closing the external unit test tool, TBmanager™ can refresh the Project Tree 412 to display the requirement as verified (e.g., the corresponding requirements icon can be displayed without the “X” symbol). The project manager can now review the unit test information for the project to assess the users' work.
  • Verification View
  • Once a user has performed unit testing on the mapped procedure(s) for a requirement, the requirement can be displayed as “verified” in the Project Tree 412, shown in the project GUI 408. Because the unit testing of the mapped procedure(s) may not have achieved the desired coverage, however, the project manager, or other user(s) having the necessary permission, should review the results of the unit testing and decide whether the requirement should actually be considered verified.
  • Depending on the permissions assigned to a user, the user can verify whether a requirement has met the desired code coverage by selecting the Verification tab to access a verification GUI 451, shown in FIG. 4I. To verify a requirement, the user can select the requirement to be verified from the Project Tree 412 via the project GUI 408 or from the Current Requirement drop-down menu via the verification GUI 451. The verification GUI 451 includes a Details field 453 displaying the current status of the selected requirement 452. The Details field 453 indicates the user assigned to the selected requirement 452 and their role, the expected code coverage, and the achieved code coverage, which can be displayed according to percentages of mapped procedures achieving the desired coverage. If the user is satisfied with the coverage achieved for the selected requirement the user can press the Verify button 454 to maintain the current status of the selected requirement as verified. However, if the user is unsatisfied with the coverage achieved for the selected requirement, the user press the Un-verify button 455 to change the current status of the selected requirement to unverified. Because un-verifying a requirement modifies that requirement, the user should update any sub-projects associated with the requirement.
  • With respect to verification of sibling requirements, a sibling requirement acts much like a low-level requirement. That is, in order for a base requirement to be considered verified, all of its sibling requirements must be verified first. For example, if a developer user has been assigned a low-level requirement having two sibling requirements, one for an IVV user and another for a QA user, the developer cannot indicate the low-level requirement is verified until the IVV and QA users indicate the corresponding sibling requirements are verified.
  • A exemplary usage scenario for TBmanager™ is as follows. First, the project manager can set-up a project based on captured high-level requirements, create low-level, derived and sibling requirements (if appropriate), and assign requirements to users. Users can check-out their respective sub-projects, established when the project manager assigns requirements to the users. That is, the users can make a copy of their sub-projects for the purpose of performing remote operations on the sib-projects. Users can modify the sub-project by mapping procedures and testing and analyzing source code, among other tasks. Users can then check-in their modified sub-projects. That is, the users can copy the updated contents of the sub-projects back into the project's directory tree. The project manager can subsequently log-in and obtain a complete and current view of all aspects of the project.
  • Defect View
  • FIG. 4J illustrates a GUI 456 that can be displayed when the Defect tab is selected. In one embodiment, a user can track defects in source code for the project via the defects GUI 456. For example, the defects GUI 456 can be used to track defects (i.e., non-conformances) in source code based on the results of the analyses performed by the static analysis tool. As shown in FIG. 4J, the user can add a defect to be tracked by selecting the “Add Defect” button 457. Added defects 458 are displayed with information about the defect, including, for example, a defect number, date created, status, and user assigned to the defect, as well as information regarding disposition of the defect. Added defects 458 can be also be selected for editing.
  • CONCLUSION
  • The present invention has been described with reference to several exemplary embodiments, however, it will be readily apparent to persons of skill in the relevant art(s) that it is possible to embody the invention in specific forms other than those of the exemplary embodiments described above. This may be done without departing from the scope of the invention. These exemplary embodiments are merely illustrative and should not be considered restrictive in any way. The scope of the invention is given by the appended claims, rather than the preceding description, and all variations and equivalents which fall within the range of the claims are intended to be embraced therein.

Claims (21)

What is claimed is:
1. A method for ensuring traceability between software requirements and test cases, comprising:
storing, in a testing database, a plurality of test case data entries, wherein each test case data entry includes at least a test case associated with a software program and one or more test attributes associated with the test case;
receiving, by a receiving device, a plurality of software requirements, wherein each software requirement is a requirement associated with the software program;
identifying, by a processing device, at least one test case data entry for each software requirement of the plurality of software requirements associated with the respective software requirement based on the one or more test attributes included each of the associated at least one test case data entry;
executing, by the processing device, the test case included in each of the plurality of test case data entries using the software program, wherein executing each test case produces a pass or fail result; and
transmitting, by a transmitting device, data associated with the at least one test case data entry associated with each software requirement of the plurality of software requirements, wherein the transmitted data includes at least the pass or fail result produced for the included test case.
2. The method of claim 1, wherein the requirements associated with the software program are based on one or more industry standards.
3. The method of claim 1, further comprising:
analyzing, by the processing device, the produced pass or fail result for each test case included in each test case data entry associated with a software requirement of the plurality of software requirements to determine a code coverage of the software program.
4. The method of claim 3, further comprising:
transmitting, by the transmitting device, the determined code coverage of the software program.
5. The method of claim 1, wherein
the testing database, receiving device, processing device, and transmitting device are included in a first module of a computing device, and
the plurality of software requirements are received from a second module of the computing device.
6. The method of claim 5, wherein the second module is a software requirements traceability tool.
7. The method of claim 7, wherein the software requirements traceability tool includes one of: IBM® Rational® DOORS®, IBM® Rational® RequisitePro®, and Dassault Systèmes® Reqtify®.
8. A system for ensuring traceability between software requirements and test cases, comprising:
a testing database configured to store a plurality of test case data entries, wherein each test case data entry includes at least a test case associated with a software program and one or more test attributes associated with the test case;
a receiving device configured to receive a plurality of software requirements, wherein each software requirement is a requirement associated with the software program;
a processing device configured to
identify at least one test case data entry for each software requirement of the plurality of software requirements associated with the respective software requirement based on the one or more test attributes included each of the associated at least one test case data entry, and
execute the test case included in each of the plurality of test case data entries using the software program, wherein executing each test case produces a pass or fail result; and
a transmitting device configured to transmit data associated with the at least one test case data entry associated with each software requirement of the plurality of software requirements, wherein the transmitted data includes at least the pass or fail result produced for the included test case.
9. The system of claim 8, wherein the requirements associated with the software program are based on one or more industry standards.
10. The method of claim 1, wherein the processing device is further configured to analyze the produced pass or fail result for each test case included in each test case data entry associated with a software requirement of the plurality of software requirements to determine a code coverage of the software program.
11. The system of claim 10, wherein the transmitting device is further configured to transmit the determined code coverage of the software program.
12. The system of claim 8, wherein
the testing database, receiving device, processing device, and transmitting device are included in a first module of a computing device, and
the plurality of software requirements are received from a second module of the computing device.
13. The system of claim 12, wherein the second module is a software requirements traceability tool.
14. The system of claim 13, wherein the software requirements traceability tool includes one of: IBM® Rational® DOORS®, IBM® Rational® RequisitePro®, and Dassault Systèmes® Reqtify®.
15. A non-transitory computer-readable recording medium configured to store program code executable by a processor of a computing device, wherein execution of the program code is configured to cause the computing device to perform a method for ensuring traceability between software requirements and test cases, comprising:
storing, in a testing database, a plurality of test case data entries, wherein each test case data entry includes at least a test case associated with a software program and one or more test attributes associated with the test case;
receiving, by a receiving device, a plurality of software requirements, wherein each software requirement is a requirement associated with the software program;
identifying, by a processing device, at least one test case data entry for each software requirement of the plurality of software requirements associated with the respective software requirement based on the one or more test attributes included each of the associated at least one test case data entry;
executing, by the processing device, the test case included in each of the plurality of test case data entries using the software program, wherein executing each test case produces a pass or fail result; and
transmitting, by a transmitting device, data associated with the at least one test case data entry associated with each software requirement of the plurality of software requirements, wherein the transmitted data includes at least the pass or fail result produced for the included test case.
16. The non-transitory computer-readable recording medium of claim 15, wherein the requirements associated with the software program are based on one or more industry standards.
17. The non-transitory computer-readable recording medium of claim 15, wherein the method further comprises:
analyzing, by the processing device, the produced pass or fail result for each test case included in each test case data entry associated with a software requirement of the plurality of software requirements to determine a code coverage of the software program.
18. The non-transitory computer-readable recording medium of claim 17, wherein the method further comprises:
transmitting, by the transmitting device, the determined code coverage of the software program.
19. The non-transitory computer-readable recording medium of claim 15, wherein
the testing database, receiving device, processing device, and transmitting device are included in a first module of the computing device, and
the plurality of software requirements are received from a second module of the computing device.
20. The non-transitory computer-readable recording medium of claim 19, wherein the second module is a software requirements traceability tool.
21. The non-transitory computer-readable recording medium of claim 20, wherein the software requirements traceability tool includes one of: IBM® Rational® DOORS®, IBM® Rational® RequisitePro®, and Dassault Systèmes® Reqtify®.
US14/568,026 2007-04-03 2014-12-11 Automated management of software requirements verification Abandoned US20150095890A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US14/568,026 US20150095890A1 (en) 2007-04-03 2014-12-11 Automated management of software requirements verification

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US90747407P 2007-04-03 2007-04-03
US12/078,695 US8949770B2 (en) 2007-04-03 2008-04-03 Automated management of software requirements verification
US14/568,026 US20150095890A1 (en) 2007-04-03 2014-12-11 Automated management of software requirements verification

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US12/078,695 Continuation US8949770B2 (en) 2007-04-03 2008-04-03 Automated management of software requirements verification

Publications (1)

Publication Number Publication Date
US20150095890A1 true US20150095890A1 (en) 2015-04-02

Family

ID=39831255

Family Applications (2)

Application Number Title Priority Date Filing Date
US12/078,695 Expired - Fee Related US8949770B2 (en) 2007-04-03 2008-04-03 Automated management of software requirements verification
US14/568,026 Abandoned US20150095890A1 (en) 2007-04-03 2014-12-11 Automated management of software requirements verification

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US12/078,695 Expired - Fee Related US8949770B2 (en) 2007-04-03 2008-04-03 Automated management of software requirements verification

Country Status (5)

Country Link
US (2) US8949770B2 (en)
EP (1) EP2145252A4 (en)
CN (1) CN101689111A (en)
IL (1) IL201368A0 (en)
WO (1) WO2008124038A1 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9122803B1 (en) * 2010-10-26 2015-09-01 Interactive TKO, Inc. Collaborative software defect detection
US20190114148A1 (en) * 2017-10-16 2019-04-18 Bank Of America Corporation Intelligent checking engine
US20220342663A1 (en) * 2021-04-22 2022-10-27 Nadav Barkaee Systems and method for analyzing software and testing integration
US11785015B2 (en) 2021-02-24 2023-10-10 Bank Of America Corporation Information security system for detecting unauthorized access requests

Families Citing this family (139)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050137926A1 (en) * 2003-12-17 2005-06-23 International Business Machines Corporation Method and apparatus for dynamic device allocation for managing escalation of on-demand business processes
US8713524B2 (en) * 2005-04-06 2014-04-29 Microsoft Corporation Memory management configuration
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US8196100B2 (en) * 2007-04-06 2012-06-05 International Business Machines Corporation Content management system for computer software with dynamic traceability between code and design documents
US8312415B2 (en) * 2007-04-17 2012-11-13 Microsoft Corporation Using code analysis for requirements management
CN101430643B (en) * 2007-11-05 2012-06-27 国际商业机器公司 Method and apparatus for providing item development environment, and item development system
US8627287B2 (en) * 2007-11-29 2014-01-07 Microsoft Corporation Prioritizing quality improvements to source code
US8176464B2 (en) * 2007-12-24 2012-05-08 Infosys Technologies Limited Method and framework for securing a source code base
US9495132B2 (en) * 2008-07-15 2016-11-15 Oracle International Corporation Release management systems and methods
US8898647B2 (en) * 2008-10-09 2014-11-25 Siemens Aktiengesellschaft Method and apparatus for test coverage analysis
US8549491B2 (en) * 2008-12-05 2013-10-01 Electronics And Telecommunications Research Institute Apparatus and method for application testing of embedded system
US8359568B2 (en) * 2008-12-22 2013-01-22 International Business Machines Corporation Method and system for automatically adding generic change log to legacy application
US8612938B2 (en) * 2009-01-05 2013-12-17 Tata Consultancy Services Limited System and method for automatic generation of test data to satisfy modified condition decision coverage
US20110271253A1 (en) * 2010-04-28 2011-11-03 International Business Machines Corporation Enhancing functional tests coverage using traceability and static analysis
JP5937577B2 (en) 2010-05-19 2016-06-22 グーグル インコーポレイテッド Bug clearing house
US8782626B2 (en) * 2010-06-30 2014-07-15 International Business Machines Corporation Search suggestions for static code analysis
CN102486808A (en) * 2010-12-03 2012-06-06 北京晶智意达科技有限公司 Integrating method of integrated circuit back-end verification tool
US20120246609A1 (en) 2011-03-24 2012-09-27 International Business Machines Corporation Automatic generation of user stories for software products via a product content space
US8438532B2 (en) 2011-04-19 2013-05-07 Sonatype, Inc. Method and system for scoring a software artifact for a user
US8935654B2 (en) * 2011-04-21 2015-01-13 Accenture Global Services Limited Analysis system for test artifact generation
US9201772B1 (en) * 2011-05-08 2015-12-01 Panaya Ltd. Sharing test scenarios among organizations while protecting proprietary data
US9170809B1 (en) * 2011-05-08 2015-10-27 Panaya Ltd. Identifying transactions likely to be impacted by a configuration change
US9201773B1 (en) * 2011-05-08 2015-12-01 Panaya Ltd. Generating test scenario templates based on similarity of setup files
US9201774B1 (en) * 2011-05-08 2015-12-01 Panaya Ltd. Generating test scenario templates from testing data of different organizations utilizing similar ERP modules
US9069904B1 (en) * 2011-05-08 2015-06-30 Panaya Ltd. Ranking runs of test scenarios based on number of different organizations executing a transaction
US9170925B1 (en) * 2011-05-08 2015-10-27 Panaya Ltd. Generating test scenario templates from subsets of test steps utilized by different organizations
US9317404B1 (en) * 2011-05-08 2016-04-19 Panaya Ltd. Generating test scenario templates from test runs collected from different organizations
US9134961B1 (en) * 2011-05-08 2015-09-15 Panaya Ltd. Selecting a test based on connections between clusters of configuration changes and clusters of test scenario runs
US9348735B1 (en) * 2011-05-08 2016-05-24 Panaya Ltd. Selecting transactions based on similarity of profiles of users belonging to different organizations
US9092579B1 (en) * 2011-05-08 2015-07-28 Panaya Ltd. Rating popularity of clusters of runs of test scenarios based on number of different organizations
US8612936B2 (en) 2011-06-02 2013-12-17 Sonatype, Inc. System and method for recommending software artifacts
US8639668B2 (en) 2011-07-05 2014-01-28 International Business Machines Corporation Structured requirements management
US8473894B2 (en) 2011-09-13 2013-06-25 Sonatype, Inc. Method and system for monitoring metadata related to software artifacts
US8627270B2 (en) 2011-09-13 2014-01-07 Sonatype, Inc. Method and system for monitoring a software artifact
US9141378B2 (en) 2011-09-15 2015-09-22 Sonatype, Inc. Method and system for evaluating a software artifact based on issue tracking and source control information
US8819638B2 (en) * 2011-09-20 2014-08-26 Alcatel Lucent Application protoyping suite
US8943470B2 (en) 2011-09-23 2015-01-27 The Mathworks, Inc. Requirements framework
US20130080140A1 (en) * 2011-09-23 2013-03-28 The Mathworks, Inc. Using a requirements framework
US8799869B2 (en) * 2011-10-03 2014-08-05 Accenture Global Services Limited System for ensuring comprehensiveness of requirements testing of software applications
US8543444B2 (en) 2011-10-21 2013-09-24 NeighborBench LLC Method and system for assessing compliance risk of regulated institutions
US8776012B2 (en) * 2011-10-25 2014-07-08 International Business Machines Corporation Automatic scheduling of review meetings
CN102662980B (en) * 2012-01-13 2014-02-26 河北省电力勘测设计研究院 Automatic generation method for tender documents of power station
US8656343B2 (en) * 2012-02-09 2014-02-18 Sonatype, Inc. System and method of providing real-time updates related to in-use artifacts in a software development environment
CN103246948B (en) * 2012-02-14 2016-08-10 华为技术有限公司 The method and device of demand management
US8869096B2 (en) * 2012-02-14 2014-10-21 Huawei Technologies Co., Ltd. Requirement management method and apparatus
US9324126B2 (en) 2012-03-20 2016-04-26 Massively Parallel Technologies, Inc. Automated latency management and cross-communication exchange conversion
US8762946B2 (en) * 2012-03-20 2014-06-24 Massively Parallel Technologies, Inc. Method for automatic extraction of designs from standard source code
US9053442B2 (en) * 2012-05-08 2015-06-09 International Business Machines Corporation Multiple project areas in a development environment
US8825689B2 (en) 2012-05-21 2014-09-02 Sonatype, Inc. Method and system for matching unknown software component to known software component
CN102739470A (en) * 2012-05-29 2012-10-17 百度在线网络技术(北京)有限公司 Method and device for realizing Hadoop system testing
US9323923B2 (en) 2012-06-19 2016-04-26 Deja Vu Security, Llc Code repository intrusion detection
US9141408B2 (en) 2012-07-20 2015-09-22 Sonatype, Inc. Method and system for correcting portion of software application
US9208062B1 (en) * 2012-08-14 2015-12-08 Amazon Technologies, Inc. Promotion determination based on aggregated code coverage metrics
US20140052757A1 (en) * 2012-08-17 2014-02-20 International Business Machines Corporation Techniques providing a software fitting assessment
US9639442B2 (en) * 2012-08-29 2017-05-02 Hcl Technologies Limited Modified condition/decision coverage test case automation
US9971676B2 (en) 2012-08-30 2018-05-15 Toyota Motor Engineering & Manufacturing North America, Inc. Systems and methods for state based test case generation for software validation
US9286187B2 (en) * 2012-08-30 2016-03-15 Sap Se Static enforcement of process-level security and compliance specifications for cloud-based systems
US10089463B1 (en) * 2012-09-25 2018-10-02 EMC IP Holding Company LLC Managing security of source code
US9111040B2 (en) 2013-01-15 2015-08-18 International Business Machines Corporation Integration of a software content space with test planning and test case generation
US9141379B2 (en) * 2013-01-15 2015-09-22 International Business Machines Corporation Automated code coverage measurement and tracking per user story and requirement
US9396342B2 (en) 2013-01-15 2016-07-19 International Business Machines Corporation Role based authorization based on product content space
US9218161B2 (en) 2013-01-15 2015-12-22 International Business Machines Corporation Embedding a software content space for run-time implementation
US9063809B2 (en) 2013-01-15 2015-06-23 International Business Machines Corporation Content space environment representation
US9087155B2 (en) 2013-01-15 2015-07-21 International Business Machines Corporation Automated data collection, computation and reporting of content space coverage metrics for software products
US9081645B2 (en) 2013-01-15 2015-07-14 International Business Machines Corporation Software product licensing based on a content space
US9659053B2 (en) 2013-01-15 2017-05-23 International Business Machines Corporation Graphical user interface streamlining implementing a content space
US9075544B2 (en) 2013-01-15 2015-07-07 International Business Machines Corporation Integration and user story generation and requirements management
US9069647B2 (en) 2013-01-15 2015-06-30 International Business Machines Corporation Logging and profiling content space data and coverage metric self-reporting
US9135263B2 (en) 2013-01-18 2015-09-15 Sonatype, Inc. Method and system that routes requests for electronic files
EP3044719B1 (en) 2013-09-12 2019-08-28 Virsec Systems Inc. Automated runtime detection of malware
JP6209985B2 (en) * 2014-02-10 2017-10-11 富士通株式会社 Product design support program, product design support method, and product design support apparatus
US9262134B2 (en) * 2014-03-21 2016-02-16 International Business Machines Corporation Analysis of source code changes
US10853536B1 (en) * 2014-12-11 2020-12-01 Imagars Llc Automatic requirement verification engine and analytics
WO2015179705A1 (en) * 2014-05-21 2015-11-26 Quantum Fuel Systems Technologies Worldwide, Inc. Enhanced compliance verification system
US10354074B2 (en) * 2014-06-24 2019-07-16 Virsec Systems, Inc. System and methods for automated detection of input and output validation and resource management vulnerability
US9851949B2 (en) * 2014-10-07 2017-12-26 Kevin D. Howard System and method for automatic software application creation
US20160104259A1 (en) * 2014-10-10 2016-04-14 CLAIRE Technologies Practitioner career management method and tool
CN104317711A (en) * 2014-10-22 2015-01-28 牟永敏 Path-based method and system for verifying software implementation and design uniformity
CN104572833B (en) * 2014-12-10 2019-01-29 中车青岛四方机车车辆股份有限公司 A kind of mapping ruler creation method and device
CN104461743B (en) * 2014-12-17 2018-10-16 用友网络科技股份有限公司 The automatically generating device and method of resource and configuration
US9383976B1 (en) * 2015-01-15 2016-07-05 Xerox Corporation Methods and systems for crowdsourcing software development project
US9449292B1 (en) * 2015-01-16 2016-09-20 Amdocs Software Systems Limited System, method, and computer program for automatic high level testing project planning
CN104615540A (en) * 2015-02-10 2015-05-13 上海创景计算机系统有限公司 Code standard management system
US11061705B2 (en) 2015-03-16 2021-07-13 Bmc Software, Inc. Maintaining virtual machine templates
US10223654B2 (en) * 2015-03-23 2019-03-05 Accenture Global Services Limited Automated, accelerated prototype generation system
US9946785B2 (en) 2015-03-23 2018-04-17 International Business Machines Corporation Searching code based on learned programming construct patterns and NLP similarity
US9639450B2 (en) * 2015-06-17 2017-05-02 General Electric Company Scalable methods for analyzing formalized requirements and localizing errors
EP3113016A1 (en) 2015-06-29 2017-01-04 itemis AG Tracing dependencies between development artifacts in a development project
CN105487867B (en) * 2015-11-26 2019-03-22 中国空间技术研究院 A kind of lightweight visual satellite test programming system and method
US10853130B1 (en) 2015-12-02 2020-12-01 Color Genomics, Inc. Load balancing and conflict processing in workflow with task dependencies
US9811439B1 (en) * 2016-04-18 2017-11-07 Color Genomics, Inc. Functional testing of code modifications for read processing systems
US9747085B2 (en) * 2015-12-11 2017-08-29 Paypal, Inc. Source code generation from prototype source
US9990183B2 (en) * 2015-12-28 2018-06-05 Wipro Limited System and method for validating software development requirements
CN105677332A (en) * 2015-12-30 2016-06-15 上海玖镕信息科技有限公司 Software developing requirement management system
WO2017141214A1 (en) * 2016-02-18 2017-08-24 Blueprint Software Systems Inc. System and method for defining and generating requirement data from input records
US9990270B2 (en) * 2016-03-16 2018-06-05 Fair Isaac Corporation Systems and methods to improve decision management project testing
US9807101B1 (en) * 2016-04-29 2017-10-31 Oracle International Corporation Inferring security-sensitive entities in libraries
CN107368407B (en) * 2016-05-11 2021-05-25 北京京东尚科信息技术有限公司 Information processing method and device
KR102419574B1 (en) 2016-06-16 2022-07-11 버섹 시스템즈, 인코포레이션 Systems and methods for correcting memory corruption in computer applications
US10409706B2 (en) * 2016-09-30 2019-09-10 Arizona Board Of Regents On Behalf Of Arizona State University Automated test generation for structural coverage for temporal logic falsification of cyber-physical systems
CN106445824B (en) * 2016-09-30 2019-06-25 南京途牛科技有限公司 A kind of interface synthesis management system of based role
US10732965B2 (en) * 2016-10-13 2020-08-04 Tata Consultancy Services Limited Systems and methods for dynamic generation of questionnaires on programming concepts
US10338892B2 (en) * 2016-11-22 2019-07-02 Accenture Global Solutions Limited Dynamic provisioning of a set of tools based on project specifications
CN106775704B (en) * 2016-12-12 2021-01-26 广州视源电子科技股份有限公司 Software attribute requirement checking method and device
AU2018200523A1 (en) 2017-03-09 2018-09-27 Accenture Global Solutions Limited Smart advisory for distributed and composite testing teams based on production data and analytics
AU2018200643A1 (en) * 2017-03-09 2018-09-27 Accenture Global Solutions Limited Smart advisory for distributed and composite testing teams based on production data and analytics
CN107025114A (en) * 2017-04-17 2017-08-08 广州视源电子科技股份有限公司 A kind of software requirement information matches degree inspection method and system
US10466979B1 (en) * 2017-06-01 2019-11-05 Nationwide Mutual Insurance Company Software requirements creating and tracking system and method
US10866569B2 (en) * 2017-06-14 2020-12-15 Siemens Industry, Inc. Fault detection and diagnostics rule selection
CN107908420A (en) * 2017-11-16 2018-04-13 泰康保险集团股份有限公司 A kind of code process method, apparatus and system
CN107992414B (en) * 2017-11-28 2020-11-17 曲明成 Method for acquiring dependency relationship between process modules based on test cases
JP7036205B2 (en) * 2018-05-07 2022-03-15 日本電気株式会社 System configuration derivation device and system configuration derivation method
CN108920362A (en) * 2018-05-30 2018-11-30 邵阳学院 A kind of test macro of computer software
CN108958792A (en) * 2018-07-03 2018-12-07 郑州云海信息技术有限公司 Product demand management method and system in a kind of software development process
US11763321B2 (en) 2018-09-07 2023-09-19 Moore And Gasperecz Global, Inc. Systems and methods for extracting requirements from regulatory content
US10977156B2 (en) * 2018-10-10 2021-04-13 International Business Machines Corporation Linking source code with compliance requirements
CN109582576B (en) * 2018-11-28 2022-04-19 中国航空工业集团公司西安飞行自动控制研究所 Method for checking demand traceability of civil aircraft flight control system
US10977169B2 (en) * 2018-12-21 2021-04-13 Ncr Corporation Point of sale platform process crawler
US10860294B2 (en) * 2019-01-25 2020-12-08 Rockwell Collins, Inc. Requirements tracing precision validation tool
US11138366B2 (en) * 2019-02-25 2021-10-05 Allstate Insurance Company Systems and methods for automated code validation
US11093365B2 (en) 2019-07-15 2021-08-17 Bank Of America Corporation System for splicing and formatting code via machine learning
CN110806977A (en) * 2019-10-30 2020-02-18 泰康保险集团股份有限公司 Test case set generation method and device based on product requirements and electronic equipment
US11029948B1 (en) * 2019-12-05 2021-06-08 Bank Of America Corporation System for normalizing data dependency effects across an electronic network environment
CN111190406B (en) * 2019-12-25 2022-11-18 中国航空工业集团公司西安飞机设计研究所 Method for testing undercarriage control system software
US11100009B2 (en) 2020-01-03 2021-08-24 Bank Of America Corporation Intelligent detection and ejection of unused application components
CN111813697B (en) * 2020-08-26 2021-07-16 四川新网银行股份有限公司 Test coverage rate statistical method based on test object calling mark
CN114327372A (en) * 2020-09-29 2022-04-12 腾讯科技(深圳)有限公司 Quality demand configuration method, device, equipment and medium
CN112381370A (en) * 2020-11-03 2021-02-19 中国直升机设计研究所 Demand distribution automation method based on DOORS system
US11314922B1 (en) * 2020-11-27 2022-04-26 Moore & Gasperecz Global Inc. System and method for generating regulatory content requirement descriptions
CN112631554A (en) * 2020-12-30 2021-04-09 中国农业银行股份有限公司 Project demand management method, device and equipment
CN112817843A (en) * 2021-01-25 2021-05-18 上海哔哩哔哩科技有限公司 Project management method and system
US11455161B2 (en) * 2021-02-01 2022-09-27 Accenture Global Solutions Limited Utilizing machine learning models for automated software code modification
US20220308988A1 (en) * 2021-03-25 2022-09-29 International Business Machines Corporation Generating project requirements using test scripts
CN113485913B (en) * 2021-06-10 2023-04-07 上海百胜软件股份有限公司 Branch management method, system, equipment and storage medium
CN113791757B (en) * 2021-07-14 2023-08-22 北京邮电大学 Software requirement and code mapping method and system
CN113886278B (en) * 2021-12-08 2022-03-15 卡斯柯信号(北京)有限公司 Method and device for automatically exporting and verifying requirement attribute
CN114896824B (en) * 2022-07-12 2022-10-11 南昌航空大学 Joint simulation integration test verification method and device, readable storage medium and equipment
US11823477B1 (en) 2022-08-30 2023-11-21 Moore And Gasperecz Global, Inc. Method and system for extracting data from tables within regulatory content
US11823133B1 (en) * 2023-04-28 2023-11-21 Citibank, N.A. Core decision engine for managing software development lifecycles

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166094A1 (en) * 2003-11-04 2005-07-28 Blackwell Barry M. Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems
US20060235548A1 (en) * 2005-04-19 2006-10-19 The Mathworks, Inc. Graphical state machine based programming for a graphical user interface
US20070038977A1 (en) * 2005-08-10 2007-02-15 Capital One Financial Corporation Software development tool using a structured format to generate software code
US20080098349A1 (en) * 2001-10-25 2008-04-24 The Mathworks, Inc. Traceability in a modeling environment
US7680632B1 (en) * 2005-03-31 2010-03-16 The Mathworks, Inc. Test precondition items for automated analysis and test generation
US7689970B1 (en) * 2003-10-31 2010-03-30 The Mathworks, Inc. System and method for generating source code from a graphical model
US7729894B1 (en) * 2006-05-12 2010-06-01 The Mathworks, Inc. Test postcondition items for automated analysis and test generation

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5892947A (en) * 1996-07-01 1999-04-06 Sun Microsystems, Inc. Test support tool system and method
US6226784B1 (en) * 1998-10-14 2001-05-01 Mci Communications Corporation Reliable and repeatable process for specifying developing distributing and monitoring a software system in a dynamic environment
US6332211B1 (en) * 1998-12-28 2001-12-18 International Business Machines Corporation System and method for developing test cases using a test object library
US7000187B2 (en) * 1999-07-01 2006-02-14 Cisco Technology, Inc. Method and apparatus for software technical support and training
US7228524B2 (en) * 2002-12-20 2007-06-05 The Boeing Company Method and system for analysis of software requirements
US8225302B2 (en) * 2003-02-13 2012-07-17 Lawrence Taylor Waugh System and method for managing source code and acquiring metrics in software development
WO2005020003A2 (en) * 2003-08-13 2005-03-03 National Instruments Corporation Creating a graphical user interface for selected parameters of a graphical program
US7949738B2 (en) * 2004-02-12 2011-05-24 Sap Aktiengesellschaft Graphical interface for generating and previewing a rule
US7810070B2 (en) * 2004-03-29 2010-10-05 Sas Institute Inc. System and method for software testing
US7640532B2 (en) * 2004-08-25 2009-12-29 International Business Machines Corporation Mapping software code to business logic
KR100711264B1 (en) * 2005-05-03 2007-04-25 삼성전자주식회사 Electronic Device And Control Method Thereof
US7853882B2 (en) * 2006-04-11 2010-12-14 International Business Machines Corporation Portlets having different portlet specific enablement states
US8332827B2 (en) * 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8015509B2 (en) * 2007-11-14 2011-09-06 International Business Machines Corporation Selectively locking GUI controls to prevent accidental operations in a computing environment

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080098349A1 (en) * 2001-10-25 2008-04-24 The Mathworks, Inc. Traceability in a modeling environment
US7689970B1 (en) * 2003-10-31 2010-03-30 The Mathworks, Inc. System and method for generating source code from a graphical model
US20050166094A1 (en) * 2003-11-04 2005-07-28 Blackwell Barry M. Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems
US7680632B1 (en) * 2005-03-31 2010-03-16 The Mathworks, Inc. Test precondition items for automated analysis and test generation
US20060235548A1 (en) * 2005-04-19 2006-10-19 The Mathworks, Inc. Graphical state machine based programming for a graphical user interface
US20070038977A1 (en) * 2005-08-10 2007-02-15 Capital One Financial Corporation Software development tool using a structured format to generate software code
US7729894B1 (en) * 2006-05-12 2010-06-01 The Mathworks, Inc. Test postcondition items for automated analysis and test generation

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Using Rational RequisitePro, Version 2000.02.10, 2000 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9122803B1 (en) * 2010-10-26 2015-09-01 Interactive TKO, Inc. Collaborative software defect detection
US20190114148A1 (en) * 2017-10-16 2019-04-18 Bank Of America Corporation Intelligent checking engine
US10459694B2 (en) * 2017-10-16 2019-10-29 Bank Of America Corporation Intelligent checking engine
US10884708B2 (en) 2017-10-16 2021-01-05 Bank Of America Corporation Intelligent checking engine
US11785015B2 (en) 2021-02-24 2023-10-10 Bank Of America Corporation Information security system for detecting unauthorized access requests
US20220342663A1 (en) * 2021-04-22 2022-10-27 Nadav Barkaee Systems and method for analyzing software and testing integration

Also Published As

Publication number Publication date
EP2145252A4 (en) 2011-12-21
US20080263505A1 (en) 2008-10-23
WO2008124038A8 (en) 2008-12-31
WO2008124038A1 (en) 2008-10-16
IL201368A0 (en) 2010-05-31
US8949770B2 (en) 2015-02-03
CN101689111A (en) 2010-03-31
EP2145252A1 (en) 2010-01-20

Similar Documents

Publication Publication Date Title
US8949770B2 (en) Automated management of software requirements verification
Kahani et al. Survey and classification of model transformation tools
WO2011031328A2 (en) Systems and methods for management of projects for development of embedded systems
Miles et al. Prime: A methodology for developing provenance-aware applications
Mäder et al. Towards automated traceability maintenance
US10853231B2 (en) Detection and correction of coding errors in software development
US7490319B2 (en) Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems
US7913230B2 (en) Computer-implemented methods and systems for generating software testing documentation and test results management system using same
Moreau et al. A templating system to generate provenance
US20050144529A1 (en) Method for defined derivation of software tests from use cases
WO2007124057A2 (en) Computer program generating
Rocha Silva et al. Ensuring the consistency between user requirements and task models: A behavior-based automated approach
Osaiweran et al. Evaluating the effect of a lightweight formal technique in industry
Greevy Enriching reverse engineering with feature analysis
Cagnin et al. PARFAIT: Towards a framework-based agile reengineering process
Balogh et al. Workflow-driven tool integration using model transformations
Pareto et al. Concern coverage in base station development: an empirical investigation
Jumagaliyev et al. A Modelling Language to Support the Evolution of Multi-Tenant Cloud Data Architectures
Anda et al. Traceability management of GRL and SysML models
Kundu Software Engineering: A Systematic Approach
Grossmann et al. A trace management platform for risk-based security testing
US20190310933A1 (en) Externalized definition and reuse of mocked transactions
Busch An Architecture-based Approach for Change Impact Analysis of Software-intensive Systems
Fernández-Izquierdo et al. Towards metrics-driven ontology engineering
Rintala Architecture design of a configuration management system

Legal Events

Date Code Title Description
STCB Information on status: application discontinuation

Free format text: ABANDONED -- AFTER EXAMINER'S ANSWER OR BOARD OF APPEALS DECISION