Software engineering covers not only the technical aspects of building software systems, but also management issues, such as directing programming teams, scheduling, and budgeting.
Software engineering is an engineering branch associated with development of software product using well-defined scientific principles, methods and procedures. The outcome of software engineering is an efficient and reliable software product.
Software project management has wider scope than software engineering process as it involves communication, pre and post-delivery support etc.
The need of software engineering arises because of higher rate of change in user requirements and environment on which the software is working.
Large software- It is easier to build a wall than to a house or building, likewise, as the size of software become large engineering has to step to give it a scientific process.
Scalability- If the software process were not based on scientific and engineering concepts, it would be easier to re-create new software than to scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has lower down the price of computer and electronic hardware. But the cost of software remains high if proper process is not adapted.
Dynamic Nature- The always growing and adapting nature of software hugely depends upon the environment in which user works. If the nature of software is always changing, new enhancements need to be done in the existing one. This is where software engineering plays a good role.
Quality Management- Better process of software development provides better and quality software product.
• Restructuring or rewriting part or all of a system without changing its functionality
• Applicable when some (but not all) subsystems of a larger system require frequent maintenance
• Reengineering involves putting in the effort to make it easier to maintain
• The reengineered system may also be restructured and should be re-documented
When do you decide to reengineer?
• When system changes are confined to one subsystem, the subsystem needs to be reengineered
• When hardware or software support becomes obsolete
• When tools to support restructuring are readily available
Economics of Reengineering:
• Cost of maintenance: cost annual of operation and maintenance over application lifetime
• Cost of reengineering: predicted return on investment reduced by cost of implementing changes and engineering risk factors
• Cost benefit: Cost of re engineering - Cost of maintenance
There is a high risk in new software development. There may be development problems, staffing problems and specification problems
The cost of re-engineering is often significantly less than the costs of developing new software
The complete Software Re-Engineering lifecycle includes:
Product Management: Risks analysis, root cause analysis, business analysis, requirements elicitation and management, product planning and scoping, competitive analysis
Research and Innovation: Definition of a problem, data gathering and analysis, identifying a solution and developing best-of-breed or innovative algorithms, verification of quality for data and results, patent preparation
Product Development: Technology analysis and selection, software architecture and design, data architecture, deployment architecture, prototyping and production code development, comprehensive software testing, data quality testing, and product packaging and deployment preparation
Product Delivery and Support: Hardware/Platform analysis and selection, deployment and release procedures definition, installations and upgrades, tracking support issues, organizing maintenance releases.
Project Management: Brings efficiency and productivity to your software re-engineering project by utilizing modern, practical software project management, software quality assurance, data quality assurance, and advanced risk management techniques.
Reverse engineering is taking apart an object to see how it works in order to duplicate or enhance the object. The practice, taken from older industries, is now frequently used on computer hardware and software. Software reverse engineering involves reversing a program's machine code (the string of 0s and 1s that are sent to the logic processor) back into the source code that it was written in, using program language statements.
Reverse-engineering is used for many purposes: as a learning tool; as a way to make new, compatible products that are cheaper than what's currently on the market; for making software interoperate more effectively or to bridge data between different operating systems or databases; and to uncover the undocumented features of commercial products.
Following are reasons for reverse engineering a part or product:
The original manufacturer of a product no longer produces a product
There is inadequate documentation of the original design
The original manufacturer no longer exists, but a customer needs the product
The original design documentation has been lost or never existed
Some bad features of a product need to be designed out. For example, excessive wear might indicate where a product should be improved
To strengthen the good features of a product based on long-term usage of the product
To analyze the good and bad features of competitors' product
To explore new avenues to improve product performance and features
To gain competitive benchmarking methods to understand competitor's products and develop better products
The original CAD model is not sufficient to support modifications or current manufacturing methods
The original supplier is unable or unwilling to provide additional parts
The original equipment manufacturers are either unwilling or unable to supply replacement parts, or demand inflated costs for sole-source parts
To update obsolete materials or antiquated manufacturing processes with more current, less-expensive technologies.