Software Engineering Aug. 26, 2013 What is Software Engineering? -Not just writing code. -Entire software process from gathering information to design to coding to deployment to maintenance -Doing it economically + inside of a budget for both time and money -Quality Assurance -Teamwork! Many parts & many details -Basic definition of SW Engineering is building quality SW inside a budget and doing it right. Software is intangible You can't touch it! Hard to assess quality It is not like a bridge (think civil engineering) Production (manufacturing) -Easy and cheap -CDs are inexpensive to manufacture -Storing data on CDs/DVDs is fast - use a burner -Downloading is fast (in general) Costs for software are mainly in the development People's time is the largest cost by far Building software properly takes lots of time _The_Mythical_Man_Month_ shows that adding more people to a project adds complexity. Some software tools are automated - Integrated Development Environments (IDEs) + Eclipse + Netbeans + Mono + Visual Studio + many others Real intelligence isn't there yet - IBM's Watson is close, but it won't write code for us Software doesn't wear out physically -It isn't like a car or a bridge -Use it as many times as you want and it won't change -Rather, HW and SW platform changes cause SW to deteriorate -Sometimes we need a new build for an old algorithm because the previous build was of poor quality -People make mistakes + Might make changes without thinking about the ramifications "Software Crisis" -Many people have been lax about building quality SW -Managers and Developers might not get along +Not making allowances for change +Not giving each other proper time -Working together and communication is key to solving this crisis -Problems cause by developers not getting along and not using good management techniques +time management +communication +flexible design and development Specification->Design->Development->Deployment->Maintenance-+ ^ | +-----------------------------------------------------+ Developeres might not think about adding more lines or using short small prototypes The "crisis" can be solved as follows: Communicate with your fellow developers Use effective tools Make better tools as necessary Be kind to each other. Result: Increased productivity --> Happier developers, customers, users, and managers Some General Types of SW Custom - customer specific or in-house - might not be useful to others Ex: Air Traffic Control, Emergency Management, Quantitative Finance, etc. Generic - open market (paid) or open source - many people use it - typically runs on a general purpose platform (e.g. PC, mobile, etc.) - may be more cost effective than custom SW if meets the needs of client Ex: OS, Internet Browser, Word Processing, etc. Embedded - DVD/Blu-ray players <-- use Java and custom Linux - Router <-- custom Linux - Microwave - Cars/Trucks/Appliances May or may not be able to upgrade SW Might have to use special HW to flash upgrade or might have to replace HW to get new SW Other Classifications -Real Time (RT) Soft - generic applications, may run slower if not critical Hard - critical systems (Hospitals, Power tools, Airplanes, Cars) - if system fails to react something really bad might happen -Data Processing -Business SW like spreadsheets, PeopleSoft, etc. -Some SW has both aspects -new car computers record data useful for diagnosis -It is ok if you don't get everything -"drive-by-wire" - car steering wheel sends signal to computer then to steering hydraulics to turn wheels. +Failure to react could cause accident or death -So, cars have both Data Processing and RT Hard systems Stakeholders - people who have roles in a SW project - might have an agenda or motivation - Users - use system + Might lose job because of SW + Might have easier job because of SW - Client - decides what they want in SW + Developer/Development Manager gets information from them + might have goals -Increase profit -Replace employees with SW -Make workplace safer -Make employee life easier - Developer - Write/Maintain SW May have specific role - DB, requirements, tech. writer, configuration management, etc. - Wants to work on interesting project - Dev. Manager - runs SW company or part of it - Might have business training - Wants customer/client to be happy - Wants to use least resources - Must have good communication with developers and client SW Quality Many attributes Means different things to different people - Usability - how easy it is to use the SW - Efficiency - how much resources are used + CPU Time, Bandwidth, Disk Use, Memory - Reliability - failure rate - Maintainability - ease of change to SW - Reusability - how easy SW may be used in other systems