[软件设计师笔记]软件工程基础知识

发布于 2024-05-08  115 次阅读


信息系统生命周期

  • 软件工程基本原理:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制,采用现代程序设计技术、结果应能清楚的审查、开发小组的人员应少而精、承认不断改进软件工程实践的必要性。
  • 软件工程的基本要素:方法、工具、过程
  • 软件生存周期:可行性分析与项目开发计划、需求分析、概要设计(选择系统解决方案,规划子系统)、详细设计(设计子系统内部具体实现)、编码、测试、维护。

信息系统五阶段

  • 系统规划阶段:任务是对组织的环境、目标及现行系统的状况进行初步调查,根据组织目标和发展战略确定信息系统的发展战略,对建设新系统的需求做出分析和预测,同时考虑建设新系统所受的各种约束,研究建设新系统的必要性和可能性。根据需要与可能,给出制建系统的备选方案。输出:可行性研究报告、系统设计任务书
  • 系统分析阶段:任务是根据系统设计任务书所确定的范围,对现行系统进行详细调查,描述现行系统的业务流 程,指出现行系统的局限性和不足之处,确定新系统的基本目标和逻辑功能要求,即提出新系统的逻辑模型。系统分析阶段又称为逻辑设计阶段。这个阶段是整个系统建设的关键阶段,也是信息系统建设与一般工程项目的重要区别所在输出:系统说明书。
  • 系统设计阶段:系统分析阶段的任务是回答系统“做什么”的问题,而系统设计阶段要回答的问题是“怎么做”。该阶段的任务是根据系统说明书中规定的功能要求,具体设计实现逻辑模型的技术方案,也就是设计新系统的物理模型。这个阶段又称为物理设计阶段,可分为总体设计(概要设计)和详细设计两个子阶段。输出:系统设计说明书(概要设计、详细设计说明书)
  • 系统实施阶段:是将设计的系统付诸实施的阶段。这一阶段的任务包括计算机等设备的购置、安装和调试程序的编写和调试、人员培训、数据文件转换、系统调试与转换等。这个阶段的特点是几个互相联系、互相制系统实施是按实施计划分阶段完成的,每个阶段应写出实施进约的任务同时展开,必须精心安排、合理组织,展报告。系统测试之后写出系统测试分析报告。输出:实施进展报告、系统测试分析报告
  • 系统运行和维护阶段:系统投入运行后,需要经常进行维护和评价,记录系统运行的情况,根据一定的规则对系统进行必要的修改,评价系统的工作质量和经济效益。

能力成熟度模型


软件过程模型

瀑布模型

瀑布模型(SDLC):瀑布模型是一个经典的软件生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段。

瀑布模型特点

  • 上一项开发活动接受该项活动的工作对象作为输入
  • 利用这一输入,实施该项活动应完成的工作内容
  • 给出该项活动的工作成果,作为输出传给下一项开发活动。
  • 该项活动的实施工作成果进行评审。若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动。尽量减少多个阶段间的反复,以相对来说较小的费用来开发软件。

螺旋模型

螺旋模型是一个演化软件过程模型将原型实现的迭代特征与线性顺序(瀑布)模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布
开发过程具有周期性重复的螺旋线状。四个象限分别标志每个周期所划分的四阶段:制订计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的系统

V模型

V模型从整体上看起来,就是一个V字型的结构,由左右两边组成。左边的下画线分别代表了需求分析、概要设计、详细设计、编码。右边的上画线代表了单元测试、集成测试、系统测试与验收测试。
V模型的特点如下:
(1)单元测试的主要目的是针对编码过程中可能存在的各种错误
(2)集成测试的主要目的是针对详细设计中可能存在的问题
(3)系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行;
(4)验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要
(5)V模型用于需求明确和需求变更不频繁的情形。

原型模型

原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。
原型法认为在很难一下子全面准确地提出用户需求的情况下,原型应当具备的特点如下。
(1)实际可行
(2)具有最终系统的基本特征
(3)构造方便、快速,造价低。
原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的。

增量模型

增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付。
特点:但由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不用的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示。

其他模型

喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。使开发过程具有迭代性和无间隙性。
基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。
特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。
形式化方法模型:建立在严格数学基础上的一种软件开发方法,主要活动是各说明。

信息系统开发方法

结构化方法

结构是指系统内各个组成要素之间的相互联系、相互作用的框架。
结构化方法也称为生命周期法,是一种传统的信息系统开发方法,由结构化分析(Structured Analysis,SA)、结构化设计(Structured Design,SD)和其结构化程序设计(Structured Programming,SP)三部分有机组合而成,精髓是自顶向下、逐步求精和模块化设计。

结构化方法的主要特点

  • 开发目标清晰化。结构化方法的系统开发遵循“用户第一”的原则,
  • 开发工作阶段化。每个阶段工作完成后,要根据阶段工作目标和要求进行审查,这使各阶段工作有条不素地进行,便于项目管理与控制。
  • 开发文档规范化。结构化方法每个阶段工作完成后,要按照要求完成相应的文档,以保证各个工作阶段的衔接与系统维护工作的遍历。
  • 设计方法结构化。在系统分析与设计时,从整体和全局考虑,自顶向下地分解;在系统实现时,根据设计的要求,先编写各个具体的功能模块,然后自底向上逐步实现整个系统

结构化方法的不足和局限

开发周期长:按顺序经历各个阶段,直到实施阶段结束后,用户才能使用系统。
难以适应需求变化:不适用于需求不明确或经常变更的项目
很少考虑数据结构:结构化方法是一种面向过程,面向数据流的开发方法,很少考虑数据结构。

结构化方法常用工具

结构化方法一般利用图形表达用户需求,常用工具有数据流图、数据字典、结构化语言、判定表以及判定树等

面向对象方法

面向对象(Object-Onented,OO)方法认为,客观世界是由各种对象组成的,住何事物都是对象,每一个对象都有自己的运动规律和内部状态,都属于某个对象类,是该对象类的一个元素。复杂的对象可由相对简单的各种对象以某种方式而构成,不同对象的组合及相互作用就构成了系统。

面向对象方法的特点

  • 使用OO方法构造的系统具有更好的复用性,其关键在于建立一个全面、合理、统一的模型(用例模型和分析模型)
  • OO方法也划分阶段,但其中的系统分析、系统设计和系统实现三个阶段已经没有“缝隙”。也就是说,这三个阶段的界限变得不明确,某项工作之间既可以在前一个阶段完成,也可以在后一个阶段完成;前一个阶段工作做得不够细,在后一个阶段可以补充。
  • 面向对象方法可以普遍适用于各类信息系统的开发.

面向对象方法的不足之处

必须依靠一定的面向对象技术支持,在大型项目的开发上具有一定的局限性,不能涉足系统分析以前的开发环节。
当前,一些大型信息系统的开发通常是将结构化方法和OO方法结合起来,首先,使用结构化方法进行自顶向下的整体划分;然后,自底向上地采用OO方法进行开发。因此,结构化方法和OO方法仍是两种在系统开发领域中相互依存的、不可替代的方法。

原型化方法

原型化方法也称为快速原型法,或者简称为原型法。是一种根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求的信息系统快速开发的方法。
是否实现功能分类:分为水平原型(行为原型,功能的导航)、垂直原型(结构化原型,实现了部分功能)
最终结果分类:分为抛弃式原型、演化式原型

原型法的特点

原型法可以使系统开发的周期缩短,成本和风险降低,速度加快,获得较高的综合开发效益。
原型法是以用户为中心来开发系统的,用户参与的程度大大提高,开发的系统合用户的需求,因而增加了用户的满意度,提高了系统开发的成功率。
由于用户参与了系统开发的全过程,对系统的功能和结构容易理解和接受,有利于系统的移交,有利于系统的运行与维护。

原型法的不足之处

开发的环境要求高。管理水平要求高。
由以上的分析可以看出,原型法的优点主要在于能更有效地确认用户需求。从直观上来看,原型法适用于那些需求不明确的系统开发。事实上,对于分析层面难度大、技术层面难度不大的系统,适合于原型法开发
从严格意义上来说,目前的原型法不是一种独立的系统开发方法,而只是一种开发思想,它只支持在系统开发早期阶段快速生成系统的原型,没有规定在原型构建过程中必须使用哪种方法。因此,它不是完整意义上的方法论体系。这就注定了原型法必须与其他信息系统开发方法结合使用。

敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软开发方法的“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。

敏捷软件开发宣言:

1.个体和交互胜过过程和工具
2.可以工作的软件胜过面面俱到的文档
3.客户合作胜过合同谈判
4.响应变化胜过遵循计划

相关概念

  • 结对编程:一个程序员开发,另一个程序在一旁观察审查代码,能够有效的提高代码质量,在开发同时对代码进行初步审查,共同对代码负责。
  • 自适应开发:强调开发方法的适应性(Adaptive)。不象其他方法那样有很多具体的实践做法,它更侧重为软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
  • 水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论
  • 特性驱动开发:是一套针对中小型软件开发项目的开发模式。是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目
  • 极限编程XP:核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。
  • 并列争球法SCRUM:是一种迭代的增量化过程,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。

统一过程(RUP)

提供了在开发组织中分派任务和责任的纪律化方法。它的目标是在可预见的日程和预算前提下,确保满足最终用日户需求的高质量产品

3个显著特点:用例驱动、以架构为中心、迭代和增量。
4个流程:初始阶段、细化阶段构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这阶段的目标是否已经达到。
◆适用:一个通用过程框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同性能水平和]不同的项目规模。

软件产品线

软件产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足特定领域的特定需求。软件产品线是一个千分适合专业的开发组织的软件开发方法,能有效地提高软件生产率和质量,缩短开发时间,降低总开发成本。
核心资源:包括所有产品所共用的软件架构,通用的构件、文档等。
产品集合:产品线中的各种产品。

软件复用

软伴复用是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面

逆向工程

逆向工程:软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程的四个级别:
实现级:包括程序的抽象语法树、符号表、过程的设计表示。
结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构。
功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型。
领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息例如E-R模型
其中,领域级抽象级别最高,完备性最低,完备性最高实现级抽象级别最低。
与逆向工程相关的概念有重构、设计恢复、再工程和正向工程
(1)重构是指在同一抽象级别上转换系统描述形式
(2)设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
(3)再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。在利用再工程重构现有系统的同时,一般会增加新的需求,包括增加新的功能和改善系统的性能。
(4)正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。

软件需求

软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。
分为需求开发需求管理两大过程,如下所示:

需求分类

业务需求:反映企业或客户对系统高层次的目标要求,通常来自项目投资人客户、市场营销部门或产品策划部门。通过业务需求可以确定项目视图和范围。
用户需求:描述的是用户的具体目标,或用户要求系统必须能完成的任务,即描述了用户能使用系统来做什么。通常采取用户访谈和问卷调查等方式,对用户使用的场景进行整理,从而建立用户需求。
系统需求:从系统的角度来说明软件的需求,包括功能需求、非功能需求和设计约束等。
1)功能需求:也称为行为需求,规定了开发人员必须在系统中实现的软件功能用户利用这些功能来完成任务,满足业务需要。
2)非功能需求:指系统必须具备的属性或品质,又可以细分为软件质量属性(如可维护性、可靠性、效率等)和其他非功能需求。
3)设计约束:也称为限制条件或补充规约,通常是对系统的一些约束说明,例如必须采用国有自主知识产权的数据库系统,必须运行在UNIX操作系统之下等

  • alipay_img
  • wechat_img
Talk is cheap, show me the code.
最后更新于 2024-09-15