Page 110 - DCAP405_SOFTWARE_ENGINEERING
P. 110

Unit 7: Software Engineering Practice




          Working out an automated solution to a problem is thus a learning experience for both software  Notes
          developers and their clients. Software developers are learning the domain that the clients work
          in. They are also learning the values of the client: what form of data presentation is most useful
          to the client, what kinds of data are crucial and require special protective measures.
          The clients are learning to see the range of possible solutions that software technology can
          provide. They are also learning to evaluate the possible solutions with regard to their effectiveness
          in meeting the clients needs.

          If the problem to be solved is complex then it is not reasonable to assume that the best solution
          will be worked out in a short period of time. The clients do, however, want a timely solution. In
          most cases, they are not willing to wait until the perfect solution is worked out. They want a
          reasonable solution soon; perfection can come later. To develop a timely solution, software
          developers need to know the requirements: how the software should behave. The principle of
          anticipation of change recognizes the complexity of the learning process for both software
          developers and their clients. Preliminary requirements need to be worked out early, but it
          should be possible to make changes in the requirements as learning progresses.
          Coupling is a major obstacle to change. If two components are strongly coupled then it is likely
          that changing one will not work without changing the other.
          Cohesiveness has a positive effect on ease of change.



             Did u know? Is cohesive components are easier to reuse?
             Yes, cohesive components are easier to reuse when requirements change. If a component
             has several tasks rolled up into one package, it is likely that it will need to be split up when
             changes are made.

          Generality

          The principle of generality is closely related to the principle of anticipation of change. It is
          important in designing software that is free from unnatural restrictions and limitations. One
          excellent example of an unnatural restriction or limitation is the use of two digit year numbers,
          which has led to the “year 2000” problem: software that will garble record keeping at the turn of
          the century. Although the two-digit limitation appeared reasonable at the time, good software
          frequently survives beyond its expected lifetime.
          For another example where the principle of generality applies, consider a customer who is
          converting business practices into automated software. They are often trying to satisfy general
          needs, but they understand and present their needs in terms of their current practices. As they
          become more familiar with the possibilities of automated solutions, they begin seeing what
          they need, rather than what they are currently doing to satisfy those needs. This distinction is
          similar to the distinction in the principle of abstraction, but its effects are felt earlier in the
          software development process.

          Incremental Development

          Fowler and Scott give a brief, but thoughtful, description of an incremental software development
          process. In this process, you build the software in small increments; for example, adding one use
          case at a time.
          An incremental software development process simplifies verification. If you develop software
          by adding small increments of functionality then, for verification, you only need to deal with




                                           LOVELY PROFESSIONAL UNIVERSITY                                   103
   105   106   107   108   109   110   111   112   113   114   115