Claims
- 1. A method for developing software comprising acts of:
a) determining a coupling between a plurality of elements of a software design; and b) determining a sequence of implementation of the plurality of elements based on the coupling.
- 2. The method of claim 1, wherein the act a) further comprises an act of:
a1) determining a coupling between elements of a software design equation.
- 3. The method of claim 2, wherein the act b) further comprises determining a sequence of implementation for a plurality of uncompleted elements of the software design.
- 4. The method of claim 3, further comprising:
including at least one completed element in the sequence of implementation for the plurality of uncompleted elements; and indicating that the at least one completed element should be re-tested.
- 5. The method of claim 2, wherein the design equation includes a design matrix and the act a1) further comprises determining the coupling between elements of a software design equation by examining off-diagonal elements of the software design matrix.
- 6. The method of claim 1, wherein the act b) further comprises an act of:
b1) determining a sequence of implementation using a software design equation describing the software design.
- 7. The method of claim 6, wherein the software design equation includes a lower-triangular software design matrix and the act b1) further comprises acts of:
b2) identifying a top left on-diagonal element of the software design matrix as a first element in the sequence of implementation; b3) identifying an on-diagonal element of the software design matrix on a subsequent line in the software design matrix as a next component in the sequence of implementation; and b4) identifying one or more off-diagonal elements of the software design matrix on the subsequent line as subsequent elements in the sequence of implementation.
- 8. The method of claim 5, further comprising an act of b5) repeating acts b3) and b4) until the sequence of implementation is complete.
- 9. The method of claim 6, wherein the software design equation includes an upper-triangular software design matrix and the act b1) further comprises acts of:
b2) identifying a bottom right on-diagonal element of the software design matrix as a first element in the sequence of implementation; b3) identifying an on-diagonal element of the software design matrix on a preceding line in the software design matrix as a next component in the sequence of implementation; and b4) identifying one or more off-diagonal elements of the software design matrix on the preceding line as subsequent elements in the sequence of implementation.
- 10. The method of claim 9, further comprising an act of b5) repeating acts b3) and b4) until the sequence of implementation is complete.
- 11. The method of claim 1, wherein the act b) further comprises determining a non-iterative sequence of implementation of the plurality of elements.
- 12. The method of claim 6, wherein the design-matrix is non-triangular and the act b1) further comprises:
arranging functional requirements of the design equation so that coupled elements represented in the sequence of implementation as a single element; and identifying the sequence of implementation for the decoupled elements of the design equation.
- 13. The method of claim 1, further comprising an act of:
c) displaying a graphical representation of the sequence of implementation.
- 14. The method of claim 13, wherein the act c) further comprises displaying a Gantt chart describing the sequence of implementation according to a time required to complete implementation of at least one component.
- 15. The method of claim 13, wherein the act c) further comprises displaying a flow chart representing the sequence of implementation as a series of components positioned along a horizontal axis, the coupling of the components illustrated by at least one connector that connects graphical representations of the components.
- 16. The method of claim 15, further comprising determining a sequence of implementation of the components based upon the series of components
- 17. The method of claim 15, further comprising:
distributing the flow chart to a plurality of developers; and coordinating implementation of the components of the flow chart between the plurality of developers based on the sequence of implementation.
- 18. The method of claim 15, further comprising implementing the elements of the flow chart according to a sequence of the series of components of the flow chart.
- 19. The method of claim 15, further comprising modifying a software design by inserting additional components into the series of components of the flow chart.
- 20. The method of claim 1, further comprising an act of exporting the sequence of implementation to an external data file.
- 21. The method of claim 1, further comprising an act of transferring the sequence of implementation to a project planning application.
- 22. The method of claim 21, further comprising displaying the sequence of implementation to a user.
- 23. In a software design equation, having a software design matrix having a plurality of elements, a method for developing software, comprising acts of:
a) modifying the software design matrix to reduce coupling between elements of the software design matrix; and b) determining a sequence of implementation in the software design matrix based on the coupling between the at least two elements.
- 24. The method of claim 23, wherein the software design matrix is a lower-triangular matrix and act a) further comprises an act of:
a1) altering a position of elements in the software design equation to reduce a number of upper off-diagonal elements in the software design matrix.
- 25. The method of claim 23, wherein the software design matrix is an upper-triangular matrix and act a) further comprises an act of:
a1) altering a position of elements in the software design equation to reduce a number of lower off-diagonal elements in the software design matrix.
- 26. The method of claim 23, wherein the act a) further comprises producing a decoupled software design matrix.
- 27. The method of claim 23, wherein the software design matrix is a lower-triangular matrix and act b) further comprises acts of:
b2) identifying a top left on-diagonal element of the software design matrix as a first element in the sequence of implementation; b3) identifying an on-diagonal element of the software design matrix on a subsequent line in the software design matrix as a next component in the sequence of implementation; and b4) identifying one or more off-diagonal elements of the software design matrix on the subsequent line as subsequent elements in the sequence of implementation.
- 28. The method of claim 27 further comprising an act of:
b5) repeating acts b3) and b4) until the sequence of implementation is complete.
- 29. The method of claim 23, wherein the software design matrix is an upper-triangular matrix and act b) further comprises acts of:
b2) identifying a bottom right on-diagonal element of the software design matrix as a first element in the sequence of implementation; b3) identifying an on-diagonal element of the software design matrix on a preceding line in the software design matrix as a next component in the sequence of implementation; and b4) identifying one or more off-diagonal elements of the software design matrix on the preceding line as subsequent elements in the sequence of implementation.
- 30. The method of claim 29 further comprising an act of:
b5) repeating acts b3) and b4) until the sequence of implementation is complete.
- 31. The method of claim 23, wherein the act b) further comprises determining a non-iterative sequence of implementation of the plurality of elements.
- 32. The method of claim 23, further comprising an act of:
c) displaying a graphical representation of the sequence of implementation.
- 33. The method of claim 32, wherein the act c) further comprises displaying a Gantt chart describing the sequence of implementation according to a time required to complete implementation of at least one component.
- 34. The method of claim 32, wherein the act c) further comprises displaying a flow chart representing the sequence of implementation as a series of elements positioned along a horizontal axis, the coupling of the elements illustrated by at least one connector that connects graphical representations of the components.
- 35. The method of claim 23, further comprising an act of exporting the sequence of implementation to an external data file.
- 36. The method of claim 23, further comprising an act of transferring the sequence of implementation to a project planning application.
- 37. The method of claim 1, further comprising displaying the sequence of implementation to a user.
- 38. A digital information product comprising:
a computer-readable medium; and stored on the computer-readable medium, computer program instructions defining a software system that, when executed, allow a user to determine a sequence of implementation of software elements based on coupling between the software elements in a software design.
- 39. The digital information product of claim 38, wherein the program instructions, when executed, allow a user to determine coupling between elements of a software design equation.
- 40. The digital information product of claim 39, wherein the design equation includes a software design matrix and the computer program instructions, when executed, allow a user to determine the coupling between elements of a software design equation by examining off-diagonal elements of the software design matrix.
- 41. The digital information product of claim 38, wherein the computer program instructions, when executed, allow a user to determine a sequence of implementation using a software design equation describing the software design, the software design.
- 42. The digital information product of claim 41, wherein the software design matrix is a lower-triangular matrix and the computer program instructions, when executed, allow a user to:
a) identify a top left on-diagonal element of the software design matrix as a first element in the sequence of implementation; b) identify an on-diagonal element of the software design matrix on a subsequent line in the software design matrix as a next component in the sequence of implementation; and c) identify one or more off-diagonal elements of the software design matrix on the subsequent line as subsequent elements in the sequence of implementation.
- 43. The digital information product of claim 42, wherein the computer program instructions, when executed, further allow a user to:
d) repeat acts b) and c) until the sequence of implementation is complete.
- 44. The digital information product of claim 41, wherein the software design matrix is an upper-triangular matrix and the computer program instructions, when executed, allow a user to:
a) identify a bottom right on-diagonal element of the software design matrix as a first element in the sequence of implementation; b) identify an on-diagonal element of the software design matrix on a preceding line in the software design matrix as a next component in the sequence of implementation; and c) identify one or more off-diagonal elements of the software design matrix on the preceding line as subsequent elements in the sequence of implementation.
- 45. The digital information product of claim 44, wherein the computer program instructions, when executed, further allow a user to:
d) repeat acts b) and c) until the sequence of implementation is complete.
- 46. The digital information product of claim 38, wherein the computer program instructions, when executed, allow a user to determine a non-iterative sequence of implementation of the plurality of elements.
- 47. The digital information product of claim 38, wherein the computer program instructions, when executed, allow a user to display a graphical representation of the sequence of implementation.
- 48. The digital information product of claim 47, wherein the graphical representation is a Gantt chart describing the sequence of implementation according to a time required to complete implementation of at least one element.
- 49. The digital information product of claim 48, wherein the graphical representation is a flow chart representing the sequence of implementation as a series of components positioned along a horizontal axis, the coupling of the components illustrated by at least one connector that connects elements.
- 50. The digital information product of claim 48, wherein the computer program instructions, when executed, allow a user to determine a sequence of implementation of the components based upon the series of components
- 51. The digital information product of claim 48, wherein the computer program instructions, when executed, allow a user to:
distribute the flow chart to a plurality of developers; and coordinate implementation of the components of the flow chart between the plurality of developers based on the sequence of implementation.
- 52. The digital information product of claim 48, wherein the computer program instructions, when executed, allow a user to implement the elements of the flow chart according to a sequence of the series of components of the flow chart.
- 53. The digital information product of claim 48, wherein the computer program instructions, when executed, allow a user to modify a software design by inserting additional components into the series of components of the flow chart.
- 54. The digital information product of claim 38, wherein the computer program instructions, when executed, allow a user to export the sequence of implementation to an external data file.
- 55. The digital information product of claim 38, wherein the computer program instructions, when executed, allow a user to transfer the sequence of implementation to a project planning application.
- 56. The digital information product of claim 55, further comprising displaying the sequence of implementation to a user.
- 57. A method for testing software comprising acts of:
a) determining a coupling between a plurality of elements of a software design; and b) determining a sequence of testing of the plurality of elements based on the coupling.
- 58. The method of claim 57, wherein the act a) further comprises an act of:
a1) determining a coupling between elements of a software design equation.
- 59. The method of claim 58, wherein the design equation includes a software design matrix and the act a1) further comprises determining the coupling between elements of a software design equation by examining off-diagonal elements of the software design matrix.
- 60. The method of claim 58, wherein the matrix is non-triangular and the act b) further comprises:
arranging functional requirements of the design equation so that coupled elements are represented in the sequence of testing as a single element: and identifying a sequence of testing for the decoupled elements of the design equation.
- 61. The method of claim 58, wherein the act b) further comprises an act of:
b1) determining a sequence of testing using a software design equation describing the software design.
- 62. The method of claim 61, wherein the software design equation includes a lower-triangular software design matrix and the act b1) further comprises acts of:
b2) identifying a top left on-diagonal element of the software design matrix as a first element in the sequence of testing; b3) identifying an on-diagonal element of the software design matrix on a subsequent line in the software design matrix as a next component in the sequence of testing; and b4) identifying one or more off-diagonal elements of the software design matrix on the subsequent line as subsequent elements in the sequence of testing.
- 63. The method of claim 62, further comprising an act of: b5) repeating acts b3) and b4) until the sequence of testing is complete.
- 64. The method of claim 61, wherein the software design equation includes an upper-triangular software design matrix act b1) further comprises acts of:
b2) identifying a bottom right on-diagonal element of the software design matrix as a first element in the sequence of testing; b3) identifying an on-diagonal element of the software design matrix on a preceding line in the software design matrix as a next component in the sequence of testing; and b4) identifying one or more off-diagonal elements of the software design matrix on the preceding line as subsequent elements in the sequence of testing.
- 65. The method of claim 64, further comprising an act of: b5) repeating acts b3) and b4) until the sequence of testing is complete.
- 66. The method of claim 57, wherein the act b) further comprises determining a non-iterative sequence of testing of the plurality of elements.
- 67. The method of claim 57, further comprising an act of:
c) displaying a graphical representation of the sequence of testing.
- 68. The method of claim 67, wherein the act c) further comprises displaying a Gantt chart describing the sequence of testing according to a time required to complete testing of at least one element.
- 69. The method of claim 67, wherein the act c) further comprises displaying a flow chart representing the sequence of testing as a series of components positioned along a horizontal axis, the coupling of the elements illustrated by at least one connector that connects graphical representations of the elements.
- 70. The method of claim 67, further comprising determining a sequence of testing of the components based upon the series of components
- 71. The method of claim 67, further comprising:
distributing the flow chart to a plurality of developers; and coordinating testing of the components of the flow chart between the plurality of developers based on the sequence of testing.
- 72. The method of claim 67, further comprising testing the elements of the flow chart according to a sequence of the series of components of the flow chart.
- 73. The method of claim 67, further comprising modifying a software testing path by inserting additional components into the series of components of the flow chart.
- 74. The method of claim 57, further comprising an act of exporting the sequence of testing to an external data file.
- 75. The method of claim 57, further comprising an act of transferring the sequence of testing to a project planning application.
- 76. The method of claim 75, further comprising displaying the sequence of testing to a user.
- 77. In a software design equation, having a software design matrix, a method for testing software, comprising acts of:
a) modifying the software design matrix to reduce coupling between elements software design matrix; and b) determining a sequence of testing in the software design matrix based on the coupling between elements.
- 78. The method of claim 77, wherein the act a) further comprises an act of:
a1) altering a position of elements in the software design equation to reduce a number of upper off-diagonal elements in the software design matrix.
- 79. The method of claim 77, wherein the act a) further comprises producing a decoupled software design matrix.
- 80. The method of claim 77, wherein the software design matrix is a lower-triangular matrix act b) further comprises acts of:
b2) identifying a top left on-diagonal element of the software design matrix as a first element in the sequence of testing; b3) identifying an on-diagonal element of the software design matrix on a subsequent line in the software design matrix as a next component in the sequence of testing; and b4) identifying one or more off-diagonal elements of the software design matrix on the subsequent line as subsequent elements in the sequence of testing.
- 81. The method of claim 80, further comprising an act of: b5) repeating acts b3) and b4) until the sequence of testing is complete.
- 82. The method of claim 77, wherein the software design matrix is an upper-triangular matrix and the act b) further comprises acts of:
b2) identifying a bottom right on-diagonal element of the software design matrix as a first element in the sequence of testing; b3) identifying an on-diagonal element of the software design matrix on a preceding line in the software design matrix as a next component in the sequence of testing; and b4) identifying one or more off-diagonal elements of the software design matrix on the preceding line as subsequent elements in the sequence of testing.
- 83. The method of claim 80, further comprising an act of: b5) repeating acts b3) and b4) until the sequence of testing is complete.
- 84. The method of claim 77, wherein the act b) further comprises determining a non-iterative sequence of testing of the plurality of elements.
- 85. The method of claim 77, further comprising an act of:
c) displaying a graphical representation of the sequence of testing.
- 86. The method of claim 78, wherein the act c) further comprises displaying a Gantt chart describing the sequence of testing according to a time required to complete testing of at least one element.
- 87. The method of claim 78, wherein the act c) further comprises displaying a flow chart representing the sequence of testing as a series of elements positioned along a horizontal axis, the coupling of the elements illustrated by at least one connector that connects graphical representations of the elements.
- 88. The method of claim 77, further comprising an act of exporting the sequence of testing to an external data file.
- 89. The method of claim 77, further comprising an act of transferring the sequence of testing to a project planning application.
- 90. The method of claim 77, further comprising displaying the sequence of testing to a user.
- 91. A digital information product comprising:
a computer-readable medium; and stored on the computer-readable medium, computer program instructions defining a software system that, when executed, allow a user to determine a sequence of testing of software elements based on coupling between the software elements in a software design.
- 92. The digital information product of claim 91, wherein the computer program instructions, when executed, allow a user to determine coupling between elements of a software design equation.
- 93. The digital information product of claim 92, wherein the design equation includes a software design matrix and the computer program instructions, when executed, allow a user to determine the coupling between elements of a software design equation by examining off-diagonal elements of the software design matrix.
- 94. The digital information product of claim 91, wherein the computer program instructions, when executed, allow a user to determine a sequence of testing using a software design equation describing the software design.
- 95. The digital information product of claim 94, wherein the software design matrix is a lower-triangular matrix and the computer program instructions, when executed, allow a user to:
a) identify a top left on-diagonal element of the software design matrix as a first element in the sequence of testing; b) identify an on-diagonal element of the software design matrix on a subsequent line in the software design matrix as a next component in the sequence of testing; and c) identify one or more off-diagonal elements of the software design matrix on the subsequent line as subsequent elements in the sequence of testing.
- 96. The method of claim 95, further comprising an act of: d) repeat acts b) and c) until the sequence of testing is complete.
- 97. The digital information product of claim 94, wherein the software design matrix is an upper-triangular matrix and the computer program instructions, when executed, allow a user to:
a) identify a bottom right on-diagonal element of the software design matrix as a first element in the sequence of testing; b) identify an on-diagonal element of the software design matrix on a preceding line in the software design matrix as a next component in the sequence of testing; and c) identify one or more off-diagonal elements of the software design matrix on the preceding line as subsequent elements in the sequence of testing.
- 98. The method of claim 95, further comprising an act of: d) repeat acts b) and c) until the sequence of testing is complete.
- 99. The digital information product of claim 91, wherein the computer program instructions, when executed, allow a user to determine a non-iterative sequence of testing of the plurality of elements.
- 100. The digital information product of claim 91, wherein the computer program instructions, when executed, allow a user to display a graphical representation of the sequence of testing.
- 101. The digital information product of claim 91, wherein the graphical representation is a Gantt chart describing the sequence of testing according to a time required to complete testing of at least one element.
- 102. The digital information product of claim 101, wherein the graphical representation is a flow chart representing the sequence of testing as a series of components positioned along a horizontal axis, the coupling of the components illustrated by at least one connector that connects graphical representations of the elements.
- 103. The digital information product of claim 102, wherein the computer program instructions, when executed, allow a user to determine a sequence of testing of the components based upon the series of components.
- 104. The digital information product of claim 102, wherein the computer program instructions, when executed, allow a user to:
distribute the flow chart to a plurality of developers; and coordinate testing of the components of the flow chart between the plurality of developers based on the sequence of testing.
- 105. The digital information product of claim 102, wherein the computer program instructions, when executed, allow a user to test the elements of the flow chart according to a sequence of the series of components of the flow chart.
- 106. The digital information product of claim 102, wherein the computer program instructions, when executed, allow a user to modify a software test path by inserting additional components into the series of components of the flow chart.
- 107. The digital information product of claim 91, wherein the computer program instructions, when executed, allow a user to export the sequence of testing to an external data file.
- 108. The digital information product of claim 91, wherein the computer program instructions, when executed, allow a user to transfer the sequence of testing to a project planning application.
- 109. The method of claim 108, further comprising displaying the sequence of testing to a user.
- 110. A method for designing software comprising:
a) identifying a first software element and a second software element as part of a software design; b) determining at least one dependency between the first software element and the second software element; and c) determining a sequence of implementation of the first and second software elements based on b).
- 111. A digital information product comprising:
a computer-readable medium; stored on the computer-readable medium, computer program instructions defining a software system that, when executed, allow a user to:
a) identify a first software element and second software element as part of a software design; b) determine at least one dependency between the first software element and the second software element; and c) determine a sequence of implementation of the first and second software elements based on b).
- 112. A method for reverse engineering a plurality of computer-based instructions, the method comprising:
a) determining, during a first parse of a first source of code, a structure of at least two object-oriented software components represented by the code; b) determining, during a second parse of the first source of code, a relationship between the components; and c) determining, according to acts a) and b), a representation of the first source of code in a design equation relating design goals and implementation of the design goals in a design matrix.
- 113. The method according to claim 112, wherein act a) includes determining at least one method associated with the at least two components.
- 114. The method according to claim 112, wherein act a) includes determining at least one of:
a relation between at least two methods; and a relation between an attribute and a method.
- 115. The method according to claim 112, wherein act b) includes determining dependencies between the at least two object-oriented software components.
- 116. The method according to claim 112, further comprising determining a design equation, the design equation comprising a plurality of functional requirements that characterize design goals, a plurality of design parameters that characterize how the design goals are achieved, and a mapping between the plurality of functional requirements and design parameters.
- 117. The method according to claim 112, wherein the act of determining the representation of the first source of code in the design equation includes determining placement of components within the design matrix.
- 118. The method according to claim 112, wherein the act of determining the representation of the first source of code in the design equation further comprises creating, in the design equation, a hierarchy of elements, the hierarchy of elements depending upon the relationship between the at least two components.
- 119. The method according to claim 118, wherein the act of determining the representation of the first source of code in the design equation further comprises creating elements in the design matrix corresponding to methods identified within the first source of code.
- 120. The method according to claim 119, wherein the act of determining the representation of the first source of code in the design equation further comprises determining on-diagonal elements of the design matrix.
- 121. The method according to claim 119, wherein the act of determining the representation of the first source of code in the design equation further comprises determining off-diagonal elements of the design matrix.
- 122. The method according to claim 112, wherein the act of determining the representation of the first source of code in the design equation comprises reducing circular dependencies between elements of the design equation.
- 123. The method according to claim 112, wherein the act of determining the representation of the first source of code in the design equation comprises determining at least one arbitrary functional requirement, wherein the arbitrary functional requirement includes a functional description which is not defined in the act of determining the representation of the first source of code in the design equation.
- 124. The method according to claim 123, wherein the arbitrary functional requirement is determined by a user after one or more elements of the design equation are determined.
- 125. The method according to claim 112, further comprising determining an internal representation of the first source of code, wherein the internal code is represented by a structure comprising:
a first object class, instantiated objects of which represent each of the at least two object-oriented software objects; a second object class, instantiated objects of which represent class information of each of the at least two object-oriented software objects; a third object class, instantiated objects of which represent method information of each of the at least two object-oriented software objects; a fourth object class, instantiated objects of which represent code associated with each of the at least two object-oriented software objects; and a fifth object class, at least one instantiated object of which represents a dependency between the at least two object-oriented software objects.
- 126. The method according to claim 125, further comprising determining, from the internal representation, an output code based on the structure of the internal representation.
- 127. The method according to claim 112, wherein the first source of code is written in the C++ language.
- 128. The method according to claim 112, wherein the first source of code is written in the Java programming language.
- 129. The method according to claim 112, wherein the first source of code is a description of a code structure.
- 130. The method according to claim 129, wherein the description of the code structure is in a markup text formatting language format.
- 131. The method according to claim 130, wherein the description is provided in HTML format.
- 132. The method according to claim 112, further comprising determining an internal representation of the first source of code, and wherein the act of determining the internal representation includes:
storing, in a linked list, representations of the at least two objects storing, in at least one object-oriented object, characteristics of a method associated with at least one of the at least two objects; storing, in at least one object-oriented object, characteristics of code associated with at least one of the at least two objects; storing, in at least one object-oriented object, characteristics of a class associated with at least one of the at least two objects; and storing, in at least one object-oriented object, characteristics of a dependency between the at least two objects.
- 133. The method according to claim 132, wherein the characteristics of a dependency are indicative of an inheritance relation between the at least two objects.
- 134. The method according to claim 132, wherein the characteristics of a dependency are indicative of a method call between the at least two objects.
- 135. The method according to claim 112, further comprising combining a representation of a second source of code with the representation of the first source of code in the design equation.
- 136. The method according to claim 135, wherein the first source of code is part of a code library.
- 137. The method according to claim 112, further comprising evaluating functionality of the first source of code by inspecting the design equation.
- 138. The method according to claim 112, further comprising representing, to a user, a visual representation of the design equation.
- 139. The method according to claim 138, further comprising indicating, to a user, decoupled elements of the design equation that indicate that a software component is suitable for reuse.
- 140. The method according to claim 139, further comprising indicating that at least one element of the design equation is decoupled.
- 141. The method according to claim 112, further comprising providing, to a user, an indication to a user, a degree of coupling between the at least two object-oriented software objects.
- 142. The method according to claim 135, further comprising facilitating development of one or more off-diagonal elements of the design matrix, the one or more off-diagonal elements linking the representation of the second source of code with the representation of the first source of code.
- 143. The method according to claim 112, further comprising determining an amount of coupling between the at least two object-oriented software objects, and evaluating a performance of the at least two objects, the performance being based at least in part on the amount of coupling between the at least two object-oriented software objects.
- 144. The method according to claim 143, wherein the amount of coupling depends upon one or more off-diagonal elements in the design matrix.
- 145. The method according to claim 112, further comprising representing, to a user, a visual representation of the design matrix, and indicating, within the design matrix, elements of the representation of the first source of code as being related to the first source of code.
- 146. The method according to claim 145, wherein the first source of code is an object-oriented software component, and the method further comprises indicating, for each element in the design equation related to the object-oriented software component, that each related element was derived from the object-oriented software component.
- 147. The method according to claim 146, wherein the object-oriented software component is a Javabean component.
- 148. The method according to claim 145, further comprising determining an amount of coupling between the at least two object-oriented software objects, and evaluating a performance of the at least two objects, the performance being based at least in part on the amount of coupling between the at least two object-oriented software objects.
- 149. The method according to claim 145, further comprising indicating, to a user, decoupled elements of the design equation that indicate that the object-oriented software component is suitable for reuse.
- 150. The method according to claim 145, further comprising indicating that at least one element of the design equation is uncoupled.
- 151. The method according to claim 145, further comprising providing, to a user, an indication to a user, a degree of coupling between the at least two object-oriented software objects.
- 152. The method according to claim 145, further comprising facilitating development of one or more off-diagonal elements of the design matrix, the one or more off-diagonal elements linking the representation of a second source of code with the representation of the first source of code.
- 153. The method according to claim 112, wherein the first source of code is a compiled Java byte code.
- 154. A system for reverse engineering object-oriented software code, the system comprising:
a parser that is configured to parse an input source file and which is configured to determine, during a first parse of a first source of object-oriented code, a structure of at least two object-oriented objects represented by the code, and determine, during a second parse of the first source of code, a relationship between the objects; and a process handler that determines, according to the determined structure and relationship, a design equation comprising a plurality of functional requirements that characterize design goals, a plurality of design parameters that characterize how the design goals are achieved, and a mapping between the plurality of functional requirements and design parameters.
- 155. The system according to claim 154, wherein the process handler determines placement of objects within the design matrix.
- 156. The system according to claim 154, wherein the process handler creates, in the design equation, a hierarchy of elements, the hierarchy of elements depending upon the relationship between the at least two objects.
- 157. The system according to claim 154, wherein the process handler creates elements in the design equation corresponding to methods identified within the first source of code.
- 158. The system according to claim 154, wherein the process handler determines on-diagonal elements of the design matrix.
- 159. The system according to claim 154, wherein the process handler determines off-diagonal elements of the design matrix.
- 160. The system according to claim 154, wherein the process handler reduces circular dependencies between elements of the design equation.
- 161. The system according to claim 154, wherein the process handler determines at least one arbitrary functional requirement, wherein the arbitrary functional requirement includes a functional description which is not defined in the design equation.
- 162. The method according to claim 161, wherein the arbitrary functional requirement is determined by a user after one or more elements of the design equation are determined.
- 163. The system according to claim 154, wherein the process handler is configured to convert the structure and relationship into an object-oriented data structure representing the at least two object-oriented software objects.
- 164. The system according to claim 154, wherein the process handler determines an internal representation of the first source of code, wherein the internal code is represented by a structure comprising:
a first object class, instantiated objects of which represent each of the at least two object-oriented software objects; a second object class, instantiated objects of which represent class information of each of the at least two object-oriented software objects; a third object class, instantiated objects of which represent method information of each of the at least two object-oriented software objects; a fourth object class, instantiated objects of which represent code associated with each of the at least two object-oriented software objects; and a fifth object class, at least one instantiated object of which represents a dependency between the at least two object-oriented software objects.
- 165. The system according to claim 164, wherein the process handler determines, from the internal representation, an output code based on the structure of the internal representation.
- 166. The system according to claim 154, wherein the first source of code is written in the C++ language.
- 167. The system according to claim 154, wherein the first source of code is written in the Java programming language.
- 168. The system according to claim 154, wherein the first source of code is a description of a code structure.
- 169. The system according to claim 154, wherein the description of the code structure is in a markup language format.
- 170. The system according to claim 169, wherein the description is provided in HTML format.
- 171. The system according to claim 154, wherein the process handler determines an internal representation of the first source of code, and the process handler performs:
storing, in a linked list, representations of the at least two objects storing, in at least one object-oriented object, characteristics of a method associated with at least one of the at least two objects; storing, in at least one object-oriented object, characteristics of code associated with at least one of the at least two objects; storing, in at least one object-oriented object, characteristics of a class associated with at least one of the at least two objects; and storing, in at least one object-oriented object, characteristics of a dependency between the at least two objects.
- 172. The system according to claim 171, wherein the characteristics of a dependency are indicative of an inheritance relation between the at least two objects.
- 173. The system according to claim 171, wherein the characteristics of a dependency are indicative of a method call between the at least two objects.
- 174. The system according to claim 154, wherein the process handler is adapted to combine a representation of a second source of code with the representation of the first source of code in the design equation.
- 175. The system according to claim 174, wherein the first source of code is part of a code library.
- 176. The system according to claim 154, the process handler being adapted to evaluate functionality of the first source of code by inspecting the design matrix.
- 177. The system according to claim 154, the system further comprising a user interface that displays design information to a user, the design information including a visual representation of the design equation.
- 178. The system according to claim 177, wherein the user interface is configured to indicate, to the user, decoupled elements of the design equation that indicate that a software component is suitable for reuse.
- 179. The system according to claim 178, wherein the user interface is configured to indicate, to the user, that at least one element of the design equation is decoupled.
- 180. The system according to claim 154, further comprising a user interface that displays design information to a user, the design information including a visual representation of the design equation, and wherein the user interface indicates, to the user, a degree of coupling between the at least two object-oriented software objects.
- 181. The system according to claim 174, wherein the process handler facilitates development of one or more off-diagonal elements of the design matrix, the one or more off-diagonal elements linking the representation of the second source of code with the representation of the first source of code.
- 182. The system according to claim 154, wherein the process handler is adapted to determine an amount of coupling between the at least two object-oriented software objects, wherein the at least two object-oriented software objects are executed in separate memory spaces, and is adapted to determine a performance of the at least two objects, the performance being based at least in part on the amount of coupling between the at least two object-oriented software objects.
- 183. The system according to claim 182, wherein the amount of coupling depends upon one or more off-diagonal elements in the design matrix.
- 184. The system according to claim 154, wherein the process handler is configured to convert the object-oriented data structure into an XMI-based object representation.
- 185. A method for designing object-oriented software comprising:
providing a software design matrix describing a relationship between one or more functional requirements and one or more design parameters; and identifying at least one object-oriented class as being defined by a portion of the software design matrix.
- 186. The method of claim 185, wherein the portion is a sub-matrix of the software design matrix.
- 187. The method of claim 186, further comprising:
grouping, into the sub-matrix, the functional requirements of a level and the design parameters of the level; and mapping one or more elements of the sub-matrix to at least one data member and at least one method of an object-oriented class.
- 188. The method of claim 187, wherein the act of grouping the functional requirements of a level and the design parameters of the level further comprises determining the level containing the functional requirements and design parameters to be grouped from a plurality of levels, the levels being created by decomposing the functional requirements and design parameters.
- 189. The method of claim 187, wherein the level may be a top level or a sub-level of the top level, the sub-level not being a terminal level.
- 190. The method of claim 187, wherein the level is not allowed to be a terminal level.
- 191. The method of claim 190, wherein the act of mapping the elements of the sub-matrix to the attributes and method of an object-oriented class further comprises:
mapping the terminal level design parameters to data members of the object-oriented class.
- 192. The method of claim 190, wherein the act of mapping the elements of the sub-matrix to the attributes and method of an object-oriented class further comprises:
mapping the relationship between terminal level design parameters and terminal level functional requirements to methods of the class.
- 193. The method of claim 190, wherein the act of mapping the elements of the sub-matrix to the attributes and methods of an object-oriented class further comprises:
mapping the terminal level design parameters to outputs of methods of the object-oriented class.
- 194. The method of claim 187, wherein the act of grouping the functional requirements of a level and the design parameters of the level further comprises only grouping contiguous functional requirements into the sub-matrix.
- 195. The method of claim 187, wherein the sub-matrix is bounded by vertical and horizontal bands in the software design matrix.
- 196. The method of claim 195, wherein the horizontal bands extend from a beginning of the level of design parameters to an end of the level of design parameters.
- 197. The method of claim 195, wherein the vertical bands extend from a beginning of the level of functional requirements to an end of the level of functional requirements.
- 198. The method of claim 187, wherein the sub-matrix is an on-diagonal class.
- 199. The method of claim 187, wherein the sub-matrix is an off-diagonal sub-matrix, representing a relationship between at least two on-diagonal classes.
- 200. A method for designing object-oriented software from a software design matrix comprising:
identifying on-diagonal sub-matrices in the software design matrix; identifying off-diagonal sub-matrices in the software design matrix; mapping the elements of the on-diagonal sub-matrices into on-diagonal object-oriented classes; and mapping the elements of the off-diagonal sub-matrices into relationship information of the on-diagonal object-oriented classes.
- 201. The method of claim 200, further comprising:
determining bounds of the off-diagonal sub-matrices based on a choice of bounds of the on-diagonal sub-matrices.
- 202. The method of claim 201, further comprising:
determining a relationship between the on-diagonal classes using the off-diagonal sub-matrices.
- 203. The method of claim 202, wherein the relationship between on-diagonal objects is a parent-child relationship.
- 204. The method of claim 202, wherein the relationship between on-diagonal objects is an aggregation relationship.
- 205. The method of claim 203, wherein the parent-child relationship may be indicated by using colored markers in the software design matrix.
- 206. The method of claim 204, wherein the aggregation relationship may be indicated by using colored bands in the software design matrix.
- 207. The method of claim 203, further comprising:
identifying the parent-child relationship based on a number of markers in the off-diagonal sub-matrices.
- 208. The method of claim 204, further comprising:
identifying the aggregation relationship based on a number of markers in the off-diagonal sub-matrices.
- 209. The method of claim 200, further comprising:
indicating on-diagonal sub-matrices with a symbol; and indicating off-diagonal sub-matrices with a symbol different from the symbol used to indicate on-diagonal classes.
- 210. The method of claim 209, wherein the symbol used to indicate on-diagonal classes is an asterix.
- 211. The method of claim 209, wherein the symbol used to indicate off-diagonal sub-matrices is a d.
- 212. A method of designing software, comprising:
identifying one or more functional requirements of the software; identifying design parameters to meet the functional requirements; decomposing the functional requirements and the design parameters.
- 213. The method of claim 212, wherein the step of decomposing the functional requirements and the design parameters further comprises:
decomposing a high-level functional requirement into two or more lower-level functional requirements; decomposing a corresponding high-level design parameter to meet the two or more lower-level functional requirements; and ending the decomposition process when a design parameter can be mapped to a data member in an object-oriented class.
- 214. A method for improving code performance, comprising:
representing a software system in a design matrix relating design goals and implementation of the design goals, the design matrix having a plurality of software elements that are defined along a diagonal of the design matrix; reducing coupling between the plurality of elements defined along the diagonal by reducing an amount of off-diagonal elements that link the plurality of elements.
- 215. A method for designing software, the method comprising:
displaying, in an interface shown in a display of a software design system, information relating to a sequence in which object-oriented software is to be coded; and displaying, in the same interface, information relating to a design of the object-oriented software.
- 216. The method according to claim 215, further comprising displaying objects, classes and methods of the design.
- 217. A method for designing software, the method comprising:
representing a software system in a design matrix relating design goals and implementation of the design goals; and linking the design goals to the implementation, wherein a change in the design goals produces a change in implementation.
- 218. The method according to claim 217, further comprising using the design matrix to monitor progress of a software project.
- 219. The method according to claim 217, further comprising maintaining documentation that describes the software system in the design matrix.
- 220. The method according to claim 219, wherein a change in the design goals or implementation produces a change in the documentation.
- 221. The method according to claim 217, wherein the design matrix includes a plurality of elements, and the method further comprises:
representing at least one alternative element of the design matrix; and displaying an effect of the alternative element on a structure of the software system represented by the design matrix.
- 222. The method according to claim 221, further comprising maintaining, in a database of the software design system, a plurality of alternative elements defined during a designing of the software system.
- 223. A method for designing software, the method comprising:
displaying, in an interface shown in a display of a software design system, information relating to a sequence in which a plurality of object-oriented software components are to be coded; and displaying, in the same interface, an indication of a dependency relation between at least two of the plurality of object-oriented software components.
- 224. A method for designing software, the method comprising:
representing a software system in a design matrix relating design goals and implementation of the design goals, the design matrix having a plurality of elements; and identifying a portion of the software system that is suitable for reuse by identifying one or more elements that are independent of other elements in the design matrix.
- 225. The method according to claim 224, further comprising displaying, in an interface of a software design system, a plurality of software elements defined along a diagonal of the design matrix, and displaying an indication that one or more of the plurality of software elements are independent of other software elements in the design matrix.
- 226. A method for designing software, the method comprising:
a) determining a structure of at least two object-oriented software objects represented by a first source of code; b) determining, according to act a), a first representation of the first source of code in a design matrix relating design goals and implementation of the design goals; c) determining a second representation of software in the design matrix; and d) relating the first representation to the second representation in the design matrix.
- 227. The method according to claim 226, wherein the act of relating includes linking a representation of at least one of the at least two object-oriented software objects to an element of the second representation of software.
- 228. The method according to claim 227, further comprising:
displaying to a user, by a software design system, an interface displaying the design matrix, wherein the second representation is produced by the user of the software design system.
- 229. The method according to claim 227, wherein the second representation of software is provided by determining a structure of at least two object-oriented software objects represented by a second source of code, and by determining the second representation by the structure of at least two object-oriented software objects represented by the second source of code.
- 230. The method according to claim 226, wherein the first source of code is a software component written in an object-oriented programming language.
- 231. The method according to claim 230, wherein the software component is a Javabean software component.
- 232. The method according to claim 229, wherein the second source of code is a software component written in an object-oriented programming language.
- 233. The method according to claim 232, wherein the software component is a Javabean software component.
- 234. A method for designing software, the method comprising:
analyzing a structure of a first source of code; representing the first source of code in a design matrix relating design goals and implementation of the design goals, the design matrix having a plurality of elements; and indicating, for the first source of code, an amount of coupling among portions of the first source of code by identifying one or more elements coupled elements in the design matrix.
- 235. The method according to claim 234, further comprising displaying, in an interface of a software design system, the design matrix, and displaying an indication that one or more elements are coupled.
- 236. A method for testing software, the method comprising:
analyzing a structure of a first source of code; and indicating, for the first source of code, an amount of coupling among portions of the first source of code.
- 237. The method according to claim 236, further comprising displaying, in an interface of a software design system, the design matrix, and displaying an indication that one or more elements are coupled.
- 238. The method according to claim 237, wherein the act of identifying comprises identifying one or more coupled elements in the design matrix.
- 239. The method according to claim 236, further comprising representing the first source of code in a design matrix relating design goals and implementation of the design goals, the design matrix having a plurality of elements.
- 240. The method according to claim 236, wherein the first source of code comprises object-oriented software code.
- 241. The method according to claim 236, wherein the first source of code is a compiled Java byte code.
- 242. The method according to claim 236, wherein the first source of code is written in the C++ language.
- 243. The method according to claim 236, wherein the first source of code is written in the Java programming language.
- 244. The method according to claim 236, wherein the first source of code is a description of a code structure.
- 245. The method according to claim 243, wherein the description of the code structure is in a markup language format.
- 246. The method according to claim 244, wherein the description is provided in HTML format.
- 247. A method for designing software using a computer system comprising:
determining, by a user operating the computer system, a system-level design; determining, by the user, an implementation of the determined system-level design; and automatically relating, by the computer system, the determined implementation to the determined system level design.
- 248. A method for designing software using a software development system, the method comprising:
providing a first object-oriented class; providing a second object-oriented class; and indicating, by the software development system that an object-oriented relationship should be established between the first and second object-oriented classes.
- 249. The method of claim 248 wherein the act of providing a first object-oriented class further comprises identifying, in a design matrix of a design equation, a first on-diagonal sub-matrix which represents the first object-oriented class and the act of providing a second object-oriented further comprising identifying in the design matrix and second on-diagonal sub-matrix which removes the second object-oriented class.
- 250. The method of claim 248 wherein the act of indicating further comprises using off-diagonal elements of a design matrix to indicate that an object-oriented relationship should be established between the first and second object-oriented classes.
- 251. The method of claim 250 further comprising coloring the off-diagonal elements to indicate that an object-oriented relationship exists between the first and second object-oriented classes.
- 252. The method of claim 248 wherein the object-oriented relationship is an inheritance relationship.
- 253. The method of claim 248 wherein the object-oriented relationship is an aggregation relationship.
- 254. The method of claim 248 wherein the object-oriented relationship is an association relationship.
RELATED APPLICATIONS
[0001] This application claims the benefit under Title 35 U.S.C. §119(e) of co-pending U.S. Provisional Application Serial No. 60/323,848, filed Sep. 21, 2001, entitled “METHOD AND APPARATUS FOR PRODUCING SOFTWARE” by Sung-Hee Do et. al., and U.S. Provisional Application filed Feb. 1, 2002, entitled “SYSTEM AND METHOD FOR DETERMINING AN IMPLEMENTATION AND TESTING SEQUENCE OF SOFTWARE” by Sung-Hee Do et. al., and is a continuation-in-part of application Ser. No. 09/731,678, filed Dec. 6, 2000, entitled “METHOD AND APPARATUS FOR PRODUCING SOFTWARE” by Sung-Hee Do, Nam Pyo Suh, Robert Joseph Powers, and Derrick Edward Tate and which is now pending, and the contents of the aforementioned applications are incorporated herein by reference.
Provisional Applications (1)
|
Number |
Date |
Country |
|
60323848 |
Sep 2001 |
US |
Continuation in Parts (1)
|
Number |
Date |
Country |
Parent |
09731678 |
Dec 2000 |
US |
Child |
10100236 |
Mar 2002 |
US |