软件工程实务:软件产品
目录
1、软件产品的基本概念
2、软件工程是什么?
为什么产生软件工程?
软件工程是做什么的?
3、定制软件和软件产品的工程比较
4 、软件产品的运行模式
5、软件产品开发时需要考虑的两个基本技术因素
6、产品愿景
7、软件产品管理
8、产品原型设计
9、小结
以下是我对软件工程实务的详细介绍和相关举例:
1、软件产品的基本概念
- 功能性:软件能完成预期任务和解决问题。
- 可靠性:软件能稳定运行,即使在异常情况下也不出错。
- 易用性:用户能够轻松学习和使用软件。
- 效率:软件高效利用资源,如内存和处理器。
- 可维护性:软件易于修改、扩展和修复。
- 可移植性:软件能在不同平台和环境下运行。
- 安全性:软件保护用户数据和系统免受攻击。
- 可定制性:用户可以根据需求对软件进行配置和扩展。
2、软件工程是什么?
为什么产生软件工程?
- 软件 =程序+数据 +文档
- 软件由一个或者若干个 程序 构成,每个程序一般包含有一系列的指令,每个指令则用于提供特定 功能(数据+算法)。
- 软件危机包含两方面的问题:1.如何开发软件,以满足人们对软件日益增长的需求;2.如何维护数量不断膨胀的已有软件。
- 软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门学科。
软件工程是做什么的?
- 软件工程就是为了服务于某个特定的 业务目标 而设计和构建的某一个物件软件),并且为解决这个物件建设问题找到 合理的(物有所值的)建设方案(管理+技术)。
- 构建优质的、可靠的、易于维护的软件产品,用系统化、规范化的手段来约束建设的过程活动,包含针对软件的设计、开发、测试和维护的过程。
- 换一个角度来说,软件工程就是按照系统化、规范化的要求 使用各种技术、工具以及方法 来开展需求分析软件设计、软件测试、软件维护等工作,以达到 交付 满足某个特定的业务目标的 计算机软件(产品)
3、定制软件和软件产品的工程比较

客户(软件的业主)驱动的定制性质的软件,以满足解决客户业务问题的软件。
- 依赖于客户本省的业务和业态;
- 依赖客户的企业组织;
- 依赖客户的业务信息、管理流程和基础设施资源,
- 有开发到投产的时间可能会比较长;
- 稳定之后,变化较少。
开发团队驱动的面向商机的软件,通过软件实现商机以便获取利益的软件
- 一个原创的想法,比如滴滴打车提出的网约车理念;
- 对现有系统的改进,如基于云的会计系统;
- 或者是为特定客户开发系统的一般化应用,如在线课程系统
- 尽快开发、尽快迭代发布;
- 小步骤多版本更新。
4 、软件产品的运行模式

以下是一些常见的软件产品运行模式:
-
桌面应用程序:这类软件在用户的个人电脑或笔记本电脑上安装并运行,用户直接在本地设备上使用软件。
-
客户端-服务器模式:软件产品分为客户端和服务器端两部分。客户端安装在用户设备上,通过网络与远程服务器通信,服务器端负责处理数据和逻辑运算。
-
Web 应用程序:用户通过 Web 浏览器访问和使用软件,所有的应用程序逻辑和数据都存储在远程服务器上,用户无需安装任何软件。
-
移动应用程序:运行在智能手机或平板电脑上的应用程序,可以通过应用商店下载安装。
-
嵌入式系统软件:运行在嵌入式设备(如家电、汽车、医疗设备)中的软件,通常被设计成实时系统,具有特定的硬件要求。
-
云计算模式:软件产品运行在云端服务器上,用户可以通过网络访问和使用,例如 SaaS(软件即服务)模式。
-
分布式系统模式:软件系统的各个组成部分分布在不同的计算机节点上,通过网络协同工作。
5、软件产品开发时需要考虑的两个基本技术因素
| 技术因素 | 说明 |
|---|---|
| 技术可行性 | 在开始开发软件产品之前,需要评估所选技术方案的可行性。这包括对所用技术的成熟度、适用性、性能、安全性和可扩展性进行评估,以确保选择的技术能够支持产品的需求,并且能够在项目预算和时间范围内实现 |
| 技术创新性 | 另一个需要考虑的因素是技术创新性,即是否采用了新颖或前沿的技术来解决问题。技术创新可以带来竞争优势,提高产品性能和用户体验,并且在市场上脱颖而出。但与此同时,也需要权衡技术创新带来的风险和不确定性,避免过度依赖尚未成熟的技术,从而影响产品的稳定性和可靠性。 |
6、产品愿景
产品愿景(Product Vision)是对一个软件产品未来目标和目的的清晰、简明的描述。它通常包括产品的核心目标、用户群体、市场定位以及预期的影响和价值。产品愿景为开发团队提供方向感和动机,同时也帮助利益相关者理解产品的长期战略和目标。
以下是产品愿景的一些关键要素:
-
产品目标:明确产品的核心目标和使命,即产品打算解决什么问题,带来什么价值。这部分应该回答“我们为什么要开发这个产品?”的问题。
-
目标用户:描述主要的用户群体或客户群体,包括他们的需求和痛点。这有助于确保产品设计和开发始终围绕用户需求展开。
-
市场定位:定义产品在市场中的位置,包括与竞争产品相比的独特卖点(USP)。这有助于确定产品的市场策略和推广方式。
-
关键功能和特点:概述产品的核心功能和特点,这些功能如何满足用户需求并实现产品目标。
-
成功指标:描述成功的标准或衡量指标,如用户增长、市场份额、客户满意度等。这有助于团队评估产品的实际表现与预期目标的差距。
-
长期愿景:描绘产品在未来几年的发展蓝图,即长期目标和理想状态。这部分能够激发团队的热情和动力。
举个例子,一个产品愿景可能是这样的:
“我们的愿景是开发一个直观且功能强大的在线学习平台,帮助全球的学生和专业人士通过个性化课程和互动学习工具提升技能。我们致力于使学习变得更加便捷和有趣,为用户提供高质量的教育资源,并在未来五年内成为全球领先的在线教育平台。”
一个清晰而有力的产品愿景不仅能指导产品开发过程,还能激励团队,吸引投资者和伙伴,并帮助利益相关者对产品的未来有一个共同的理解。
7、软件产品管理
软件产品管理是指对软件产品的规划、设计、开发、推广和运营的全过程管理。它涵盖了从产品概念、需求分析、设计开发、测试部署,到市场推广、用户培训和售后服务等各个环节。
软件产品管理通常包括以下几个主要方面:

8、产品原型设计
产品原型设计的表格形式可能包括以下内容:
| 步骤 | 描述 |
|---|---|
| 1. 需求收集 | 与利益相关者沟通,收集产品的基本需求和期望。 |
| 2. 概念设计 | 根据需求,进行初步的产品概念设计,包括产品的功能、界面、交互等。 |
| 3. 制作原型 | 使用原型设计工具,制作产品的交互式原型。 |
| 4. 评审和修改 | 与利益相关者一起评审原型,收集反馈意见,不断修改和完善原型。 |
| 5. 验证和确认 | 确保原型符合需求,并获得利益相关者的最终确认。 |
9、小结
- 软件产品是指包含一系列对广大客户群体可能有用的一般功能的软件系统。
- 在基于产品的软件工程中,同一家公司负责决定产品应包含哪些特性以及如何实现这些特性
- 软件产品可以作为独立产品交付,在客户的计算机上运行;也可以是混合型产品或服务型产品。在混合型产品中,部分功能本地实现,部分功能通过互联网访问;而在服务型产品中,所有功能均通过远程方式访问。
- 产品愿景简洁地描述了要开发的内容、产品的目标客户群以及为什么客户应该购买正在开发的产品。
- 领域经验、产品经验、客户体验以及实验性软件原型都可能为产品愿景的形成提供贡献。
- 产品经理的关键职责包括拥有并制定产品愿景、制定产品路线图、创建用户故事和场景、管理产品待办事项列表、执行客户验收测试及设计用户界面。
- 产品经理在业务部门、软件开发团队和产品客户之间起到桥梁作用,他们促进这三方之间的沟通与协作。
- 为了完善自身的想法并向潜在客户展示计划中的产品特性,您始终应该开发一个产品原型。
相关文章:
软件工程实务:软件产品
目录 1、软件产品的基本概念 2、软件工程是什么? 为什么产生软件工程? 软件工程是做什么的? 3、定制软件和软件产品的工程比较 4 、软件产品的运行模式 5、软件产品开发时需要考虑的两个基本技术因素 6、产品愿景 7、软件产品管理 8、产品原型设计 9、小结…...
带侧边栏布局:带导航的网页
目录 任务描述 相关知识 HTML(HyperText Markup Language) CSS(Cascading Style Sheets): 编程要求 任务描述 在本关中,你的任务是创建一个带侧边栏和导航的网页布局。这种布局通常用于网站或应用程序,其中侧边栏…...
react学习-redux快速体验
1.redux是用于和react搭配使用的状态管理工具,类似于vue的vuex。redux可以不和任何框架绑定,独立使用 2.使用步骤 (1)定义一个reducer函数(根据当前想要做的修改返回一个新的状态) (2࿰…...
基于flask的网站如何使用https加密通信-问题记录
文章目录 项目场景:问题1问题描述原因分析解决步骤解决方案 问题2问题描述原因分析解决方案 参考文章 项目场景: 项目场景:基于flask的网站使用https加密通信一文中遇到的问题记录 问题1 问题描述 使用下面的命令生成自签名的SSL/TLS证书和…...
记C#优化接口速度过程
前提摘要 首先这个项目是接手的前一任先写的项目,接手后,要求对项目一些速度相对较慢的接口进行优化,到第一个速度比较慢的接口后,发现单接口耗时4-8秒,是的,请求同一个接口,在参数不变的情况下…...
windows环境如何运行python/java后台服务器进程而不显示控制台窗口
1.通常我们在windows环境下使用Java或Python语言编写服务器程序,都希望他在后台运行,不要显示黑乎乎的控制台窗口: 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里,可是开机的…...
记周末百度云防御CC攻击事件
今天一早,收到百度智能云短信提醒,一位客户的网站遭遇了CC攻击。 主机吧赶紧登陆客户网站查看,是否正常,看是否需要通知客户。 结果打开正常,看情况并没什么影响,那就等攻击结果了再看吧。 下午的时候&am…...
vue中v-bind控制class和style
当使用v-bind指令控制class和style时,可以通过动态绑定的方式根据不同的条件来添加或移除class,以及改变元素的样式。 1. 控制class 通过v-bind:class可以动态绑定class属性。可以使用对象语法、数组语法或者计算属性来实现。 对象语法:使用…...
【面试经典150题】【双指针】392. 判断子序列
题目链接 https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 题解思路 首先如果s的长度大于t的长度,那么s肯定不是t的子序列如果s的长度等于t的长度,那么st的情况下s才是t的子序列如果s的长度小于t的长…...
禁用PS/Photoshop等一系列Adobe旗下软件联网外传用户数据操作
方案一: 下载火绒杀毒,在联网请求上禁用Adobe软件的联网请求,甚至还可以额外发现哪些是它要想要偷偷摸摸干的。 方案二: 最后注意: 用盗版软件只是获得了使用权!...
C语言猜输赢游戏
目录 开头游戏的程序游戏的流程图结尾 开头 大家好,我叫这是我58,现在,请你看一下下面的游戏程序。 游戏的程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int main() {int i 1;int ia 0…...
Rust 异步 trait 的实现困难
在 Rust 中,异步编程是使用 async/await 语法来实现的。与传统的同步编程不同,异步编程涉及到的特性较多,其中一个重要的特性是异步 trait。 异步 trait 是具有异步方法的 trait。在 Rust 中,trait 方法默认是同步的,…...
腾讯云和windows11安装frp,实现内网穿透
一、内网穿透目的 实现公网上,访问到windows上启动的web服务 二、内网穿透的环境准备 公网服务器、windows11的电脑、frp软件(需要准备两个软件,一个是安装到公网服务器上的,一个是安装到windows上的) frp下载地址下载版本 1.此版本(老版…...
Solidity智能合约事件(event)
文章目录 Solidity智能合约事件(event)什么是event事件event有什么作用日志内容位于区块链的什么地方?【重要】以太坊交易获取如何在 Solidity 中使用事件?参考 Solidity智能合约事件(event) 什么是event EVM有一个日志功能,用于将数据“写…...
第2章 Rust初体验7/8:错误处理时不关心具体错误类型的下划线:提高代码可读性:猜骰子冷热游戏
讲动人的故事,写懂人的代码 2.6.6 用as进行类型转换:显式而简洁的语法 贾克强:“大家在查看Rust代码时,可能会注意到这一句。在这里,如果我们不使用as i32,编译器会报错,因为它在u32中找不到abs()方法。这是因为prev和sum_of_two_dice都是u32类型,u32类型并不支持abs(…...
大话C语言:第24篇 预处理
1 C语言编译流程 C语言的编译流程包括: 预编译:将.c 中的头文件展开、宏展开,生成的文件是.i 文件。gcc指令:gcc -E file.c -o file.i 编译:将预处理之后的.i 文件生成 .s 汇编文件。gcc指令:gcc -S file…...
React如何配置路由
ReactTs配置路由 安装依赖 npm i react-router-dom在routers下面创建index.tsx import { RouteObject } from react-router-dom import React from react import PageA from /views/PageA import PageB from /views/PageB const routes: RouteObject[] [{path: /,element: …...
MAC使用初体验+入门
之前从来没有使用过MAC,这次拿到了一个 不得不说MAC度过适应期后用起来很舒服,续航长,触控板舒服,轻薄无比 我前期过度的时候记录的一部分快速指南,掌握如下一些电脑常识 可以做到正常使用了 基本操作 在 Mac 上使用桌…...
Go TOKEN机制与跨域处理方式
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
JavaScript 的运行
语法分析预编译解释执行 1.语法分析 语法分析是 JavaScript 引擎处理代码的第一步。 在这个阶段,引擎将源代码字符串分解成一个个的词素(token),这些词素是语言中有意义的最小单元,如关键字、变量名、操作符等。 语…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
