<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nbshah2</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nbshah2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Nbshah2"/>
	<updated>2026-05-09T15:36:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41941</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41941"/>
		<updated>2010-11-18T04:31:58Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Waterfall */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41891</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41891"/>
		<updated>2010-11-18T03:41:35Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41889</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41889"/>
		<updated>2010-11-18T03:41:20Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] *http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41880</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41880"/>
		<updated>2010-11-18T03:34:53Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Comparison with Agile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41876</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41876"/>
		<updated>2010-11-18T03:33:27Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Comparison with Agile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*Time period: Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*Process and People Orientation: A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*Documentation: Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*Contract: Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*Customer role: in iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*Team size: Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*Developers: In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41872</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41872"/>
		<updated>2010-11-18T03:31:26Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Comparison with Agile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Customer requirements – For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*Team Structure - The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*Customer interaction – For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*Contract (cost) – As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*Time period: Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*Process and People Orientation: A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*Documentation: Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*Contract: Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*Customer role: in iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*Team size: Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*Developers: In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41866</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41866"/>
		<updated>2010-11-18T03:27:15Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Software development methodologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Customer requirements – For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*Team Structure - The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*Customer interaction – For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*Contract (cost) – As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Requirement: in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*Design:The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*Customer Involvement: Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*Project size: The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*Cycles:Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*Risk: Spiral model has known risks while &lt;br /&gt;
*Cost: spiral models are usually expensive compared to Agile models&lt;br /&gt;
*Testing: Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*Time period: Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*Process and People Orientation: A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*Documentation: Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*Contract: Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*Customer role: in iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*Team size: Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*Developers: In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41863</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41863"/>
		<updated>2010-11-18T03:26:11Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Different types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Customer requirements – For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*Team Structure - The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*Customer interaction – For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*Contract (cost) – As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Requirement: in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*Design:The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*Customer Involvement: Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*Project size: The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*Cycles:Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*Risk: Spiral model has known risks while &lt;br /&gt;
*Cost: spiral models are usually expensive compared to Agile models&lt;br /&gt;
*Testing: Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*Time period: Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*Process and People Orientation: A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*Documentation: Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*Contract: Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*Customer role: in iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*Team size: Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*Developers: In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41859</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41859"/>
		<updated>2010-11-18T03:21:31Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Different types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
Agile http://www.google.com/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=define:+Agile means – moving quickly and lightly. Similarly, the goal of Agile methodology http://en.wikipedia.org/wiki/Agile_software_development is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*Agile Unified Process (AUP) http://en.wikipedia.org/wiki/Agile_Unified_Process - simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*Dynamic Systems Development Method (DSDM) http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*Essential Unified Process (EssUP) http://en.wikipedia.org/wiki/Essential_Unified_Process-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*Extreme Programming (XP) http://en.wikipedia.org/wiki/Extreme_Programming-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*Feature Driven Development (FDD) http://en.wikipedia.org/wiki/Feature_Driven_Development- model-driven short-iteration process&lt;br /&gt;
*Open Unified Process (OpenUP) http://en.wikipedia.org/wiki/Open_Unified_Process-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*Scrum http://en.wikipedia.org/wiki/Scrum_(development)- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*Velocity tracking http://en.wikipedia.org/wiki/Velocity_tracking – tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Customer requirements – For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*Team Structure - The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*Customer interaction – For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*Contract (cost) – As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Requirement: in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*Design:The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*Customer Involvement: Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*Project size: The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*Cycles:Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*Risk: Spiral model has known risks while &lt;br /&gt;
*Cost: spiral models are usually expensive compared to Agile models&lt;br /&gt;
*Testing: Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*Time period: Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*Process and People Orientation: A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*Documentation: Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*Contract: Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*Customer role: in iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*Team size: Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*Developers: In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41854</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41854"/>
		<updated>2010-11-18T03:16:48Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
Software development methodology http://en.wikipedia.org/wiki/Software_development_methodology is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Different types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
Agile http://www.google.com/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=define:+Agile means – moving quickly and lightly. Similarly, the goal of Agile methodology http://en.wikipedia.org/wiki/Agile_software_development is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*Agile Unified Process (AUP) http://en.wikipedia.org/wiki/Agile_Unified_Process - simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*Dynamic Systems Development Method (DSDM) http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*Essential Unified Process (EssUP) http://en.wikipedia.org/wiki/Essential_Unified_Process-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*Extreme Programming (XP) http://en.wikipedia.org/wiki/Extreme_Programming-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*Feature Driven Development (FDD) http://en.wikipedia.org/wiki/Feature_Driven_Development- model-driven short-iteration process&lt;br /&gt;
*Open Unified Process (OpenUP) http://en.wikipedia.org/wiki/Open_Unified_Process-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*Scrum http://en.wikipedia.org/wiki/Scrum_(development)- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*Velocity tracking http://en.wikipedia.org/wiki/Velocity_tracking – tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Customer requirements – For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*Team Structure - The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*Customer interaction – For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*Contract (cost) – As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*Requirement: in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*Design:The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*Customer Involvement: Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*Project size: The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*Cycles:Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*Risk: Spiral model has known risks while &lt;br /&gt;
*Cost: spiral models are usually expensive compared to Agile models&lt;br /&gt;
*Testing: Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*Time period: Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*Process and People Orientation: A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*Documentation: Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*Contract: Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*Customer role: in iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*Team size: Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*Developers: In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Ior ineffective customer involvement can result in confused and incomplete requirement document bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
*M. A. Awad, A Comparison between Agile and Traditional Software Development Methodologies&lt;br /&gt;
*Boehm B, &amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;, ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
*Rashina H, Philippe K, James N, Stuart M, ”Agility in Context”, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S10_ms&amp;diff=41835</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S10 ms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S10_ms&amp;diff=41835"/>
		<updated>2010-11-18T02:49:27Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2010/ch1 1a vc]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1b mg]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1c JF]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1e az]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1e bb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1f vn]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 25 ag]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2b dg]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 2e RI]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S6 aa]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S6 km]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MM]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 PH]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2a CB]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2a mw]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2c ck]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S23 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S24 NS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S23 SS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S23 NR]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S20 TT]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2d AS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S24 rm]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3a SN]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3b ka]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3e br]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3f lj]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3h az]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3h PW]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3i IC]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3i MM]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3j KS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 S30 SK]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 4b mt]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4e ms]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4f sv]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4g HW]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4g km]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4h am]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5b mt]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5b jz]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5c ck]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5c IC]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5f SN]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5a KR]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5b RR]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5e ms]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/chd 6d isb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6b SK]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6c AW]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6d bb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6h AS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6f AZ]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6b AK]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6g ss]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6d NM]]&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36399</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36399"/>
		<updated>2010-10-01T15:07:55Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Domain specific languages vs. General programming languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/General-purpose_programming_language General Programming languages] are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain.&lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
* DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
* Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
* DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
* They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
* It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
* Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
* It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
* They are easy and exciting for the problem domain experts.&lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
* The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
* The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
* The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
* The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
* It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
* It does not have a strong development tool support as compared to other general purpose programming languages. Eg. [http://en.wikipedia.org/wiki/NetBeans NetBeans] and [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse] for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; Expressiveness: &amp;lt;/strong&amp;gt;DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; The Calling Framework:&amp;lt;/strong&amp;gt; A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; Overriding Default Behavior: &amp;lt;/strong&amp;gt; White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; Language technology:&amp;lt;/strong&amp;gt; DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;&amp;quot;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages&amp;quot; &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36398</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36398"/>
		<updated>2010-10-01T15:05:38Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* DSL v/s Object Oriented Frameworks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
* DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
* Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
* DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
* They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
* It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
* Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
* It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
* They are easy and exciting for the problem domain experts.&lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
* The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
* The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
* The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
* The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
* It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
* It does not have a strong development tool support as compared to other general purpose programming languages. Eg. [http://en.wikipedia.org/wiki/NetBeans NetBeans] and [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse] for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; Expressiveness: &amp;lt;/strong&amp;gt;DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; The Calling Framework:&amp;lt;/strong&amp;gt; A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; Overriding Default Behavior: &amp;lt;/strong&amp;gt; White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt; Language technology:&amp;lt;/strong&amp;gt; DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;&amp;quot;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages&amp;quot; &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36397</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36397"/>
		<updated>2010-10-01T15:04:33Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* The Risks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
* DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
* Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
* DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
* They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
* It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
* Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
* It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
* They are easy and exciting for the problem domain experts.&lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
* The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
* The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
* The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
* The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
* It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
* It does not have a strong development tool support as compared to other general purpose programming languages. Eg. [http://en.wikipedia.org/wiki/NetBeans NetBeans] and [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse] for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;&amp;quot;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages&amp;quot; &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36396</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36396"/>
		<updated>2010-10-01T15:03:58Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* The Opportunities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
* DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
* Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
* DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
* They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
* It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
* Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
* It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
* They are easy and exciting for the problem domain experts.&lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. [http://en.wikipedia.org/wiki/NetBeans NetBeans] and [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse] for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;&amp;quot;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages&amp;quot; &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36395</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36395"/>
		<updated>2010-10-01T15:02:23Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* The Risks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. [http://en.wikipedia.org/wiki/NetBeans NetBeans] and [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse] for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;&amp;quot;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages&amp;quot; &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36394</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36394"/>
		<updated>2010-10-01T14:53:48Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;&amp;quot;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages&amp;quot; &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36393</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36393"/>
		<updated>2010-10-01T14:53:26Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36392</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36392"/>
		<updated>2010-10-01T14:53:05Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: x&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] Matteo Bordin, Tullio Vardanega &amp;lt;i&amp;gt;&amp;quot;A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2] Van Deursen &amp;lt;i&amp;gt;&amp;quot;Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Jan Heering, Marjan Mernik &amp;quot;Domain-Specific Languages for Software Engineering&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4] Martin Karlsch &amp;lt;i&amp;gt;&amp;quot;A model-driven framework for domain specific languages demonstrated on a test automation language&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5] Uwe Zdun &amp;lt;i&amp;gt;Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6] Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack &amp;lt;i&amp;gt;&amp;quot;Requirements for Domain-Specific Languages&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7] Paul Klint, Joost Visser &amp;quot;Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen&amp;quot;&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36390</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36390"/>
		<updated>2010-10-01T14:41:23Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Open Issues or challenges related to DSLs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
The following are the open issues related to DSL that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36389</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36389"/>
		<updated>2010-10-01T14:39:58Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Open Issues or challenges related to DSLs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt; They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_2a_mw&amp;diff=36388</id>
		<title>CSC/ECE 517 Fall 2010/ch2 2a mw</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_2a_mw&amp;diff=36388"/>
		<updated>2010-10-01T14:37:34Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Ruby and ActiveRecord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
In the [http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch2_S24 previous article for which the link does not exist yet], we learn that [http://en.wikipedia.org/wiki/Metaprogramming metaprogramming] is where the computer code interacts with other programs as data and performs many of these interactions at compile time rather than runtime.  This built-in interaction allows the programmers to take advantage of these capabilities and focus their time on the rest of their program logic instead of the details of some of the lower level coding.  In this article, we will take a closer look at one of the styles of metaprogramming referred to as language extensions for [http://en.wikipedia.org/wiki/Object-relational_mapping object-relational mapping] through examples and some comparisons of language extensions and tools.&lt;br /&gt;
&lt;br /&gt;
==Object-Relational Mapping==&lt;br /&gt;
Object-Relational Mapping (ORM) is a methodology for managing data between object oriented systems and relational databases.  The premise of the concept is to provide a universal method to access data in a database.  This is beneficial for all programming languages that can use objects to store and retrieve data from the database.  There are many languages that are using ORM as a technique to manage database data.  In the rest of the wiki, we will discuss ORM and some of the more common languages in use today.&lt;br /&gt;
&lt;br /&gt;
==Language Extensions==&lt;br /&gt;
Language extensions for ORM have often been traditionally classified as design patterns or software tools used to perform basic [http://en.wikipedia.org/wiki/Create,_read,_update_and_delete create, read, update and delete (C.R.U.D.)] operations on relational databases, that is, until recent new approaches such as [http://en.wikipedia.org/wiki/ActiveRecord#Ruby ActiveRecord] have grown in popularity.  ActiveRecord is not just a design pattern it is an increase of function to the active record pattern approach by adding [http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29 inheritance] and [http://en.wikipedia.org/wiki/Association_%28object-oriented_programming%29 associations].  Examining ActiveRecord and other language extensions will allow for comparisons of the ease of programming using these language extensions verses the conventional database oriented systems approach.&lt;br /&gt;
&lt;br /&gt;
==Ruby and ActiveRecord==&lt;br /&gt;
All too often programmers are faced with the challenge of persisting objects from their program into a datastore.  Custom code is created for this purpose that can be complex or difficult for others to understand as well as not seem natural.  Applications that are designed to persist data have the need to know how the objects correspond to the information stored in these database tables.  [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails], first released in 2005, is able to provide a uniform method to help resolve these complicated issues without sacrificing function or knowledge of these objects by using ActiveRecord (AR).  AR is a persistence engine that comes as part of Ruby on Rails.  It creates a 'persistable' domain model from business objects and database tables, where logic and data are presented as a unified package [http://en.wikipedia.org/wiki/ActiveRecord#Ruby 3].  AR is admired for its simplistic and elegant approach of removing these levels of complexity.  It allows for a 'pluggable' solution to many different popular databases available today to include: MySQL, SQLite, SQL Server, PostgreSQL, and Oracle.  &lt;br /&gt;
&lt;br /&gt;
ActiveRecord uses a [http://en.wikipedia.org/wiki/Single_Table_Inheritance Single Table Inheritance] to allow for inheritance capabilities and provides a set of macros for association relationships between classes of objects, such as belongs_to, has_one, has_many, etc.  AR is not only a component of the [http://en.wikipedia.org/wiki/Model-view-controller Model view-controller (MVC)] for Ruby on Rails but it is also a standalone ORM package for Ruby itself.  Ruby, Ruby on Rails, and ActiveRecord continue to grow in popularity due to not only the curiosity of programmers but their ability to improve function and feature sets while maintaining the initial intent of the language, “trying to make Ruby natural, not simple” -- Yukihiro “matz” Matsumoto [http://www.ruby-lang.org/en/about/ 8].  Other languages have been able to learn from AR and have tried to add this capability for themselves.  Let’s take a closer look at some other implementations that attempts to duplicate AR’s elegance.&lt;br /&gt;
&lt;br /&gt;
==Other Examples of Language Extensions==&lt;br /&gt;
===ADO.NET Entity Framework===&lt;br /&gt;
[http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework ADO.NET Entity Framework], Microsoft's ORM, part of [http://en.wikipedia.org/wiki/.NET_Framework .NET] 4.0 was first developed in 2008.  The Entity Framework tries to remove ORM mismatches that often plague conventional database oriented programs by using an Entity data model (EDM) and an Entity-Relationship data model to define the Relationships associated to each Entity.  The EDM consists of a schema and a mapping specification.  The schema defines the data types from the entities and the mapping provides the connections between the database scheme and the conceptual scheme. The Entity Framework has its own version of a query language called Entity SQL which continues to focus only on the conceptual entities and relationships as opposed to the actual database.  It works with many popular databases available today to include: MySQL, SQLite, SQL Server, PostgreSQL, and Oracle.&lt;br /&gt;
&lt;br /&gt;
===Django===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Django_%28web_framework%29 Django], is an ORM included in Django open source framework for Python.  It follows a MVC [http://en.wikipedia.org/wiki/Architectural_pattern_%28computer_science%29 architectural pattern] and was originally released in 2005 with the primary goal of making complex, database driven websites easier to create and maintain.  Instilled in its principles are emphasis on loose coupling, rapid development, [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself don’t repeat yourself], and reusability (a.k.a. less code).  The basis of its design is to encapsulate objects just like the ActiveRecord design pattern in models so that all the information needed can be stored in the model and knowledge of the database is not exposed.  It works with many popular databases available today to include: MySQL, SQLite, MS SQL Server (use MySQL driver), PostgreSQL, and Oracle.&lt;br /&gt;
&lt;br /&gt;
===Enterprise Objects Framework===&lt;br /&gt;
Lastly we will introduce [http://en.wikipedia.org/wiki/Enterprise_Objects_Framework Enterprise Objects Framework (EOF)], Mac OS X/Java, part of Apple [http://en.wikipedia.org/wiki/WebObjects WebObjects].  EOF is the oldest of the bunch, introduced in 1994 for a product call [http://en.wikipedia.org/wiki/NeXTSTEP NeXTSTEP].  It was indented to eliminate the interaction with the [http://en.wikipedia.org/wiki/Relational_database relational database] and the Java or Objective-C objects.  EOF was later integrated into WebObjects.  An EOFModel contains the mappings from the database to the classes, class attributes, and objects.  EOF also incorporates inheritance into its feature set to allow a more object oriented approach using Enterprise Objects to reflect the hierarchy.  EOF uses [http://en.wikipedia.org/wiki/Jdbc Java Database Connectivity (JDBC)] and [http://en.wikipedia.org/wiki/JNDI Java Naming and Directory Interface (JNDI)] to talk to databases that support that, such as Oracle, DB2, and MySQL.&lt;br /&gt;
&lt;br /&gt;
==Programming using Language Extensions==&lt;br /&gt;
Several language extensions have been introduced in previous sections of the article.  Let’s take a closer look at a specific scenario and show how each of them would implement their respective table.  We will demonstrate how each of the language extensions are used to create a Customer table.  The Customer table is very simple; it will contain two fields (an id and name).&lt;br /&gt;
&lt;br /&gt;
*ActiveRecord &lt;br /&gt;
For ActiveRecord in Ruby on Rails, the syntax to create the table is contained within the Customer class that inherits from the ActiveRecord class.  No external tools are required to generate the Ruby code, only the Ruby interpreter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Customer &amp;lt; ActiveRecord::Migration&lt;br /&gt;
  def self.up&lt;br /&gt;
    create_table :customer do |c|&lt;br /&gt;
      c.string :name&lt;br /&gt;
      c.string :id&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  def self.down&lt;br /&gt;
    drop_table :customer&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now create a new Customer in Ruby, update the attributes, and save the object.  The .save method will actually update the database table. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = Customer.new&lt;br /&gt;
n.id = “1”&lt;br /&gt;
n.name = “Customer 1”&lt;br /&gt;
n.save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*ADO.NET Entity Framework&lt;br /&gt;
&lt;br /&gt;
ADO.NET requires that you use the [http://msdn.microsoft.com/en-us/library/bb738483.aspx Entity Model Designer] which is part of [http://msdn.microsoft.com/en-us/vstudio/default.aspx Microsoft Visual Studio].  The Designer allows you to create your model which includes any entities and associations.&lt;br /&gt;
&lt;br /&gt;
[[Image:Ado-customer.png]]&lt;br /&gt;
&lt;br /&gt;
The Designer will ultimately generate an XML file that represents the Entity Data Model.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- A snippit from the xml file – shows the Customer definion --&amp;gt;&lt;br /&gt;
&amp;lt;!-- There are not associations in out example --&amp;gt;&lt;br /&gt;
&amp;lt;EntityType Name = &amp;quot;Customer&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Property Name = &amp;quot;Name&amp;quot; Type = &amp;quot;String&amp;quot; /&amp;gt; &lt;br /&gt;
     &amp;lt;Property Name = &amp;quot;id&amp;quot; Type = &amp;quot;String&amp;quot; Nullable = &amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/EntityType&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In code for the Customer object, the setter on the class would look something like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set&lt;br /&gt;
{&lt;br /&gt;
   this.CategoryReference.EntityKey = new EntityKey(&amp;quot;CustomerEntities.Category&amp;quot;, &amp;quot;id&amp;quot;, “name”);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Django&lt;br /&gt;
&lt;br /&gt;
In Django, a model is defined to represent a customer. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  from django.db import models&lt;br /&gt;
  class Customer(models.Model):&lt;br /&gt;
    name= models.CharField(max_length=200)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After creating a model for a customer it will generate a corresponding table.&lt;br /&gt;
Note that “id” is included as part of the model, so this might cause some unexpected issues if you planned to use id differently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BEGIN;&lt;br /&gt;
  CREATE TABLE myapp_customer (&lt;br /&gt;
    &amp;quot;id&amp;quot; serial NOT NULL PRIMARY KEY,&lt;br /&gt;
          &amp;quot;name&amp;quot; varchar(200),&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new instance of a Customer and save it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
c = Customer(name=’Customer 1’)&lt;br /&gt;
c.save()&lt;br /&gt;
c.id     # Returns the ID of your new object.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Enterprise Objects Framework&lt;br /&gt;
The biggest downside with EOF and WebObjects is that it is not free.  The Server and development environment is fairly expensive.  However, here is a quick look at how you would create an EOF model that represents the classes, attributes and the objects.&lt;br /&gt;
&lt;br /&gt;
Generate the Customer definition using the EOModler UI.&lt;br /&gt;
&lt;br /&gt;
[[Image:Eof-customer.png]]&lt;br /&gt;
&lt;br /&gt;
The code to create a new instance / database entry is fairly intuitive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   EOEditingContext ec = new EOEditingContext();&lt;br /&gt;
&lt;br /&gt;
   Customer c = new Customer();&lt;br /&gt;
   c.id = &amp;quot;1&amp;quot;;&lt;br /&gt;
   c.name = &amp;quot;Customer 1&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   ec.add(c);&lt;br /&gt;
   ec.saveChanges();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you saw in some of the examples above, 2 of the 4 language extensions require external tools to generate the hooks in to the language.  &lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Depending on what language you plan to use for your application will dictate what extensions and tools you will use.  If you are driven by cost, then some of the choices are obvious to remove, otherwise you might be driven by you familiarity with a particular language or existing tool set.  Either way you can see how all of the languages have attempted to simplify the process of accessing data in an external datastore.  There is no clear victor in these comparisons, I believe the situation will dictate which language to use.&lt;br /&gt;
&lt;br /&gt;
==What’s Next?==&lt;br /&gt;
In the [http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch2_2b next article for which the link does not exist yet], we will look at another style of metaprogramming, CRC Cards, one of the simplest methods of doing object oriented design.  These cards are a way to capture the initial relationships between objects for a given system.  CRC cards will help determine the evolution of these relationships before any code is written.  You can learn very quickly about CRC cards by taking a close look at the software used to create CRC cards, and other artifacts of o-o design.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks Comparison of web application frameworks]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software List of object-relational mapping software (Wikipedia.org)]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/ActiveRecord#Ruby ActiveRecord Ruby (Wikipedia.org)]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework ADO.NET Entity Framework (Wikipedia.org)]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Django_%28web_framework%29 Django (Wikipedia.org)]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Enterprise_Objects_Framework Enterprise Objects Framework (Wikipedia.org)]&lt;br /&gt;
#[http://ruby-doc.org/docs/ProgrammingRuby/ Programming Ruby - The Pragmatic Programmer's Guide]&lt;br /&gt;
#[http://www.ruby-lang.org/en/about/ Ruby – A Programmers Best Friend]&lt;br /&gt;
#[http://www.djangoproject.com/ Django Project (Djangoproject.com)]&lt;br /&gt;
#[http://msdn.microsoft.com/en-us/library/e80y5yhx%28v=VS.71%29.aspx ADO.NET (Micorsoft.com)]&lt;br /&gt;
#[http://developer.apple.com/legacy/mac/library/documentation/LegacyTechnologies/WebObjects/WebObjects_4.5/System/Documentation/Developer/EnterpriseObjects/DevGuide/EOFDevGuide.pdf Enterprise Objects Framework (Apple.com)]&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36387</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36387"/>
		<updated>2010-10-01T14:31:32Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* DSL v/s Object Oriented Frameworks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36386</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36386"/>
		<updated>2010-10-01T14:19:31Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Risks and Opportunities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and opportunities related to any DSL which decides its success. Before deciding on the creation of the new DSL, one should always make sure that the amount of opportunities related to its creation are more than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Opportunities===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The Risks===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36385</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36385"/>
		<updated>2010-10-01T14:16:30Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Risks and Opportunities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
There are associated risk and advantages related to any DSL. Before deciding on the creation of the new DSL, one should always make sure that there are more opportunities related to its creation rather than the risk involved. The following are the typical risks and opportunities related to any DSL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36384</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36384"/>
		<updated>2010-10-01T14:08:38Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Requirements for a DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The language must address to all the important concepts of the target domain. This is the basic requirement for any DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via domain specific popular tools, for typical model and program management.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of specified domain. The host tool can easily take care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the domain. This is essential for easy adaptation of existing applications to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36383</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36383"/>
		<updated>2010-10-01T14:02:55Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Requirements for a DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Supportability&amp;lt;/strong&amp;gt;: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Integrability&amp;lt;/strong&amp;gt;: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Longevity&amp;lt;/strong&amp;gt;: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Simplicity&amp;lt;/strong&amp;gt;: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Quality&amp;lt;/strong&amp;gt;: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36382</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36382"/>
		<updated>2010-10-01T14:01:55Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Requirements for a DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Conformity&amp;lt;/strong&amp;gt;: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36381</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36381"/>
		<updated>2010-10-01T14:01:21Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Requirements for a DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages.&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36380</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36380"/>
		<updated>2010-10-01T14:00:44Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Typical characteristics of Domain specific languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs &amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36379</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36379"/>
		<updated>2010-10-01T13:59:54Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Domain Specific Object Oriented Languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. &amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic.&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36378</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36378"/>
		<updated>2010-10-01T13:58:06Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36377</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36377"/>
		<updated>2010-10-01T13:52:53Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Domain Specific Object Oriented Languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scalable_Vector_Graphics Scalable Vector Graphics (SVG)] is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;br /&gt;
&lt;br /&gt;
[8] Scalable Vector Graphics - http://en.wikipedia.org/wiki/Scalable_Vector_Graphics&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36376</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36376"/>
		<updated>2010-10-01T13:49:45Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Domain Specific Object Oriented Languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance], [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) Encapsulation] and [http://en.wikipedia.org/wiki/Abstraction_principle_(programming) Abstraction]. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Smalltalk Smalltalk] which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Simula Simula] which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable Vector Graphics (SVG) is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;br /&gt;
&lt;br /&gt;
[8] Scalable Vector Graphics - http://en.wikipedia.org/wiki/Scalable_Vector_Graphics&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36375</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36375"/>
		<updated>2010-10-01T13:42:11Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language) S] and [http://en.wikipedia.org/wiki/Q_(programming_language) Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable Vector Graphics (SVG) is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;br /&gt;
&lt;br /&gt;
[8] Scalable Vector Graphics - http://en.wikipedia.org/wiki/Scalable_Vector_Graphics&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36374</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36374"/>
		<updated>2010-10-01T13:41:46Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/S_(programming_language)S] and [http://en.wikipedia.org/wiki/Q_(programming_language)Q] languages for statistics, [http://en.wikipedia.org/wiki/Mathematica Mathematica] and [http://en.wikipedia.org/wiki/Maxima_(software) Maxima] for symbolic mathematics, spreadsheet formulas and macros, [http://en.wikipedia.org/wiki/SQL SQL] for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable Vector Graphics (SVG) is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;br /&gt;
&lt;br /&gt;
[8] Scalable Vector Graphics - http://en.wikipedia.org/wiki/Scalable_Vector_Graphics&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36373</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36373"/>
		<updated>2010-10-01T13:35:23Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain [http://en.wikipedia.org/wiki/Domain domain] used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable Vector Graphics (SVG) is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;br /&gt;
&lt;br /&gt;
[8] Scalable Vector Graphics - http://en.wikipedia.org/wiki/Scalable_Vector_Graphics&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36287</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36287"/>
		<updated>2010-09-23T02:19:08Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable Vector Graphics (SVG) is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser\&lt;br /&gt;
&lt;br /&gt;
[8] Scalable Vector Graphics - http://en.wikipedia.org/wiki/Scalable_Vector_Graphics&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36286</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36286"/>
		<updated>2010-09-23T02:18:03Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Domain Specific Object Oriented Languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable Vector Graphics (SVG) is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic. [8]&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36284</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36284"/>
		<updated>2010-09-23T02:15:22Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
*Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
*Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
*Scalable vector graphics&lt;br /&gt;
&lt;br /&gt;
*Kiddo - used for building silverlight and WPF applications. Kiddo is based on ideals of &amp;quot;kid friendly&amp;quot; coding&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
*Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
*Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
*Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
*Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
*Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
*Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
* How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
* How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
* What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36282</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36282"/>
		<updated>2010-09-23T02:11:46Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Risks and Opportunities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
• Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
• Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
• Scalable vector graphics&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36279</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36279"/>
		<updated>2010-09-23T02:10:02Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: /* Domain Specific Object Oriented Languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
• Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
• Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
• Scalable vector graphics&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36278</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36278"/>
		<updated>2010-09-23T02:09:30Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Domain Specific Object Oriented Languages'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
===Domain specific languages vs. General programming languages===&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
===Domain Specific Object Oriented Languages===&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
• Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
• Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
• Scalable vector graphics&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Typical characteristics of Domain specific languages===&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requirements for a DSL==&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Risks and Opportunities==&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
===The Pros===&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The cons===&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DSL v/s Object Oriented Frameworks==&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues or challenges related to DSLs==&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36274</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36274"/>
		<updated>2010-09-23T01:58:02Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
• Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
&lt;br /&gt;
• Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
• Scalable vector graphics&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36273</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36273"/>
		<updated>2010-09-23T01:57:40Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are,&lt;br /&gt;
&lt;br /&gt;
• Smalltalk which was developed by Xerox Coorp. for educational use, &lt;br /&gt;
• Simula which was developed for simulation of programs. [3]&lt;br /&gt;
• Scalable vector graphics&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36269</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36269"/>
		<updated>2010-09-23T01:53:20Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are Smalltalk which was developed by Xerox Coorp. for educational use, Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36268</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36268"/>
		<updated>2010-09-23T01:52:12Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are Smalltalk which was developed by Xerox Coorp. for educational use, Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8) They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36267</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36267"/>
		<updated>2010-09-23T01:50:22Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are Smalltalk which was developed by Xerox Coorp. for educational use, Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8)	They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered? Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36266</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36266"/>
		<updated>2010-09-23T01:49:17Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
&lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are Smalltalk which was developed by Xerox Coorp. for educational use, Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
&lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
&lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8)	They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
• How do requirements are refined when a specific domain is considered?&lt;br /&gt;
  Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
• How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
• What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36265</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S23 NR</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S23_NR&amp;diff=36265"/>
		<updated>2010-09-23T01:47:08Z</updated>

		<summary type="html">&lt;p&gt;Nbshah2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOMAIN SPECIFIC OBJECT-ORIENTED LANGUAGE&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Domain specific languages (DSLs) are the programming languages focused to certain domain used to find the solutions using domain specific representation techniques. Domain can be any field such as Mathematics, Relational Databases, etc or it can even be any specific business/business unit such as Insurance, Billing department of any company, salary calculation, etc. Popular examples of Domain specific languages are  R, S and Q languages for statistics, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries&lt;br /&gt;
&lt;br /&gt;
Domain specific languages vs. General programming languages&lt;br /&gt;
&lt;br /&gt;
General Programming languages are the ones which can be used for developing solution for any field or any business units. Most popular examples being C, C++ and Java. Domain specific languages provide a high edge over general languages in their application domain. &lt;br /&gt;
Domain Specific Object Oriented Languages&lt;br /&gt;
Domain-specific Object Oriented Languages are usually little languages that are particularly expressive in a certain problem domain and are also task-specific, application-oriented. In addition to that it also encompasses object oriented principles such as Inheritance, Encapsulation and Abstraction. They offer substantial gains in expressiveness and ease of use as compared with General object oriented programming languages in their domain of application. Some of the well known object oriented DSLs are Smalltalk which was developed by Xerox Coorp. for educational use, Simula which was developed for simulation of programs. [3]&lt;br /&gt;
&lt;br /&gt;
Typical characteristics of Domain specific languages&lt;br /&gt;
&lt;br /&gt;
DSLs are usually small, offer only restricted suite of notations and abstractions and are also called as micro/ little languages. Sometimes, however, they are made on top of general purpose language, thus offering domain-specific expressive power in addition to the expressive power of the GPL [7].&lt;br /&gt;
&lt;br /&gt;
DSLs are declarative. Hence, they can be viewed as specification languages, as well as programming languages. Many DSLs are supported by a DSL compiler which generates applications from DSL programs. [7]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements for a DSL&lt;br /&gt;
Many of the requirements for DSLs are same as ones for the general-purpose programming languages. However, they differ on the level of importance when compared with the general purpose languages. [6]&lt;br /&gt;
&lt;br /&gt;
The core requirements for a DSL are as follows: &lt;br /&gt;
&lt;br /&gt;
•Conformity: The basic requirement is that the language must address to all the important   concepts of the domain for which it is used for. &lt;br /&gt;
•Supportability: it is feasible to provide DSL support via tools, for typical model and program management, e.g., creating, deleting, editing, debugging, transforming.  It will be of great ease if the DSL support is provided via tools, which are already used by the people of that field. The host tool  takes care of the basic functionalities of the domain.&lt;br /&gt;
•Integrability: The DSL language should be capable of working with other tools and languages of the same field. This is essential so that the existing applications can easily adapt to new language. &lt;br /&gt;
•Longevity: The DSL should be used for sufficient amount of time by the users to justify the cost of creating DSL and its supporting tools.&lt;br /&gt;
•Simplicity: It should be easy to be adapted by the new and existing users in the domain. This also makes sure that the user focus more on the application development rather than learning the DSL.&lt;br /&gt;
•Quality: The language should produce high quality applications which are better in terms of all the related language constructs like reliability, security, safety, etc. &lt;br /&gt;
&lt;br /&gt;
The above mentioned requirements are the general requirements for DSLs. There can be additional requirement depending upon the domain for which they are created.&lt;br /&gt;
&lt;br /&gt;
Risks and Opportunities&lt;br /&gt;
&lt;br /&gt;
Adopting for development of domain specific languages has its own pros and cons.[7] &lt;br /&gt;
The benefits being :-&lt;br /&gt;
&lt;br /&gt;
1) DSLs allows a solution to be expressed more particularly in the domain of the problem, thus development of DSL programs is easy for the domain experts.&lt;br /&gt;
&lt;br /&gt;
2) Since DSLs are specific to a domain, programs are concise and self documented to a large extent.&lt;br /&gt;
&lt;br /&gt;
3) DSLs enabling the experts to focus more on a problem domain thus enhancing the quality and productivity, making it more reliable, easy to maintain.. &lt;br /&gt;
&lt;br /&gt;
4) They embody specific domain knowledge, and thus enabling the conservation and reuse of this knowledge in a way.&lt;br /&gt;
&lt;br /&gt;
5) It enables programs to be validated and optimized at the domain level.&lt;br /&gt;
&lt;br /&gt;
6) Since it is specific to a language improves its ability to be tested.&lt;br /&gt;
&lt;br /&gt;
7) It gives better end user experience.&lt;br /&gt;
&lt;br /&gt;
8)	They are easy and exciting for the problem domain experts. &lt;br /&gt;
&lt;br /&gt;
The disadvantages of the use of a DSL are:-&lt;br /&gt;
&lt;br /&gt;
1) The cost of designing, implementing and maintaining DSL is high.&lt;br /&gt;
&lt;br /&gt;
2) The additional cost of educating the users to learn DSL.&lt;br /&gt;
&lt;br /&gt;
3) The domain experts need to have knowledge about language design principles in order to develop it a DSL.&lt;br /&gt;
&lt;br /&gt;
4) The scope of DSL is not defined.&lt;br /&gt;
&lt;br /&gt;
5) It is difficult to balance between domain-specificity and general-purpose programming constructs.&lt;br /&gt;
&lt;br /&gt;
6) It does not have a strong development tool support as compared to other general purpose programming languages. Eg. NetBeans and Eclipse for Java, C++, etc.&lt;br /&gt;
&lt;br /&gt;
DSL v/s Object Oriented Frameworks&lt;br /&gt;
&lt;br /&gt;
Domain Specific object oriented languages can be easily used to develop readable and maintainable applications in a particular domain. Whereas construction of closely related programs in any domain can be achieved easily using object oriented framework.&lt;br /&gt;
&lt;br /&gt;
They can be compared on the basis following criterion:-&lt;br /&gt;
&lt;br /&gt;
1) Expressiveness: DSL expresses knowledge that is domain-specific whereas using a general purpose programming language as in a framework provides more flexibility in adapting to specific needs.&lt;br /&gt;
&lt;br /&gt;
2) The Calling Framework: A framework often is an active entity and does not get called but it calls functions provided by the application developer. This can also be easily achieved using a DSL. [2]&lt;br /&gt;
&lt;br /&gt;
3) Overriding Default Behavior:  White-box frameworks allow the application developer to override default behavior using inheritance. This can also be achieved by using DSL but it does not seem obvious and intuitive. [2]&lt;br /&gt;
&lt;br /&gt;
4) Language technology: DSL requires tools for supporting rapid prototyping of scanners, parsers, type checkers, interpreters, compilers. On the contrary, there is no such need in object oriented frameworks as they are made on the top of high level languages. [2]&lt;br /&gt;
&lt;br /&gt;
Open Issues or challenges related to DSLs&lt;br /&gt;
&lt;br /&gt;
There are a number of open issues that require further investigation. [7] They are,&lt;br /&gt;
&lt;br /&gt;
•	How do requirements are refined when a specific domain is considered?&lt;br /&gt;
     Each domain has its own requirements and specification on to the use of the DSL, resulting in higher stress for analyzing the domain.&lt;br /&gt;
•	How can we measure the cost-versus-benefit of using DSLs as opposed to general-purpose languages?&lt;br /&gt;
•	What about the side-effects of using DSLs, in particular, the implicit use of a number of (loosely coupled) languages throughout development, the use of a federation of tools versus an integrated development environment, etc.&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
Domain specific languages(DSL) are focused towards a specific domain solution enabling easy development for domain experts. DSL are more domain specific than general languages. They are productive, reliable, and maintainable but on the other hand needs expertise, developmental tools and overhead cost involved which should be carefully considered before development. Thus, DSL are providing good solution for domain- specific problems but it has few issues to be considered. Recent development in various high level programming languages has addressed most these issues by development of various domain specific packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
[1] A Domain-specific Metamodel for Reusable Object-Oriented High-Integrity Components  - Matteo Bordin and Tullio Vardanega&lt;br /&gt;
&lt;br /&gt;
[2] Domain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study&lt;br /&gt;
&lt;br /&gt;
[3] Domain-Specific Languages for Software Engineering&lt;br /&gt;
-Jan Heering, Marjan Mernik&lt;br /&gt;
&lt;br /&gt;
[4] A model-driven framework for domain specific languages demonstrated on a test automation language - Martin Karlsch,&lt;br /&gt;
&lt;br /&gt;
[5] Concepts for Model­Driven Design and Evolution of Domain­Specific Languages &lt;br /&gt;
-Uwe Zdun&lt;br /&gt;
&lt;br /&gt;
[6] Requirements for Domain-Specific Languages&lt;br /&gt;
-Dimitrios S. Kolovos, Richard F. Paige, Tim Kelly, and Fiona A.C. Polack&lt;br /&gt;
&lt;br /&gt;
[7] Domain-Specific Languages: An Annotated Bibliography1 Arie van Deursen - Paul Klint - Joost Visser&lt;/div&gt;</summary>
		<author><name>Nbshah2</name></author>
	</entry>
</feed>