软件工程

现代软件工程讲义 4 团队和流程

旧时模样 提交于 2020-01-25 04:41:44
Advanced Software Engineering, Team Structure and Development Process 软件团队和开发流程 小飞:搞软件 不就是人在写代码么?只要能写代码, 各种各样的团队模式对工程师的工作和软件最后的质量有影响么? 为啥要管这么多? 阿超:1960年代,程序员Melvin Conway 就总结了一个 康威规律 : 一个机构设计出来的系统,它的体系结构注定会沿用这个机构的内部交流模式。 【注1】 因为人的工作都受到大大小小团队、组织的影响,最自然和安全的工作方式,就是在组织的边界内部工作,而组织之间的交流方式,会极大地影响系统的设计。 如果观察一个银行网站, 或一所 大学的网站,你往往能看出这些机构的内部结构。但是 , 软件系统是给用户 使 用的,用户的需求并不是要看这个机构的内部组织架构图,而是要解决用户的问题。 一个合适的团队结构,能更大地改进交流的效率,让团队更能把注意力集中在最主要的目标 —— 解决用户需求上面。 【注1:参见: http://catb.org/~esr/jargon/html/C/Conways-Law.html 】 非团队和团队 在讲团队之前 , 我们要讲什么是 “ 非团队 ” 。 王屋村里经常发生这样的一幕 : 王屋村的大智要把一堆砖头从村头搬到村尾。 他到顶球酒吧前 , 看到前面三三两两地蹲着一些人

软件工程及软件项目开发流程

本小妞迷上赌 提交于 2020-01-25 03:24:13
1.需求分析: 通过对客户业务的了解和与客户对流程的讨论对需求进行基本建 模,最 终形成需求规格说明书。 2.总体设计: 通过分析需求信息,对系统的外部条件及内部业务需求进行抽象建模,最终形成概要设计说明文档。 3.详细设计: 此部分在对需求和概要设计的基础上进行系统的详细设计(也包含部分代码说明)。 4.开发编程: 对系统进行代码编写。 5.测试分析与系统整合: 对所有功能模块进行模拟数据测试及其它相关性测试并整合所有模块功能。 6.现场支持: 系统上线试运行进行现场问题记录、解答。 7.系统运行支持: 系统正式推产后,对系统进行必要的维护和BUG修改 软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、 软件开发工具 、系统平台、标准、 设计模式 等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。 基本目标   软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品

软件工程之开发流程小总结

心已入冬 提交于 2020-01-25 03:23:32
可行性分析   这个一般都是做战略的专家来做的,他们更加有市场的前瞻性,俗话说就是看的更远一些,搞市场分析、调研,看看我们的想法到底是否可行,可行性有多大,可能会遇到的问题,我们的优势在哪里,可以利用的资源有哪些,需要引进那些资源,有多少对手,他们都进行到了什么程度等等。   这个阶段的文档成果是:可行性分析报告等    需求分析   这个已经开始具体操作,经过可行性分析,我们有机会,可以进入这个领域。这时候,需要领域专家参与进来,架构师也要参与进来,还有就是需求分析的专业人士,和最少一名文档员,用来记录开发讨论的结果并形成文档。   工作就是分解项目的需求,到底要做些什么,要实现什么功能,就是功能的范围和功能的细节,主要还是业务方面的梳理。   这个阶段的文档成果是:需求分析说明书等    概要设计   经过前面的需求分析,形成了需求分析说明书。这个阶段应该是业务建模,形成业务用例,进一步形成业务用例。这个阶段是分解需求,可以使用 PD(Power Designer)、 Rational 等工具来辅助一下。   这个阶段的文档成果是:概要设计说明书、业务用例文档等    详细设计   有了概要设计,有了模型,可以定义出数据库模型,甚至是可以定义数据库的字段,然后可以让高级程序员来辅助架构师进行架构设计,普通程序员先写实现的技术用例。或者让他们先看看业务用例

软件工程之开发流程小总结

£可爱£侵袭症+ 提交于 2020-01-25 03:23:13
  观看本文的讨论的开发流程的时候,有两点需要注意:   首先,流程不是狭义的流程,也就是说不是单只写代码这个过程,包括了软件工程整个流程。   其次,我所讲的这个流程不见得正确,准确的说是肯定不能适用于全部软件开发项目,也就是说不是银弹,其实说起来连大部分都涵盖不了,顶多就是一部分吧。       可行性分析   这个一般都是做战略的专家来做的,他们更加有市场的前瞻性,俗话说就是看的更远一些,搞市场分析、调研,看看我们的想法到底是否可行,可行性有多大,可能会遇到的问题,我们的优势在哪里,可以利用的资源有哪些,需要引进那些资源,有多少对手,他们都进行到了什么程度等等。   这个阶段的文档成果是:可行性分析报告等    需求分析   这个已经开始具体操作,经过可行性分析,我们有机会,可以进入这个领域。这时候,需要领域专家参与进来,架构师也要参与进来,还有就是需求分析的专业人士,和最少一名文档员,用来记录开发讨论的结果并形成文档。   工作就是分解项目的需求,到底要做些什么,要实现什么功能,就是功能的范围和功能的细节,主要还是业务方面的梳理。   这个阶段的文档成果是:需求分析说明书等    概要设计   经过前面的需求分析,形成了需求分析说明书。这个阶段应该是业务建模,形成业务用例,进一步形成业务用例。这个阶段是分解需求,可以使用数据库建模工具,或者是UML建模工具来辅助一下。  

(4)软件工程基础知识

谁说我不能喝 提交于 2020-01-25 03:03:35
4.1 软件工程概述 4.1.3 软件生存周期 (1)可行性分析 确定开发目标及可行性,需要多少钱,多少时间,多少资源 参与人员:用户、项目负责人、系统分析师 文档:可行性分析报告、项目开发计划 (2)需求分析 不具体解决问题,确定软件系统必须、做什么确定软件系统的功能、性能、数据、界面,从而确定系统逻辑模型 参与人员:用户、项目负责人、系统分析师 文档:软件需求说明书 (3)概要设计 设计软件结构,明确软件由哪些模块组成,层次结构,模块功能、模块调用关系。设计系统总结结构和数据结构 参与人员:系统分析师、软件设计师 文档:概要设计说明书 (4)详细设计 对每个模块进行具体设计 参与人员:软件设计师、程序员 (5)编码 (6)测试 参与人员:另一个部门软件设计师或系统分析师 文档:软件测试计划、测试用例、软件测试报告 (7)维护 4.2 软件过程模型 软件过程模型也叫软件开发模型。软件开发全部过程、活动和任务的结构框架 4.2.1 瀑布模型 瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型 它是以文档作为驱动、适合与软件需求很明确的软件项目模型 优点:容易理解,管理成本低,强调开发的阶段性早期计划及需求和产品测试 缺点:客户必须能够完整、正确和清晰地表达他们的需要,错误到了后期才能发现 4.2.2 增量模型 融合了瀑布模型的基本成本和原型实现的迭代特征

对软件工程的一点认识

孤街醉人 提交于 2020-01-25 03:02:18
软件工程可以分开来看 软件:设计实现一个软件,工程:是一个项目、有团队有规划的过程。 1.软件有生命周期 软件定义阶段 : 软件定义(问题定义、可行性研究、需求分析) 问题定义:明白要解决的问题是什么 可行性研究:探索这个问题是否值得去解,是否有可行的解决办法. //可行性研究:在较高的抽象层次上对系统进行系统分析和设计的过程。 需求分析:确定系统必须具备哪些功能 软件开发阶段 : 软件开发(总体设计、详细设计、编码和单元测试、综合测试) 总体设计:设计出实现目标系统的几种可能方案,确定程序由哪些模块组成以及模块间的关系 详细设计:设计出程序的详细规格说明 编码和单元测试:写出正确的容易理解、容易维护的程序模块 综合测试:通过各种类型的测试和调试使软件达到预定的要求 软件维护阶段 : 通过各种必要的维护活动使系统持久地满足用户的需要 2.软件生命周期模型 瀑布模型:整个生命周期是顺序连起来的,一个做完做另一个,具有顺序性和依赖性,各个阶段之间有明显的界限。 螺旋模型:每一个阶段后都加入了风险分析,是风险驱动的。 喷泉模型:软件开发过程是迭代的,从上而下的各阶段是无间隙的,开发阶段是重叠的,在分析设计的阶段同时可以开始开发,比较高效快速,但同时不利于项目的管理。 来源: https://www.cnblogs.com/BlueBlueSea/p/9643513.html

软件工程网络15结对编程作业

ⅰ亾dé卋堺 提交于 2020-01-25 02:45:55
成员 个人博客地址: 201521123060 邹其元 201521123075 江鹭涛 码云地址 源代码 题目要求: 1.浏览所有代码考虑代码质量和测试覆盖率 2.需求分析: 程序设计 代码展示 (1)计时器:显示用户完成全部答题的所用时间。 (2)分数计算 public String calculate(ArrayList<String> postOrder)throws IOException { Stack stack = new Stack(); //ArrayList<String> stack = postOrder; String res = ""; FileWriter fm = new FileWriter("answer.txt"); BufferedWriter bufm = new BufferedWriter(fm); for (int i = 0; i < postOrder.size(); i++) { if (res.equals("")) { if (Character.isDigit(postOrder.get(i).charAt(0))) { stack.push(Integer.parseInt(postOrder.get(i))); } else { Integer back = (Integer) stack.pop();

软件工程网络15结对编程作业

那年仲夏 提交于 2020-01-25 02:42:21
项目成员:林楚虹 201521123002 + 林艺如 201521123004 码云地址:https://gitee.com/dabao_lyr/software_engineering 1. 改进现有代码 分析网络14部分现有程序代码(请选择其中一个) 选择:个人博客地址5:http://www.cnblogs.com/NianQiFeng ,源代码:https://git.coding.net/qwx_hh/java-szys.git 原题目要求 http://www.cnblogs.com/happyzm/p/6472120.html 逻辑泥球 原代码在构建错题复习的功能中,无法进入到文件中读取错题。 重构 1.clone项目,在开发环境中运行该应用程序,修改完毕最后上传至码云,并在博客中给出链接 https://gitee.com/dabao_lyr/software_engineering 代码规范也已上传 2.检查大部分主要类之间的关系,画出类图 图片来源:http://www.cnblogs.com/NianQiFeng/p/6551489.html 3.代码覆盖率 4.当前程序是否支持多个操作符运算,如果不支持,请在源代码基础上进行改进,算法参考:https://www.cnblogs.com/dragondove/p/6445850.html 支持多个操作符运算

软件工程网络15结对编程作业

≯℡__Kan透↙ 提交于 2020-01-25 02:40:15
一、结对编程 陈凯欣:学号 201521123034+邱晓娴:学号 201521123037 码云地址:https://gitee.com/carolfantasy/software_engineering__pair_programming.git 二、需求分析 1、原项目分析 1.1项目类图 1.2存在的不足 变量的命名使用abc,不够规范。a既然表示操作符可以改名为oprator。 运行该程序,初次选择计算题数并进行计算,程序会将错题存在错题集中。之后所有的计算练习是在错题集中抽取。需要重新运行该程序才能选择新的题目进行练习。 复习错题选择的题数若超过错题集题数,未提示错误。 在做题界面中点击开始后修改计时时间,计时器停止运行,最后做题显示时间为手动修改的时间。 在做题界面点击开始后,再次点击开始,计时器重新计时。 错题集的题目根据每次做题的情况依次累加。若某题错误率高,随机选题复习的话很有可能选的题目都是该题,显得累赘。 1.3原项目测试用例 (以整数和分数的乘法为例)原项目的单元测试分别对整数和分数的加减乘除进行测试,每个测试用了五个用例。 2、改进分析 2.1改善部分 修改的代码中加入多操作符的运算 加入支持括号优先级运算 对表达式进行去重 2.2思维导图 2.3支持括号优先级运算 2.4算式去重 暂时还没实现,但是写的算法大概如下: int Isomorphic

软件工程网络15结对编程作业

孤人 提交于 2020-01-25 02:38:57
一、结对成员信息 学号 姓名 博客链接 码云地址 201521123044 吴敏烽 https://www.cnblogs.com/Min21/ https://gitee.com/min21/events 201521123061 倪兢飞 https://home.cnblogs.com/u/JMUNJF/ https://gitee.com/nikoudoublefly/events 源代码地址: https://coding.net/u/lhl1212/p/work2/git 原题目要求: http://www.cnblogs.com/happyzm/p/6472120.html 二、功能改进与扩展 1、检查大部分主要类之间的关系,画出类图 2、浏览所有代码考虑代码质量和测试覆盖率 源代码质量和测试覆盖率 当前设计的一个弱点,通过重构,确保在这个地方已有测试覆盖并保证重构没有改变已有的功能 1、当前的代码的分数多项式的加减法结果是有问题的。 2、当前代码不能实现乘方 3、当前代码不能实现开根号 修改代码后,检查代码覆盖,看单元测试是否需要修改?测试用例是否需要增加? 3、代码重构和增加功能。 \\分数多项式的加减法修改 public void add(String s)//加法 { String[] str=s.split("[+]"); if(str[0].indexOf(