Mục đích của kĩ nghệ phần mềm là thiết kế và phát triển phần mềm chất lượng đáp ứng yêu cầu của khách hàng. Kĩ sư phần mềm làm việc trên nhiều kiểu phần mềm, từ trò chơi máy tính tới ứng dụng doanh nghiệp; từ phần mềm kiểm soát bộ vi xử lí tới phần mềm quản lí giao tác thị trường cổ phần. Một trong các khu vực đặc biệt của kĩ nghệ phần mềm là phần mềm nhúng hay phần mềm “dựng sẵn bên trong” (được nhúng vào) trong các sản phẩm đa dạng. Vì nó là được dựng sẵn, rất khó thay đổi hay sửa chữa cho nên phần mềm nhúng yêu cầu chất lượng cao nhất có thể được.

Phần mềm nhúng kiểm soát hầu hết các thiết bị điện tử cầm tay, từ điện thoại di động, bộ vi xử, máy nghe MP3, điện thoại thông minh, bộ định tuyến tới các thiết bị phức tạp hơn như thiết bị hàng không, robots, thiết bị y tế và lò phản ứng hạt nhân v.v. Bởi vì phần mềm nhúng phải chạy liên tục không ngắt hay lỗi, việc phát triển phần mềm nhúng là qui trình chuyên sâu nhất với trắc nghiệm và kiểm nghiệm chặt chẽ. Chẳng hạn, rất khó ngừng bộ chuyển mạch điện thoại, kiểm soát dây chuyền lắp ráp cơ xưởng, kiểm soát thang máy, chuyển tiền ngân hàng và hệ thống thị trường cổ phần, hay thậm chí các hệ thống nguy hiểm hơn và đe doạ cuộc sống như thiết bị y tế hay hệ thống lò phản ứng hạt nhân.

Do tính găng và ứng dụng phức tạp, Kĩ nghệ phần mềm nhúng điển hình được dạy như chương trình bằng cấp chuyên sâu (thạc sĩ hay tiến sĩ) thay vì bằng cử nhân chính qui. Chương trình này hội tụ vào việc tổ hợp cả phần mềm và phần cứng và nó yêu cầu sinh viên phải có nền tảng tốt về phát triển phần mềm, thiết kế phần cứng, kĩ nghệ điện, toán học và logic. Để đăng tuyển vào chương trình này, phần lớn các trường đều yêu cầu sinh viên có bằng cử nhân về kĩ nghệ máy tính, kĩ nghệ phần mềm, hay kĩ nghệ điện. (Việc nhận vào đặc biệt chú ý tới các sinh viên đã học các môn về thiết kế logic, kiến trúc máy tính, lập trình song song và hệ điều hành).

Trong chương trình này, sinh viên học các nguyên lí về thiết kế (cả phần cứng và phần mềm) mà tương tác với môi trường. Đây là khác biệt với các nguyên lí của khoa học tính toán, điều hội tụ vào chức năng của chương phần mềm, nơi phần mềm là việc thực hiện các hàm toán học hay logic, nhận dữ liệu vào và xử lí thành dữ liệu ra. Trong phần mềm nhúng, vai trò của nó không phải là xử lí và biến đổi dữ liệu, mà tương tác với thế giới vật lí. Sinh viên phải hiểu bản chất phản ứng của tương tác của một cấu phần với môi trường của nó, tính động của thế giới vật lí, những cách khác nhau để trao đổi giữa các cấu phần, và yêu cầu liên quan tới an toàn, đúng thời gian, ổn định và hiệu năng. Về căn bản phần mềm nhúng vận hành và kiểm soát thiết bị điện tử trong ô tô, máy bay, điện thoại, thiết bị âm thanh, robots, thiết bị, hệ thống an ninh, giám sát tim, hệ thống y học, hệ thống chế tạo, và hệ thống phản ứng hạt nhân v.v.

Kĩ sư phần mềm nhúng phải chuyên môn hoá trong miền chuyên môn và có tri thức chắc chắn về kiến trúc mà họ làm việc. Nguyên lí của phần mềm nhúng là tương tác với thế giới vật lí cho nên các kĩ sư của nó phải hiểu thế giới vật lí đó. Đó là lí do tại sao sinh viên phần mềm nhúng phải học về kiến trúc máy tính, phát triển tri thức về các khối xây dựng chính của máy tính, thiết kế chi tiết như loic và cổng logic, mạch số học, thiết bị logic, mảng logic lập trình được, mạch tuần tự, mạch lật, bộ nhớ thanh ghi và máy trạng thái. Sinh viên phải hiểu cách bộ xử lí được thiết kế, vấn đề hiệu năng và chi phí, tập lệnh, đường ống, siêu vô hướng, bộ nhớ ẩn, bộ nhớ vật lí, bộ nhớ ảo, và I/O, thực hiện vector, đa mạch, cách từng cấu phần được thiết kế, logic của nó và tương tác giữa chúng, cũng như cách tiếp cận tới bù trừ chi phí và hiệu năng thiết kế. Những nền tảng này sẽ cho phép sinh viên hiểu thiết kế logic hiện đại và hệ thống số thức.

Ngày nay, phần lớn các máy tính đều dùng bộ xử lí đa nhân. Không giống như bộ xử lí một nhân của quá khứ, việc dùng bộ xử lí đa nhân yêu cầu sinh viên phản nhận diện cơ chế song song và viết mã song song tường minh. Tri thức về lập trình song song được cần để làm việc trên những xu hướng kiến trúc liên quan này và các khía cạnh của đa nhân. Sinh viên phải có khả năng viết phần mềm nhúng đa nhân bằng việc trích cơ chế song song dữ liệu qua các vector và SIMD, cơ chế song song mức mạch, và cơ chế song song dựa trên nhiệm vụ, đồng bộ hiệu quả, và làm lược sử chương trình và điều chỉnh hiệu năng. Sinh viên phải hội tụ vào đa nhân có bộ nhớ dùng chung luồng chính với việc bao quát các đơn vị xử lí đồ hoạ (GPUs). Cách tốt nhất để làm chủ các nhiệm vụ này là dành thời gian thực hành lập trình song song để có kinh nghiệm trước khi học về phân tích và điều chỉnh phần mềm đa nhân. Kinh nghiệm trong C và C++ là được cần.

Vì phần lớn các sản phẩm phần mềm nhúng đều là thời gian thực, sinh viên phải học cách xây dựng hệ thống vật lí xi be thời gian thực. Hệ thống vật lí xi be là tích hợp của tính toán và truyền thông với các quá trình vật lí. Phần mềm nhúng được dùng để giám sát và kiểm soát các quá trình vật lí trong thời gian thực. Ngày nay phần lớn các máy tính đều thường được nối mạng, điều quan trọng là hiểu cách toàn thể hệ thống mạng vận hành bằng việc cảm nhận, giám sát môi trường vật lí của chúng ta. Đây là tri thức then chốt mà kĩ sư phần mềm nhúng phải biết rõ vì chính nhu cầu mấu chốt từ công nghiệp là xây dựng các hệ thống xi be cỡ lớn. Sinh viên phải hiểu nguyên lí, phương pháp, và kĩ thuật để xây dựng các hệ thống xi be vật lí đảm bảo cao. Sinh viên phải học cách thu thập yêu cầu, phân tích, và làm mô hình hệ thống xi be, kiểm soát mô hình, chắc chắn các trường hợp, phân tích nguy hiểm, lập trình thời gian thực, lập lịch thời gian thực và máy ảo, kiểm soát phản hồi trong hệ thống máy tính, cách tiến hành trắc nghiệm và kiểm nghiệm, và xác nhận dựa trên bằng chứng.

Bên cạnh việc có chất lượng cao nhất, phần lớn các phần mềm nhúng cũng yêu cầu mức độ an ninh cao nhất. Sinh viên trong kĩ nghệ phần mềm nhúng phải học nền tảng về mật mã hoá, an ninh cho các giao thức truyền thông, an ninh cho hệ điều hành và chương trình di động, và an ninh cho thương mại điện tử. Một số chủ đề đặc biệt bao gồm: mật khẩu và tấn công ngoại tuyến, tấn công từ chối dịch vụ DDoS, xác nhận sinh trắc, PKI, thẻ thông minh, S/MIME, tính riêng tư trên Web, virut, mô hình an ninh, an ninh không dây, và sandboxing (thực hiện chương trình chạy tách rời để kiểm tra). Sinh viên sẽ được mong đợi thể hiện tri thức về cả lí thuyết và thực hành qua các phân công nhiệm vụ lập trình nghiêm ngặt.

Để phát triển kĩ năng phát triển phần mềm nhúng, phần lớn các đại học để sinh viên làm việc trên các tiểu dự án trong toàn bộ môn học của họ để phát triển kĩ năng trong việc tạo ra ứng dụng nhúng cho các hệ thống nhỏ hay hệ thống di động bao gồm phát triển được dẫn lái theo mô hình, kiểm thử và kiểm nghiệm. Sinh viên phải có khả năng thiết kế một hệ thống kết mạng nhỏ với điều chỉnh và phân tích hiệu năng mức thấp. Trong năm cuối, sinh viên phải làm việc trên dự án capstone có mọi đặc trưng của hệ thống nhúng thời gian thực, như hệ thống song hành, với giao diện phức tạp giữa các thiết bị và giữa phần mềm và thiết bị. Dự án phải chứng tỏ tri thức về vấn đề là vững chắc, tin cậy, và dung sai. Có khả năng tạo ra hệ thống bao gồm xử lí ngắt, vào ra mức thấp, song hành.
Kĩ sư hệ thống nhúng lập kế hoạch, thiết kế, phát triển, kiểm thử và sửa đổi phần mềm nhúng. Kĩ sư thiết kế phần mềm bằng việc phân tích yêu cầu cho hệ thống nhúng và xác định yêu cầu nào có cấu phần phần mềm. Yêu cầu phần mềm thế rồi được dịch thành chức năng phần mềm để được thực hiện. Phần mềm được viết ra bằng việc nhúng trực tiếp vào trong thiết bị như bộ vi xử lí. Kĩ sư phần mềm nhúng làm việc điển hình với các bộ môn kĩ nghệ khác, như điện, cơ khí và quang, để đảm bảo rằng phần mềm nhúng sẽ hoàn thành mục đích thiết kế cho sản phẩm hay hệ thống đặc thù.

Ngày nay thiết bị tính toán bán dẫn nhúng được tổ hợp vào mọi kiểu sản phẩm. Vậy, nhu cầu cho kĩ sư phần mềm nhúng đang tăng lên vì thị trường cho các sản phẩm có bộ xử lí nhúng tiếp tục tăng lên.

—-English version—-

Embbeded software

The goal of software engineering is to design and develop quality software that meets customers’ requirement. Software engineers work on many types of software, from computer games to business applications; from software that control the microprocessor to software that manage stock market transactions. One of the special areas of software engineering is the embedded software or software that “built into” (embedded) in various products. Because it is built in, it is very difficult to change or fixed so embedded software requires the highest quality possible.

Embedded Software controls most portable electronics, from mobile phones, microprocessors, MP3 players, smart-phone, routers to more sophisticated devices such as avionics devices, robots, medical devices and nuclear reactor systems etc. Because embedded software should run continuously without interruptions or errors, the development of embedded software is the most intensive process with the strictest verification and validation. For example, it is very difficult to shutdown a telephone switches, factory assembly lines controls, elevator controls, banking funds transfer and stock market systems, or even more dangerous and life threatening systems such as medical devices or nuclear reactor systems.

Due to its critical and sophisticated applications, Embedded Software Engineering is typically taught as an advanced degree program (Master or Ph.D) rather in a regular bachelor degree. The program focuses on the combination of both software and hardware and it requires students to have good foundations of software development, hardware design, electrical engineering, mathematics and logic. To enroll in the program, most schools require students to have a bachelor’s degree in computer engineering, software engineering, or electrical engineering. (Admission puts special attention to students who have taken courses in logic design, computer architecture, parallel programming, and operating system).

In the program, students learn the principles of design (Both hardware and software) that interact with the environment. This is different from the principles of computer science that focuses on the function of a software program where software is the realization of mathematical and logical functions that receive input data and process into output data. In embedded software, its role is not the processing and transformation of data, but interaction with the physical world. Students must understand the reactive nature of the interaction of a component with its environment, the dynamics of the physical world, the different ways of communication among components, and requirements concerning safety, timeliness, stability, and performance. Basically embedded software operates and controls electronic devices in cars, airplanes, telephones, audio equipment, robots, appliances, security systems, heart monitors, medical systems, weapons systems, television sets, printers, climate control systems, manufacturing systems, and nuclear reactor systems etc.

Embedded software engineers must specialize in specific domain and have strong knowledge of the architectures that they work with. The principal of embedded software is interaction with the physical world so its engineers should understand that physical world. That is why embedded software students must study computer architecture, develop knowledge of major building block of a computer, detailed design such as logic and logic gates, arithmetic circuits, logical devices, programmable logic arrays, sequential circuits, flips-flops, register memories and state machines. Student must understand how microprocessor is designed, performance and cost issues, instruction sets, pipelining, superscalar, caches, physical memory, virtual memory, and I/O, vector execution, multithreading, how each component is designed, its logic and interaction among them, as well as the approach to cost and performance design tradeoffs. These fundamentals will allow students to understand modern logic design and digital systems.

Today, most computers are using multicore processors. Unlike the sequential single-core processors of the past, utilizing a multicore processor requires students to identify parallelism and write explicitly parallel code. Knowledge of parallel programming is needed to work on these relevant architectural trends and aspects of multicore. Students must be able to write multicore embedded software by extracting data parallelism via vectors and SIMD, thread-level parallelism, and task-based parallelism, efficient synchronization, and program profiling and performance tuning. Students should focuses on mainstream shared-memory multicores with some coverage of graphics processing units (GPUs). The best way to master these tasks is to spend time to practice parallel programming to get experience before learning to analyze and tuning multicore software. Experience in C and C++ is needed.

Since most embedded software products are real-time, students must learn how to build real-time cyber physical systems. Cyber physical systems are integrations of computation and communication with physical processes. Embedded software is used to monitor and control physical processes in real-time. Today most computers are often networked, it is important to understand how the entire network system operate by sensing, monitoring, controlling our physical environment. This is a key knowledge that embedded software engineers must know well since it is a critical demand from the industry to build large scale cyber systems. Students must understand the principles, methods, and techniques for building high-assurance cyber-physical systems. Student must learn how to collect requirements, analyze, and modeling a cyber system, conduct models, assurance cases, hazard analysis, real-time programming, real-time scheduling and virtual machines, feedback control in computer systems, how to conduct verification and validation, and evidence-based certification.

Besides having the highest quality, most embedded software also require the highest degree of security. Students in embedded software engineering must learn the fundamentals of cryptography, security for communication protocols, security for operating systems and mobile programs, and security for electronic commerce. Some specific topics include: passwords and offline attacks, DDoS attacks, biometric authentication, PKI, smart cards, S/MIME, privacy on the Web, viruses, security models, wireless security, and sandboxing. Students will be expected to display knowledge of both theory and practice through rigorous programming assignments.

To develop the skill of embedded software development, most universities have students to work on mini-projects throughout their courses to develop skills in create embedded applications for small systems or mobile systems including model-driven development, testing and verification. Student must be able to design a small networking system with low-level performance tuning and analysis. In the last year, students must work on capstone project that have all the characteristics of embedded real-time systems, such as system concurrency, with complex interfaces between devices and between software and devices. The project must demonstrate Knowledgeable about the issues of robustness, reliability, and fault tolerance. Be able to produce systems that involve interrupt handling, low level input and output, concurrency.
Embedded software engineers plan, design, develop, test, and modify embedded software. Engineers design software by analyzing the requirements for an embedded system and determining which requirements have a software component. The software requirements are then translated into software functions to be implemented. Software is written by directly embedded into the devices such as microprocessor. Embedded software engineers typically work with other engineering disciplines, such as electrical, mechanical and optical, to ensure that the embedded software will accomplish the design goals for a particular product or system.

Today embedded semiconductor computing devices are incorporated into an all types of products. Thus, the need for embedded software engineers is growing as the market for products having embedded processors continues to grow.