Hello, I'm a Software Engineer
While I have begun working on my 2nd graduation’s monography, with lots of book’s resumes and reviews to do, I thought that some pieces might result in interesting blog articles. But, as tradition in the World Wide Web, it’s expected from the first post to be a sort of introduction, with some personal information in it.
Due to both temporary hardware restrictions and to writing a monography, as mentioned on this post, you must expect more theoretical posts than tutorial ones, at least for a while.
With years of previous work experience with web design, architecture, development and programming, I headed more towards the technical side and today I use the skills, methods and tasks of a Software Engineer at work.
What does a Software Engineer do?
According to author Roger Pressman(2010), software engineers’ main functions are to build and support software.
He tells us that, today, software has become pervasive in everyday activities and, for the end user, it is represented by the resulting information it produces as an output. But, for the software engineer, “the work product is the set of programs, content (data), and other work products that are computer software” (Pressman, 2010, p.1).
It’s the software engineer’s job to build high quality complex systems in a timely manner.
Software Engineering practices allow IT professionals to build high quality computer software and help with:
- Taking less time to get software finished
- Decreasing development costs
- Finding system errors before giving the software to customers
- Spending less time and effort maintaining existing programs
- Measuring progress as software is being developed and maintained
For authors Shari Pfleeger and Joanne Atlee(2010), software engineers use their knowledge of computers and computing to help solve problems.
High quality software is built with the aid of a process, a collection of methods (practice) and tools that constitutes Software Engineering.
The IEEE(1993) has defined Software Engineering as: “The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. The study of approaches as in.”
Software Engineering vs. Computer Science vs. System Engineering
Software Engineering | Computer Science | System Engineering |
|
|
|
Fig. 1 — The relationship between Computer Science and Software Engineering (PFLEEGER, Shari L., ATLEE, Joanne M.,2010, p.5)
Why is the role of the Software Engineer relevant?
The key challenges facing software engineering, according to author Ian Sommerville(2011) are:
• coping with increasing diversity(of types of software and its users)
• demands for reduced delivery times
• developing trustworthy software
Sommerville(2011) points out two reasons why the role of the software engineering is important:
- As individuals and society rely on advanced software systems, we need to respond with reliable and trustworthy systems economically and quickly.
- Using software engineering methods and techniques for software systems, rather than simply writing programs as in personal programming projects, usually gets cheaper in the long run. The majority of costs are, for most types of systems, of changing the software after it has been put to use.
People that write programs for themselves can spend as much time as they wish on program development. Software engineers, however, need to get results of the required quality within the schedule and budget, and this often involves making compromises and prioritizing.
The most effective way to produce high-quality software often adopted by software engineers is a systematic and organized approach to their work. They select the most appropriate method for a set of circumstances.
Software engineers are not merely concerned with the technical processes of software development, but instead with all aspects of software production.
Their tasks also includes activities, such as software project management and the development of tools, methods, and theories to support software production.
History of Software Engineering
Sommerville(2011) reports that the notion of ‘software engineering’ was first proposed in 1968, at a conference carried out to discuss what became known as the ‘software crisis’ (Naur and Randell, 1969), when it became clear that individual approaches to program development did not scale up to large and complex software systems. The individual approach produced software products that:
- were unreliable
- cost more than expected
- were delivered late.
Throughout the decades of 1970 and 1980, a variety of new software engineering techniques and methods were developed, such as:
• structured programming
• information hiding
• object-oriented development
Tools and standard notations that were developed then are now extensively adopted.
The Software Engineering areas
Software englobes a wide range of technology and application areas. Pressman(2010) points out seven broad categories of computer software for the application domain of software engineers’ work.
Software engineers worldwide are building new systems, or working on existing applications, correcting, adapting, and enhancing software projects in one or more of these categories.
System software — collection of programs that service other programs. Characteristics of the systems software area are:
• heavy interaction with computer hardware
• heavy usage by multiple users
• concurrent operation that requires scheduling, resource sharing, and sophisticated process management
• complex data structures
• multiple external interfaces
Some system software process complex, yet determinate information structures, with predictable order and timing of inputs, processing, and outputs. Examples of this kind of system software are: compilers, editors, and file management utilities. While other systems applications process indeterminate data, whose order and timing of inputs, processing, and outputs cannot be predicted in advance. Examples of system software this kind are: operating system components, drivers, networking software, telecommunications processors.
Application software — stand-alone programs solving specific business needs, processing business or technical data to facilitate business operations or management or technical decision making.
As a step forward to conventional data processing applications, application software controls business functions in real time. Examples of those functions are:
• point-of-sale transaction processing
• real-time manufacturing process control
• etc
Engineering/scientific software — traditionally characterized by “number crunching” algorithms. Examples of these applications are found in:
• astronomy
• volcanology
• automotive stress analysis
• space shuttle orbital dynamics
• molecular biology
• automated manufacturing.
• etc
Nowadays, modern applications within the engineering/scientific area have begun to move away from conventional numerical algorithm and many interactive applications have begun to take on real-time and even system software characteristics. Some examples of those applications are:
• computer-aided design
• system simulation
• etc
Embedded software — software that resides within a product or system and is used to implement and control features and functions, for both the end user and the system itself.
This kind of software not only can perform limited functions, such as a key pad control for a microwave oven, but also provide significant function and control capability, for example: digital functions in an automobile such as: fuel control, dashboard displays, and braking systems.
Product-line software — designed to provide a specific capability to be used by many different customers.
Product-line software either focus on a limited marketplace, such as inventory control products, or address mass consumer markets as, for example:
• word processing
• spreadsheets
• computer graphics
• multimedia
• entertainment, database management
• personal and business financial applications
Web applications — also known as “WebApps,” network-centric software category that includes a wide ange of applications. Although WebApps may have unique features and requirements, they are also a special kind of software.
Web-based systems and applications have evolved from simple collections of information content to sophisticated systems with complex functionality and multimedia content.
The simplest WebApps can be little more than a set of linked hypertext files presenting information, by using text and limited graphics.
With the advent of Web 2.0, WebApps have evolved into sophisticated computing environments that besides providing stand-alone features, computing functions, and content to the end user, also integrate with corporate databases and business applications.
Artificial intelligence software — uses nonnumerical algorithms to solve complex problems not yielding to computation or straightforward analysis.
Examples of applications within this area are:
• robotics
• expert systems
• pattern recognition (image and voice)
• artificial neural networks
• theorem proving
• game playing
Pressman(2010) reports that past generations working with software building have left a legacy in each of the categories, and identifies that yet new challenges have appeared for software engineers:
Open-world computing — with the rapid growth of wireless networking leading to pervasive, distributed computing, the challenge for software engineers is developing systems and application software that allow mobile devices, personal computers, and enterprise systems to communicate across the vast existing networks.
Netsourcing — with the World Wide Web quickly becoming a computing engine and content provider, the challenge for software engineers is architecting simple, such as personal financial planning, and sophisticated applications for targeted end-user markets worldwide.
Open source — growing trend that results in distribution of source code for systems applications, allowing many people to contribute to its development. For example:
• operating systems
• database
• development environments
The challenge presented by this trend to software engineers is building source code that is self-descriptive, and developing techniques that enable both customers and developers to know what changes have been made and how those changes affect the software.
Each of these new challenges have effects for businesspeople, software engineers, and end-users. Pressman(2010) recommends that software engineers adopt a process that is agile and adaptable enough to accommodate changes in technology and to business rules that are coming over this decade.
Software Engineer ethics
The software engineer job involves wider responsibilities than the application of technical skills. As noted by Sommerville(2011), people working in Software engineering field must act within a social and legal framework that limits their activity. They have responsibilities to the engineering profession and society, and should not be only concerned with technical issues.
Sommerville(2011) states that a respected professional engineer must behave in an ethical and morally responsible way, upholding normal standards of honesty and integrity. A professional engineer should not use his/her skills and abilities to behave in a dishonest way, or bring disrepute to the software engineering profession.
Standards of expected behavior are set out by codes of conduct published by professional societies. There are areas where standards of acceptable behavior are bound by notion of professional responsibility. Some of these are:
1. Confidentiality
Software engineers should respect the confidentiality of employers or clients, whether or not a confidentiality agreement has been signed.
2. Competence
Software engineers should not misrepresent their competence level, and should not accept work outside their competence.
3. Intellectual property rights
Software engineers should be aware of laws governing the use of intellectual property, such as patents and copyright. They should ensure that the intellectual property of employers and clients is protected.
4. Computer misuse
Software engineers should not use their technical skills to misuse other people’s computers. Computer misuse ranges from trivial, such as unauthorized game playing on an employer’s machine to extremely serious, such as dissemination of viruses or other malware.
The Software Engineer activities
Sommerville(2011) defines the software process as the systematic approach that is used in software engineering, a sequence of activities that leads to the production of a software product.
Generic software process model are composed of a set of activities that establish a framework for software engineering practice (Pressman, 2010). Pressman(2010) divides the software process in five generic framework activities: communication, planning, modeling, construction, and deployment, applicable to all software projects — that along with umbrella activities establish a skeleton architecture for software engineering work.
On the other hand, Sommerville(2011) states that the four fundamental activities common to all software processes are:
1. Software specification — where customers and engineers define the software that is to be produced and the constraints on its operation.
2. Software development — where the software is designed and programmed.
3. Software validation — where the software is checked to ensure that it is what the customer requires.
4. Software evolution — where the software is modified to reflect changing customer and market requirements.
These generic activities can be organized in different ways and described at different levels of detail, according the type of software being developed.
Different types of systems may need different development processes. Sommerville(2011) cites examples of those differences: a real-time software in an aircraft needs to be completely specified before development begins, but in an e-commerce systems, often the specification and the program can be developed together.
The software engineering practice is considered a problem solving activity that applies a set of core principles to solve practical problems. Thus, it’s essential to first understand the nature of the problem.
While Computer Science analyses hardware design or proves theorems about algorithms, software engineers focus on the computer as a problem solving tool.
From the software engineering point of view, computers and programming languages are tools to be used in designing and implementing solutions to real problems.
Bibliography
Other sources
Software engineering standards have been published by the IEEE over the past few decades:
Software Engineering Code of Ethics and Professional Practice ACM/IEEE-CS
Joint Task Force on Software Engineering Ethics and Professional Practices (1999):
https://www.ieee.org/about/corporate/governance/p7-8.html
The Guide to the Software Engineering Body of Knowledge (SWEBOK) describes generally accepted software engineering knowledge.
Its 15 knowledge areas (KAs) summarize key concepts, including a reference list for detailed information:
Comentários
Postar um comentário