Software Engineering & Object Oriented Modeling
()
About this ebook
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.
Read more from Jitendra Patel
Computer Programming In C Language Rating: 4 out of 5 stars4/5C Programming Concepts Rating: 0 out of 5 stars0 ratingsRelational Database Systems Rating: 0 out of 5 stars0 ratingsPHP & MySQL Practice It Learn It Rating: 3 out of 5 stars3/5XHTML Rating: 0 out of 5 stars0 ratingsMicrosoft Access 2003 Rating: 5 out of 5 stars5/5
Related to Software Engineering & Object Oriented Modeling
Related ebooks
Fundamentals of Software Engineering: Designed to provide an insight into the software engineering concepts Rating: 0 out of 5 stars0 ratingsProgramming Problems: Advanced Algorithms Rating: 4 out of 5 stars4/5UML A Complete Guide - 2020 Edition Rating: 0 out of 5 stars0 ratingsJava™ Programming: A Complete Project Lifecycle Guide Rating: 0 out of 5 stars0 ratingsIntroduction to DBMS: Designing and Implementing Databases from Scratch for Absolute Beginners Rating: 0 out of 5 stars0 ratingsMastering JavaScript Design Patterns Rating: 4 out of 5 stars4/5Art of Clean Code: How to Write Codes for Human Rating: 3 out of 5 stars3/5Scala Design Patterns Rating: 0 out of 5 stars0 ratingsDiary of a Software Craftsman Rating: 5 out of 5 stars5/5Mastering Clojure Rating: 0 out of 5 stars0 ratingsData Structures and Algorithms with Go: Create efficient solutions and optimize your Go coding skills (English Edition) Rating: 0 out of 5 stars0 ratingsSoftware Development Accelerated Essentials: What You Didn't Know, You Needed to Know Rating: 0 out of 5 stars0 ratingsComplete Guide to Test Automation: Techniques, Practices, and Patterns for Building and Maintaining Effective Software Projects Rating: 0 out of 5 stars0 ratingsThe Easiest Way to Learn Design Patterns Rating: 0 out of 5 stars0 ratingsApplying UML: Advanced Applications Rating: 3 out of 5 stars3/5Mastering C++ Network Automation Rating: 0 out of 5 stars0 ratingsHands-On Design Patterns and Best Practices with Julia: Proven solutions to common problems in software design for Julia 1.x Rating: 0 out of 5 stars0 ratingsObject-Oriented Analysis and Design for Information Systems: Agile Modeling with UML, OCL, and IFML Rating: 1 out of 5 stars1/5Web Application Design Patterns Rating: 3 out of 5 stars3/5Modern Introduction to Object Oriented Programming for Prospective Developers Rating: 0 out of 5 stars0 ratingsAlgorithm Challenges: The Dojo Collection Rating: 0 out of 5 stars0 ratingsSoftware Engineering Rating: 3 out of 5 stars3/5JavaScript: Best Practices to Programming Code with JavaScript: JavaScript Computer Programming, #3 Rating: 0 out of 5 stars0 ratingsProgramming Problems in Ruby Rating: 0 out of 5 stars0 ratingsData Structures: Theory and Practice Rating: 5 out of 5 stars5/5UML Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsGet Programming with F#: A guide for .NET developers Rating: 0 out of 5 stars0 ratingsJavaScript Regular Expressions Rating: 3 out of 5 stars3/5Clojure Programming Cookbook Rating: 0 out of 5 stars0 ratings
Programming For You
Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Python QuickStart Guide: The Simplified Beginner's Guide to Python Programming Using Hands-On Projects and Real-World Applications Rating: 0 out of 5 stars0 ratingsGrokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Learn PowerShell in a Month of Lunches, Fourth Edition: Covers Windows, Linux, and macOS Rating: 0 out of 5 stars0 ratingsPython Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5HTML & CSS: Learn the Fundaments in 7 Days Rating: 4 out of 5 stars4/5Excel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Modern C++ for Absolute Beginners: A Friendly Introduction to C++ Programming Language and C++11 to C++20 Standards Rating: 0 out of 5 stars0 ratingsSQL: For Beginners: Your Guide To Easily Learn SQL Programming in 7 Days Rating: 5 out of 5 stars5/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5Mastering Windows PowerShell Scripting Rating: 4 out of 5 stars4/5Python Machine Learning By Example Rating: 4 out of 5 stars4/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5Learn JavaScript in 24 Hours Rating: 3 out of 5 stars3/5Hacking: Ultimate Beginner's Guide for Computer Hacking in 2018 and Beyond: Hacking in 2018, #1 Rating: 4 out of 5 stars4/5SQL All-in-One For Dummies Rating: 3 out of 5 stars3/5Python Essentials Rating: 5 out of 5 stars5/5Learn SQL in 24 Hours Rating: 5 out of 5 stars5/5HTML in 30 Pages Rating: 5 out of 5 stars5/5Photoshop For Beginners: Learn Adobe Photoshop cs5 Basics With Tutorials Rating: 0 out of 5 stars0 ratings
Reviews for Software Engineering & Object Oriented Modeling
0 ratings0 reviews
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