Week 1 Topic Overview - CN-7021
Week 1 Topic Overview - CN-7021
Introduction
1
Literarily, Software Engineering is made of two words that is, Software and Engineering. Where,
software means a collection of executable programming code, associated libraries and documentations
and; engineering on the other hand, is all about developing products, using well-defined, scientific
principles, techniques and approaches. Engineering could preferably be defined as the application of
Therefore, Software Engineering is an engineering branch that is related to both computer science and
applications (be it software systems or application software) using well-defined scientific principles,
techniques and approaches. The outcome of software engineering is an efficient and reliable software
product and this includes the initial development of software (that is, requirements gathering, software
design, coding or implementation and testing), its maintenance and updates, till desired software
Software Engineering considers building, maintaining and evolving software systems. Fundamentally,
it is a set of problem-solving skills, methods, techniques and technology applied in a variety of domains
to create and evolve useful software systems that solve practical problems.
Objectives
Know who a software engineer is and the various tasks of a software engineer.
1
CN7021- ADVANCED SOFTWARE ENGINEERING
Methods for designing and maintaining high-quality applications to solve problems in a systematic way
(Pfleeger, 1990).
The principles and methodologies for designing and maintaining software systems are studied in this
Definition 1:
operation, and maintenance of software; that is, the application of engineering to software.
Definition 2:
“The establishment and use of sound engineering principles in order to obtain economically software
Definition 3:
“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” (Sommerville, 2016).
1) 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 to organizational and financial constraints so they look for
2) 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
2
CN7021- ADVANCED SOFTWARE ENGINEERING
management and the development of tools, methods, and theories to support software
production.
Definition 4:
Software engineering is to “devise methodologies that are founded on the notion of evolution;” that is,
the notion that software systems continually change, new software systems are built from the old ones,
and . . . all must interoperate and cooperate with each other (Dayani-Fard, 1999)”.
The process of developing a software product using software engineering principles and methods is
referred to as Software Evolution. This includes the initial development of software and its maintenance
and updates, till desired software product is developed, which satisfies the expected requirements.
Software Crisis
The term software crisis was used in the early days of software engineering that is in early of the 1960s,
1970s, and 1980s. It was used to describe the impact of prompt increases in computer power and the
difficulty of the problems which could be tackled. In essence, it refers to the difficulty of developing
valid, maintainable, reliable and verifiable software applications or projects. The sources of the software
crisis are complexity, expectations, and change coupled with unprofessionalism (especially the lack of
expertise in producing sound user requirements, design, model and design, model, proper software
testing procedure).
Conflicting requirements has always hindered software development process. For instance, while users
demand a large number of features, customers generally want to minimize the amount they must pay
for the software and the time required for its development. When all these factors are not professionally
The term “software crisis” was first coined by F. L. Bauer at the first NATO Software Engineering
Conference in 1968 at Garmisch, Germany. The term was used early in Edsger Dijkstra's 1972 ACM
The major cause of the software crisis is that the machines have become more powerful! This implied
that: as long as there were no machines, programming was no problem at all; when there were few weak
computers, programming became a mild problem, and now with huge computers, programming has
equally become a huge problem. The crisis manifested itself in several ways that include:
3
CN7021- ADVANCED SOFTWARE ENGINEERING
Various scientific and engineering oriented processes and methodologies have been developed over the
last few decades by researchers to stop the software crisis, with varying degrees of success. These
various scientific and engineering oriented processes and methodologies are what software engineering
brought to suppress a widespread talk of a crisis in software production which, eventually led to the
Software Crisis 1.0. The different methods, and processes fit within a plan of action called a process
model. Week 4 is about methods, and processes. When they are applied suitably to projects then they
will provide:
4
CN7021- ADVANCED SOFTWARE ENGINEERING
4) How do we choose suitable methods to develop a given project knowing fully that small or
medium-scale projects are not suitable when it comes to the development of large-scale or
complex projects?
6) How do we cope with informal communications that take up a considerable portion of the time
7) How do we cope with users who generally have only a vague idea about the scope and
Kinds of Abstraction
o Data: abstract data types – what the data objects stand for and what operations can be
applied to them, not how they are represented on physical storage or their actual
representation.
o Control: captures the order in which commands are performed or values are being
accessed
5
CN7021- ADVANCED SOFTWARE ENGINEERING
2) Encapsulation: it is a fundamental concept that bundles data with the methods that operate on the
data. Encapsulation is used to hide the values and state of a structured data object inside a class in
case of an object oriented programming paradigm. This prevents the values and state form
3) Modularity: it is a general software development concept that involves separating a program’s unit
into independent pieces or building blocks, each containing all parts needed to execute a single
Using this approach a large complex problem is broken down into sub-problems, and if necessary
these are further divided until the tasks to be solved are simpler or easier for programming code to
program.
Modularity is the process of dividing a complex system into modules or components (Pressman &
Maxim, 2015). It provides a mechanism for realizing the philosophy of separation of concern. Most
of the programs written at the ordinary and advanced level courses are likely to be short; however,
in the IT arena most problems will require thousands, if not millions of lines of code. (Windows
2000 – over 35 million lines of code). The importance of dividing a problem into a series of self-
1. A problem to be split in stages and for a team of programmers to work on the problem, also
2. Senior programmers can be given the more complex modules to write, and the junior
6
CN7021- ADVANCED SOFTWARE ENGINEERING
5. Since a module performs a specific well defined task, it is possible to develop and place
commonly used modules in a user library so that they can be accessed by different programs.
(E.g. Validation, Uppercase, Text color…Pascal). If a programmer cannot continue through the
modules.
represented. From the figure, each box (node) in the chart represents a block of code called a
module. The root node (box at the top) represents the main section of the program. Each connecting
line represents a call to a module. The connecting lines could be variables (data) which are passed
4) Interoperability: Since there are various applications out there developed with different technologies
and platforms. The need for free and easy exchange of information among them becomes essential.
The ability of applications to exchange and make use of information is called interoperability.
culture, and legal requirements. In some cases, localization may require modifications to the user-
visible components of software. These components include user interface, images, graphics, and
documentation.
Hardware has progressed significantly. However, software has come a long way... We work on the
software functions that are the least known. Why should a basic and well-understood role be encoded
in hardware? Increase your demand for apps, think about your mobile phone.
7
CN7021- ADVANCED SOFTWARE ENGINEERING
• Very large: 10 years, 1000s of programmers, 10M LOC – Air traffic control, telecommunications,
space shuttle
• Very, Very Large: 15+ years, 1000s programmers, 35M LOC – W2K
systems
Software Evolution
Software Evolution commences from the requirements gathering process. After which developers create
a prototype of the intended software and show it to the users to get their feedback at the early stage of
the software product development. The users suggest changes, on which several consecutive updates
and maintenance keep on changing too. This process changes to the original software, till the desired
software is accomplished.
8
CN7021- ADVANCED SOFTWARE ENGINEERING
Even after the user has the desired software in hand, the advancing technology and the changing
requirements force the software product to change accordingly. Re-creating software from scratch and
to go one-on-one with the requirement is not feasible. The only feasible and economical solution is to
1) Lehman has given laws for software evolution. He divided the software into three different
categories: Static-type (S-type) - This is a software, which works strictly according to defined
specifications and solutions. The solution and the method to achieve it, both are immediately
understood before coding. The s-type software is least subjected to changes hence this is the
exactly what procedures can do. In this software, the specifications can be described but the
environment. This software has a high degree of evolution as there are various changes in laws,
taxes etc. in the real-world situations. For example, online trading software.
1) Continuing change - An E-type software system must continue to adapt to the real-world
2) Increasing complexity - As an E-type software system evolves, its complexity tends to increase
3) Conservation of familiarity - The familiarity with the software or the knowledge about how it
was developed, why was it developed in that particular manner etc., must be retained at any
4) Continuing growth- In order for an E-type system intended to resolve some business problem,
its size of implementing the changes grows according to the lifestyle changes of the business.
9
CN7021- ADVANCED SOFTWARE ENGINEERING
5) Reducing quality - An E-type software system declines in quality unless rigorously maintained
6) Feedback systems- The E-type software systems constitute multi-loop, multi-level feedback
7) Self-regulation - E-type system evolution processes are self-regulating with the distribution of
8) Organizational stability - The average effective global activity rate in an evolving E-type system
As starting point, to improve software quality and maintainability. Secondly, to meet growing demands.
Furthermore, to reduce software costs. In addition to effectively build massive, complex software
systems. Last but not least, to promote community effort in software development
Software development has been for centuries but, little or no application of scientific and engineering
Software development was more of art than science. This led to the Software Crisis 1.0. The term
software crisis was first coined in 1958, but within 10 years, problems in software’s development and
delivery led to the phrase software crisis (Naur, 1968). Software Crisis 1.0 became rampant in the 1960s,
with software taking longer and costing more to develop than estimated, and not working very well
During this software crisis era, software products faced some challenges that affect their operational,
1) Definition: What? Description and review of requirements, the developer must be aware of
the following: Application domain, required features, required output, and user interface.
Planning a project entails allocating money, calculate costs, define job responsibilities and
provide a timetable. Analyze the system, assign device resources to the following:
10
CN7021- ADVANCED SOFTWARE ENGINEERING
2) Development: How? Define modular modules and major data structures in detailed design.
Define algorithms and procedural information. Software design. User experience design is a
high-level design. Coding, write code for a variety of purposes. Unit checking for each
3) Maintenance: Managing change. Adaptation, updates, new hardware, new business policies.
Correction, fix program defects. Enhancement, adding features. Prevention, making it easier
to manage.
Software development protocol that follows a step-by-step process and includes the following major
Process models
Views of the method that are idealized. Different models are often used for different sub processes, for
example, the spiral model (in Figure 1.4) can be used for overall growth, prototyping (in Figure 1.3) for
a particularly complex component, and the waterfall model (in Figure 1.2) for other components.
11
CN7021- ADVANCED SOFTWARE ENGINEERING
Assist the customer in defining their needs, have a concrete model to "try out", this is often achieved via
the user interface. Look at alternative methods for a problematic component, for example, see whether a
12
CN7021- ADVANCED SOFTWARE ENGINEERING
method produces satisfactory results. Boost morale, a partially operational framework offers insight into
a project.
Agile methods
Flexibility is emphasized in the production of software that is both fast and capable. Agile manifesto,
focus on customer collaboration rather than contract negotiation (Sommerville, 2016), value people and
experiences over processes and resources, choose to spend time in creating working applications rather
Facets of XP, the game of preparation (customer defines value), simple design, writing tests
first, small release, metaphor (common vision, common names), refactoring pair programming,
collective ownership, continuous integration (small increments), sustainable rate (40 hours per
Requirements expressed as a set of test cases must be passed by the software, a vulnerability if
one of them is changed. Requirements expressed as a set of test cases must be passed by the
software, refactoring problem, reworking a device without degrading its design is difficult.
2) Crystal: a series of methods focused on the idea that each project needs its own set of policies
and conventions.
Contact, between the client and the developer. The most common cause of failed software projects is
poor problem definition within the development team. Better people equals more communication. New
13
CN7021- ADVANCED SOFTWARE ENGINEERING
programmers need training. Project characteristics, novelty, changing requirements 5 times the cost of
production and up to 100 times the cost of maintenance. Security requirements. Real-time requirements.
Facilities and equipment, identification, acquisition. Management problems, realistic targets, cost
estimate, scheduling, resource distribution, quality assurance, version control, contracts. Personnel
Operational Characteristic
This tells us how well the software works in operations. It can be measured on:
1) Budget or Cost
3) Efficiency
4) Correctness
5) Functionality
6) Reliability: measurement of the frequency and severity of failure, the accuracy of output results,
the mean-time-to-failure (MTTF)-the ability to recover from failure, and the predictability of the
7) Security
8) Safety
Transitional Characteristic
This aspect is important when the software is moved from one platform to another:
1) Portability
2) Interoperability
3) Reusability
4) Adaptability
Maintainability Characteristic
This aspect briefs about how well the software has the capabilities to maintain itself in the ever- changing
environment:
14
CN7021- ADVANCED SOFTWARE ENGINEERING
1) Modularity
2) Maintainability
3) Flexibility
4) Scalability
In short, Software engineering is a branch of computer science, which is expected to use well-defined
engineering concepts required to produce efficient, durable, scalable, cost effective, and on-time software
products. Although, constructing software is a challenging task, because software is complex. However,
when software engineering is applied to software product’s development then we expect a product with
3) high performance
4) portability
6) high reliability
7) delivery on time
8) high maintainability
Moreover, the need of software engineering arises because of higher rate of change in user requirements
and environment on which the software is working. Following are some of the needs stated:
1) Large software - It is easier to build a wall than a house or building, likewise, as the size of the
2) Scalability- If the software process were not based on scientific and engineering concepts, it
3) Cost- As hardware industry has shown its skills and huge manufacturing has lower down the
price of computer and electronic hardware. But, cost of the software remains high if proper
4) Dynamic Nature- Always growing and adapting nature of the software hugely depends upon
the environment in which the user works. If the nature of software is always changing, new
15
CN7021- ADVANCED SOFTWARE ENGINEERING
enhancements need to be done in the existing one. This is where the software engineering plays
a good role.
5) Quality Management- Better process of software development provides better and quality
software product.
As computers have a central and growing role in commerce, industry, government, medicine, education,
entertainment and society at large, software engineers are those who contribute by direct participation
or by teaching, to the analysis, specification, design, development, certification, maintenance and testing
of software systems.
A software engineer is an individual who applies the principles of software engineering to the analysis,
design, development, testing, and evaluation of a software project in order to meet with user’s or
customer’s requirements. A software engineer can design both data and architecture, the job is often
allocated to specialists when large, complex systems are to be built. The engineer fully analyzes,
designs, models and implement software, there after tests, debugs and maintains it (Pressman and
Maxim, 2015). Software engineer needs knowledge of varieties of computer programming languages
and applications; to enable him cope with the varieties of works before him or her as user’s
1) Analyses information to determine, recommend, and plan computer specifications and layouts, and
2) Analyses user needs and software requirements to determine feasibility of design within time and
cost constraints.
4) Analyses, designs, models, implements and modifies software systems, using scientific analysis and
6) Develops and direct software system testing and validation procedures, programming, and
documentation.
7) Modifies existing software to correct errors; allow it to acclimatize to new hardware, or to improve
its performance.
8) Obtains and evaluates information on factors such as reporting formats required, costs, and security
Although not bound by laws but there are some standards of acceptable behavior bound by the more tenuous
1) Respect for the confidentiality of employers or clients irrespective of whether or not a formal
2) No misrepresentation of competence. A software engineer should not knowingly accept work that is
3) Respect for local laws governing the use of intellectual property such as patents and copyright.
4) A software engineer should not use your technical skills to misuse other people’s computers. Computer
misuse ranges from relatively trivial (e.g. game playing on an employer’s machine, say) to extremely
As regards those standards bound by laws, professional societies and institutions have an important role
to play in setting ethical standards. Organizations such as the ACM, the IEEE (Institute of Electrical and
Electronic Engineers), and the British Computer Society publish a code of professional conduct or code
of ethics. Members of these organizations undertake to follow that code when they sign up for
membership. These codes of conduct are generally concerned with fundamental ethical behavior. For
instance, professional associations, notably the ACM and the IEEE, cooperated to produce a joint code
of ethics and professional practice (Sommerville, 2011). Software engineers shall commit themselves to
making the analysis, specification, design, development, testing and maintenance of software a beneficial
and respected profession. In accordance with their commitment to the health, safety and welfare of the
1) Public: Software engineers shall act consistently with the public interest.
17
CN7021- ADVANCED SOFTWARE ENGINEERING
2) Client and Employer: Software engineers shall act in a manner that is in the best interests of
3) Product: Software engineers shall ensure that their products and related modifications meet the
4) Judgment: Software engineers shall maintain integrity and independence in their professional
judgment.
5) Management: Software engineering managers and leaders shall subscribe to and promote an
6) Profession: Software engineers shall advance the integrity and reputation of the profession
8) Self: Software engineers shall participate in lifelong learning regarding the practice of their
profession and shall promote an ethical approach to the practice of the profession.
The rationale behind this code is summarized in the first two paragraphs of the longer form
(Sommerville, 2016).
Computers have a central and growing role in commerce, industry, government, medicine, education,
entertainment and society at large. Software engineers are those who contribute by direct participation
testing of software systems. Because of their roles in developing software systems, software engineers
have significant opportunities to do well or cause harm, to enable others to do well or cause harm, or to
influence others to do well or cause harm. To ensure, as much as possible, that their efforts will be used
for good, software engineers must commit themselves to making software engineering a beneficial and
respected profession. In accordance with that commitment, software engineers shall adhere to the
The Code contains eight Principles related to the behavior of and decisions made by professional
software engineers, including practitioners, educators, managers, supervisors and policy makers, as well
as trainees and students of the profession. The Principles identify the ethically responsible relationships
in which individuals, groups, and organizations participate and the primary obligations within these
18
CN7021- ADVANCED SOFTWARE ENGINEERING
relationships. The Clauses of each Principle are illustrations of some of the obligations included in these
relationships. These obligations are founded in the software engineer’s humanity, in special care owed
to people affected by the work of software engineers, and the unique elements of the practice of software
software engineer.
In conclusion, the software lifecycle includes the following steps: definition (what), how to grow, how
to maintain (change). Different process models focus on various aspects. Maintainability of the waterfall
model. Prototype model: specifications clarification. Spiral model for risk assessment. The cost of
maintenance is much higher than the cost of production. Bottom Line, software in the United States is
a critical component of our societal infrastructure, costing upwards of $200 billion per year. There is a
Conclusion
In this week, we have learnt that software engineering is the application of a systematic, disciplined,
quantifiable approach to the development, operation, and maintenance of software project, and the study
software development process. Also, we learnt the principles (Abstraction, Information Hiding,
applies the principles of software engineering to the design, development, testing, and evaluation of the
software and systems in order to meet with client’s requirements as well as his functions. Finally, we
learnt the code of ethics and professional practice in software engineering. Next week, we shall begin
with the consideration of one of the quantitative approaches in software engineering that help to yield
References
2. Dayani-Fard, H. (1999). Legacy Software Systems: Issues, Progress, and Challenges. IBM
Technical Report.
3. Douglas, B. (2005). Software Engineering for Students. 4th Edition. Pearson Education Limited
10. Zelkowitz, M.V. (1978). Perspectives on Software Engineering. ACM Computing Surveys.
20