Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Software Engineering & Object Oriented Modeling
Software Engineering & Object Oriented Modeling
Software Engineering & Object Oriented Modeling
Ebook201 pages1 hour

Software Engineering & Object Oriented Modeling

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Software Engineering and Object Oriented Modeling: This book is specially written for those who are interested in understanding software engineering and Object Oriented Modeling concepts using UML in the Computer Engineering and Information technology field and want to gain enhanced knowledge about the power of UML Language in software development.

Also everyone with interest in learning UML for Software Engineering for application development can refer to this book to get the knowledge about various features of this subject.
LanguageEnglish
PublishereBookIt.com
Release dateApr 26, 2016
ISBN9781456612542
Software Engineering & Object Oriented Modeling

Read more from Jitendra Patel

Related to Software Engineering & Object Oriented Modeling

Related ebooks

Programming For You

View More

Related articles

Reviews for Software Engineering & Object Oriented Modeling

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Software Engineering & Object Oriented Modeling - Jitendra Patel

    References

    Chapter 1 Software Engineering: Disciplined Software Development

    Why is software engineering different from programming?

    According to the IEEE definition, software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software that is, the application of engineering to software. 

    Disciplined approaches to software development are gaining greater acceptance in practice these days. This is especially true in projects where safety is absolutely critical, such in airplane control software, or where a software crash could cause a major foul-up such as in the telephone system. But it is also true in general as software developers strive to achieve higher levels of maturity on the Software Enterprise Institute’s (SEI ) scale  (Figure 1).

    Figure 1  The SEI Levels of Maturity

    The SEI hierarchy is a model of achievement that is becoming widely accepted as a credential necessary to qualify to bid on a contract. So it is important that students not only  have the basic programming skills but also the understanding of formal principles that enable them to fit into high SEI-ranking software organizations.

    Object-orientation provides a powerful way to build complex software systems, a claim supported by the overwhelming adoption of C++ and Java as programming languages of choice, with installations in the hundreds of thousands. Nevertheless, a programming language by itself does not provide a set of sound principles to use -- you can  just as easily program poorly in C++ as in its non-object-oriented predecessor, C. Thus, this course offers principles for object-oriented system  development that guide the effective application of object-oriented programming constructs.

    Technology Invariance and Skills Survival

    Technology is moving toward increased networked and distributed computing and this will certainly influence the programming language standard. Java currently is the object-oriented language for World Wide Web programming. But standards and specifications are more permanent than languages and technologies.  We can see this as the premise underlying the effort to define a Common Object Request Broker Architecture (CORBA). This effort, supported by many of the world’s leading information age companies, is to provide workable specifications that will enable objects to interact by adhering to common interfaces while hiding the details of their implementations (vendors, languages, technologies, etc.).

    Principles are even more permanent than specifications. So the concepts  we present here, while shown to work in C++ and Java, are also aimed at future languages,  technologies and systems that are likely to be distributed, parallel and global.  They will help you surf with the waves of technology change that can be expected in the next century.

    Towards a Disciplined Realistic Software Development Process

    What distinguishes a principled software engineering process from programming practice? A series of diagrams will suggest the answer. Figure 2 caricatures our natural programming tendencies. There are three steps:

    conceptualize:  think about the problem

    write code: express your ideas directly in programming form

    debug: execute and modify the code until it does what you want

    Figure 2 Common Programming Practice

    On the other hand, software engineering texts prescribe methodologies for software development that are much more disciplined.  Figure 3 illustrates one version of such a methodology. According to it you should:

    1.     formulate requirements to express the desired behavior the software

    2.     specify: express the behavior exactly

    3.     concurrently

    ·         implement: write code that realizes the desired behavior

    ·         develop test plan: design tests that reveal whether the code   actually does realize the desired behavior

    4.     debug: correct the flaws revealed by the tests until they are all satisfied

    Figure 3 Idealized Software Development Process

    This scenario imagines that you can think through all of the situations encountered by the software application and say what it is expected to do in each. Having done this, you can proceed to implement the system in coded form. Now, since the desired behavior has been precisely defined, tests can be developed based on it before actual implementation. So after both have been completed, the tests are executed on the implemented system. This can be called a waterfall model since the work progresses down stream with no reversals.

    The waterfall model has, alas, become the model that methodologists love to hate. Ordinary people just can’t practice what it preaches and numerous amendments to it have been proposed that are more in keeping with what humans can do. Nevertheless, the individual phases it identifies are essential to principled development of object oriented software. However, rather than require that they be carried out in rigid order, we view the situation as in Figure 4. We are constantly conceptualizing the problem, getting a better understanding of it, as we iterate through the phases. You may or may not succeed in exactly specifying the desired behavior at first, but this attempt puts you in a much better position to implement the code since you have a well-thought out blueprint to guide you. When you develop the test plan based on the specification you may notice some things wrong with it: nothing prevents, you from going back and modifying the specification accordingly. The same goes for revisiting any of the phases. Having a good test plan makes the process of debugging much more efficient than the conventional way of doing it and the resulting software much more reliable.

    Figure 4 More Realistic Process

    This course will help you understand how to carry out each of the circled tasks in Figure 3 and to appreciate why this approach is better, in terms of improved software development and just as importantly, in terms of the increased longevity of  your software skills.

    Some of the concepts to be developed are associated with the specification, implementation and test plan tasks, as follows:

    ·         formulate requirements:

    à         actors

    à         interfaces

    à         use cases

    ·         analyze:

    à         objects

    à         classes

    à         interactions

    ·         specify behavior:

    à         states and transitions

    à         constructors, queries, commands

    à         collaborations

    à         message exchanges

    ·         implement:

    à         inheritance

    à         hierarchical construction

    à         class reuse

    ·         test plan:

    à         test cases from use cases/behavior

    à         coverage

    à         efficiency

    à          reuse

    These concepts merge  two steams of ideas. Object orientation provides an operational level tool kit that supports effective software development. However, the framework that provides the guiding light to achieve such effectiveness is that of systems theory -- specifically, its concepts of state and behavior, and of hierarchical system construction.

    Chapter 2 Coordination in Team-based Software Development: Role of the Blueprint

    Team Work: The Need for Coordination

    Why organization is is needed and how does it relate to the progress that a group of individuals can make in developing software?  If writing software were like picking cotton, very little organization would be needed and essentially the more workers there are the more work gets done. However, in software development coordination is essential and as a consequence adding more workers to a project may be counterproductive. How so?

     Some insight can be derived from a model that is derived from the concept of speedup in multi-processor computing systems where processing work is distributed among many computers.  Whether distributing software development tasks among individuals or executable code among processors, it is well known that more is not necessarily better.  If one person/processor can do a job in one day, it may not happen that two people/processors can do the job in half the time, nor three people/processors in one-third, and so on.  One model for why this is true separates the tasks performed by individuals into

    Enjoying the preview?
    Page 1 of 1