原创 软件工程之思 软件工程之思 2023-11-02 07:39 发表于重庆
如果我们想要更好地理解软件工程,首先就要更好地理解软件、算法、程序、计算机这些基本概念,只有更好地理解这些基本概念,才能更好地理解软件工程。
通常软件是这样定义的:
软件是可在计算机上运行的程序及其文档。
这种定义虽然准确,但我们仍然觉得不够清楚明白。我们可以根据下列特点来进一步理解什么是软件。
这里的质量是物理学上的定义。硬件是有质量的,软件是没有质量的。像机械、电器、芯片这些有质量的物体都是硬件,而像文学艺术、灵感创意、名誉地位等这些没有质量的,都可以称之为软件。
因为软件没有质量,也就没有形体,所以要让人们感知软件必须借助于硬件载体,否则既看不见也摸不着。软件必须要借助于计算机才能使用它,才能知道它的详细功能。
虽然软件也是人们制造出来的,但它与硬件不同,硬件产品都经过"研发"、"定型",然后再"批生产",软件产品则只有"研发",几乎没有"定型"、"批生产"。只要软件通过验证与确认活动证明其满足用户需求,软件就可以结束研发交付给用户。
没有质量的软件,它不会向硬件那样被“磨损”。只要软件满足用户需求,它就可以一直被使用下去。
什么是"算法"?凡解决问题的方法都叫算法。农民种地有"耕作方法",工人做工有"工艺方法",厨师烧菜有"菜谱",开发人员实现软件功能的方法就是软件的算法。
实际上,软件是为了解决客观世界存在的问题,算法其实就是模拟客观规律解决问题的方法。如"冒泡排序""瞎子爬山法""后进先出栈管理"等著名算法,连名称都源自现实世界相应现象的"俗称"。所以,从某种意义上来说,算法也是将现实需求转变为计算机软件的桥梁。
将算法编写成计算机程序的焦点也在于控制逻辑。控制逻辑的实现很简单,就是"条件语句"和"循环语句"。
算法至少有三种表达方式:自然语言描述,流程图和程序。但是计算机只能识别程序。
什么是程序?通常程序定义为"数据结构+算法",或者说:程序是用算法语言叙述的算法。
实际上,程序就是用算法语言写出来的"文章",就像用自然语言写出来的文章一样。只不过这个文章是写给计算机看的。从某种意义上说,开发人员的任务就是将用户需求的"自然语言文章"翻译成计算机看得懂的"形式语言文章"。
计算机是软件的载体,也是软件的制造工具。
计算机并不复杂。
计算机的原理,就是布尔代数,甚至可以说就是"0"和"1"两个数字。计算机中几乎所有的电子器件都是"开关电路","开"和"关"状态分别对应"0"和"1"。世界上的所有事物都可以用"0"和"1"组成的符号串来表示,从而计算机也就可以"管理"所有事物。
计算机的结构包括有输人设备、CPU、存储器和输出设备。
软件的制造需要计算机,软件的运行也需要计算机。
任何行业都有"理论"和"工程"之分,理论是原理,工程则是实践。软件行业也是一样。
"软件工程"是软件制造的实践活动,这些年已经取得了很多成果,像CMMI、RUP、敏捷、精益等研究都已经给出了软件制造的优秀实践,但是软件原理还不是很成熟,目前的阶段性成果是对软件开发过程的步骤,已经有了统一的认识:需求分析、结构设计、详细设计、代码编写、调试和测试、运行和维护。