{"id":108,"date":"2007-11-26T17:29:00","date_gmt":"2007-11-26T17:29:00","guid":{"rendered":"https:\/\/ahm.basfinans.com\/index.php\/2007\/11\/26\/software-reuse-an-integrated-approach\/"},"modified":"2007-11-26T17:29:00","modified_gmt":"2007-11-26T17:29:00","slug":"software-reuse-an-integrated-approach","status":"publish","type":"post","link":"https:\/\/ahm.basfinans.com\/index.php\/2007\/11\/26\/software-reuse-an-integrated-approach\/","title":{"rendered":"Software Reuse, an Integrated Approach"},"content":{"rendered":"<p><span style=\"font-style: italic;font-size:85%;\" ><span style=\"color: rgb(0, 0, 153);\">>>This article is published at SEPG Egypt at <a href=\"http:\/\/www.secc.org.eg\/\">http:\/\/www.secc.org.eg\/<\/a><\/span><\/span><\/p>\n<p>Software reuse is a comprehensive issue; without taking into account all perspectives, it could fail. Here we are trying to look at different angles and highlight several issues.    <\/p>\n<p><b>Business View:<o:p><\/o:p><\/b><\/p>\n<p>First, senior management should take reusability into consideration. Loading technical team alone with the reusability efforts will not normally succeed. It should start from top management. As opposed to seeing the business as developing a certain product for some customer, senior management should look at the business as developing an application family to satisfy different client\u2019s needs. The business focus here will affect all efforts after it. As example, HP shifted their thinking from developing a new printer driver for each new printer to developing a reusable family of drivers. The result was a huge saving in cost and improved quality.<\/p>\n<p><b><o:p> <\/o:p><\/b><\/p>\n<p><b>Requirements:<o:p><\/o:p><\/b><\/p>\n<p>After focusing on a new business perspective regarding what is really required, reusing is shifted to create requirements with focus on reusability. Requirements even could be restated to match certain reusable components features. Requirements analysis phase will follow by creating use cases focused on variability points. The following example will explain the concept of determining variability points:<\/p>\n<p><o:p> <\/o:p><\/p>\n<p><i>Vacation Request: <o:p><\/o:p><\/i><\/p>\n<p><i>1. Employee requests vacation from his direct manager<o:p><\/o:p><\/i><\/p>\n<p><i>2. Direct Manager retrieves balance from Human Resources<o:p><\/o:p><\/i><\/p>\n<p><i><span style=\"\"> <\/span>If there is no balance<o:p><\/o:p><\/i><\/p>\n<p><i><span style=\"\">            <\/span>3. The vacation request is rejected<o:p><\/o:p><\/i><\/p>\n<p><i>If vacation is more than 3 days, Direct Manager forward to Senior Manager<o:p><\/o:p><\/i><\/p>\n<p style=\"text-indent: 0.5in;\"><i>4. Senior Manager approves or rejects the vacation request<o:p><\/o:p><\/i><\/p>\n<p><i>If vacation is more than 3 days<o:p><\/o:p><\/i><\/p>\n<p><i><span style=\"\">            <\/span>5. SM needs to receive email notification<o:p><\/o:p><\/i><\/p>\n<p><i>6. Direct manager approves or rejects the vacation<o:p><\/o:p><\/i><\/p>\n<p><o:p> <\/o:p><\/p>\n<p>In some companies they don\u2019t escalate to senior manager the vacation for whatever reason. The Direct manager always has permission to approve or reject the vacation request. We will mark variability with curly brackets {}.<\/p>\n<p><span style=\"\"> <\/span><\/p>\n<p><i>1. Employee requests vacation from his direct manager<o:p><\/o:p><\/i><\/p>\n<p><i>2. Direct Manager retrieves balance from Human Resources<o:p><\/o:p><\/i><\/p>\n<p><i>If there is no balance<o:p><\/o:p><\/i><\/p>\n<p><i><span style=\"\">            <\/span>3. The vacation request is rejected<o:p><\/o:p><\/i><\/p>\n<p><i>If {StrictSMFollowUp}<o:p><\/o:p><\/i><\/p>\n<p style=\"text-indent: 0.5in;\"><i>If vacation is more than [ApproveLimit] days, <o:p><\/o:p><\/i><\/p>\n<p style=\"margin-left: 0.5in; text-indent: 0.5in;\"><i>4. Direct Manager forwards to Senior Manager<o:p><\/o:p><\/i><\/p>\n<p style=\"margin-left: 0.5in; text-indent: 0.5in;\"><i>5. Senior Manager approves or rejects the vacation request<o:p><\/o:p><\/i><\/p>\n<p><i>If vacation is more than {NotificationLimit} days<o:p><\/o:p><\/i><\/p>\n<p><i><span style=\"\">            <\/span>6. SM needs to receive email notification<o:p><\/o:p><\/i><\/p>\n<p><i>7. Direct manager approves or reject the vacation<o:p><\/o:p><\/i><\/p>\n<p><i><o:p> <\/o:p><\/i><\/p>\n<p>The <i>StrictSMFollowUp<\/i> is variable; it could be true or false based on the way the organization work. In our example, we classified the businesses that will use our application, some have strict SM follow-up, and others have not.<\/p>\n<p><i><o:p> <\/o:p><\/i><\/p>\n<p><i>ApproveLimit<\/i> states the max number of days Direct Manager allowed to approve without consulting Senior Manager. <i>NotificationLimit<\/i> states the max count of days that need no notification.<\/p>\n<p><o:p> <\/o:p><\/p>\n<p>The above is just an example to identify variability points in the requirements. We can use many ways to mark variability in the requirements that makes sense for our own applications.<\/p>\n<p><o:p> <\/o:p><\/p>\n<p><b>Variability Implementation:<o:p><\/o:p><\/b><\/p>\n<ul style=\"margin-top: 0in;\" type=\"disc\">\n<li style=\"\"><i>Inheritance:<\/i>      As an example, in a typical application we wanted to support different      database servers. You can select the basic reference dbase and create      classes to implement it. Each other new dbase could inherit from the base      classes and override essential operations. As the basic SQL construct are      the same between databases, you should centralize the variability in      specific classes.<\/li>\n<li style=\"\"><i>Parameter:      <\/i>You can have pages or screens with customization parameters.      Administrators have the permission to customize the system. As example,      the timeout of waiting the response from the external bank server.<\/li>\n<li style=\"\"><i>Configuration:      <\/i>In many cases you can use extensive configuration files to adapt the      behavior of the system. In some systems you can even specify a complete      alternate component through the configuration file. As example, specifying      another XML parser. In this case, your application should use standard XML      parser interface and the new parser should implement the same interface. <i><o:p><\/o:p><\/i><\/li>\n<\/ul>\n<p style=\"margin-left: 0.25in;\"><o:p> <\/o:p><\/p>\n<p><o:p> <\/o:p><\/p>\n<p><b>Architecture and Design:<o:p><\/o:p><\/b><\/p>\n<p>Building the architecture and design in a way that makes configurability and reusability easier is an important issue. Layered architecture and components based design make it easier for you to achieve better designs. <\/p>\n<p><o:p> <\/o:p><\/p>\n<p>Focusing on using known architecture and design patterns will make it easier for you to build state of the art architecture and design. Explaining patterns is outside the scope of this article, but some references will be listed in the references section.<\/p>\n<p><o:p> <\/o:p><\/p>\n<p><b>Reusable Asset Library:<o:p><\/o:p><\/b><\/p>\n<p>Having a reusable assets library with processes that define how to reuse a certain component, how to add new component and how to update existing component is important of reuse success.<\/p>\n<p>A traceability table that traces each component version with which products are using it is required to guide in updating the applications with new components updates if necessary. <\/p>\n<p><o:p> <\/o:p><\/p>\n<p>Asset library should be organized so that each one item should has:<\/p>\n<ul style=\"margin-top: 0in;\" type=\"disc\">\n<li style=\"\">Version      number. A unique version number to the library item.<\/li>\n<li style=\"\">Status:      is it ready for reuse or still in beta state. <\/li>\n<li style=\"\">Bin      reusable component (if exist) such as DLL files or OCX files.<\/li>\n<li style=\"\">Documentation:      A simple document that specify how to use. A sample code will help      component users to use it effectively.<\/li>\n<li style=\"\">Release      notes: This can specify what bugs are solved, new features, or knows      issues compared to the earlier version of the same component.<\/li>\n<li style=\"\">Source      code: if applicable.<\/li>\n<\/ul>\n<p><o:p> <\/o:p><\/p>\n<p><b>Process Support:<o:p><\/o:p><\/b><\/p>\n<p>We will describe basic processes to help managing the reusable asset library. We will not state the details of each one.<\/p>\n<ol style=\"margin-top: 0in;\" start=\"1\" type=\"1\">\n<li style=\"\"><b>Add      new reusable code item:<\/b> The steps needed and standards that should be      satisfied in the new reusable code item.<\/li>\n<li style=\"\"><b>Delete      reusable code item:<\/b> Remove a typical item as it is no longer used nor      supported.<\/li>\n<li style=\"\"><b>Update      reusable code item:<\/b> A new revision is created and needs to be      available in the repository.<\/li>\n<li style=\"\"><b>Use      typical reusable code item:<\/b> reusing should be organized to know the full      dependencies between reusable code items and applications that use it.<\/li>\n<li style=\"\"><b>Requirements      development process<\/b> should have activities for requirements      development to guide in stating techniques and methods to state the      variability points.<\/li>\n<li style=\"\"><b>Architecture      and design process<\/b> should be stating using typical techniques to help focusing      on reusability.<\/li>\n<li style=\"\"><b>Testing      processes<\/b> should take into account testing variability points      comprehensively.<\/li>\n<\/ol>\n<p><o:p> <\/o:p><\/p>\n<p>Before adding a new version to the library, an extensive test and peer review is done to make sure the component is meeting quality requirements.<\/p>\n<p><o:p> <\/o:p><\/p>\n<p>A common challenge is what to do with a large set of reusable code, should we create a project to organize them and add them to the new empty asset library? Or just focus on the new reusable components?<\/p>\n<p><o:p> <\/o:p><\/p>\n<p>Without first closing the sink that continuously diminishes reusable code, we will always have the case of old code that need cleaning to be added to the reusable code repository. So first establish a system to close all waste holes and in parallel clean up and restructure old code.<\/p>\n<p><o:p> <\/o:p><\/p>\n<p><b>Conclusion:<o:p><\/o:p><\/b><\/p>\n<p>Whatever your company size and experience are, you can not simply order reuse or install it at once and expect it to happen. Rather, you should encourage reuse by following many steps as described in this article. Although reusability conceptually is a simple idea, many efforts should be done to realize its benefits. This article was an attempt to highlight many of these issues.<\/p>\n<p><b><o:p> <\/o:p><\/b><\/p>\n<p><b><o:p> <\/o:p><\/b><\/p>\n<p><b>References:<o:p><\/o:p><\/b><\/p>\n<ul style=\"margin-top: 0in;\" type=\"disc\">\n<li style=\"\">Software      Reuse, Architecture, Process, and Organization fir Buisess Success by Jacobson,      Martin Griss, and Patrik Jonsson<\/li>\n<li style=\"\">Design      Patterns, GOF, by Erich Gamma, Richard Helm, Ralph Johnson, and John      Vlissides.<\/li>\n<li style=\"\">Pattern      Oriented Software Architecture, a system of Patterns, Volume 1 by Frank      Buschmann, Regine Meunier, Hans Rohnert, Peter Sornmerlad, and Michael      Stal.<\/li>\n<li style=\"\">Patterns      of <st1:city st=\"on\"><st1:place st=\"on\">Enterprise<\/st1:place><\/st1:City>      Application Architecture, By Martin Fowler, David Rice, Matthew Foemmel,      Edward Hieatt, Robert Mee, Randy Stafford.<\/li>\n<\/ul>\n<p><o:p> <\/o:p><\/p>\n<p><b><o:p> <\/o:p><\/b><\/p>\n<div>From ahm507.blogspot.com<\/div>\n","protected":false},"excerpt":{"rendered":"<p>>>This article is published at SEPG Egypt at http:\/\/www.secc.org.eg\/ Software reuse is a comprehensive issue; without taking into account all perspectives, it could fail. Here we are trying to look at different angles and highlight several issues. Business View: First, senior management should take reusability into consideration. Loading technical team alone with the reusability efforts [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,22],"tags":[],"_links":{"self":[{"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/posts\/108"}],"collection":[{"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/comments?post=108"}],"version-history":[{"count":0,"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/posts\/108\/revisions"}],"wp:attachment":[{"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/media?parent=108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/categories?post=108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ahm.basfinans.com\/index.php\/wp-json\/wp\/v2\/tags?post=108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}