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 ratingsDiary of a Software Craftsman Rating: 5 out of 5 stars5/5UML A Complete Guide - 2020 Edition Rating: 0 out of 5 stars0 ratingsIntroduction to Algorithms & Data Structures 1: A solid foundation for the real world of machine learning and data analytics Rating: 0 out of 5 stars0 ratingsArt of Clean Code: How to Write Codes for Human Rating: 3 out of 5 stars3/5The Easiest Way to Learn Design Patterns Rating: 0 out of 5 stars0 ratingsMastering C# 8.0: Master C# Skills with Hands-on Code Examples (English Edition) Rating: 0 out of 5 stars0 ratingsMastering Clojure Rating: 0 out of 5 stars0 ratingsProgramming Problems: Advanced Algorithms Rating: 4 out of 5 stars4/5Learning Behavior-driven Development with JavaScript Rating: 5 out of 5 stars5/5Test-Driven iOS Development with Swift Rating: 5 out of 5 stars5/5Introduction 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/5Object-Oriented Analysis and Design for Information Systems: Agile Modeling with UML, OCL, and IFML Rating: 1 out of 5 stars1/5Software Design Methodology: From Principles to Architectural Styles Rating: 5 out of 5 stars5/5Object-Oriented Construction Handbook: Developing Application-Oriented Software with the Tools & Materials Approach Rating: 0 out of 5 stars0 ratingsRefactoring for Software Design Smells: Managing Technical Debt Rating: 4 out of 5 stars4/5Mastering C++ Network Automation Rating: 0 out of 5 stars0 ratingsTopological UML Modeling: An Improved Approach for Domain Modeling and Software Development Rating: 0 out of 5 stars0 ratingsUML 2.0 in Action: A project-based tutorial Rating: 0 out of 5 stars0 ratingsSoftware Developer Rating: 0 out of 5 stars0 ratingsSoftware Development in Practice Rating: 0 out of 5 stars0 ratingsAPI Design for C++ Rating: 3 out of 5 stars3/5UML Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsLearning Object-Oriented Programming Rating: 0 out of 5 stars0 ratingsObject –Oriented Analysis and Design Using UML Rating: 5 out of 5 stars5/5Real-Time UML Workshop for Embedded Systems Rating: 4 out of 5 stars4/5Professional ASP.NET Design Patterns Rating: 4 out of 5 stars4/5
Programming For You
SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5HTML & CSS: Learn the Fundaments in 7 Days 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 ratingsPython Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5Java for Beginners: A Crash Course to Learn Java Programming in 1 Week Rating: 5 out of 5 stars5/5Grokking Algorithms: An illustrated guide for programmers and other curious people 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/5Poirot's Early Cases Rating: 5 out of 5 stars5/5Learn SQL in 24 Hours Rating: 5 out of 5 stars5/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5Python Machine Learning By Example 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 ratingsWeb Designer's Idea Book, Volume 4: Inspiration from the Best Web Design Trends, Themes and Styles Rating: 4 out of 5 stars4/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5OneNote: The Ultimate Guide on How to Use Microsoft OneNote for Getting Things Done Rating: 1 out of 5 stars1/5Raspberry Pi Cookbook for Python Programmers Rating: 0 out of 5 stars0 ratingsThe Little SAS Book: A Primer, Sixth Edition Rating: 5 out of 5 stars5/5Linux: Learn in 24 Hours Rating: 5 out of 5 stars5/5Python Data Structures and Algorithms Rating: 5 out of 5 stars5/5
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