How to model Requirements Using SPES and Harmony Method? - system

I am working on finding Requirement Modelling Methods. There are a lot of methods like SPES, Harmony, INCOSE OOSEM, JPL State Analysis etc.
I have gathered details regarding SPES Method but I want to compare this method with Harmony Method.
In SPES Method we have different Viewpoints like Requirement Viewpoint, Functional Viewpoint, Logical Viewpoint and Technical Viewpoint.
To model our Requirements we use Requirement View point and there are few model according to different artifacts. Models contains specific SysML / UML diagrams to explain the artifacts.
Context model.
Goal model.
Scenario model.
Structural Model (Data structures -SysMLBlock Diagram)
Operational Model (SysML Activities Diagram)
Behavioral Requirements Model
Requirements Formalization
I know something about Harmony Method but vague description.
Like we use Usecase diagrams for Requirement Modelling then we use activity Diagrams for description of relationship between requirements and then we use Sequence diagrams.
Can someone explain me about Harmony method? Which type of Model diagrams we use in Harmony Method?
How we model our requirements in Harmony Method?
Which Method is more useful SPES or Harmony and why?
Actually I will use the data based on this comparison to model our Requirements in IBM Rational Rhapsody tool.
Thanks a lot in Advance for cooperation and expert opinion.

Related

Should I put the Test classes in the UML?

Should I put the test classes in the UML diagram? I can't find any "best practice" about this!
It depends. Firstly "the UML diagram" suggests that you are creating a single diagram. This is definitely not good practice. Create as many diagrams as needed lighting certain aspects of the model. So - test cases would be one of those aspects. That means: put them in (a) separate diagram(s).
To add a suggestion, if you want to model tests, you can look to UML testing profile ( UTP link) it provides needed elements to model tests, requirements and so on.
You can use SysML also since it integrates a part of UTP.
It definitely depends on context. Who is going to use the UML model and what will they use it for? In general I would say that adding test classes is going to clutter a UML model and make it difficult to understand - so no. But if the context is that the testing is what you want to explain, then clearly the test classes are going to be pretty important.
As Thomas Kilian points out, creating a number of diagrams from one underlying model is probably the right answer - and being able to do this is one of the reasons you would use UML rather than a simple diagram.
This is a preference. You can choose to or choose not to.
I would say it's better practice to have the tests modeled into the solution. But I wouldn't claim I always follow best practices 🙊
There are many diagrams needed in modeling a solution. I would focus on three: Analysis, Design, and Implementation. All three are class diagrams. All three define your solution at different abstractions.
In the analysis, you're closest to the requirements and the beginning of your solution. In here, you would want to have broad classes. I would not put tests in here since this diagram is still trying to get the shape of the solution from the user and their requirements. An analysis diagram would only have class names in a box, with lines which show their associations.
The design diagram would go into a little more detail on how classes would be built. The blueprint of the application would take shape in the design. This design can be given to any programmer and they write code which would build the solution. The interesting part of the design diagram is that it could also be given to a test engineer and they would write proper tests for the solution to be created.
The implementation diagram is the lowest level class diagram which is created. Most times, I would create this in retrospect. The implementation diagram should be a verbatim translation of the codebase. In the implementation diagram, I would have my test classes included for completeness.
Note, these are my views which I sometimes do not follow to the letter because of business constraints. However, in an ideal world, this is how I would prefer my modeling done.

Is there any testing on the analysis and design software?

Usually testing is done after implementation. Is it possible to test an analysis and design before write the code?
Particularly, how can the following analyses and designs be tested:
User Requirement
Use Case & Use Case Scenario
Sequence Diagram
Class Diagram
Physical Data Diagram
ER diagram
Design Interface
Pseudocode
Yes, you can test the dynamics of UML (fUML), SysML, and UPDM models using the Cameo Simulation Toolkit. Here is the brochure, where you can learn more about it.
we can do the testing on our anlysis and design with software metrics measurement. like:
Weighted methods per class (WMC),
Depth of inheritance tree (DIT),
Number of children (NOC),
Coupling between object classes (CBO),
Response for a class (RFC),
Lack of cohesion in methods (LCOM)

Role of class diagram in real world system implementation

I have designed the domain models of my system by using class diagram. It only includes the business domain logic of my system but not application logic that will be affected by the choice of platform, tools and programming language. This is all right in the analysis stage because no implementation detail is required yet.
However, I found that the class diagram that I have designed in the analysis stage is not sufficient to be used as the blueprint to develop the system in the implementation stage due to the lack of application logic, presentation logic and persistence logic details. Do I need to re-design the class diagram or create another type of diagram to serve as the blueprint for implementation?
I did not have any real world experiences in designing and implementing a system from the start to end so I would like to have some insights on the role of class diagram in real world system development.
The book - Applying Use Case Driven Object Modeling with UML has defined analysis-level class diagram as the class diagram that includes domain models while design-level class diagram is the class diagram that is "closer" to the source code implementation. However, I could not find any example of design-level class diagram and do not know what should be included in the design-level class diagram.
This is going to be a long story, so I try to make it short. You were so far only on a certain level of abstraction. But once you reach the borders you need to extend your model. A good way it the use of Model Driven Architecture (MDA). Here you introduce 3 layers called
CIM Computation Independent Model,
PIM Platform Independent Model and
PSM Platform Specific Model
While the CIM only looks a requirements and use cases and talks about business the PIM concretes this layer and forms classes (the level you were looking at). Finally the PSM models concrete things as hardware where the system will be deployed.
There are quite a number of different processes which deal with creation of such a model. I once made a good start with ICONIX but RUP is also widely used (though much more complex).

How to bind UML with code?

I am beginning in UML and software analyse and i do not understand how UML and diagrams can influence coding and software architecture while we can directly build the code and its data base without diagrams.
I read lot of tutorials abouat the subject but not enough to understand the utility of UML in coding.
I understand everey diagram and its role. That is not my problem but i do not yet understand their roles after the analyse and design phase.
So what is the role of UML in coding phase of a software ?
Thank you.
The comment by #xmojmr already puts it right. UML creates a model (hence the M in UML) of a system. A model reduces information of a system to a level so it is a) manageable and b) complete. Human brains are not computers and you need a means of communication what the system is all about. You can do that as pure code, as paper document and as UML model. A combination of all is not uncommon. As long as you have tiny systems you can live with pur code and tools like Doxygen. But once it starts getting complex you need some handles. UML offers these to end users, architects, testers, developers, managers, etc. Along with UML you will also need a methodology. UML delivers the syntax how to document a system. But you need some structure above to write a nice novel.
UML-based models play an essential role for coding/implementing a software system in model-based (or model-driven) development. The basic idea is that you start making a model of your problem domain (the domain model), then you derive from it a platform-independent design model, which can be transformed into platform-specific implementation models (e.g. for Java- or C#-based platforms) that are finally encoded in the target languages.
The most prominent part of model-based development is the encoding of model classes (forming the model layer in an MVC architecture for apps) based on a data model (a UML class model) that has been derived from an information design model, which was obtained from a domain information model (where all these information/data models are UML class models).
You can find an instructive example of model-based development in my tutorial book Engineering Front-End Web Apps with Plain JavaScript.
This one is in my point of view a duplicate of that other question. It can't be flagged because there is no accepted answer. The related question on meta stackexchange does not provide a clear solution to that situation.
I think my personal answer was relevant and is applicable to the current question.
To be synthetic, Martin Fowler considers current uses of UML. I think he describe the current practices. Perhaps should these evolve ?
Perhaps would the initial question be the right place to discuss ?

Why do we use UseCase diagrams in object oriented analysis and design even if Usecases are not considered as Object oriented?

UML notations says, Usecases are drawn to point out the functional requirements in the Problem Domain, it by no means gives the information about object or class as Data Flow Diagrams or Entity Relationship diagrams. But also why do we use Usecase Diagrams in object oriented analysis and design even if Usecases are not considered as Object oriented.
Use case diagram is meant to shed light on the main functionalities of the system , and emphasis the perspective presenting the latter as a blackBox merely existing for a sole mission;deliver to the actor the Promised service .
At this point we don't realy care about OOP realy , as you can definetly use Use case diagram for any other type of analysis.
UML is just a set of visual tools to allow a unified expression of different perspective of the system.
In Case you are using The Unified Process it advocates to start with identifiying the use cases first then explode every use case into collaborative entities (classes) and establish the static collaboration between them by harnessing the Class Diagram toolbox.
Object-oriented is analysis and design methodology, while use case is requirements methodology.
And be aware of the core development workflow:
Business modeling
Requirements
Analysis
Design
If we use UML to do these works, we may have:
Business use case+ Business sequence diagram
System use case+ System use case specification
Analysis class diagram+ Analysis sequence diagram+ Analysis state machine diagram
Code, Database......
UML diagrams in 3. can be replaced by DFD/ER
Kirill Fakhroutdinov's online book uml-diagrams.org defines UML as
The Unified Modeling Language™ (UML®) is a standard visual modeling language intended to be used for
modeling business and similar processes,
analysis, design, and implementation of software-based systems
UML is a common language for business analysts, software architects and developers used to describe, specify, design, and document existing or new business processes, structure and behavior of artifacts of software systems....
As such the language needs words to describe processes, their actors (the code and its users, why the code exists, what is it good for, why someone should pay a money for it..)..
If in your designs you don't need to take users and their needs into account (you have the user interface designs set and you are focusing just on a library code) then don't bother, use UML to describe the parts you are dealing with and use diagrams that are natural and useful for you (and your teammates)
Some related articles:
http://www.uml-diagrams.org/use-case-diagrams.html
http://www.jamasoftware.com/blog/when-use-cases-arent-enough-part-1/
http://agilemodeling.com/essays/agileRequirements.htm
http://www.sparxsystems.com/downloads/whitepapers/Requirements_Management_in_Enterprise_Architect.pdf
http://alistair.cockburn.us/Stop+confusing+use+cases+and+user+stories (and http://c2.com/cgi/wiki?UserStoryAndUseCaseComparison)
If well use cases diagrams are mainly intended for communication with non-technical people, I would like to add that in some software architectures (like Clean Architecture), use cases are represented as actual objects that orchestrate the entities (they are equal to services after all).
Eg.
Given the use case "Submit Issue", you can create the following definition for it:
Submit Issue Use Case
Input data:
issue_id
issue_description
date
Output data:
same input data as confirmation
Primary Course
Validate input data
Create new Issue instance using the input data
Persist new Issue
return confirmation data
As you can see in the Primary course, there is even a detectable dependency between this use case and an entity object named "Issue".
A python example for this SubmitIssue Use Case class:
class SubmitIssue(UseCase):
def __init__(issue_repo):
self._repo = issue_repo
def execute(self, input_data):
#validate input data as needed
#and apply branching logic if it is valid
new_issue = Issue(input_data) #create new issue
self._repo.add(new_issue) #persist new issue
return self._generate_output_data(new_issue)
#staticmethod
def _generate_output_data(new_issue):
#logic that returns the output data as specified
#in the use case output data definition
return output_data
regards.