For the assignments in this course, you will not be implementing the actual project, but rather, you will be developing a comprehensive Software Design Document. Your first task in this process will be to select an organization or identify a hypothetical organization to use as the basis of your projects. You will also create the shell document for the final project deliverable that you will be working on during each unit. Appropriate research should be conducted to support the development of your document and assumptions may be made when necessary.
SECTION 1: Project Selection
The first step will be to select an organization as the target for your Software Design document. This organization will be used as the basis for each of the assignments throughout the course and should conform to the following guidelines:
- Nontrivial: The selected organization should be large enough to allow reasonable exercise of the software design process.
- Domain knowledge: You should be familiar with the organization to allow the focus to be on the project tasks without significant time required for domain education.
- Accessibility: You should have good access to the people and other information related to the organization because this will be an important part of the process.
- Note: The selected organization might already have the software implemented and may still be used as the basis for the projects in this course.
- Note: The selected organization must have a need for some kind of software as part of its operation. Therefore, feel free to identify a hypothetical organization that meets the requirements. Any necessary assumptions may be made to fulfill the requirements of organization selection.
SECTION 2: 3-4 pages on Requirements Analysis and Software Architecture
Prior to designing software, it is important to analyze the organization's functional and nonfunctional requirements for the software application and to understand how the software application will be used within the organization. One approach to understanding the organization's requirements to move forward with the design phase is to take a functional set of requirements and break them down into pieces that are suitable for engineering design. For this assignment, you will continue the design process by adding the Requirements Analysis and Software Architecture section to the Software Design Document. You will perform an analysis of the functional and nonfunctional requirements based on the organization's needs and the 3-4 features that you identified in the previous section, and describe the results of your analysis in the form of a use-case diagram. You will also define the high-level design of the software by researching and selecting an appropriate software architecture style to use as the basis for the structure of your software.
Requirements Analysis and Software Architecture:
- Identify and describe the organization's functional and nonfunctional requirements that are allocated to the 3-4 features you identified in the previous section.
- Identify 3-4 use cases in the form of a use-case diagram.
- Briefly describe each of the use cases.
- Identify and describe the intended actors or users of the software.
- Identify and describe a software architecture style to use as the basis for your software design project.
- Include an explanation of why you selected the architectural style.
- Describe some strengths and weaknesses of the architectural style and how those will impact your software design.
- Describe the architecture of the software that you are designing in the form of a conceptual model that depicts the high-level structure of the software.
SECTION 3: 2 UML Diagrams, 2 Data Sequence Diagrams, 2 State Transition Diagrams
For this assignment, you will continue the design process by adding the Sequence and State Transition Diagrams section of the Software Design Document. Based on the use-cases that were identified in the previous section, you will develop at least 2 unified modeling language (UML) sequence diagrams. Then, based on the components you identified in the software architecture that was developed in the previous section, you will develop at least 2 UML state transition diagrams. You are to describe each diagram with sufficient detail to remove any potential ambiguities and to allow a reader with minimal knowledge of the project to understand the diagrams.
Sequence Diagrams:
- Develop at least 2 data sequence diagrams for your application using the UML.
- In some cases, sequence diagrams show classes that have been designed.
- For this assignment, you do not need to define the classes. Instead, you only need to identify the objects that will potentially be used.
- Objects are the nouns used in the program (e.g., customer, database, and invoice)
- Paste the diagrams into the Software Design Document.
- Describe each diagram with sufficient detail to remove any potential ambiguities and to allow a reader with minimal knowledge of the project to understand the diagram.
State Transition Diagrams:
- Develop at least 2 state transition diagrams for your application using the UML.
- In some cases, state transition diagrams show classes that have been designed.
- For this assignment, you do not need to define the classes. Instead, you only need to identify the objects that will potentially be used.
- Paste the diagrams into the software design document.
- Describe each diagram with sufficient detail to remove any potential ambiguities and to allow a reader with minimal knowledge of the project to understand the diagram.
SECTION 4: 1 Class Diagram, Verification/Validation, and Traceability Matrix
For this assignment, you will continue the design process by adding the Class and Activity Diagrams and the Verification and Validation sections of the Software Design Document. Based on the software architecture and design that you identified in the previous assignments, you will develop 4-5 classes and identify at least 1 design pattern that you could adopt to assist in your software design. You will also develop at least 2 activity diagrams to describe the functionality that you identified in previous sections.
You are to describe each diagram with sufficient detail to remove any potential ambiguities and to allow a reader with minimal knowledge of the project to understand the diagrams. You will also identify some appropriate techniques that can be used by the organization to verify and validate specific aspects of the software design. As part of the verification and validation process, you will also create a traceability matrix of the requirements you identified in week 1 to the design.
Class and Activity Diagrams
- Develop at least 1 class diagram consisting of 4-5 major classes.
- Identify the class name, and show some properties and methods.
- Show the relationships between the classes (e.g., inheritance).
- Paste the diagrams into the Software Design Document.
- Describe each diagram with sufficient detail to remove any potential ambiguities and to allow a reader with minimal knowledge of the project to understand the diagram.
- Select and describe at least 1 design pattern that you could adopt to assist in your software design, and justify you selection.
- Develop at least 2 activity diagrams.
- Paste the diagrams into the Software Design Document.
- Describe each diagram with sufficient detail to remove any potential ambiguities and to allow a reader with minimal knowledge of the project to understand the diagram.
Verification and Validation
- Describe some appropriate techniques that can be used by the organization to verify and validate specific aspects of the software design.
- Include a traceability matrix of the requirements that you identified in Week 1 of the design.
SECTION 5: 3-4 pages on Multithreading and Constraints
The final step in the design phase is to review the design to ensure that it adequately addresses the requirements and that it is sufficiently detailed to allow the organization's engineering team to move forward with the implementation phase based on your design. This is also a good time to identify any potential constraints that might affect the organization's ability to implement the design. In addition, particularly with today's advances in multicore technology, it might be a good opportunity to identify potential performance improvements by utilizing multithreading into the design.
Multithreading Opportunities
- Analyze your current design, and identify potential opportunities to incorporate multithreading into the design.
- Describe at least 3 areas of the software project where multithreading might improve the performance of the application.
- As a continuation of the verification and validation techniques that were described in the previous section, identify specific metrics that could be used by the organization in the performance-testing process.
Constraints
- Identify and describe any constraints or other factors that might affect the organization's ability to implement the software.
Software Design Document
- Review the entire document for any changes and improvements that you would like to make.
- Ensure that this final version of the plan is sufficiently detailed to allow the organization's engineering team to move forward with the implementation phase based on your design.