Escolar Documentos
Profissional Documentos
Cultura Documentos
[2 hrs
5 M]
Comparison to Other CS disciplines Software Engineering focuses on the development of software generically
o
Other disciplines, such as databases, operating systems, compilers, etc., focus on particular software products
It is also different in that it has a strong focus on process and is an attempt to turn software development into an engineering discipline
o
Software Engineering is the systematic approach to the development, operation, maintenance, and retirement of software systems
Thought Experiment you are given a description of a software system and you estimate, based on prior experience, that such a system would be approximately 10,000 lines of Java code Assuming that the problem domain does not require specialized expertise, how long would it take you to build a 10,000 line program? Discussion Most students would answer 1 to 3 months Assume a student finishes the project in 2 months, that would result in a productivity of 5,000 lines of code (LOC) per month. We can point out that across industries, professional software development teams average somewhere on the order of 100 LOC per month to 1000 LOC per month Assuming the latter rate, a professional software development team would require 10 months to build a system that meets the same requirements that our hypothetical student did in two months
Answer Two different systems are being built: a student system and an industrialstrength software system What are the differences? Student Software Developer is the User
y y y
Software not in critical use Reliability, robustness not important No investment Does not care about portability Key difference
y y
Supports important business functions Reliability, robustness very important Heavy investment Portability allows a company to market a product on multiple platforms
Quality According to the international standard on software product quality, software quality is defined with respect to six main attributes. These attributes are:
Quality Attribute Definition Functionality Reliability Usability Efficiency Maintainability The system fulfills its requirements The system provides consistent performance The ease at which users can acquire skill with the system The system provides performance relative to its resources The system can be modified to make corrections, improvements/ adaptations
Portability
Reliability is often ranked as the most important quality attribute. If a system is unreliable, users will stop using it.
SE challenges In general, software engineering has as its goal the creation of a software system that meets the needs of its users. In particular, we need to develop methods that make developing particular classes of software systems repeatable. That is, if the methods are used by different teams of developers, similar software is produced. Software engineers encounter several challenges to meeting this goal, including:
o o o o
Scale Developing large systems requires different techniques than developing small systems Quality and Productivity Engineering disciplines are driven by the practical parameters of cost, schedule, and quality A solution that takes enormous resources and many years to complete may not be acceptable A poor quality solution may not be much use, even if its low costs or completed quickly
y
In software engineering, productivity (measured in KLOC per person-month) can encapsulate both cost and schedule concerns o As productivity goes up, the cost per person-month goes down. (The same work can be done in fewer person-months) o In addition, as productivity goes up, the amount of time it takes to finish a project goes down
y An organization involved in software development not only wants high quality and productivity, it also wants these things consistently y Consistency of performance is an important factor for any organization; it allows an organization to make predictions and estimates for future projects y The SE community has looked at these issues and developed standards for organizations to follow to help them achieve consistency
Change
y
A big problem in software development is that "things change" all the time: requirements change or new requirements are added
y y
And, these changes occur rapidly, challenging our ability to deal with the changes Fred Brooks cites changeability as one of the four "essential difficulties" that faces software development
o
Software is under constant pressure to change, because our clients tend to think that all software change requests are equal
o
This does not occur in most other engineering disciplines because their products are tangible, unlike software
Consider the phases of building a house. Homeowners understand that making changes during the "blueprints" stage is easy. They know that their architect can make the change at relatively low cost
Likewise, homeowners understand that if they want to make a change after the foundation has been poured, that it gets much more expensive. Concrete has to be removed, and then new concrete has to be poured at great cost!
Software doesn't provide such affordances, a user can ask a developer to change the color of a UI element and ask that the software support multiple users in the same sentence without batting an eye!
As such, developers must work with clients to make them understand the severity of particular change requests
Agile Design methods arose out of the needs to be able to handle rapid change in software development. Over the course of the semester, we'll look at how change impacts traditional software development and how Agile Methods attempts to mitigate those impacts
A software engineer creates software through the practice of software engineering. Software is the product; software engineering is the process to create the product.