草庐IT

1.4 软件工程

Max_Law 2023-09-28 原文

文集:《35 小时通关软考高项》
上篇:《1.3 信息系统开发方法》
下篇:《1.5 新一代信息技术》


章节概要

软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,其目的事故提高软件生产率、提高软件质量、降低软件成本。

软件需求 ,是指用户解决问题或达到目标所需的条件或能力的文档说明,分为三个层次(细分细分再细分):

  1. 业务需求:指反映企业或客户对系统高层次的目标要求。

  2. 用户需求:描述的是用户的具体目标,或用户要求系统必须完成的任务。

  3. 系统需求:从系统的角度来说明软件的需求,包括功能需求、非功能需求和设计约束等。

然后介绍了软件需求的分类,所使用的技术,如何获取,如何分析,如何验证,有哪些工具等。

软件架构 ,为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用、指导构件即成的模式以及这些模式的约束组成。软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理。

解决好软件的复用、质量和维护问题是研究软件架构的根本目的,也是其核心问题。

软件设计 ,分为结构化设计(SD)与面向对象设计(OOD)

  • SD:一种面向数据流的方法,自项向下,逐步求精和模块化的过程

  • OOD:基本思想包括抽象、封装和可扩展性,其中可扩展行主要通过继承和多态来实现

软件工程的过程管理 ,有两种模型:阶段式模型和连续式模型

软件测试及其管理,每个测试用例应包括名称和标识、测试追踪、用例说明、测试的初始化要求、测试的输入、期望结果、评价测试结果准则、操作过程、前提和约束、测试终止条件。

软件集成技术,企业应用集成(EAI):

  1. 表示集成

  2. 数据集成

  3. 控制集成

  4. 业务流程集成

  5. 企业之间的应用集成

考点

系统需求的三个方面

  1. 功能需求:规定了开发人员必须在系统中实现的软件功能,用户利用这些功能来完成任务,满足业务需要。

  2. 非功能需求:指系统必须具备的属性或品质,又可细分为软件的质量(可维护性、效率,健壮性等)。

  3. 设计约束:一些开发的限制条件(如:必须在 UNIX 系统下运行等)。

质量功能部署(QFD)

是一种将用户要求转化成软件需求的技术,最大限度的提升软件工程过程中用户满意度,分为三类:

  1. 常规需求:用户认为系统应该做到的功能或性能

  2. 期望需求:用户想当然认为系统应具备的功能或性能,但用户并不能正确描述的需求

  3. 意外需求:用户要求范围外的功能或性能

需求获取

是一个确定和理解不同的项目干系人的需求和约束的过程。常见的方法包括:用户访谈、问卷调查、采样、情节串联板和联合需求设计等。

需求分析

一个好的需求应具备无二性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性等特征,把杂乱无章的用户要求和期望转化为用户需求。

其分析方法为 SA 法,其建立的模型的核心是数据字典,总共分为三个层次模型:

  1. 数据模型:实体联系图(E-R 图)

  2. 功能模型:数据流图(DFD)

  3. 行为模型:状态转换图(STD)

软件需求规格说明书(SRS)

编制该文档的目的是使项目干系人与开发团队对系统的初始规定有一个共同理解,使之成为整个开发工作的基础。在国际标准 GB/T 8567-2006 规定必须包含以下内容:

  1. 范围

  2. 引用文件

  3. 需求

  4. 合格性规定

  5. 需求可追踪性

  6. 尚未解决的问题

  7. 注解

  8. 附录

需求验证

为了保证 SRS 的正确性,减少不必要额度修补工作,一般采用以下几个需求验证:

  1. SRS 正确地描述了预期的、满足项目干系人需求的系统行为和特征

  2. SRS 的需求是从系统需求、业务规格和其他来源中正确推导而来的

  3. 需求是完整的和高质量的

  4. 需求的表示在所有地方都是一致的

  5. 需求为继续进行系统设计 、实现和测试提供了足够的基础

实际工作中,一般通过需求评审和需求测试工作来对需求进行验证。

统一建模语言 - UML

支持从需求分析开始的软件开发的全过程,包括构造块(事物、关系、图)、规则和公共机制,是一种可视化的建模语言。

事物:结构事物、行为事物、分组事物、注释事物

关系:依赖、关联、泛化、实现

在 UML 2.0 标准中包括了 14 种图(加粗为动态视图):

  1. 类图:描述一组类、接口、协作和他们之间的关系,是最常见的视图,也称为静态设计视图。

  2. 对象图:描述一组对象及它们之间的关系。

  3. 构件图:描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。

  4. 组合构件图:描述结构化类(构件或类)的内部结构。

  5. 用例图:描述一组用例、参与者及它们之间的关系。

  6. 顺序图:是一种交互图(序列图),它由一组对象或参与者以及它们之间可能发送的消息构成。

  7. 通信图:也是一种交互图,它强调收发消息的对象或参与者的结构组织。

  8. 定时图:它强调消息跨越不同对象或参与者的实际时间。

  9. 状态图:描述一个状态机,它由状态、转移、事件和活动组成,是对象的动态视图。

  10. 活动图:将进程或其他计算机结构展示为计算内部一步步的控制流和数据流,对系统的功能建模和业务流程建模特别重要。

  11. 部署图:描述对运行时的处理节点及在其中生存的构件配置。

  12. 制品图:描述计算机中一个系统的物理结构。

  13. 包图:描述由模型本身分解而成的组织单元,以及他们之间的依赖关系。

  14. 交互概览图:是活动图和顺序图的混合物。

UML 五个系统视图

  1. 逻辑视图:即设计视图,表示了设计模型中在架构方面具有重要意义的部份。

  2. 进程视图:是可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实例。

  3. 实现视图:对组成基于系统的物理代码的文件和构件进行建模。

  4. 部署视图:把构件部署到一组物理节点上,表示软件到硬件的映射和分布结构。

  5. 用例视图:是最基本的需求分析模型。

面向对象分析(OOA)

运用 OO 方法,对问题域进行分析和理解,最终产生一个符合用户需求的模型。

  • OOA(面向对象分析)的任务是“做什么”

  • OOD(面向对象设计)的任务是“怎么做”

  • 面向对象分析阶段的核心工作是建立系统的用例模型与分析模型

用例之间的主要关系:

  1. 包含关系:可以从两个或两个以上的用例中提取公共行为

  2. 扩展关系:一个用例可能产生多种分支

  3. 泛关系:将它们的共性抽象成为父用例

类之间的六种主要关系

类之间的关系表示

聚合关系又名共享关系,部分与整体的生命周期可以不同,而组合聚集的生命周期相同

五类软件架构风格

  1. 数据流风格:包括批处理序列和管道/过滤器两种风格

  2. 调用/返回风格:包括主程序/子程序、数据抽象和面向对象,以及层次结构

  3. 独立构件风格:包括进程通信和事件驱动的系统

  4. 虚拟机风格:包括解释器和基于规则的系统

  5. 仓库风格:包括数据库系统、黑板系统和超文本系统

软件架构评估

  • 评估人员所关注的是系统的质量属性

  • 敏感点:是一个或多个构件的特性

  • 权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点

评估技术分为三类:

  1. 基于调查问卷

  2. 基于场景的方式(常用)

  3. 基于度量的方式

软件设计

  • SD:高内聚、低耦合,模块间低耦合、模块内高聚集。

  • OOD:提高软件的可复用性是一个至关重要的问题。

OOD 原则:

  1. 单一职责原则

  2. 开放-封闭原则

  3. 李氏替换原则

  4. 依赖倒置原则

  5. 接口隔离原则

  6. 组合重用原则

  7. 迪米特原则

设计模式

根据处理范围不同:

  • 类模式:处理类和子类之间的关系,通过继承建立的静态关系

  • 对象模式:处理对象之间的关系的动态关系

根据目的和用途不同:

  • 创建型模式:创建对象

  • 结构型模式:处理类或对象的组合

  • 行为型模式:描述类或对象的交互以及职责的分配

软件工程的过程管理

阶段式模型
连续式模型

软件测试方法

  • 静态测试:测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析,对文档和代码桌前检查、代码走查和代码审查。

  • 动态测试:在机器上直接运行程序,分为白盒测试(调试)和黑盒测试(功能测试),等价类划分、边界值分析、判定表、因果图、状态图、随机测试、猜错法和正交试验法。

按过程分类:

  1. 单元测试:模块测试,依据是软件详细设计说明书

  2. 集成测试:验证模块之间,依据是软件概要说明书

  3. 确认测试:用于验证软件的功能、性能和其他特性是否与用户需求一致(内部确认测试、Alpha 测试、Beta 测试、验收测试、系统测试、配置项测试、回归测试)

有关1.4 软件工程的更多相关文章

  1. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  2. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  3. 【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了.... - 2

    谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师,高薪难聘。这两者其实并不矛盾。手工测试工作难找也确实是目前真实的行情早期从事功能测试的手工测试人员,在测试方面大多采用手动、人工执行的方式查找软件缺陷和BUG,用行业术语来描述就是“点点点”。这种测试方式耗费大量人力和资源,工作效率却十分低下。在早期软件复杂和迭代程度不高的情况下,有资本的企业会“供养”一批这样的手工测试人员。但对测试员本身来讲,毫无技术难度的工作,和几乎没有保障的薪资水平,直

  4. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

  5. 华为认证的网络工程师证好考吗,含金量高吗 ? - 2

    华为认证分等级的,相当于初中高三个等级,当然高级是比较难考的,也是含金量最高的。我就慢慢给你介绍一下。1.了解华为认证华为认证网络工程师是由华为公司认证与采购部推出的独立认证体系,与之前的华为认证不同,简称HCIA。同时华为认证是华为技术有限公司凭借多年信息通信技术人才培养经验,以及对行业发展的理解,以层次化的职业技术认证为指引,推出的覆盖IP、IT、CT以及ICT融合技术领域的认证体系,是ICT全技术领域认证体系。​2.怎么考取华为认证网络工程师?要考取华为认证网络工程师必须选择最近的Prometric授权考试中心APTC报名并参加GB0-190的考试,考试通过后,以获得由华为统一签发的“华

  6. “网安三人行”盘点:软件供应链安全的那些事儿 - 2

    2022年伊始,默安科技联合数世咨询举办以“软件供应链安全的时与势”为主题的访谈活动,由数世咨询创始人李少鹏主持,邀请贝壳安全研发负责人李文鹏、北京邮电大学副教授张文博、默安科技副总裁沈锡镛三位行业大咖做客网安小酒馆,从产业、企业、学术的不同维度,共同探讨软件供应链安全建设的新思路,为业界呈现了一场开年网安盛宴。随着全球软件供应链安全事件频发,软件供应链安全逐渐成为业界关注焦点,也成为影响国家重要信息系统安全与关键信息基础设施安全的重要因素,以及网络安全保障体系和能力建设的重要环节。嘉宾们围绕软件供应链安全发展的主要驱动力、关基行业中的实施现状和落地难点、产学研成果转化、软件供应链安全的重要性

  7. 打通源码,高效定位代码问题|云效工程师指北 - 2

    大家好,我叫胡飞虎,花名虎仔,目前负责云效旗下产品Codeup代码托管的设计与开发。代码作为企业最核心的数据资产,除了被构建、部署之外还有更大的价值。为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。随着微服务架构的流行,一个业务流程需要多个微服务共同完成。一旦出现问题,运维人员在面对数量多、调用链路复杂的情况下,很难快速锁定导致问题发生的罪魁祸首:代码。为了提高排查效率,目前常见的解决方案是:链路跟踪+日志分析工具相结合。即通过链路跟踪

  8. 软件工程毕业设计课题(81)微信小程序毕业设计PHP校园跑腿小程序系统设计与实现 - 2

        项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。        因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不

  9. ruby - Homebrew 软件损坏 - "cannot load such file -- vendor/bundle/bundler/setup (LoadError)" - 2

    每次我尝试运行brew命令时,都会出现以下错误:/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in`require':cannotloadsuchfile--vendor/bundle/bundler/setup(LoadError)from/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/lib/ruby/2.3.0/r

  10. ruby - 从我的胰岛素泵 Controller 逆向工程统计数据文件 - 2

    这可能是也可能不是灰色地带主题,尽管我的意图肯定不是,所以我的意图不是激起关于逆向工程主题的道德辩论。我是1型糖尿病患者,目前正在接受泵治疗。我是OmniPod用户,这是一个一次性胶囊,可以粘在我的身上并分配胰岛素3天。它由个人糖尿病管理器[PDM](见下文)控制,该管理器控制进餐期间分配的胰岛素量、血糖读数,并且包含一个用于计算碳水化合物的食物指数。(来源:myomnipod.com)新的PDM有一个用于下载数据的USB端口。该软件对Windows用户免费(名为CoPilot的软件包),但不支持Mac。将PDM插入我的Mac后,它像任何其他USB设备一样安装,并为我提供了一个可读卷,

随机推荐