Curs 11 – 3 Ianuarie 2011 Adrian Iftene [email protected]
Recapitulation
◦ Rotting Design
◦ Refactoring
Release
Deployment and Maintenance
Code reuse
Free Software Licenses
Ethics
3
There are four primary symptoms:
◦ Rigidity - the tendency for software to be difficult to change
◦ Fragility - the tendency of the software to break in many places every time it is changed
◦ Immobility - the inability to reuse software from other projects or from parts of the same project
◦ Viscosity - it is easy to do the wrong thing, but hard to do the right thing
―Refactoring is the process of changing a software
system in such a way that it does not alter the external behavior of the code yet improves its internal
structure.‖ – Martin Fowler in Refactoring Improving The Design Of Existing Code
Practically, refactoring means making code clearer and cleaner and simpler and elegant
It is done in order to improve non-functional attributes in software: code readability, complexity, expressivity, extensibility
5
Deployment starts after the code is appropriately tested, is approved for release and sold
Software Training and Support is very important to have training classes for new clients of your software
Maintaining and enhancing software to cope with
newly discovered problems or new requirements can take far more time than the initial development of the software
Bug Tracking System tools are often deployed at this stage of the process to allow development teams to interface with customer/field teams testing the
software to identify any real or perceived issues
All of the activities that make a software system available for use
―Deployment‖ should be interpreted as a general process that has to be customized according to specific requirements or characteristics
At this step code must be distributed into a production environment
7
Release - includes all the operations to prepare a system for assembly and transfer to the customer site
Activation - the activity of starting up the executable component of software
Installation - on a production server in a production environment or in a test environment
Deactivate - inverse of activation - refers to shutting down any executing components of a system
Adapt – is a process to modify a software system that has been previously installed (local events such as
changing the environment of customer site)
Update - The update process replaces an earlier version of all or part of a software system with a newer release
Built-In - Mechanisms for installing updates are built into some software systems
Version tracking - Version tracking systems help the user find and install updates to software systems
installed on PCs and local networks (Web based version, Local version, Browser based version)
Uninstall - the inverse of installation. It is the removal of a system that is no longer required
Retire - Ultimately, a software system is marked as obsolete and support by the producers is withdrawn.
It is the end of the life cycle of a software product
9
Software maintenance in software engineering is the modification of a software product after delivery to correct faults, to improve performance or other
attributes (Lehman 1969)
Maintenance is really evolutionary developments and that maintenance decisions are aided by
understanding what happens to systems (and software) over time
A common perception of maintenance is that it is
merely fixing bugs. However, studies and surveys over the years have indicated that the majority, over 80%, of the maintenance effort is used for non-corrective actions (Pigosky 1997)
S-type programs are those that can be specified formally
P-type programs cannot be specified. Instead, an iterative process is used to find a working solution
E-type programs are embedded in the real world and become part of it, thereby changing it. This leads to a feedback system where the program and its
environment evolve in concert
11
1. (1974) Continuing Change — E-type systems must be continually adapted or they become progressively less satisfactory
2. (1974) Increasing Complexity — As an E-type system evolves its complexity increases unless work is done to maintain or reduce it
3. (1974) Self Regulation — E-type system evolution process is self regulating with distribution of product and process measures close to normal
4. (1978) Conservation of Organizational Stability (invariant work rate) - The average effective global activity rate in an evolving E-type system is invariant over product lifetime
5. (1978) Conservation of Familiarity — As an E-type system
evolves all associated with it, developers, sales personnel, users.
Excessive growth diminishes that mastery. Hence the average incremental growth remains invariant as the system evolves
6. (1991) Continuing Growth — The functional content of E-type systems must be continually increased to maintain user
satisfaction over their lifetime
7. (1996) Declining Quality — The quality of E-type systems will appear to be declining unless they are rigorously maintained and adapted to operational environment changes
8. (1996) Feedback System (first stated 1974, formalized as law 1996) — E-type evolution processes constitute multi-level,
multi-loop, multi-agent feedback systems and must be treated as such to achieve significant improvement over any reasonable base
13
15
17
Corrective maintenance: Reactive modification of a software product performed after delivery to correct discovered problems
Adaptive maintenance: Modification of a software product performed after delivery to keep a software product usable in a changed or changing environment
Perfective maintenance: Modification of a software product after delivery to improve performance or maintainability
Preventive maintenance: Modification of a software product after delivery to detect and correct latent faults in the software product before they become effective faults
A software release is the distribution of software code, documentation,
and support materials
The software release life cycle is composed of discrete phases from planning and development to release and support phases
Software Development and Release Stages:
◦ Testing and Development period
◦ Release period
◦ Support period
19
Pre-alpha - refers to all activities performed during the software project prior to testing
Alpha - is the first phase to begin software testing
Beta - The focus of beta testing is reducing impacts to
users, often incorporating usability testing. The process of delivering a beta version to the users is called beta release and this is typically the first time that the software is
available outside of the organization that developed it
Open and closed beta - closed beta versions are released to a select group of individuals for a user test, while open betas are to a larger community group, sometimes to
anybody interested
Release candidate - refers to a version with potential to be a final product, ready to release unless fatal bugs emerge
RTM - The term ―release to manufacturing‖ or ―release to marketing‖ - is a term used when software is ready for or has been delivered or provided to the customer
General availability or general acceptance (GA) is the point where all necessary commercialization activities have been completed and the software has been made available to the general market either via the web or physical media. It is also at this stage that the
software is considered to have ―gone live‖
A live release is considered to be very stable and relatively bug-free with a quality suitable for wide distribution and use by end users
21
Service release - During its supported lifetime,
software is sometimes subjected to service releases, or service packs. Such service releases contain a
collection of updates, fixes and/or enhancements, delivered in the form of a single installable package.
They may also contain entirely new features
End-of-life - When software is no longer sold or
supported, the product is said to have reached end- of-life
Definition: Code reuse (software reuse) is the use of existing software, or software knowledge, to build new software
Aim: The reuse of programming code is a common technique which attempts to save time and energy by reducing redundant work
This includes all types of artifacts created
Internal Reuse Vs. External Reuse
Ad hoc code reuse has been practiced from the earliest days of programming. Programmers have
always reused sections of code, templates, functions, and procedures
23
Because we (the CS people) are inventing the wheel over and over again and wasting enormous resources doing so
We hope that there is a way to make integration and design of the reusable component cheaper than
redevelopment
There is no other way to build large applications
Code reuse is the idea that a partial or complete
computer program written at one time can be, should be, or is being used in another program written at a later time
The software library is a good example of code reuse
For newly written code to use a piece of existing code, some kind of interface, or means of communication, must be defined. These commonly include a ―call‖ or use of a subroutine, object, class, or prototype
The general practice of using a prior version of an extant program as a starting point for the next
version, is also a form of code reuse
Simply copying some or all of the code from an existing program into a new one
25
Modularity, loose coupling, high cohesion, information hiding and separation of concerns
Many researchers have worked to make reuse faster, easier, more systematic, and an integral part of the normal process of programming. These are some of the main goals behind the invention of object-
oriented programming, which became one of the most common forms of formalized reuse. A somewhat later invention is generic programming
Another, newer means is to use software ―generators‖, programs which can create new programs of a certain type, based on a set of parameters that users choose
Opportunistic reuse - While getting ready to begin a project, the team realizes that there are existing
components that they can reuse
◦ Internal reuse - A team reuses its own components
◦ External reuse - A team may choose to license a third- party component. Licensing a third-party component
typically costs the team 1 to 20 percent of what it would cost to develop internally
Planned reuse - A team strategically designs
components so that they’ll be reusable in future projects
27
Software libraries – contain many common operations
◦ Set of individual functions or classes that can be reused
◦ ―a discrete, stand-alone, context independent part of a solution‖
Design patterns
Frameworks - reuse large pieces of software via third- party applications and frameworks (are usually
domain-specific and applicable only to families of applications)
◦ A unit of design reuse; coupling several library classes
◦ ―an abstract design for a particular kind of application‖
Systematic software reuse - is still the most promising strategy for increasing productivity and improving
quality in the software industry
Component
◦ Independent unit of reuse.
◦ Technical definition by given set of import and export mechanism.
◦ Interface is usually restricted to an in/out mechanism.
◦ Automated parts (deployment J2EE, interface query COM, dependency resolution OSGi)
API: Usually a framework plus library parts (for instance JDK)
29
1. Architectures
2. Source Code
3. Data
4. Designs
5. Documentation
6. Templates
7. Human Interfaces
8. Plans
9. Requirements
10. Test Cases
=> Functionality?
Program families
Between successive versions
If the same developer who developed the code continues to do so in a different project.
As soon as you move code too far away from people who have knowledge about it, reusability decreases dramatically
These aspects point toward the cognitive dimension of the problem
31
Copyright is a set of exclusive rights granted by the law of a jurisdiction to the author or creator of an original work, including the right to copy, distribute and adapt the work
Copyright does not protect ideas, only their expression or fixation
Copyright protection applies for a specific period of time, after which the work is said to enter the public domain
Initially copyright only applied to published books, but over time copyright was extended to other uses, such as translations and derivative works
Copyright now covers maps, dramatic works, paintings, photographs, sound recordings, motion pictures,
computer programs, etc.
Copyright law is different from country to country, and a copyright notice is required in about 20 countries for a work to be protected under copyright
Before 1989, all published works in the US had to contain a copyright notice, the © symbol followed by the publication date and copyright owner’s name, to be protected by copyright
In all countries that are members of the Berne Convention, copyright is automatic and need not be obtained through official registration with any government office
33
Copyright subsists for a variety of lengths in different jurisdictions
The length of the term can depend on several factors:
◦ the type of work (e.g. musical composition or novel),
◦ the work has been published or not,
◦ the work was created by an individual or a corporation
In most of the world, the default length of copyright is the life of the author plus either 50 or 70 years
Copyright is literally, the right to copy, though in legal terms ―the right to control copying‖ is more accurate
The copyright owner is given two sets of rights: an exclusive, positive right to copy and exploit the
copyrighted work, or license others to do so, and a negative right to prevent anyone else from doing so without consent, with the possibility of legal remedies if they do
With a few exceptions, the exclusive rights granted by copyright are strictly territorial in scope, as they are granted by copyright laws in different countries
Bilateral and multilateral treaties establish minimum exclusive rights in member states, meaning that there is some uniformity across Berne Convention member states
35
Free for freedom, not price
◦ freedom 1: unlimited use for any purpose
◦ freedom 2: study and modify for your needs (need source access !)
◦ freedom 3: copy
◦ freedom 4: distribute modifications
From copyright to freedom (―copyleft‖)
◦ copyright allows licensing
◦ licenses grants freedom
Terminology : Free software = Open source = Libra software
Many types
◦ GNU General Public License
◦ GNU Lesser General Public License (links are possible)
◦ BSD license, X11 license, Perl license, Python license...
◦ public domain release
―The licenses for most softwares are designed to take away your freedom to share and change it. By
contrast, the GNU GPL is intended to guarantee your freedom to share and change free software - to make sure the software is free for all its users‖
(http://www.gnu.org/copyleft/gpl.html)
◦ grants four freedoms
◦ protection of freedom
◦ «vaccination»
37
Licenses which can be used for the
distribution of free software
The goal of such
licenses is to free the recipient from any legal barriers which would inhibit their freedom to run, study, modify, or redistribute the software - both modified and unmodified
BSD licenses are a family of permissive free software licenses. The original license was used for the Berkeley Software Distribution (BSD), a Unix-like operating system after which it is named
The original owners of BSD were the Regents of the
University of California because BSD was first written at the University of California, Berkeley. The first version of the license was revised, and the resulting licenses are more properly called modified BSD licenses
The licenses have fewer restrictions on distribution
compared to other free software licenses such as the GNU General Public License or even the default restrictions
provided by copyright, putting works licensed under them relatively closer to the public domain
39
The GNU General Public License (GNU GPL or simply GPL) is the most widely used free software license, originally written by Richard Stallman for the GNU project
The GPL is the first copyleft license for general use, which means that derived works can only be
distributed under the same license terms
Under this philosophy, the GPL grants the recipients of a computer program the rights of the free software
definition and uses copyleft to ensure the freedoms are preserved, even when the work is changed or added to
Ethic - 1. the body of moral principles or values
governing or distinctive of a particular culture or group:
the Christian ethic; the tribal ethic of the Zuni. 2. a complex of moral precepts held or rules of conduct followed by an individual: a personal ethic.
Ethical – 1. pertaining to or dealing with morals or the principles of morality; pertaining to right and wrong in conduct. 2. being in accordance with the rules or
standards for right conduct or practice, esp. the
standards of a profession: It was not considered ethical for physicians to advertise. 3. (of drugs) sold only upon Medical prescription
41
Requirements
Developers work together with customers and users to define requirements and specify what the proposed
system will do.
If, once it is built, the system works according to specification but harms someone physically or financially, who is responsible?
Revised component
If one person has written a component but others have revised it, who is responsible if the component fails?
Testing
If an independent test team does integration testing and a critical fault remains in the code after testing is
complete, who is legally and ethically responsible for the damage caused by the fault? Tester or Developer
A safety-critical system fails and several lives are lost.
When the cause of the failure is investigated, the inquiry commission discovers that the test plan neglected to
consider the case that caused the system failure.
Who is responsible?
• The testers for not noticing the missing case?
• The test planners for not writing a complete test plan?
• The managers for not having checked the test plan?
• The customer for not having done a thorough acceptance test?
43
Maintenance
Suppose you are maintaining a large, safety-critical system. You use a model to predict which
components are most likely to fail. Then you examine those identified components carefully and perform
perfective and preventive maintenance on each one.
Soon after, the system undergoes a catastrophic failure. The source of the failure turns out to be a component that was not identified by your model.
Are you at fault for neglecting to look at the other components?
While developing software for a work project, you get an idea for a product of your own. Although your
product will not directly compete with the work
product, it deals with the same domain. You decide to develop your product on your own time, but on your computer at work.
Legal issues aside, who should own your product?
You? The company? The customer?
45
While developing software for a work project, you get an idea for a product of your own. Although your
product will not directly compete with the work
product, it deals with the same domain. You decide to develop your product on your own time on your
computer at home.
Legal issues aside, who should own your product?
You? The company? The customer?
A project teammate misleads her (and your) boss as to the status of the module she is working on. Are you responsible for this person’s unethical behavior? If so, what do you do?
What if the person is a superior?
What do you do if one of your teammates is clearly
incompetent and the project manager doesn’t know it?
47
What types of project information would be morally permissible to keep from your client?
What types of project information would be unethical to keep from your client?
Are there any types of information that are ―fuzzy?‖
Refactoring: http://www.zazzle.com/refactoring_poster- 228118789330102998
A Cyclic Model for Software Deployment: http://www.marinilli.com/
publications/articles/2002/model.html
Software Deployment: http://en.wikipedia.org/wiki/Software_deployment
Software Maintenance: http://cnx.org/content/m14717/latest/
Software Maintenance: http://en.wikipedia.org/wiki/Software_maintenance
E. B. Swanson (Maintenance) http://www.anderson.ucla.edu/x1960.xml
Software Maintenance Implications on Cost and Schedule: http://pro-
software.biz/2009/06/software-maintenance-implications-on-cost-and- schedule/
Maintenance: http://openseminar.org/se/modules/22/index/screen.do
Software release life cycle: http://en.wikipedia.org/wiki/
Software_release_life_cycle
Release engineering: http://en.wikipedia.org/wiki/Release_engineering
Release management: http://en.wikipedia.org/wiki/Release_management
Code reuse: http://en.wikipedia.org/wiki/Code_reuse
49
Copyright: http://en.wikipedia.org/wiki/Copyright
Category: Free Software licenses: http://en.wikipedia.org/wiki/Category:
Free_software_licenses
GNU General Public License:
http://en.wikipedia.org/wiki/GNU_General_Public_License
BSD Licenses: http://en.wikipedia.org/wiki/BSD_licenses
Software Engineering Ethics: http://www.acm.org/about/se-code
Software engineering professionalism:
http://en.wikipedia.org/wiki/Software_engineering_professionalism
Gonze, X. Basic Concepts of software maintenance.
(2008) http://www.etsf.eu/system/files/users/
SottileF/XG_Basics_v2.pdf
Grubb, P., Takang, A. A. Software maintenance.
Concepts and practice. (2003) 2nd ed. World Scientific (London)
Oezbek, C. Reuse. (2005) http://www.inf.fu-
berlin.de/~oezbek/pub/Oezbek04d_-_Reuse.ppt
Pfleeger, S. (1998) Software Engineering.
Grasso, M. A. (2002) Ethics in Software Engineering. CMSC 345, Fall 2002