Software engineering aims to apply systematic and disciplined principles to software development similar to other engineering disciplines. However, software engineering is still considered a young field due to the lack of established theoretical foundations and durable techniques compared to more mature engineering fields. While software engineers spend most of their time on non-coding activities like requirements analysis, design, testing, and documentation, there are still misconceptions that programming is the primary task or that errors are inevitable. The definition and nature of software engineering as an engineering discipline continues to be debated.
Download as PPT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
138 views
Understanding Software Engineering - 1
Software engineering aims to apply systematic and disciplined principles to software development similar to other engineering disciplines. However, software engineering is still considered a young field due to the lack of established theoretical foundations and durable techniques compared to more mature engineering fields. While software engineers spend most of their time on non-coding activities like requirements analysis, design, testing, and documentation, there are still misconceptions that programming is the primary task or that errors are inevitable. The definition and nature of software engineering as an engineering discipline continues to be debated.
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 38
Understanding Software Engineering
Securing your knowledge
The ultimate security is your understanding of reality. —H. Stanley Judd Is software engineering real engineering?
1 Introduction Status and Problems of Software Engineering (1)
• Any matured science and engineering discipline
has a stable pyramid structure among its foundations, education, and practices/applications. Relationship Between SW Engineering Foundations, Education, & Practices/Applications Status and Problems of Software Engineering (2) • Software engineering as a discipline demonstrates an upside down pyramid, where the whole field is driven by industrial practice and technical innovations. • Theories and fundamental research in software engineering, particularly the laws that constrain software behaviors and software engineering practice, have been left behind or overlooked, if not been ignored or perceived inexist. • As a consequence, software engineering educators had no solid and durable theoretical framework to base in teaching. Instead, they were busy explaining an extremely wide variety of practices, techniques, and tools as in a fashion industry. Status and Problems of Software Engineering (3) • It is observed that the average half-life of most software engineering techniques is only about two to three years . • That is, after every year, 15% to 25% techniques one has acquired in software engineering practice will be obsolete. • What a young field where techniques had never been durable! How do software engineers spend their time on the job? • Software engineers probably spend less than 10% of their time writing code. The other 90% of their time is involved with other activities that are more important than writing code. 90% of Software Engineer Activities: 1. Eliciting requirements 8. Developing test strategies and test 2. Analyzing requirements cases 3. Writing software requirements 9. Testing the software and recording documents the results 4. Building and analyzing prototypes 10. Isolating problems and solving them 5. Developing software designs 11. Learning to use or installing and 6. Writing software design configuring new software and documents hardware tools 7. Researching software engineering 12. Writing documentation such as techniques or obtaining users manuals information about the application 13. Attending meetings with colleagues, domain customers, and supervisors 14. Archiving software or readying it for distribution Misconceptions about Software Engineering Why is software so buggy and unreliable? • It is unclear if software is more unreliable than any other complex engineering endeavor. While there are sensational examples of failed software, there are just as many examples of failed engineered structures, such as bridges collapsing, space shuttles exploding, nuclear reactors melting down, and so on. It seems that software gets a bad rap. Oftentimes when a project fails, software engineering is blamed, not the incompetence of the managers, inadequacy of the people on the project, or the lack of a clear goal. In any case, you have to prove that software is more unreliable than any other kind of engineering system, and I have seen no compelling evidence to support that contention; everything I have seen or heard is anecdotal. I write software as part of my job; does that make me a software engineer?
• No! Anyone can call himself a software engineer if he
writes code, but he is not necessarily practicing software engineering. To be a software engineer, you need more than a passing familiarity with most of the concepts of software engineering. But isn’t software system development primarily concerned with programming?
• As mentioned before, 10% or less of the software
engineer’s time is spent writing code. Someone who spends the majority of his or her time generating code is more aptly called a “programmer.” Just as wiring a circuit designed by an electrical engineer is not engineering, writing code designed by a software engineer is not an engineering activity. Can’t software tools and development methods solve most or all of the problems pertaining to software engineering? • This is a dangerous misconception. Tools, software or otherwise, are only as good as the wielder. Bad habits and flawed reasoning can just as easily be amplified by tools as corrected by them. While software engineering tools are essential and provide significant advantages, to rely on them to remedy process or engineering deficiencies is naïve. Isn’t software engineering productivity a function of system complexity?
▫ While it is certainly the case that system
complexity can degrade productivity, there are many other factors that affect productivity. Requirements stability, engineering skill, quality of management, and availability of resources are just a few of the factors that affect productivity. Once software is delivered, isn’t the job finished? • No. At the very least, some form of documentation of the end product as well as the process used needs to be written. More likely, the software product will now enter a maintenance mode after delivery in which it will experience many recurring life cycles as errors are detected and corrected and features are added. Aren’t errors an unavoidable side effect of software development? • While it is unreasonable to expect that all errors can be avoided (as in every discipline involving humans), good software engineering techniques can minimize the number of errors delivered to a customer. The attitude that errors are inevitable can be used to excuse sloppiness or complacency, whereas an approach to software engineering that is intended to detect every possible error, no matter how unrealistic this goal may be, will lead to a culture that encourages engineering rigor and high quality software. Myths On Software Engineering Software engineering has no theoretical foundation since mathematics had not played a central role in programming. Software engineering is not an engineering discipline rather than a branch of art, because there were few scientific laws to follow. Everybody can do programming; Kids even do it better sometimes. When one can get a program run in a programming language that displays the classical greeting “Hello world,” one is then confident to claim that he/she is a programmer. Do we need software engineering? Whether software engineering is a faculty of empirical best practices or a system of essential theories? Is software engineering an engineering discipline? Software? Engineering? Software + Engineering = ? Friedrich L. Bauer (1968) “The establishment and use of sound engineering principles in order to obtain economical software that is reliable and works efficiently on real machines.”
• A solution to the so called software crisis.
• No explaination what the sound engineering principles are and which of them are applicable to software engineering. ▫ That is why, after 40 years, professionals are still arguing what software engineering is and whether it makes sense to speak the engineering of software development. IEEE Standard 610.12 (1990)
1. The application of a systematic, disciplined,
quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. 2. The study of approaches as in (1). J.A. McDermid (1991)
“Software engineering is the science and art of
specifying, designing, implementing and evolving – with economy, timeliness and elegance – programs, documentation and operating procedures whereby computers can be made useful to man” Y. Wang and G.King (2000) A discipline that adopts engineering approaches, such as established methodologies, processes, measurement, tools, standards, organisation methods, management methods, quality assurance systems and the like, in the development of large-scale software seeking to result in high productivity, low cost, controllable quality, and measurable development schedule. Contrast of Representative Definitions of Software Engineering Cat Theory (NASA,2000) • Mechanical engineering is like looking for a black cat in a lighted room. • Chemical engineering is like looking for a black cat in a dark room. • Software engineering is like looking for a black cat in a dark room in which there is no cat. • System engineering is like looking for a black cat in dark room in which there is no cat and one yells, “I got it!” Revised Definition (Wang, 2008)
An engineering discipline that studies the nature
of software, approaches and methodologies of large-scale software development, and the theories and laws behind software behaviors and software engineering practices. Are software developers engineers or craftsmen? Engineers? “Engineers carry out a task by making a series of decisions, carefully evaluating options, and choosing an approach at each decision-point that is appropriate for the current task in the current context. Appropriateness can be judged by tradeoff analysis, which balances costs against benefits” Engineers?
“Engineers measure things, and when
appropriate, work quantitatively; they calibrate and validate their measurements; and they use approximations based on experience and empirical data” Engineers? “Engineers emphasize the use of a disciplined process when creating a design”
“Engineers can have multiple roles: research,
development, design, production, testing, construction, operations, management, and others such as sales, consulting, and teaching” Engineers?
“Engineers use tools to apply process
systematically. Therefore, the choice and use of appropriate tools are key to engineering” Engineers?
“Engineering disciplines advance by the
development and validation of principles, standards, and best practices”