Khác biệt giữa bản sửa đổi của “Phần mềm”

Nội dung được xóa Nội dung được thêm vào
n Đã lùi lại sửa đổi của Kang19902020 (Thảo luận) quay về phiên bản cuối của Tuanminh01
Thẻ: Lùi tất cả
n clean up, replaced: . → . (4) using AWB
Dòng 6:
Ở cấp độ lập trình thấp nhất, [[mã thực thi]] bao gồm các hướng dẫn [[ngôn ngữ máy]] được hỗ trợ bởi một [[Vi xử lý|bộ xử lý]] riêng lẻ, có thể là [[Vi xử lý|bộ xử lý]] [[CPU|trung tâm]] (CPU) hoặc [[Bộ xử lý đồ họa|đơn vị xử lý đồ họa]] (GPU). Một ngôn ngữ máy bao gồm các nhóm [[Hệ nhị phân|giá trị nhị phân]] biểu thị các [[Kiến trúc tập lệnh|lệnh hướng dẫn cách thực hiện của bộ xử lý]] thay đổi trạng thái của máy tính từ trạng thái trước đó. Ví dụ: một lệnh có thể thay đổi giá trị được lưu trữ ở một vị trí lưu trữ cụ thể trong máy tính, một hiệu ứng mà người dùng không thể quan sát trực tiếp. Một lệnh [[Lời gọi hệ thống|cũng có thể gọi]] một trong nhiều thao tác [[Đầu vào/đầu ra|nhập hoặc xuất dữ liệu]], ví dụ hiển thị một số văn bản trên màn hình máy tính; gây ra những thay đổi trạng thái được hiển thị cho người dùng. Bộ xử lý [[Chu kỳ lệnh|thực hiện]] các lệnh theo thứ tự chúng được cung cấp, trừ khi nó được hướng dẫn "nhảy" sang một lệnh khác hoặc bị hệ điều hành làm [[Ngắt|gián đoạn]]. {{Tính đến|2015}}, hầu hết [[Máy tính cá nhân|các [[máy tính cá nhân]]]], thiết bị [[điện thoại thông minh]] và [[máy chủ]] đều có [[CPU đa nhân|bộ xử lý với nhiều đơn vị thực thi]] hoặc [[Đa xử lý|nhiều bộ xử lý thực hiện tính toán]] cùng nhau và điện toán đã trở thành một hoạt động đồng thời hơn nhiều so với trước đây.
 
Phần lớn phần mềm được viết bằng [[Ngôn ngữ lập trình bậc cao|các ngôn ngữ lập trình cấp cao]]. Chúng dễ dàng và hiệu quả hơn cho các lập trình viên vì chúng gần với [[ngôn ngữ tự nhiên]] hơn ngôn ngữ máy.<ref>{{Chú thích web|url=http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|title=Compiler construction|archive-url=https://web.archive.org/web/20131102143144/http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|archive-date=ngày 2 Novembertháng 11 năm 2013|dead-url=no}}</ref> Các ngôn ngữ cấp cao được dịch sang ngôn ngữ máy bằng [[trình biên dịch]] hoặc [[Trình biên dịch|trình]] [[Trình thông dịch|thông dịch]] hoặc kết hợp cả hai. Phần mềm cũng có thể được viết bằng một [[hợp ngữ]] mức thấp, trong đó có các lệnh mạnh để hướng dẫn ngôn ngữ máy của máy tính và được dịch sang ngôn ngữ máy bằng cách dùng phần mềm [[Hợp ngữ|lắp ráp]].
 
== Lịch sử ==
{{chính|Lịch sử phần mềm}}
Một phác thảo ([[thuật toán]]) cho những gì sẽ là phần mềm đầu tiên đã được [[Ada Lovelace|Ada Lovelace viết]] vào thế kỷ 19, cho Công cụ phân tích theo kế hoạch.{{sfn|Evans|2018|p=21}} Bà đã [[Chứng minh toán học|chứng minh]] cho thấy động cơ sẽ tính toán [[số Bernoulli]] như thế nào.{{sfn|Evans|2018|p=21}} Vì các chứng minh và thuật toán này, Ada Lovelace được coi là lập trình viên máy tính đầu tiên<ref name="Annals of the History of Computing">{{Chú thích tạp chí|last=Fuegi|first=J.|last2=Francis|first2=J.|date=2003|title=Lovelace & Babbage and the creation of the 1843 'notes'|journal=Annals of the History of Computing|volume=25|issue=4|pages=16–26|doi=10.1109/MAHC.2003.1253887}}</ref><ref name="Lovelace Google">{{Chú thích báo|url=https://www.theguardian.com/technology/2012/dec/10/ada-lovelace-honoured-google-doodle|title=Ada Lovelace honoured by Google doodle|last=|first=|date=Decemberngày 10, tháng 12 năm 2012|work=The Guardian|access-dateaccessdate =ngày 25 Novembertháng 11 năm 2018}}</ref> mặc dù bà chưa chạy chương trình bao giờ do công cụ mà bà viết chương trình không được tạo ra lúc đó.
 
Lý thuyết đầu tiên về phần mềm, trước khi tạo ra máy tính như chúng ta biết ngày nay, đã được [[Alan Turing]] đề xuất trong bài tiểu luận năm 1935, ''On Computable Numbers, with an Application to the Entscheidungsproblem'' (vấn đề quyết định). Ông đã tạo ra cái gọi là [[máy Turing]], một mô hình toán học của một cỗ máy trừu tượng có khả năng thực hiện chuỗi các phép toán thô sơ để di chuyển một cỗ máy từ trạng thái cố định này sang trạng thái cố định khác. Ý tưởng chính là để chứng minh về mặt toán học thực tế rằng bất kỳ trạng thái xác định trước của hệ thống luôn có thể đạt được bằng cách thực hiện tuần tự một tập hợp hữu hạn các lệnh cơ bản (chương trình) từ một tập hợp lệnh cố định.
 
Điều này cuối cùng đã dẫn đến việc tạo ra các lĩnh vực học thuật về [[khoa học máy tính]] và [[công nghệ phần mềm]]; Cả hai lĩnh vực nghiên cứu phần mềm và sáng tạo của nó. Khoa học máy tính là nghiên cứu lý thuyết về máy tính và phần mềm (tiểu luận của Turing là một ví dụ về khoa học máy tính), trong khi kỹ thuật phần mềm là ứng dụng của kỹ thuật và phát triển phần mềm.
 
Tuy nhiên, trước năm 1946, phần mềm chưa phải là chương trình được lưu trữ trong bộ nhớ của các máy tính kỹ thuật số chương trình được lưu trữ, như chúng ta đã hiểu. Thay vào đó, các thiết bị máy tính điện tử đầu tiên được thay thế để "lập trình lại" chúng sau mỗi lần máy tính hoạt động. Máy tính điện tử đầu tiên của những năm 1940 và 1950 được lập trình lại bằng cách chuyển [[Công tắc|đổi công tắc bật tắt]] và kết nối lại dây cáp, đòi hỏi sự hiểu biết sâu sắc về cấu trúc bên trong của chúng. Đặc biệt, những chiếc máy như vậy thuộc về [[ENIAC]] (tuy nhiên, sau đó đã được sửa đổi để nó có thể, ít nhất một phần, được lập trình bằng cách sử dụng [[Thẻ bấm lỗ|các thẻ đục lỗ]] ) {{Sfn|Computer Languages|1989|loc=1. Невидимый конструктор}} .
 
Một bước quan trọng trong định hướng của máy tính hiện đại là sự chuyển đổi sang kiến trúc của [[John von Neumann]], lần đầu tiên được thực hiện ở [[Vương quốc Liên hiệp Anh và Bắc Ireland|Vương quốc Anh]], được phát triển dưới sự lãnh đạo của [[John R. Womersley]] và với sự tham gia của máy tính của [[Alan Turing]], được gọi là [[Máy tính kiểm soát bắn Mark I|Mark I]] . Chương trình đầu tiên được lưu trữ trong bộ nhớ của máy tính được đưa ra vào ngày 21 tháng 6 năm 1941. Để tạo điều kiện thuận lợi cho việc lập trình chiếc máy này, Turing đã phát minh ra một hệ thống mã hóa viết tắt, trong đó một chuỗi các ký tự [[teletype]] in trên băng đục lỗ được sử dụng để biểu diễn [[Ngôn ngữ máy|mã máy]] [[Hệ nhị phân|nhị phân]] {{Sfn|Computer Languages|1989|loc=1. Невидимый конструктор}} .
 
Một trong những đồng nghiệp của Turing, [[ John Mauchly|John Mauchly]], người sau này trở thành (cùng với [[ Eckert, John Presper|John Presper Eckert]] ) người đứng đầu và là người sáng lập của Eckert - Mauchly Computer Corporation, công ty phát triển các máy tính như [[ BINAC|BINAC]] và [[ UNIVAC|UNIVAC]], đã giao cho nhân viên của mình tạo ra một trình dịch các công thức đại số. Mặc dù mục tiêu đầy tham vọng này đã không đạt được vào những năm 1940, nhưng dưới sự lãnh đạo của Mauchly, cái gọi là [[ Mã ngắn|Mã ngắn]] đã được phát triển, trong đó các phép toán và biến được mã hóa bằng tổ hợp hai ký tự. Mã ngắn được thực hiện bằng trình [[Trình thông dịch|thông dịch]] {{Sfn|Computer Languages|1989|loc=1. Невидимый конструктор § Создание кодов, понятных человеку}} . [[Grace Hopper]], làm việc từ đầu những năm 1950 về một tập hợp các quy trình toán học cho [[ UNIVAC I|UNIVAC I]], đã phát minh ra chương trình [[ Người liên kết|liên kết]] " A-0", được cung cấp một số [[Định danh|nhận dạng]], tìm nạp [[Chương trình con|quy trình]] mong muốn từ một [[Thư viện (máy tính)|thư viện]] được lưu trữ trên [[băng từ]] và viết nó ra. trong không gian bộ nhớ được phân bổ {{Sfn|Computer Languages|1989|loc=1. Невидимый конструктор § Шаг на благо программирования}} .
 
== Phân loại ==
Dòng 30:
 
* '''[[Phần mềm ứng dụng]]''' <br /> là phần mềm sử dụng hệ thống máy tính để thực hiện các chức năng đặc biệt hoặc cung cấp [[Video game|các chức năng giải trí]] ngoài hoạt động cơ bản của chính máy tính. Có nhiều loại phần mềm ứng dụng khác nhau, bởi vì phạm vi các tác vụ có thể được thực hiện với một máy tính hiện đại là rất lớn, xem danh sách phần mềm.
* '''[[Phần mềm hệ thống]]''' <br />là phần mềm để quản lý hành vi '''[[Phần cứng|phần cứng máy tính]]''', để cung cấp các chức năng cơ bản được người dùng yêu cầu hoặc phần mềm khác để chạy đúng, nếu có. Phần mềm hệ thống cũng được thiết kế để cung cấp một nền tảng để chạy phần mềm ứng dụng,<ref>{{Chú thích web|url=http://home.olemiss.edu/~misbook/sfsysfm.htm|title=System Software|publisher=The University of Mississippi|archive-url=https://web.archive.org/web/20010530092843/http://home.olemiss.edu/~misbook/sfsysfm.htm|archive-date=ngày 30 Maytháng 5 năm 2001|dead-url=yes}}</ref> và nó bao gồm:
**'''[[Hệ điều hành]]''' (operating system)<br />là các bộ sưu tập thiết yếu của phần mềm quản lý tài nguyên và cung cấp các dịch vụ chung cho các phần mềm khác chạy "trên đỉnh" của chúng. Các chương trình giám sát, [[Khởi động máy tính|bộ tải khởi động]], hệ vỏ và hệ thống cửa sổ là những phần cốt lõi của hệ điều hành. Trong thực tế, một hệ điều hành đi kèm với phần mềm bổ sung (bao gồm cả phần mềm ứng dụng) để người dùng có thể thực hiện một số công việc với một máy tính chỉ có một hệ điều hành.
** '''[[Chương trình điều khiển|Trình điều khiển thiết bị]]''' '''(driver)'''<br />vận hành hoặc điều khiển một loại thiết bị cụ thể được gắn vào máy tính. Mỗi thiết bị cần ít nhất một trình điều khiển thiết bị tương ứng; bởi vì một máy tính thường có ít nhất một thiết bị đầu vào và ít nhất một thiết bị đầu ra, một máy tính thường cần nhiều hơn một trình điều khiển thiết bị.
Dòng 43:
** [[Ứng dụng web|Các ứng dụng web]], thường chạy trên [[máy chủ web]] và xuất các trang web được tạo động sang trình duyệt web, sử dụng ví dụ: [[PHP]], [[Java (ngôn ngữ lập trình)|Java]], [[ASP.NET|ASP.]] [[ASP.NET|NET]], hoặc thậm chí [[Node.js|JavaScript chạy trên máy chủ]]. Trong thời hiện đại, những thứ này thường bao gồm một số JavaScript được chạy trong trình duyệt web, trong trường hợp đó, chúng thường chạy một phần trên máy chủ, một phần trong trình duyệt web.
* [[Plugin (điện toán)|Plugin]] và tiện ích mở rộng là phần mềm mở rộng hoặc sửa đổi chức năng của một phần mềm khác và yêu cầu phần mềm đó phải được sử dụng để hoạt động;
* Phần mềm nhúng cư trú như [[firmware]] trong [[hệ thống nhúng]], thiết bị dành riêng cho việc sử dụng đơn lẻ hoặc một vài công dụng như [[xe hơi]] và [[Truyền hình|TV]] (mặc dù một số các thiết bị nhúng như chipset không dây có thể là một phần của một hệ thống máy tính thông thường, không nhúng như một PC hoặc điện thoại thông minh).<ref>{{Chú thích web|url=http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|title=Embedded Software—Technologies and Trends|date=May–June 2009|publisher=IEEE Computer Society|archive-url=https://web.archive.org/web/20131028045823/http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|archive-date=ngày 28 Octobertháng 10 năm 2013|dead-url=no|access-dateaccessdate =ngày 6 Novembertháng 11 năm 2013}}</ref> Trong bối cảnh hệ thống nhúng đôi khi không có sự phân biệt rõ ràng giữa phần mềm hệ thống và phần mềm ứng dụng. Tuy nhiên, một số hệ thống nhúng chạy hệ điều hành nhúng và các hệ thống này vẫn giữ được sự khác biệt giữa phần mềm hệ thống và phần mềm ứng dụng (mặc dù thông thường sẽ chỉ có một ứng dụng cố định luôn chạy).
* Microcode là một loại phần mềm nhúng đặc biệt, tương đối khó hiểu, cho bản thân bộ xử lý biết cách thực thi mã máy, vì vậy nó thực sự là một cấp độ thấp hơn mã máy. Nó thường thuộc sở hữu của nhà sản xuất bộ xử lý và mọi cập nhật phần mềm vi mã chỉnh sửa cần thiết đều được cung cấp cho người dùng (rẻ hơn nhiều so với vận chuyển phần cứng bộ xử lý thay thế). Do đó, một lập trình viên bình thường sẽ không bao giờ phải đối phó với nó.
 
Dòng 71:
Chất lượng phần mềm rất quan trọng, đặc biệt đối với [[Phần mềm thương mại|các]] phần mềm [[Phần mềm thương mại|thương mại]] và hệ thống như [[Microsoft Office]], [[Microsoft Windows]] và [[Linux]]. Nếu phần mềm bị lỗi (lỗi), nó có thể xóa công việc của một người, làm hỏng máy tính và làm những việc không mong muốn khác. Lỗi và lỗi được gọi là " [[Lỗi phần mềm|lỗi]] " thường được phát hiện trong quá trình thử nghiệm alpha và beta. Phần mềm cũng thường là nạn nhân của sự lão hóa phần mềm, sự suy giảm hiệu suất lũy tiến do sự kết hợp của các lỗi không nhìn thấy được.
 
Nhiều lỗi được phát hiện và loại bỏ (gỡ lỗi) thông qua [[Kiểm thử phần mềm|kiểm tra phần mềm]]. Tuy nhiên, việc kiểm thử phần mềm hiếm khi được xử lý nếu có thể loại bỏ mọi lỗi; Một số lập trình viên nói rằng "mọi chương trình đều có ít nhất một lỗi nữa" (Luật của Lubarsky).<ref name="github">{{Chú thích web|url=https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt|title=scripting intelligence book examples|date = ngày 9 tháng 5 năm 2018-05-09 |archive-url=https://web.archive.org/web/20151106154317/https://github.com/mark-watson/scripting-intelligence-book-examples/blob/master/part1/wikipedia_text/software.txt|archive-date=ngày 6 Novembertháng 11 năm 2015|dead-url=no}}</ref> Trong [[Mô hình thác nước|thác]] phương pháp phát triển phần mềm, các đội kiểm tra riêng biệt thường được sử dụng, nhưng trong cách tiếp cận mới hơn, gọi chung là [[Phát triển phần mềm linh hoạt|lập trình linh hoạt]], các nhà phát triển thường làm tất cả những thử nghiệm riêng của họ, và chứng minh phần mềm cho người dùng / khách hàng thường xuyên để có được thông tin phản hồi. Phần mềm có thể được kiểm tra thông qua [[Kiểm thử đơn vị|kiểm tra đơn vị]], [[Kiểm thử đơn vị|kiểm tra]] [[Kiểm thử hồi quy|hồi quy]] và các phương pháp khác, được thực hiện thủ công hoặc phổ biến nhất, vì số lượng mã được kiểm tra có thể khá lớn. Chẳng hạn, [[NASA]] có quy trình kiểm thử phần mềm cực kỳ nghiêm ngặt đối với nhiều hệ điều hành và chức năng giao tiếp. Nhiều hoạt động dựa trên NASA tương tác và xác định lẫn nhau thông qua các chương trình chỉ huy. Điều này cho phép nhiều người làm việc tại NASA kiểm tra và đánh giá tổng thể các hệ thống chức năng. Các chương trình chứa phần mềm chỉ huy cho phép kỹ thuật phần cứng và vận hành hệ thống hoạt động dễ dàng hơn nhiều.
 
=== Giấy phép ===
Dòng 92:
Thiết kế và triển khai phần mềm khác nhau tùy thuộc vào độ phức tạp của phần mềm. Chẳng hạn, việc thiết kế và tạo [[Microsoft Word]] mất nhiều thời gian hơn so với thiết kế và phát triển [[Notepad|Microsoft Notepad]] vì phần mềm sau có chức năng cơ bản hơn nhiều.
 
Phần mềm thường được thiết kế và tạo (còn được mã hóa / viết / lập trình) trong [[Môi trường phát triển tích hợp|các môi trường phát triển tích hợp]] (IDE) như [[Eclipse (môi trường phát triển tích hợp)|Eclipse]], [[IntelliJ IDEA|IntelliJ]] và [[Microsoft Visual Studio]] có thể đơn giản hóa quy trình và [[Trình biên dịch|biên dịch]] phần mềm (nếu có). Như đã lưu ý trong một phần khác, phần mềm thường được tạo trên đầu phần mềm hiện có và [[giao diện lập trình ứng dụng]] (API) mà phần mềm bên dưới cung cấp như [[GTK|GTK +]], JavaBeans hoặc Swing. Thư viện (API) có thể được phân loại theo mục đích của họ. Chẳng hạn, [[Spring Framework]] được sử dụng để triển khai các ứng dụng doanh nghiệp, thư viện [[Windows Forms]] được sử dụng để thiết kế các ứng dụng giao diện người dùng đồ họa (GUI) như [[Microsoft Word]] và [[Windows Communication Foundation]] được sử dụng để thiết kế [[Dịch vụ web|các dịch vụ web]]. Khi một chương trình được thiết kế, nó phụ thuộc vào API. Chẳng hạn, một ứng dụng Microsoft Windows dành cho máy tính để bàn có thể gọi các hàm API trong [[.NET Framework|.]] Thư viện [[.NET Framework|NET]] Forms Forms như ''Form1.Close()'' và ''Form1.Show()''<ref>{{Chú thích web|url=http://msdn.microsoft.com/en-us/library/default.aspx|title=MSDN Library|archive-url=https://web.archive.org/web/20100611204810/http://msdn.microsoft.com/en-us/library/default.aspx|archive-date=ngày 11 Junetháng 6 năm 2010|dead-url=no|access-dateaccessdate =2010-06- ngày 14 tháng 6 năm 2010}}</ref> để đóng hoặc mở ứng dụng. Không có các API này, lập trình viên sẽ cần phải tự viết các chức năng này. Các công ty như [[Oracle]] và [[Microsoft]] cung cấp API riêng của họ để nhiều ứng dụng được viết bằng [[Thư viện (máy tính)|thư viện phần mềm]] của họ thường có nhiều API trong đó.
 
[[Cấu trúc dữ liệu|Các cấu trúc dữ liệu]] như [[bảng băm]], [[Mảng (tin học)|mảng]] và [[cây nhị phân]] và các [[thuật toán]] như [[Sắp xếp nhanh|quicksort]], có thể hữu ích cho việc tạo phần mềm.
 
Phần mềm máy tính có các đặc tính kinh tế đặc biệt làm cho thiết kế, sáng tạo và phân phối của nó khác với hầu hết các hàng hóa kinh tế khác.   <ref>{{Chú thích tạp chí|last=v. Engelhardt, Sebastian|year=2008|title=The Economic Properties of Software|url=https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html|dead-url=no|journal=Jena Economic Research Papers|volume=2|issue=2008–045|archive-url=https://web.archive.org/web/20160105145954/https://ideas.repec.org/p/jrp/jrpwrp/2008-045.html|archive-date=ngày 5 Januarytháng 1 năm 2016}}</ref><ref>{{Chú thích web|url=http://dankaminsky.com/1999/03/02/69/|title=Why Open Source Is The Optimum Economic Paradigm for Software|author=Kaminsky|first=Dan|year=1999|archive-url=https://web.archive.org/web/20120522001231/http://dankaminsky.com/1999/03/02/69/|archive-date=ngày 22 Maytháng 5 năm 2012|dead-url=no}}</ref>
 
Một người tạo ra phần mềm được gọi là [[lập trình viên]], [[Kỹ sư phần mềm|kỹ sư]] [[Nhà phát triển phần mềm|phần mềm]] hoặc [[nhà phát triển phần mềm]], các thuật ngữ mà tất cả đều có ý nghĩa tương tự nhau. Nhiều thuật ngữ không chính thức cho lập trình viên cũng tồn tại như "coder" và "hacker" {{Spaced ndash}} mặc dù việc sử dụng từ hacker có thể gây nhầm lẫn, bởi vì nó thường được sử dụng để chỉ [[Hacker (an ninh máy tính)|người nào đó xâm nhập trái phép vào hệ thống máy tính]].
Dòng 119:
 
==Đọc thêm==
*{{Citechú bookthích sách|url=https://books.google.com/books?id=C8ouDwAAQBAJ&lpg=PP1&dq=9780735211759&pg=PP1#v=onepage&q=9780735211759&f=false|title=Broad Band: The Untold Story of the Women Who Made the Internet|last=Evans|first=Claire L.|publisher=Portfolio/Penguin|year=2018|isbn=9780735211759|location=New York|pages=|ref=harv}}
 
{{Chuyên ngành Tin học}}