Professional software development
What is meant by software engineering?
Its the discipline that involves in all stages of software production, from the very early stage of software specification to the very late stage of software maintenance when its in use.
- Characteristics of a software system:
- Abstract, meaning that it is not a physical object.
- Intangible, meaning that it cannot be touched.
- not constrained by properties of materials.
- does not have physical constraints.
- The reasons for software failures:
- Increase in complexity.
- Not using Software Engineering methods.
- Types of software products:
- Generic software products. Stand-alone software products that are marketed to people who want to use them. E.g. calculator, notepad.
- Product Specification: specification are owend by the developer. and any decision for changes to the specification are made by the developer.
- Custom software products. Software products that are developed for a specific customer. e.g. a software product for a bank.
- Product Specification: specification are owend by the customer. and any decision for changes to the specification are made by the customer.
- Generic software products. Stand-alone software products that are marketed to people who want to use them. E.g. calculator, notepad.
- Attributes of a good software product:
- Maintainability: Must evolve to meet the changing needs of the customer, specially in a changing business environment.
- Dependability(characteristics including reliability, security and safety) & security: Must be reliable and secure, not cause any physical or economic damage. and malicious users should not be able to access the system.
- Efficiency: Must not waste resources, Which includes responsiveness, Utilization of processor and memory
- Acceptability(understandable, usable and compatible with other systems): Must be acceptable to the customer, which includes usability, learnability, and operability.
-
Importance of software engineering: more and more people rely on advanced software systems to perform their daily tasks. and the software systems are becoming more complex and more critical to the success of the business. We need to be able to produce reliable and trustworthy systems economically and quickly. therfore, its usually cheaper to develop software systems using software engineering methods than to develop them treating them as a personal one-off project.
- Software process activities:
- Software specification, customers and engineers work together to define the requirements of the software system.
- Software development, software is built to meet the requirements.
- Software validation, software is tested to ensure that it meets the requirements.
- Software evolution, software is maintained to ensure that it continues to meet the requirements.
- General issues that affect software:
- Heterogeneity, operate across a range of different hardware and software platforms.
- Business and social change, software must be able to adapt to changing business and social needs.
- Security and trust, software must be secure and trustworthy.
- Scale, software must be able to operate at a large scale.
- Application types:
- Stand-alone apps, run on a single computer. e.g. calculator, notepad.
- interactive transaction-based apps, run on a remote computer accessed by a user from their own computer. e.g. e-commerce apps.
- Entertainment systems, like spotify, netflix, etc.
- Embedded control systems, controls hardware. like the control system of a car, or a washing machine.
- Batch processing systems, run on a remote computer and process large amounts of data. e.g. credit card billing systems.
- Systems of systems, a collection of software systems that work together to achieve a common goal. e.g. a bank.
- Data collection systems, collect data from their environment using a set of sensors and send the data to a remote computer for processing. e.g. water quality monitoring systems.
- Systems for modeling and simulation, set of tools and techniques used to create virtual models of real-world systems for the purpose of analyzing and predicting their behavior. e.g. a flight simulator.
Software engineering fundamentals principles
Systems should be developed using a managed and disciplined approach or development process depending on the type of software system. The system should be dependable, maintainable, and efficient and it should do exactly what the customer wants, so understanding and managing the software specification and requirements (what the software should do) are important. Where appropriate, you should reuse software that has already been developed rather than write new software.
Internet software engineering
More organization are now developing web-based systems rather than local systems because web services allow functionality to be accessed over the web. Cloud computing is an approach to the provision of computer services where applications run remotely on the ‘cloud’, where user pays based on the amount of resources they use. The cloud is a metaphor for the internet.
The fundamental ideas of software engineering apply to webbased software in the same way that they apply to other types of software system.
- Software reuse: the use of existing software components to build new software systems.
- Incremental and agile development: the development of software in small increments, with each increment being developed and tested before the next increment is started.
- Service-oriented architecture: the development of software systems as a collection of services that can be used by other software systems.
- Rich user interfaces: the use of graphical user interfaces to provide a rich user experience.
Software engineering ethics
- Issues of personal responsibility:
- Confidentiality: engineers must not disclose information about the software system to unauthorized people whether or not a confidentiality agreement is in place.
- Competence: engineers must not accept work that they are not competent to do.
- Intellectual property rights: engineers must acknowledge local laws ruling the ownership of intellectual property. e.g. patents, copyright, and trademarks.
- Computer misuse: engineers should not use their technical skills to misuse other people’s computers.