Understanding Software Engineering

It is a systematization of the process of software development to ensure the best solution most economically. Its goal is to produce high quality software at low rate.

Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software. A typical software development project will need to go through the phase of Analysis, Design, Programming, Testing and Implementation. Software Project Management (SPM), Software Quality Assurance (SQA) and the use of Computer aided Software Engineering (CASE) would run parallel with the other phases and finally comes the maintenance phase. It is always said that more than 80% of the costs go towards maintenance of the software.

Software Methodology

It is a step by step plan for implementing a method using certain tools and procedures. It often describes the entry criteria, exit criteria and checkpoint for each of the activities or components in software engineering. Some of the popular methodologies today are based on structure techniques or information engineering or object-oriented techniques. Methodology selection depends on the nature of the project, the type of application, the tools proposed to be used and the kind of controls and documentation that would be required.

Waterfall, Prototyping, Spiral, Rapid Application, Stepwise Refinement, Industrial and military standards, Assembly by reuse, Application generation, Continuous transformation and Knowledge based software automation are some of the popular methodologies.

What factors would influence the choice of model for software development?

It depends on the nature and size of application, whether it is an in-house development or development through an external agency, the availability of various tools and resources, time frame and budget, etc.

Who is Software Engineer?

A software engineer is someone who applied engineering principles in the co-operative development of software. A good software engineer should not only generate computer programs but also learn the skills to produce good documentation, database and operational procedures for the computer system. He should be well defined about the components or modules of software engineering.

Dagstuhl Seminar End – User Software Engineering

I have been reading this abstracts paper from the Dagstuhl Seminar End-User Software Engineering and it has lots of interesting points to make.

In the Dagstuhl Seminar report (Burnett et al) it is stated that “The number of end users creating software is far larger than the number of professional programmers. These end users are using various languages and programming systems to create software in forms such as spreadsheets, dynamic web applications, and scientific simulations. This software needs to be sufficiently dependable, but substantial evidence suggests that it is not.” This point relates to that of (Ko) (Carnegie Mellon University) who explains that the goals of end-users may be unrelated to production of code, but instead they are interested in their domain problem, this means they perceive programming barriers as distractions. Ko explains that end-user programmers must be allowed to focus on their goals, and an important part of the solution is to visualise the whole program execution not just the output. A further problem outlined by Ko is that of programs which were intended to be temporary and owned by a particular person becoming central to a company, this often happens with spreadsheets.

(Henry Lieberman) of MIT Media Laboratory asks “Why is it so much harder to program a computer than simply to use a computer application? I can’t think of any good reason why this is so; we just happen to have a tradition of arcane programming languages and mystically complex software development techniques. We can do much better.” He argues that researchers should use program transformation, and visualisation to make the end-user programming process as automatic as possible. In order that people can become End-User Software Engineers without their even realizing it. This needs to involve interdisciplinary research to combine different research approaches. (Blackwell) also argues the need for interdisciplinary research on the end-user programming problem to identify techniques within software engineering that can assist with this problem.

(Coutaz) explains how Model Driven Engineering and Service Oriented Architecture can be combined. Coutaz also explains that “An interactive system is a graph of models related by mappings and transformations.” This would fit in well with the structure of RDF (Resource Description Framework) a Semantic Web standard, which is also a graph structure. Alexander Repenning of University of Lugano explains the need for enhancements to UML (Unified Modeling Language) to aid end-user programming. (Engels) of University of Paderborn also explains that UML should be extended to allow development of user interfaces in order to assist end-users to program. (Repenning) also argues that “Visual programming languages using drag and drop mechanisms as programming approach make it virtually impossible to create syntactic errors.” So “With the syntactic challenge being – more or less – out of the way we can focus on the semantic level of end-user programming.” (Rosson) of Pennsylvania State University also explains about creation of a web based drag and drop interface. Abraham and (Erwig) of Oregon State University integrate spreadsheet modelling into the UML modelling process. (Gerhard Fischer) of University of Colorado explains the concept of meta-design as aimed at creating infrastructures for collaborative design assuming future uses and problems cannot be completely anticipated during development of a system. (Dittrich) of University of Copenhagen argues that more research is needed into the software lifecycle and methods and tools needed for end-user developers, especially when they are collaborating. These end-users often need to adjust old software for new purposes. (Costabile and Piccinno) also explain that new methodologies and environments are required for supporting end-user collaborative development

(De Souza) argues that the goal of human-computer interaction (HCI) will evolve from making systems easy to use to making systems that are easy to develop. Lieberman also argues that HCI experts have concentrated on ease of use and should examine ease of programming. (Begel) of Microsoft Research explains that if programming is left only to programmers rather than allowing domain experts to be involved the program becomes a black box and the domain expert cannot trust or verify the results. He explains that text based computer languages are often too obscure for end-user programmers. Begel also explains that end-users may lack an engineering mindset to form mental models of how to make the computer do what they want. Segal of the Open University argues that professional engineers have a history of programming so can be distinguished from other end-user programmers as having less problems with coding. (Fischer) explains that it is the mismatches between end-users needs and software support that enables new understandings. Fischer also argues that software development can never be completely delegated to software professionals because domain experts are the only people that fully understand the domain specific tasks that must be performed. He also argues for an approach to enabling end-user programming that makes it interesting to end-users. He explains that often the problem is that end-users find programming boring rather than that they find it hard. (Spahn et al) explains that end-users of ERP (Enterprise Resource Planning) systems are domain experts not IT professionals, and this is forcing them to communicate their needs to IT developers. Spahn et al argue for the empowerment of users to customise software by providing an abstraction layer to hide technical details and allow for concentrating on business needs.

(Clarke) of Microsoft examines the characteristics of end-user developers in order to assist with meeting their needs. (Fischer) hypothesises that this emphasis on end-user development also changes the emphasis on testing “Software testing is conducted differently. Because domain expert developers themselves are the primary users, complete testing is not as important as in the case when the developers are not the users.”

References

End-User Software Engineering – Dagstuhl Seminar – Summary – http://www.dagstuhl.de/en/program/calendar/semhp/?semnr=2007081 – PDF Abstracts and links to papers – http://eusesconsortium.org/docs/dagstuhl_2007.pdf – Margaret M. Burnett, Gregor Engels, Brad A. Myers and Gregg Rothermel – From 18.01.07 to 23.02.07, the Dagstuhl Seminar 07081 End-User Software Engineering was held in the International Conference and Research Center (IBFI), Schloss Dagstuhl. During the seminar, several participants presented their current research, and ongoing work and open problems were discussed.

Abraham, R., Erwig, M., 2007. Exploiting Domain-Specific Structures For End-User Programming Support Tools. In: End-User Software Engineering Dagstuhl Seminar.

Begel, A., 2007. End User Programming for Scientists: Modeling Complex Systems. In: End-User Software Engineering Dagstuhl Seminar.

Blackwell, A., 2007. Interdisciplinary Design Research for End-User Software Engineering. In: End-User Software Engineering Dagstuhl Seminar.

Burnett, M. M., Engels, G, Myers, B. A., Rothermel, G., 2007. End-User Software Engineering Dagstuhl Seminar.

Clarke, S., 2007. What is an End User Software Engineer?. In: End-User Software Engineering Dagstuhl Seminar.

Costabile, M. F., Piccinno, A., 2007. Software environments for supporting End-User Development. In: End-User Software Engineering Dagstuhl Seminar.

Coutaz, J., 2007. Meta-User Interfaces for Ambient Spaces: Can Model-Driven-Engineering Help?. In: End-User Software Engineering Dagstuhl Seminar.

De Souza, C., 2007. Designers Need End-User Software Engineering. In: End-User Software Engineering Dagstuhl Seminar.

Dittrich, Y., 2007. Rethinking the Software Life Cycle: About the Interlace of Different Design and Development Activities. In: End-User Software Engineering Dagstuhl Seminar.

Engels, G., 2007. Model-Driven Development for End-Users, too!? In: End-User Software Engineering Dagstuhl Seminar.

Fischer, G., 2007. Meta-Design: A Conceptual Framework for End-User Software Engineering. In: End-User Software Engineering Dagstuhl Seminar.

Gross, M. D., 2007. Designers Need End-User Software Engineering. In: End-User Software Engineering Dagstuhl Seminar.

Ko, A. J., 2007. Barriers to Successful End-User Programming. In: End-User Software Engineering Dagstuhl Seminar.

Lieberman, H., 2007. End-User Software Engineering Position Paper. In: End-User Software Engineering Dagstuhl Seminar.

Repenning, A., 2007. End-User Design. In: End-User Software Engineering Dagstuhl Seminar.

Rosson, M. B., 2007. Position paper for EUSE 2007 at Dagstuhl. In: End-User Software Engineering Dagstuhl Seminar.

Segal, J., 2007. End-User Software Engineering and Professional End-User Developers. In: End-User Software Engineering Dagstuhl Seminar.

Spahn, M., Scheidl, S., Stoitsev, T., 2007. End-User Development Techniques for Enterprise Resource Planning Software Systems. In: End-User Software Engineering Dagstuhl Seminar.

Computer Software Engineers – The Brain Behind the Software

Computer software engineers are people who are qualified professionals working behind the scene to bring us the latest in the software technology. The technology being almost a part and parcel of our daily routine we look forward for their latest development unknowingly. Their developments can more often than not be used beneficially in our lives. The computer software being a fast developing field it has become almost impossible to keep up with the daily developments. So in the present day the job of computer software engineers do require specialization in a particular field to keep abreast of changing technology.

This means if we want to know what is the latest technology to be had in a certain area, then instead of asking any software engineers we will get the right information only if we ask specialized engineers in that particular area. Even though the other engineers might be able to give you an abstract idea of the developments they may be way off the hook in providing you with the best information. Not many people are aware of such difference in software developments so they choose the wrong engineers and end up getting mediocre results from the service they bought. This might be one of the reasons why they do not find the same deliverance for the same issue of a next door neighbor.

There is no uniform software package to be followed, different industry have different needs so the software engineers should learn skill sets of each industry and develop packages for their need. This is not a simple process one has to spend days and months of experimenting and testing to bring out top notch products in the definite area they concentrate. Actual what we get as a simple final product are the result of months of hard toil. Never do we think on this aspect when we discard some of these developments as outdated. There are hundreds of companies employing software engineers to come up with top quality software deliverance to reap the profits when it is really hot. Good computer software engineers are actually experts in their area of system deployment. The operational software system is actually the end result of the engineers transforming mechanical, electrical or computer system into a package easily usable by us.

It is the software engineers who perform all the activities behind the functional system available for use. So if we can seek out good software engineers we can use their deployment for quality products. Once we choose an experienced software engineer to build us a software system to suit our particular need we can be assured of systems quality because they might have tried and tested the system package many times over. They know the basics of what we require and they can also customize it for us to the way we find it easy to use. The situation being so they may also be able to smell a new idea when you take them to it for your needs.

So where is the catch – simply in finding efficient computer software engineers…?

What is the Difference Between a Software Engineer and a Computer Programmer?

The terms software engineer or computer programmer may be confusing to the average computer user. Most of us associate computer programs with the generic term ‘Software’. To us it may seem that the terms are interchangeable. That is not so. The role played by a software engineer is significantly different from that of a computer programmer. Before learning what the difference between a software engineer and a computer programmer is, let us see what is meant by the term software engineering and how it relates to computer programming.

Software engineering is a rigorous approach to development, maintenance and testing of software. These are engineers who must be knowledgeable about software requirements, design, development, maintenance and testing. They must be well versed with the tools and methods used for the development process as a whole. It is thus a convergence of the fields of computer science and systems engineering with a great deal of project management added for good measure. They are expected to have technical skills in addition to managerial skills.

A computer programmer on the other hand, is required to develop, test and maintain code that is to be run on the computer. He is responsible for converting the specifications provided in the software requirements definition phase into working code for the computer. Computer programmers are involved with design and maintenance of websites too. They should be proficient in analysis of programs. They are required to collaborate with manufacturers in developing new methodologies for software with evolution of hardware. Training, documentation and generation of reports are also tasks that should be handled by a computer programmer.

We can observe that the skill set required by a computer programmer is a subset of the skills expected from a software engineer. The computer programmer is a specialist in some areas covered by software engineering. A software engineer is in charge of the overall software development process and is expected to improve the reliability and maintainability of this complex process. A software engineer may have a team of computer programmers working under his supervision.