Note
📣 You can help to improve this repo, by giving me a ⭐star⭐ and ❤️following me❤️
- What is Software?
- Attributes of Good Software
- Software Engineering Definition
- Difference between Software Engineering and Computer Science
- Difference between Software Engineering and System Engineering
- Key Challenges Facing Software Engineering
- Costs of Software Engineering
- Software Engineering Techniques & Methods
- Internet & Software Engineering
- Kinds of Software Product
- Importance of Software Engineering
- Software Process
- Software is not just the programs themselves but also all associated documentation, libraries, support websites, and configuration data that are needed to make these programs useful.
- Software products may be developed for a particular customer or may be developed for a general market.
- Good software should deliver the required functionality and performance to the user and should be maintainable, dependable and usable.
- Acceptability:
- Software must be acceptable to the type of users for which it is designed. This means that it must be understandable, usable, and compatible with other systems that they use.
- Dependability and security:
- Software dependability includes a range of characteristics including reliability, security, and safety. Dependable software should not cause physical or economic damage in the event of system failure. Software has to be secure so that malicious users cannot access or damage the system.
- Efficiency:
- Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency therefore includes responsiveness, processing time, resource utilization etc.
- Maintainability:
- Software should be written in such a way that it can evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable requirement of a changing business environment.
-
The seminal deffinition:
- the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.
-
The IEEE definition:
- the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
-
Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. In this definition, there are two key phrases:
- Engineering discipline.
- Engineers make things work. They apply theories, methods, and tools where these are appropriate. However, they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods.
- Engineers also recognize that they must work within organizational and financial constraints, and they must look for solutions within these constraints.
- All aspects of software production.
- Software engineering is not just concerned with the technical processes of software development. It also includes activities such as software project management and development of tools, methods, and theories to support software development.
- Engineering discipline.
- Computer Science focuses on theory and fundamentals.
- Software Engineering is concerned with the practicalities of developing and delivering useful software.
- System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering.
- Software engineering is part of this more general process.
- Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software.
- Roughly 60% of software costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs.
- While all software projects have to be professionally managed and developed, different techniques are appropriate for different types of system. For example, games should always be developed using a series of prototypes whereas safety critical control systems require a complete and analyzable specification to be developed. There are no methods and techniques that are good for everything.
- Not only has the Internet led to the development of massive, highly distributed, service-based systems, it has also supported the creation of an “app” industry for mobile devices which has changed the economics of software
- Generic Products.
- These are stand-alone systems that are produced by a development organization and sold on the open market to any customer who is able to buy them.
- Examples of this type of product include apps for mobile devices, software for PCs such as databases, word processors drawing packages, and project management tools. This kind of software also includes “vertical” applications designed for a specific market such as library information systems, accounting systems, or systems for maintaining dental records.
- Customized (or bespoke) Software.
- These are systems that are commissioned by and developed for a particular customer. A software contractor designs and implements the software especially for that customer.
- Examples of this type of software include control systems for electronic devices, systems written to support a particular business process, and air traffic control systems.
- More and more, individuals and society rely on advanced software systems. We need to be able to produce reliable and trustworthy systems economically and quickly.
- It is usually cheaper, in the long run, to use software engineering methods and techniques for software systems rather than just write programs as a personal programming project. Failure to use software engineering method leads to higher costs for testing, quality assurance, and long-term maintenance. For most types of system, the majority of costs, are the costs of changing the software after it has gone into use.
- A process is a collection of activities, actions and tasks that are performed when some work product is to be created. It is not a rigid prescription for how to build computer software. Rather, it is an adaptable approach that enables the people doing the work to pick and choose the appropriate set of work actions and tasks.
- Purpose of process is to deliver software in a timely manner and with sufficient quality to satisfy those who have sponsored its creation and those who will use it.
- The systematic approach that is used in software engineering is sometimes called a software process. A software process is a sequence of activities that leads to the production of a software product. Four fundamental activities are common to all software processes:
- Software Specification:
- Where customers and engineers define the software that is to be produced and the constraints on its operation.
- Software Development:
- Where the software is designed and programmed.
- Software Validation:
- Where the software is checked to ensure that it is what the customer requires.
- Software Evolution:
- Where the software is modified to reflect changing customer and market requirements.
- Communication:
- Communicate with customer to understand objectives and gather requirements.
- Planning:
- Creates a “map” defines the work by describing the tasks, risks and resources, work products and work schedule.
- Modeling:
- Create a “sketch”, what it looks like architecturally, how the constituent parts fit together and other characteristics.
- Construction:
- Code generation and the testing.
- Deployment:
- Delivered to the customer who evaluates the products and provides feedback based on the evaluation.
- These five framework activities can be used to all software development regardless of the application domain, size of the project, complexity of the efforts etc, though the details will be different in each case.
- For many software projects, these framework activities are applied iteratively as a project progresses. Each iteration produces a software increment that provides a subset of overall software features and functionality.
- An information system (IS) is an arrangement of people, data, processes, communications.
- An information system (IS) is an organized system for the collection, organization, storage and communication of information.
- Information technology that interact to support and improve day-to-day operations in a business, as well as support the problem-solving and decision-making needs of management and users.
- Information technology is a contemporary term that describes the combination of computer technology (hardware and software) with telecommunications technology (data, image, and voice networks).
-
- System owners are the information system’s sponsors and chief advocates. They are usually responsible for funding the project to develop, operate, and maintain the information system.
- Who PAY for the system.
-
- System users are the people who use the information system to perform their jobs. They are the primary beneficiaries of the information system.
- Internal Users:
- Clerical and service workers
- Technical and professional staff
- Supervisors, middle managers, and executive managers
- External Users:
- Do not directly work for the organization
- Perhaps these are direct consumers
- Internal Users:
#### Client Vs. User - **Client** may be a **tool** like any **web browser** or may be any **desktop application**. A **user** is a **person** who will log into the client and consume or use the remote functionality exposed by the server - System users are the people who use the information system to perform their jobs. They are the primary beneficiaries of the information system.
-
- System designers translate system user's business requirements and constraints into technical solutions.
- They design the computer files, databases, inputs, outputs, screens, networks, and programs that will meet the system user's requirements.
- System builders construct the information system components based on the design specifications from the system designers.
- In many cases, the system designer and builder for a component are one and the same.
-
- A systems analyst studies the problems and needs of an organization to determine how people, data, processes, communications, and information technology can best accomplish improvements for the business.
-
- A business analyst is a systems analyst that specializes in business problem analysis and technology-independent requirements analysis.
- A programmer/analyst (or analyst/programmer) includes the responsibilities of both the computer programmer and the systems analyst.
-
- Working knowledge of information technology
- Computer programming experience and expertise
- General business knowledge
- Problem-solving skills
- Interpersonal communication skills
- Flexibility and adaptability
- Character and ethics
- Systems analysis and design skills