Ch.1:Introductions Flashcards
What is software?
Software is a set of instruction used to acquire inputs and to manipulate them to produce the desired output in terms of functions and performance as determined by the user of the software.
What is a software crisis? What causes software crises?
Software that is Over budget, Late, Full of bugs, Does not meet the requirement.
From Programmers:
▶ Compatibility
▶ Portability
▶ Documentation
▶ Maintenance
From user side:
▶ Right software from the market
▶ Compatibility with hardware
▶ Viruses
▶ OS specific software
What are the types of Software? Define each type
System software:
- Operating systems
▶ DOS, Win, Linux, MacOS
▶ Assemblers
- Debuggers
▶ GDB, DDD
- File systems
▶ ext, ext2, ext3
▶ nfs, NTFS, jfs (IBM)
- Utilities
▶ Printing, Disk operations
▶ User management
Application software:
- Games
▶ Warcraft, ….
- Databases
- Word/Spreadsheet processors
▶ Ms Word, Excel, ….Notepad+
- Image processors
▶ Paint, Photo Viewer
▶ GIMP, Photoshop
▶-Web surfing/communication
▶ Chrome, IE, Mozilla
▶ Skype, Viber, WhatsApp
What are the classes of software? Define each class
Generic software:
▶ Broad audience
▶ Common requirements
▶ Fairly stable
▶ Sold on the open market
Customized software:
▶ Smaller audience
▶ Specific requirements
▶ Subject to change
▶ Sold to specific customers
What are the application domains for software?
Categories:
▶ System software
▶ Application software
▶ Engineering/scientific software
▶ Embedded software
▶ Product-line software
▶ Web/Mobile applications
▶ Artificial intelligence software
Describe the nature of software design
In today’s context, software serves a dual purpose as both a product and a means to deliver other products. Functioning as a product, software leverages computing potential, whether within devices, networks, or machines, to manage, transmit, and display information of varying complexities. As a delivery vehicle, software controls computers, facilitates communication, and enables program creation. Its pivotal role in delivering information, enhancing competitiveness through data management, and enabling access to global networks underscores its significance. However, the evolution of the software industry over the past 60 years, marked by advancements in hardware and complex computing systems, has led to both remarkable achievements and challenges in development, security, and maintenance. Despite the transition from individual programmers to specialized teams, enduring concerns persist about the timely completion of software, high development costs, error detection, program maintenance, and progress measurement, underscoring the ongoing significance of software engineering practices.
What is the differences between application domains:
System software: Programs servicing other programs, processing complex determinate structures (like compilers, editors) or indeterminate data (like operating system components, networking software).
Application software: Stand-alone programs addressing specific business needs, facilitating business operations or technical decision making.
Engineering/scientific software: Diverse “number-crunching” programs from astronomy to consumer spending habits, aiding various fields like automotive stress analysis and genetic analysis.
Embedded software: Residing within a product/system, controlling features for end-users or the system itself, varying from limited functions (like microwave keypad control) to significant control capabilities (like automotive digital functions).
Product-line software: Comprising reusable components for specific capabilities, catering to diverse customer bases, ranging from focused markets (like inventory control) to the mass consumer market.
Web/mobile applications: Network-centric software including browser-based apps, cloud computing, and mobile device software.
Artificial intelligence software: Utilizing heuristics for complex problem-solving, encompassing robotics, decision-making systems, pattern recognition (image and voice), machine learning, theorem proving, and game playing.
What is the main goal of software engineering?
To avoid software crisis, or building software that is Economical, On time, High quality, Meeting needs